From patchwork Fri Sep 4 10:23:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 11756505 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 602E6618 for ; Fri, 4 Sep 2020 10:25:07 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 389BE20791 for ; Fri, 4 Sep 2020 10:25:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="X6jQ8+Ky"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="Cbkt/Jmv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 389BE20791 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=4MscimzHXtQadeMSlurzWUX3zMh66hif3qTAGfDUSu8=; b=X6jQ8+Ky0QQ2fTHxuyXD18W2+V MsWtOIKSRDPEgzNSATrdvD3jfvD+0FZ/0IX2k7AG59dB7BJtbUsFz0CBfB6+HUenPb5t09D2dKodx X5rsDOkotfqSAg8hH2DqR7c9wS3Nbz9lzRr07P73sVlkJgqngUy0eEl3CiBoc55VNLTA8gkSlajN+ /+WEvqI4r1NdojZX3FwFXz+WRAr5ruiuFEarLidGGuAKrT6WnCwwGgFQfL+wUvzDY3aK0UAPEQH7U n2bnVGERRBZdPCaBMSVnl+CFbd8y6mxCIp/oAKryV+fIAkHUVH9/eQE5DjwgPl6GfBibJvm4HFV31 5ZmRlZMQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kE8sj-0000i6-Ux; Fri, 04 Sep 2020 10:23:46 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kE8sb-0000cM-C3 for linux-arm-kernel@lists.infradead.org; Fri, 04 Sep 2020 10:23:40 +0000 Received: from mail.kernel.org (ip5f5ad59b.dynamic.kabel-deutschland.de [95.90.213.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3438C20FC3; Fri, 4 Sep 2020 10:23:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1599215016; bh=zsXGoYIKZ7McsBLN5A59BuKXBaK5/H+qvIXPUfHggZk=; h=From:To:Cc:Subject:Date:From; b=Cbkt/JmvOBpVNWgZ0zOZFL0J36X3IT6gYV+XJWL5QkvKoyClM91Wq2RknRwtuxt4c xMZJcgoBdws0eGlOb27/95HI2Y1NC4Ky360LxF/Ozaw9u24WaXgVi9zxenAxPuVgWK ienslIifT51EcY4ZDRqD/yoVY3cybEMHNLfVFqek= Received: from mchehab by mail.kernel.org with local (Exim 4.94) (envelope-from ) id 1kE8sX-005Sv4-JC; Fri, 04 Sep 2020 12:23:33 +0200 From: Mauro Carvalho Chehab To: Subject: [RFC 00/10] Add USB support for Hikey 970 Date: Fri, 4 Sep 2020 12:23:22 +0200 Message-Id: X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200904_062337_522833_C93D57B8 X-CRM114-Status: GOOD ( 22.96 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dragan Cvetic , linuxarm@huawei.com, linux-kernel@vger.kernel.org, Wei Xu , Rob Herring , Mauro Carvalho Chehab , Yu Chen , Krzysztof Kozlowski , Kishon Vijay Abraham I , Derek Kiernan , devicetree@vger.kernel.org, Arnd Bergmann , Manivannan Sadhasivam , Rob Herring , John Stultz , mauro.chehab@huawei.com, linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman , Liam Girdwood , Vinod Koul , Mark Brown , Robin Murphy , "David S. Miller" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org This RFC adds what seems to be needed for USB to work with Hikey 970. While this driver works fine on Kernel 4.9 and 4.19, there's a hack there, in the form of some special binding logic under dwg3 driver, that seems to be just adding some delay, and doing some different initializations at PM (basically, disabling autosuspend). With upstream Kernel, however, I'm getting a hard to track Kernel panic: [ 1.837458] SError Interrupt on CPU0, code 0xbf000002 -- SError [ 1.837462] CPU: 0 PID: 74 Comm: kworker/0:1 Not tainted 5.8.0+ #205 [ 1.837463] Hardware name: HiKey970 (DT) [ 1.837465] Workqueue: events deferred_probe_work_func [ 1.837467] pstate: 20000005 (nzCv daif -PAN -UAO BTYPE=--) [ 1.837468] pc : _raw_spin_unlock_irqrestore+0x18/0x50 [ 1.837469] lr : regmap_unlock_spinlock+0x14/0x20 [ 1.837470] sp : ffff8000124dba60 [ 1.837471] x29: ffff8000124dba60 x28: 0000000000000000 [ 1.837474] x27: ffff0001b7e854c8 x26: ffff80001204ea18 [ 1.837476] x25: 0000000000000005 x24: ffff800011f918f8 [ 1.837479] x23: ffff800011fbb588 x22: ffff0001b7e40e00 [ 1.837481] x21: 0000000000000100 x20: 0000000000000000 [ 1.837483] x19: ffff0001b767ec00 x18: 00000000ff10c000 [ 1.837485] x17: 0000000000000002 x16: 0000b0740fdb9950 [ 1.837488] x15: ffff8000116c1198 x14: ffffffffffffffff [ 1.837490] x13: 0000000000000030 x12: 0101010101010101 [ 1.837493] x11: 0000000000000020 x10: ffff0001bf17d130 [ 1.837495] x9 : 0000000000000000 x8 : ffff0001b6938080 [ 1.837497] x7 : 0000000000000000 x6 : 000000000000003f [ 1.837500] x5 : 0000000000000000 x4 : 0000000000000000 [ 1.837502] x3 : ffff80001096a880 x2 : 0000000000000000 [ 1.837505] x1 : ffff0001b7e40e00 x0 : 0000000100000001 [ 1.837507] Kernel panic - not syncing: Asynchronous SError Interrupt [ 1.837509] CPU: 0 PID: 74 Comm: kworker/0:1 Not tainted 5.8.0+ #205 [ 1.837510] Hardware name: HiKey970 (DT) [ 1.837511] Workqueue: events deferred_probe_work_func [ 1.837513] Call trace: [ 1.837514] dump_backtrace+0x0/0x1e0 [ 1.837515] show_stack+0x18/0x24 [ 1.837516] dump_stack+0xc0/0x11c [ 1.837517] panic+0x15c/0x324 [ 1.837518] nmi_panic+0x8c/0x90 [ 1.837519] arm64_serror_panic+0x78/0x84 [ 1.837520] do_serror+0x158/0x15c [ 1.837521] el1_error+0x84/0x100 [ 1.837522] _raw_spin_unlock_irqrestore+0x18/0x50 [ 1.837523] regmap_write+0x58/0x80 [ 1.837524] hi3660_reset_deassert+0x28/0x34 [ 1.837526] reset_control_deassert+0x50/0x260 [ 1.837527] reset_control_deassert+0xf4/0x260 [ 1.837528] dwc3_probe+0x5dc/0xe6c [ 1.837529] platform_drv_probe+0x54/0xb0 [ 1.837530] really_probe+0xe0/0x490 [ 1.837531] driver_probe_device+0xf4/0x160 [ 1.837532] __device_attach_driver+0x8c/0x114 [ 1.837533] bus_for_each_drv+0x78/0xcc [ 1.837534] __device_attach+0x108/0x1a0 [ 1.837535] device_initial_probe+0x14/0x20 [ 1.837537] bus_probe_device+0x98/0xa0 [ 1.837538] deferred_probe_work_func+0x88/0xe0 [ 1.837539] process_one_work+0x1cc/0x350 [ 1.837540] worker_thread+0x2c0/0x470 [ 1.837541] kthread+0x154/0x160 [ 1.837542] ret_from_fork+0x10/0x30 [ 1.837569] SMP: stopping secondary CPUs [ 1.837570] Kernel Offset: 0x1d0000 from 0xffff800010000000 [ 1.837571] PHYS_OFFSET: 0x0 [ 1.837572] CPU features: 0x240002,20882004 [ 1.837573] Memory Limit: none I suspect that the driver works downstream because of the extra delay of probing an additional driver, as porting such driver to upstream sometimes makes this driver to work. So, it could be due to some race condition. The problem could also be due to something wrong at DT, as, with the additional driver, the DT bindings are different. As I'm not familiar about the Serror error mechanism on ARM, I'm wondering if someone could give me some hint about how can I identify what's happening here. Due to the panic(), I can't check what wrong happened there. Not sure if it would be safe to just hack the error handling part of Serror, in order to let the boot to finish. PS.: the driver/misc hisi_hikey_usb driver on this series came from the John Stultz Hikey 960 tree. Thanks! Mauro Mauro Carvalho Chehab (7): phy: hisilicon: phy-hi3670-usb3: use a consistent namespace phy: hisilicon: phy-hi3670-usb3: fix coding style phy: hisilicon: phy-hi3670-usb3: change some DT properties dt-bindings: phy: convert phy-kirin970-usb3.txt to yaml MAINTAINERS: add myself as maintainer for Kirin 970 USB PHY misc: hisi_hikey_usb: add support for Hikey 970 dts: hisilicon: add support for USB3 on Hikey 970 Yu Chen (3): phy: hisilicon: add USB physical layer for Kirin 3670 phy: hisilicon: phy-hi3670-usb3: fix some issues at the init code misc: hisi_hikey_usb: Driver to support onboard USB gpio hub on Hikey960 .../bindings/phy/hisilicon,hi3670-usb3.yaml | 72 ++ MAINTAINERS | 16 +- .../boot/dts/hisilicon/hi3670-hikey970.dts | 103 +++ arch/arm64/boot/dts/hisilicon/hi3670.dtsi | 49 ++ drivers/misc/Kconfig | 9 + drivers/misc/Makefile | 1 + drivers/misc/hisi_hikey_usb.c | 272 +++++++ drivers/phy/hisilicon/Kconfig | 10 + drivers/phy/hisilicon/Makefile | 1 + drivers/phy/hisilicon/phy-hi3670-usb3.c | 671 ++++++++++++++++++ 10 files changed, 1203 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/phy/hisilicon,hi3670-usb3.yaml create mode 100644 drivers/misc/hisi_hikey_usb.c create mode 100644 drivers/phy/hisilicon/phy-hi3670-usb3.c