From patchwork Fri Apr 5 20:57:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Icenowy Zheng X-Patchwork-Id: 10887839 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B8D221669 for ; Fri, 5 Apr 2019 20:58:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9DC2028B2D for ; Fri, 5 Apr 2019 20:58:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9195128B4D; Fri, 5 Apr 2019 20:58:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 498F828B2D for ; Fri, 5 Apr 2019 20:58:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=FHrin6Z+3v2G4dJIfibrST/CRw5OtyHyfLLzTZxC7zA=; b=jijt4aCqjEhF29M1P2CAHBDA9t z2kZlkvIsfgoqL7e265SUIl4lu3odZNXMuDYTYV/QrCItD0Xal4sLqINPWmkX85z2QP22K0tqqMvp HnXrS+J7KUWPPzdANYA9NWpigRUDtHqvYLV9+tWw1SL/6JcVCvWzKmR7+gh/VYz6EXYdTEKh2IirX 0XG/gXqsNOvjnUNOTPhLIv6lRF76D7ZaaLfwLSsAYS4SNLYNSc1Gx89ZusNppNLOgumUgw+w9y+7V BZW9biSzIk/FoJ0pJFfpYLQ/2YuADamIE639EXhSomMbubJPAPxRDVec3xzIiqUrzDaSzUwxg2lEf +qS2w8/g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVuj-0003mi-5D; Fri, 05 Apr 2019 20:58:17 +0000 Received: from haggis.mythic-beasts.com ([2a00:1098:0:86:1000:0:2:1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVuY-0003dc-Ay for linux-arm-kernel@lists.infradead.org; Fri, 05 Apr 2019 20:58:08 +0000 Received: from [199.195.250.187] (port=56504 helo=hermes.aosc.io) by haggis.mythic-beasts.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hCVuT-00086d-7y; Fri, 05 Apr 2019 21:58:01 +0100 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id EFAEA6CDF5; Fri, 5 Apr 2019 20:57:51 +0000 (UTC) From: Icenowy Zheng To: Rob Herring , Kishon Vijay Abraham I , Maxime Ripard , Chen-Yu Tsai Subject: [PATCH v5 1/5] dt-bindings: usb-connector: add Vbus regulator for Type-A/B Date: Sat, 6 Apr 2019 04:57:32 +0800 Message-Id: <20190405205736.55177-2-icenowy@aosc.io> In-Reply-To: <20190405205736.55177-1-icenowy@aosc.io> References: <20190405205736.55177-1-icenowy@aosc.io> X-BlackCat-Spam-Score: 9 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190405_135806_408687_F28E2889 X-CRM114-Status: GOOD ( 11.35 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Icenowy Zheng MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP USB Type-A and Type-B connectors have a Vbus pin, which provides +5V power to bus-powered devices. Add a power supply regulator property for this pin. Signed-off-by: Icenowy Zheng Reviewed-by: Rob Herring --- New patch in v5. Documentation/devicetree/bindings/connector/usb-connector.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/connector/usb-connector.txt b/Documentation/devicetree/bindings/connector/usb-connector.txt index a9a2f2fc44f2..5608feeb1105 100644 --- a/Documentation/devicetree/bindings/connector/usb-connector.txt +++ b/Documentation/devicetree/bindings/connector/usb-connector.txt @@ -17,6 +17,9 @@ Optional properties: - self-powered: Set this property if the usb device that has its own power source. +Optional properties for usb-a-connector or usb-b-connector: +- vbus-supply: phandle to a regulator supplying the VBUS voltage. + Optional properties for usb-c-connector: - power-role: should be one of "source", "sink" or "dual"(DRP) if typec connector has power support. From patchwork Fri Apr 5 20:57:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Icenowy Zheng X-Patchwork-Id: 10887837 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 356AD1515 for ; Fri, 5 Apr 2019 20:58:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 12D8A28B4B for ; Fri, 5 Apr 2019 20:58:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0675428B53; Fri, 5 Apr 2019 20:58:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A848E28B4B for ; Fri, 5 Apr 2019 20:58:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=k6w6gDr9TNSvbAg9EhCYOORvnxWlKyxDvH6TEOa4esI=; b=HiLPzZOFRL3unKGB6j31PBIk5G dcuFHLzOePMBQKCw/oZUBdYycBfN0Vz4N2mpc+U3ATQExMf/zqCbXB78pmZrNAHQ1dOJp5lEWBIFV vyBBOSW2B3AGiG/XR50MCNAnyMfGTEjPFj6zS0Fdmft6ywj6xpRZdKyOre6PmmeyiiJmbqNTy+DTB YfbNb5JN3Bkzph3/xdJ3d7wlB2YEHoreKeuBU3C/DcmPzPcwGx3MoIG4lGartdQCtmhYMCOExNzL1 2orE6TTXfIQ7faSdPqFQVyGBbocnt/N1zyF54Ttt6V0JFrELUCgrqTHs6YfJAwCJGrJZzwmrwWy5q z/goq3jg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVub-0003ef-IX; Fri, 05 Apr 2019 20:58:09 +0000 Received: from haggis.mythic-beasts.com ([2a00:1098:0:86:1000:0:2:1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVuY-0003da-Az for linux-arm-kernel@lists.infradead.org; Fri, 05 Apr 2019 20:58:08 +0000 Received: from [199.195.250.187] (port=56523 helo=hermes.aosc.io) by haggis.mythic-beasts.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hCVuT-00086s-Ra; Fri, 05 Apr 2019 21:58:02 +0100 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id 789C06CDF8; Fri, 5 Apr 2019 20:57:56 +0000 (UTC) From: Icenowy Zheng To: Rob Herring , Kishon Vijay Abraham I , Maxime Ripard , Chen-Yu Tsai Subject: [PATCH v5 2/5] dt-bindings: phy: add binding for Allwinner USB3 PHY Date: Sat, 6 Apr 2019 04:57:33 +0800 Message-Id: <20190405205736.55177-3-icenowy@aosc.io> In-Reply-To: <20190405205736.55177-1-icenowy@aosc.io> References: <20190405205736.55177-1-icenowy@aosc.io> X-BlackCat-Spam-Score: 9 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190405_135806_427664_38994325 X-CRM114-Status: GOOD ( 14.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Icenowy Zheng MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP The new Allwinner H6 SoC contains a USB3 PHY that is wired to the external USB3 pins of the SoC. Add a device tree binding for the PHY. Signed-off-by: Icenowy Zheng Reviewed-by: Chen-Yu Tsai --- Changes in v5: - Dropped Vbus regulator and added connector subnode. Changes in v4: - Changed Vbus regulator property to vbus-supply. Changes in v3: - Added Chen-Yu's Review tag. No changes in v2, v1. .../bindings/phy/sun50i-usb3-phy.txt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt diff --git a/Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt b/Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt new file mode 100644 index 000000000000..eeedc53e6360 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt @@ -0,0 +1,28 @@ +Allwinner sun50i USB3 PHY +----------------------- + +Required properties: +- compatible : should be one of + * allwinner,sun60i-h6-usb3-phy +- reg : a list of offset + length pairs +- #phy-cells : from the generic phy bindings, must be 0 +- clocks : phandle + clock specifier for the phy clock +- resets : phandle + reset specifier for the phy reset + +Optional nodes: +- connector : A sub-node required for representing the connector connected + to the USB PHY. See ../connector/usb-connector.txt for details. + +Example: + usb3phy: phy@5210000 { + compatible = "allwinner,sun50i-h6-usb3-phy"; + reg = <0x5210000 0x10000>; + clocks = <&ccu CLK_USB_PHY1>; + resets = <&ccu RST_USB_PHY1>; + #phy-cells = <0>; + + connector { + compatible = "usb-a-connector"; + label = "USB3"; + }; + }; From patchwork Fri Apr 5 20:57:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Icenowy Zheng X-Patchwork-Id: 10887841 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E442F1669 for ; Fri, 5 Apr 2019 20:58:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7F0C28B2D for ; Fri, 5 Apr 2019 20:58:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB05028B4B; Fri, 5 Apr 2019 20:58:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0FFCF28B4D for ; Fri, 5 Apr 2019 20:58:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=2oTudFX5YUPf4QoqpPG4nlEogQyNoy3L2Z4ZdTZZAGo=; b=KtgRH0aCNWYg7KmnJWZUETPv4e Pib5Ps+j9kWwQJuzf54vq6hdo7upt5a6DVuz39k2L5uekDlGuP7gfZ0pv7YwdN8JP27Uz+MXTfVe/ 6A5HZ8jeo0VUfiR0VBUCKO39+DWwA9YK4PDZLsYJgkkWjyf1qN03pHQfLJSDV3zRJeOjIrtpKyOeB YNFTGE9CcjMn+srwxElukHYpKQJSygnLtFEGNYqgp97ikEO+LwI8ZoxFyRvFgChuGaL46BLQ9Ue2S GDoPwQtRRGqKVtxLGNcD/SK5ruRWpN1GFsci/oSNDjOrgYHUYiQk/d/HFPcC/Vi3rLf5ezN/+0nWq g0MPTMLg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVux-00049o-9O; Fri, 05 Apr 2019 20:58:31 +0000 Received: from haggis.mythic-beasts.com ([2a00:1098:0:86:1000:0:2:1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVua-0003eD-Bl for linux-arm-kernel@lists.infradead.org; Fri, 05 Apr 2019 20:58:10 +0000 Received: from [199.195.250.187] (port=56556 helo=hermes.aosc.io) by haggis.mythic-beasts.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hCVuW-00087a-J6; Fri, 05 Apr 2019 21:58:04 +0100 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id C30026CDFC; Fri, 5 Apr 2019 20:58:00 +0000 (UTC) From: Icenowy Zheng To: Rob Herring , Kishon Vijay Abraham I , Maxime Ripard , Chen-Yu Tsai Subject: [PATCH v5 3/5] phy: allwinner: add phy driver for USB3 PHY on Allwinner H6 SoC Date: Sat, 6 Apr 2019 04:57:34 +0800 Message-Id: <20190405205736.55177-4-icenowy@aosc.io> In-Reply-To: <20190405205736.55177-1-icenowy@aosc.io> References: <20190405205736.55177-1-icenowy@aosc.io> X-BlackCat-Spam-Score: 9 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190405_135808_542339_A8218C79 X-CRM114-Status: GOOD ( 22.88 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Icenowy Zheng MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Allwinner H6 SoC contains a USB3 PHY (with USB2 DP/DM lines also controlled). Add a driver for it. The register operations in this driver is mainly extracted from the BSP USB3 driver. Signed-off-by: Icenowy Zheng Reviewed-by: Chen-Yu Tsai Tested-by: Clément Péron --- Changes in v5: - Dropped support for vbus-supply property in the device node itself and added support for vbus-supply property in the connector subnode. Changes in v4: - Added support for vbus-supply property. Changes in v3: - Dropped USB_SUPPORT dependency. - Added Chen-Yu's Review tag. No changes in v2, v1. drivers/phy/allwinner/Kconfig | 12 ++ drivers/phy/allwinner/Makefile | 1 + drivers/phy/allwinner/phy-sun50i-usb3.c | 260 ++++++++++++++++++++++++ 3 files changed, 273 insertions(+) create mode 100644 drivers/phy/allwinner/phy-sun50i-usb3.c diff --git a/drivers/phy/allwinner/Kconfig b/drivers/phy/allwinner/Kconfig index fb1204bcc454..2c363db177f2 100644 --- a/drivers/phy/allwinner/Kconfig +++ b/drivers/phy/allwinner/Kconfig @@ -41,3 +41,15 @@ config PHY_SUN9I_USB sun9i SoCs. This driver controls each individual USB 2 host PHY. + +config PHY_SUN50I_USB3 + tristate "Allwinner sun50i SoC USB3 PHY driver" + depends on ARCH_SUNXI && HAS_IOMEM && OF + depends on RESET_CONTROLLER + select USB_COMMON + select GENERIC_PHY + help + Enable this to support the USB3.0-capable transceiver that is + part of some Allwinner sun50i SoCs. + + This driver controls each individual USB 2+3 host PHY combo. diff --git a/drivers/phy/allwinner/Makefile b/drivers/phy/allwinner/Makefile index 7d0053efbfaa..59575a895779 100644 --- a/drivers/phy/allwinner/Makefile +++ b/drivers/phy/allwinner/Makefile @@ -1,3 +1,4 @@ obj-$(CONFIG_PHY_SUN4I_USB) += phy-sun4i-usb.o obj-$(CONFIG_PHY_SUN6I_MIPI_DPHY) += phy-sun6i-mipi-dphy.o obj-$(CONFIG_PHY_SUN9I_USB) += phy-sun9i-usb.o +obj-$(CONFIG_PHY_SUN50I_USB3) += phy-sun50i-usb3.o diff --git a/drivers/phy/allwinner/phy-sun50i-usb3.c b/drivers/phy/allwinner/phy-sun50i-usb3.c new file mode 100644 index 000000000000..5299aef98668 --- /dev/null +++ b/drivers/phy/allwinner/phy-sun50i-usb3.c @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Allwinner sun50i(H6) USB 3.0 phy driver + * + * Copyright (C) 2017 Icenowy Zheng + * + * Based on phy-sun9i-usb.c, which is: + * + * Copyright (C) 2014-2015 Chen-Yu Tsai + * + * Based on code from Allwinner BSP, which is: + * + * Copyright (c) 2010-2015 Allwinner Technology Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Interface Status and Control Registers */ +#define SUNXI_ISCR 0x00 +#define SUNXI_PIPE_CLOCK_CONTROL 0x14 +#define SUNXI_PHY_TUNE_LOW 0x18 +#define SUNXI_PHY_TUNE_HIGH 0x1c +#define SUNXI_PHY_EXTERNAL_CONTROL 0x20 + +/* USB2.0 Interface Status and Control Register */ +#define SUNXI_ISCR_FORCE_VBUS (3 << 12) + +/* PIPE Clock Control Register */ +#define SUNXI_PCC_PIPE_CLK_OPEN (1 << 6) + +/* PHY External Control Register */ +#define SUNXI_PEC_EXTERN_VBUS (3 << 1) +#define SUNXI_PEC_SSC_EN (1 << 24) +#define SUNXI_PEC_REF_SSP_EN (1 << 26) + +/* PHY Tune High Register */ +#define SUNXI_TX_DEEMPH_3P5DB(n) ((n) << 19) +#define SUNXI_TX_DEEMPH_3P5DB_MASK GENMASK(24, 19) +#define SUNXI_TX_DEEMPH_6DB(n) ((n) << 13) +#define SUNXI_TX_DEEMPH_6GB_MASK GENMASK(18, 13) +#define SUNXI_TX_SWING_FULL(n) ((n) << 6) +#define SUNXI_TX_SWING_FULL_MASK GENMASK(12, 6) +#define SUNXI_LOS_BIAS(n) ((n) << 3) +#define SUNXI_LOS_BIAS_MASK GENMASK(5, 3) +#define SUNXI_TXVBOOSTLVL(n) ((n) << 0) +#define SUNXI_TXVBOOSTLVL_MASK GENMASK(0, 2) + +struct sun50i_usb3_phy { + struct phy *phy; + void __iomem *regs; + struct reset_control *reset; + struct clk *clk; + struct platform_device *connector_dev; + struct regulator *vbus; +}; + +static void sun50i_usb3_phy_open(struct sun50i_usb3_phy *phy) +{ + u32 val; + + val = readl(phy->regs + SUNXI_PHY_EXTERNAL_CONTROL); + val |= SUNXI_PEC_EXTERN_VBUS; + val |= SUNXI_PEC_SSC_EN | SUNXI_PEC_REF_SSP_EN; + writel(val, phy->regs + SUNXI_PHY_EXTERNAL_CONTROL); + + val = readl(phy->regs + SUNXI_PIPE_CLOCK_CONTROL); + val |= SUNXI_PCC_PIPE_CLK_OPEN; + writel(val, phy->regs + SUNXI_PIPE_CLOCK_CONTROL); + + val = readl(phy->regs + SUNXI_ISCR); + val |= SUNXI_ISCR_FORCE_VBUS; + writel(val, phy->regs + SUNXI_ISCR); + + /* + * All the magic numbers written to the PHY_TUNE_{LOW_HIGH} + * registers are directly taken from the BSP USB3 driver from + * Allwiner. + */ + writel(0x0047fc87, phy->regs + SUNXI_PHY_TUNE_LOW); + + val = readl(phy->regs + SUNXI_PHY_TUNE_HIGH); + val &= ~(SUNXI_TXVBOOSTLVL_MASK | SUNXI_LOS_BIAS_MASK | + SUNXI_TX_SWING_FULL_MASK | SUNXI_TX_DEEMPH_6GB_MASK | + SUNXI_TX_DEEMPH_3P5DB_MASK); + val |= SUNXI_TXVBOOSTLVL(0x7); + val |= SUNXI_LOS_BIAS(0x7); + val |= SUNXI_TX_SWING_FULL(0x55); + val |= SUNXI_TX_DEEMPH_6DB(0x20); + val |= SUNXI_TX_DEEMPH_3P5DB(0x15); + writel(val, phy->regs + SUNXI_PHY_TUNE_HIGH); +} + +static int sun50i_usb3_phy_init(struct phy *_phy) +{ + struct sun50i_usb3_phy *phy = phy_get_drvdata(_phy); + int ret; + + ret = clk_prepare_enable(phy->clk); + if (ret) + goto err_clk; + + ret = reset_control_deassert(phy->reset); + if (ret) + goto err_reset; + + sun50i_usb3_phy_open(phy); + return 0; + +err_reset: + clk_disable_unprepare(phy->clk); + +err_clk: + return ret; +} + +static int sun50i_usb3_phy_exit(struct phy *_phy) +{ + struct sun50i_usb3_phy *phy = phy_get_drvdata(_phy); + + reset_control_assert(phy->reset); + clk_disable_unprepare(phy->clk); + + return 0; +} + +static int sun50i_usb3_phy_power_on(struct phy *_phy) +{ + struct sun50i_usb3_phy *phy = phy_get_drvdata(_phy); + + if (phy->vbus) + return regulator_enable(phy->vbus); + else + return 0; +} + +static int sun50i_usb3_phy_power_off(struct phy *_phy) +{ + struct sun50i_usb3_phy *phy = phy_get_drvdata(_phy); + + if (phy->vbus) + return regulator_disable(phy->vbus); + else + return 0; +} + +static const struct phy_ops sun50i_usb3_phy_ops = { + .init = sun50i_usb3_phy_init, + .exit = sun50i_usb3_phy_exit, + .power_on = sun50i_usb3_phy_power_on, + .power_off = sun50i_usb3_phy_power_off, + .owner = THIS_MODULE, +}; + +static int sun50i_usb3_phy_probe(struct platform_device *pdev) +{ + struct sun50i_usb3_phy *phy; + struct device *dev = &pdev->dev; + struct phy_provider *phy_provider; + struct resource *res; + struct device_node *connector_node; + int ret; + + phy = devm_kzalloc(dev, sizeof(*phy), GFP_KERNEL); + if (!phy) + return -ENOMEM; + + dev_set_drvdata(dev, phy); + + phy->clk = devm_clk_get(dev, NULL); + if (IS_ERR(phy->clk)) { + dev_err(dev, "failed to get phy clock\n"); + return PTR_ERR(phy->clk); + } + + phy->reset = devm_reset_control_get(dev, NULL); + if (IS_ERR(phy->reset)) { + dev_err(dev, "failed to get reset control\n"); + return PTR_ERR(phy->reset); + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + phy->regs = devm_ioremap_resource(dev, res); + if (IS_ERR(phy->regs)) + return PTR_ERR(phy->regs); + + /* Populate the connector as platform device */ + ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); + if (ret) + return ret; + + /* + * Currently the Allwinner USB3 PHY contains only one port, so we + * only process one connector now. + */ + connector_node = of_get_next_child(pdev->dev.of_node, NULL); + + if (connector_node) { + /* Get the platform device */ + phy->connector_dev = of_find_device_by_node(connector_node); + if (!phy->connector_dev) { + dev_err(dev, "no device for connector\n"); + return -ENODEV; + } + + phy->vbus = regulator_get(&phy->connector_dev->dev, "vbus"); + if (IS_ERR(phy->vbus)) + return PTR_ERR(phy->vbus); + } + + phy->phy = devm_phy_create(dev, NULL, &sun50i_usb3_phy_ops); + if (IS_ERR(phy->phy)) { + dev_err(dev, "failed to create PHY\n"); + return PTR_ERR(phy->phy); + } + + phy_set_drvdata(phy->phy, phy); + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + + return PTR_ERR_OR_ZERO(phy_provider); +} + +static int sun50i_usb3_phy_remove(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct sun50i_usb3_phy *phy = dev_get_drvdata(dev); + + if (phy->vbus) + regulator_put(phy->vbus); + + return 0; +} + +static const struct of_device_id sun50i_usb3_phy_of_match[] = { + { .compatible = "allwinner,sun50i-h6-usb3-phy" }, + { }, +}; +MODULE_DEVICE_TABLE(of, sun50i_usb3_phy_of_match); + +static struct platform_driver sun50i_usb3_phy_driver = { + .probe = sun50i_usb3_phy_probe, + .remove = sun50i_usb3_phy_remove, + .driver = { + .of_match_table = sun50i_usb3_phy_of_match, + .name = "sun50i-usb3-phy", + } +}; +module_platform_driver(sun50i_usb3_phy_driver); + +MODULE_DESCRIPTION("Allwinner sun50i USB 3.0 phy driver"); +MODULE_AUTHOR("Icenowy Zheng "); +MODULE_LICENSE("GPL"); From patchwork Fri Apr 5 20:57:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Icenowy Zheng X-Patchwork-Id: 10887843 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 574891515 for ; Fri, 5 Apr 2019 20:58:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3E41328B2D for ; Fri, 5 Apr 2019 20:58:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3295728B4D; Fri, 5 Apr 2019 20:58:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D87D528B2D for ; Fri, 5 Apr 2019 20:58:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=R0tUxSlZhOoEKNsibhH08zizBzcweEezTiCpxq9BDcM=; b=DNFELjbnLsGMn3jI4im+fCZk34 BqzW+nu7eVOZJV7nuVUAeVKYNOgzUUWgDYh1Ih1h7OzIJU7NljP0ICTADIo2771N9LnpPI5Vve4GT FivhcUyLxxLclv4929t/iP5z6YPZZFtE35i40UDP/LVoSiVGPEmfst9ha0S3Il0QQKRit3re3HNnr Lr077VQnfh/rbBahD1sux/VSEGq6PA1J1t/DJmziIkeMA892WYyNTXUBoEx7eg1qvh0qUqX1xxMRC 2rlM3udZhCUQaQDLLl1KCNZ/WoMpRyk5lnCb5oEPpO/H+y2M6Zga8+42ZJY+sicxd01Vb6B2st9il sqG/wZzQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVv7-0004Kn-Jz; Fri, 05 Apr 2019 20:58:41 +0000 Received: from haggis.mythic-beasts.com ([2a00:1098:0:86:1000:0:2:1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVud-0003g9-TQ for linux-arm-kernel@lists.infradead.org; Fri, 05 Apr 2019 20:58:15 +0000 Received: from [199.195.250.187] (port=56572 helo=hermes.aosc.io) by haggis.mythic-beasts.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hCVua-0008CY-B9; Fri, 05 Apr 2019 21:58:08 +0100 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id AE9FC6CDF8; Fri, 5 Apr 2019 20:58:04 +0000 (UTC) From: Icenowy Zheng To: Rob Herring , Kishon Vijay Abraham I , Maxime Ripard , Chen-Yu Tsai Subject: [PATCH v5 4/5] arm64: allwinner: dts: h6: add USB3 device nodes Date: Sat, 6 Apr 2019 04:57:35 +0800 Message-Id: <20190405205736.55177-5-icenowy@aosc.io> In-Reply-To: <20190405205736.55177-1-icenowy@aosc.io> References: <20190405205736.55177-1-icenowy@aosc.io> X-BlackCat-Spam-Score: 9 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190405_135812_186981_44BA9884 X-CRM114-Status: GOOD ( 13.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Icenowy Zheng MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Allwinner H6 SoC features USB3 functionality, with a DWC3 controller and a custom PHY. Add device tree nodes for them. Signed-off-by: Icenowy Zheng Reviewed-by: Chen-Yu Tsai --- No changes in v4, v5. Changes in v3: - Changed the dwc3 clock according to the user manual. - Added Chen-Yu's Review tag. arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi index 91fecab58836..4fcd4c0f470d 100644 --- a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi +++ b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi @@ -426,6 +426,38 @@ status = "disabled"; }; + dwc3: dwc3@5200000 { + compatible = "snps,dwc3"; + reg = <0x05200000 0x10000>; + interrupts = ; + clocks = <&ccu CLK_BUS_XHCI>, + <&ccu CLK_BUS_XHCI>, + <&osc32k>; + clock-names = "ref", "bus_early", "suspend"; + resets = <&ccu RST_BUS_XHCI>; + /* + * The datasheet of the chip doesn't declare the + * peripheral function, and there's no boards known + * to have a USB Type-B port routed to the port. + * In addition, no one has tested the peripheral + * function yet. + * So set the dr_mode to "host" in the DTSI file. + */ + dr_mode = "host"; + phys = <&usb3phy>; + phy-names = "usb3-phy"; + status = "disabled"; + }; + + usb3phy: phy@5210000 { + compatible = "allwinner,sun50i-h6-usb3-phy"; + reg = <0x5210000 0x10000>; + clocks = <&ccu CLK_USB_PHY1>; + resets = <&ccu RST_USB_PHY1>; + #phy-cells = <0>; + status = "disabled"; + }; + ehci3: usb@5311000 { compatible = "allwinner,sun50i-h6-ehci", "generic-ehci"; reg = <0x05311000 0x100>; From patchwork Fri Apr 5 20:57:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Icenowy Zheng X-Patchwork-Id: 10887847 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 47BFB1669 for ; Fri, 5 Apr 2019 20:59:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2D2CB28B2D for ; Fri, 5 Apr 2019 20:59:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1FDBF28B4D; Fri, 5 Apr 2019 20:59:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B8CC628B2D for ; Fri, 5 Apr 2019 20:59:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=JRIRlj5cMElC6OpTJAyQN8RQit4CCwFekoj3zDTahyI=; b=c5LZAsPvBs6g1I0s9EiZDjK2jv Euqg1n03mk36LFo6mX+DduA6yvfj09X49X6Pz1DDvfJbZ6xCQZVHIZl2OM2zcW+66kftq8oz9ZJjn T7xd4bZUH62hC6c0TYjO1/M1qZkISe5/5X5nKMDlo7UQjMX2PAgmknwQkT8Lt3fuMAp3dADdpUjP2 RedVAbxlb8cQsYj8VM9tXQVQMLQXBiXR6PSEshKe7bKR/hfWfVgYhAiNTphGSeXVkCRjXuVKPBCtC MQKyI8dx7Y9lmY2eZm6bwj9rwWvPsj5iM4Sxn2ZPIctedZVNoUig8kLHLORRNZWKx2TuQfMZRYCzM LpYpca2w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVvT-0004oJ-T0; Fri, 05 Apr 2019 20:59:03 +0000 Received: from haggis.mythic-beasts.com ([2a00:1098:0:86:1000:0:2:1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCVui-0003mw-Ca for linux-arm-kernel@lists.infradead.org; Fri, 05 Apr 2019 20:58:23 +0000 Received: from [199.195.250.187] (port=56587 helo=hermes.aosc.io) by haggis.mythic-beasts.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hCVue-0008Hk-NF; Fri, 05 Apr 2019 21:58:12 +0100 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id 21DD66CE00; Fri, 5 Apr 2019 20:58:08 +0000 (UTC) From: Icenowy Zheng To: Rob Herring , Kishon Vijay Abraham I , Maxime Ripard , Chen-Yu Tsai Subject: [PATCH v5 5/5] arm64: allwinner: dts: h6: enable USB3 port on Pine H64 Date: Sat, 6 Apr 2019 04:57:36 +0800 Message-Id: <20190405205736.55177-6-icenowy@aosc.io> In-Reply-To: <20190405205736.55177-1-icenowy@aosc.io> References: <20190405205736.55177-1-icenowy@aosc.io> X-BlackCat-Spam-Score: 9 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190405_135817_171039_87254908 X-CRM114-Status: GOOD ( 11.59 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Icenowy Zheng MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Pine H64 board have a USB3 port, which is connected to the USB3 pins of the H6 SoC, and the 5V power supply is controlled via GPIO (shared with the power USB ports). Enable this port. Signed-off-by: Icenowy Zheng Reviewed-by: Chen-Yu Tsai --- Changes in v5: - Migrated to connector subnode. No changes in v4. Changes in v3: - Added Chen-Yu's Review tag. .../arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts b/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts index bdb8470fc8dc..d03e20ee1cc3 100644 --- a/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts +++ b/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts @@ -95,6 +95,10 @@ }; }; +&dwc3 { + status = "okay"; +}; + &ehci0 { status = "okay"; }; @@ -267,3 +271,12 @@ usb3_vbus-supply = <®_usb_vbus>; status = "okay"; }; + +&usb3phy { + status = "okay"; + + connector { + compatible = "usb-a-connector"; + vbus-supply = <®_usb_vbus>; + }; +};