u-boot.lists.denx.de archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] phy: sun4i-usb: Allwinner D1 Support
@ 2022-07-15  4:09 Samuel Holland
  2022-07-15  4:09 ` [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig Samuel Holland
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Samuel Holland @ 2022-07-15  4:09 UTC (permalink / raw)
  To: u-boot, Jagan Teki, Andre Przywara; +Cc: Samuel Holland, Joe Hershberger

This series updates the USB PHY driver to support the Allwinner D1,
which is a new RISC-V SoC. First it cleans up a couple of things that
tie the driver to the existing ARM port, and then it adds the new PHY
variant to the driver. Patches 3-4 are effectively the same as changes
made to the Linux driver.

After this series, the driver still uses the VBUS and ID pin options
from arch/arm/mach-sunxi/Kconfig. Those options will be replaced by
devicetree properties in a separate series.


Andre Przywara (1):
  phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling

Samuel Holland (3):
  sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig
  phy: sun4i-usb: Drop use of arch-specific headers
  phy: sun4i-usb: Add D1 variant

 arch/arm/mach-sunxi/Kconfig           |  9 ------
 drivers/phy/allwinner/Kconfig         | 10 ++++++
 drivers/phy/allwinner/phy-sun4i-usb.c | 44 +++++++++++++++------------
 3 files changed, 34 insertions(+), 29 deletions(-)

-- 
2.35.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig
  2022-07-15  4:09 [PATCH 0/4] phy: sun4i-usb: Allwinner D1 Support Samuel Holland
@ 2022-07-15  4:09 ` Samuel Holland
  2022-07-15  9:15   ` Jagan Teki
  2022-07-15  4:09 ` [PATCH 2/4] phy: sun4i-usb: Drop use of arch-specific headers Samuel Holland
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Samuel Holland @ 2022-07-15  4:09 UTC (permalink / raw)
  To: u-boot, Jagan Teki, Andre Przywara; +Cc: Samuel Holland, Joe Hershberger

This option is used only by the phy-sun4i-usb driver, which does not
inherently depend on the ARM architecture.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---

 arch/arm/mach-sunxi/Kconfig   |  9 ---------
 drivers/phy/allwinner/Kconfig | 10 ++++++++++
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
index 71a7f8dcee06..4a833d37a841 100644
--- a/arch/arm/mach-sunxi/Kconfig
+++ b/arch/arm/mach-sunxi/Kconfig
@@ -679,15 +679,6 @@ config MMC_SUNXI_SLOT_EXTRA
 	slot or emmc on mmc1 - mmc3. Setting this to 1, 2 or 3 will enable
 	support for this.
 
-config INITIAL_USB_SCAN_DELAY
-	int "delay initial usb scan by x ms to allow builtin devices to init"
-	default 0
-	---help---
-	Some boards have on board usb devices which need longer than the
-	USB spec's 1 second to connect from board powerup. Set this config
-	option to a non 0 value to add an extra delay before the first usb
-	bus scan.
-
 config USB0_VBUS_PIN
 	string "Vbus enable pin for usb0 (otg)"
 	default ""
diff --git a/drivers/phy/allwinner/Kconfig b/drivers/phy/allwinner/Kconfig
index d3ff82f73a00..f8f1e99c4f52 100644
--- a/drivers/phy/allwinner/Kconfig
+++ b/drivers/phy/allwinner/Kconfig
@@ -13,6 +13,16 @@ config PHY_SUN4I_USB
 	  This driver controls the entire USB PHY block, both the USB OTG
 	  parts, as well as the 2 regular USB 2 host PHYs.
 
+config INITIAL_USB_SCAN_DELAY
+	int "Delay initial USB scan by x ms to allow builtin devices to init"
+	depends on PHY_SUN4I_USB
+	default 0
+	help
+	  Some boards have on board usb devices which need longer than
+	  the USB spec's 1 second to connect from board powerup. Set
+	  this option to a nonzero value to add an extra delay before
+	  the first USB bus scan.
+
 config PHY_SUN50I_USB3
 	bool "Allwinner sun50i USB3 PHY driver"
 	depends on ARCH_SUNXI
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/4] phy: sun4i-usb: Drop use of arch-specific headers
  2022-07-15  4:09 [PATCH 0/4] phy: sun4i-usb: Allwinner D1 Support Samuel Holland
  2022-07-15  4:09 ` [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig Samuel Holland
@ 2022-07-15  4:09 ` Samuel Holland
  2022-07-15  9:15   ` Jagan Teki
  2022-07-15  4:09 ` [PATCH 3/4] phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling Samuel Holland
  2022-07-15  4:09 ` [PATCH 4/4] phy: sun4i-usb: Add D1 variant Samuel Holland
  3 siblings, 1 reply; 9+ messages in thread
From: Samuel Holland @ 2022-07-15  4:09 UTC (permalink / raw)
  To: u-boot, Jagan Teki, Andre Przywara; +Cc: Samuel Holland, Joe Hershberger

Since commit 089ffd0aedb7 ("phy: sun4i-usb: Use CLK and RESET support")
neither of these headers is used. Dropping them allows the driver to be
architecture-independent.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---

 drivers/phy/allwinner/phy-sun4i-usb.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index aef2cb8f6f82..6a965e704d43 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -20,8 +20,6 @@
 #include <reset.h>
 #include <asm/gpio.h>
 #include <asm/io.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/cpu.h>
 #include <dm/device_compat.h>
 #include <linux/bitops.h>
 #include <linux/delay.h>
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/4] phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling
  2022-07-15  4:09 [PATCH 0/4] phy: sun4i-usb: Allwinner D1 Support Samuel Holland
  2022-07-15  4:09 ` [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig Samuel Holland
  2022-07-15  4:09 ` [PATCH 2/4] phy: sun4i-usb: Drop use of arch-specific headers Samuel Holland
@ 2022-07-15  4:09 ` Samuel Holland
  2022-07-15  9:16   ` Jagan Teki
  2022-07-15  4:09 ` [PATCH 4/4] phy: sun4i-usb: Add D1 variant Samuel Holland
  3 siblings, 1 reply; 9+ messages in thread
From: Samuel Holland @ 2022-07-15  4:09 UTC (permalink / raw)
  To: u-boot, Jagan Teki, Andre Przywara; +Cc: Samuel Holland, Joe Hershberger

From: Andre Przywara <andre.przywara@arm.com>

As Icenowy pointed out, newer manuals (starting with H6) actually
document the register block at offset 0x800 as "HCI controller and PHY
interface", also describe the bits in our "PMU_UNK1" register.
Let's put proper names to those "unknown" variables and symbols.

While we are at it, generalise the existing code by allowing a bitmap
of bits to clear and set, to cover newer SoCs: The A100 and H616 use a
different bit for the SIDDQ control.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Samuel Holland <samuel@sholland.org>
---

 drivers/phy/allwinner/phy-sun4i-usb.c | 32 ++++++++++++---------------
 1 file changed, 14 insertions(+), 18 deletions(-)

diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index 6a965e704d43..73e660edc37d 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -32,7 +32,8 @@
 #define REG_PHYTUNE			0x0c
 #define REG_PHYCTL_A33			0x10
 #define REG_PHY_OTGCTL			0x20
-#define REG_PMU_UNK1			0x10
+
+#define REG_HCI_PHY_CTL			0x10
 
 /* Common Control Bits for Both PHYs */
 #define PHY_PLL_BW			0x03
@@ -63,6 +64,7 @@
 /* A83T specific control bits for PHY0 */
 #define PHY_CTL_VBUSVLDEXT		BIT(5)
 #define PHY_CTL_SIDDQ			BIT(3)
+#define PHY_CTL_H3_SIDDQ		BIT(1)
 
 /* A83T specific control bits for PHY2 HSIC */
 #define SUNXI_EHCI_HS_FORCE		BIT(20)
@@ -87,9 +89,9 @@ struct sun4i_usb_phy_cfg {
 	int num_phys;
 	enum sun4i_usb_phy_type type;
 	u32 disc_thresh;
+	u32 hci_phy_ctl_clear;
 	u8 phyctl_offset;
 	bool dedicated_clocks;
-	bool enable_pmu_unk1;
 	bool phy0_dual_route;
 	int missing_phys;
 };
@@ -275,6 +277,12 @@ static int sun4i_usb_phy_init(struct phy *phy)
 		return ret;
 	}
 
+	if (usb_phy->pmu && data->cfg->hci_phy_ctl_clear) {
+		val = readl(usb_phy->pmu + REG_HCI_PHY_CTL);
+		val &= ~data->cfg->hci_phy_ctl_clear;
+		writel(val, usb_phy->pmu + REG_HCI_PHY_CTL);
+	}
+
 	if (data->cfg->type == sun8i_a83t_phy ||
 	    data->cfg->type == sun50i_h6_phy) {
 		if (phy->id == 0) {
@@ -284,11 +292,6 @@ static int sun4i_usb_phy_init(struct phy *phy)
 			writel(val, data->base + data->cfg->phyctl_offset);
 		}
 	} else {
-		if (usb_phy->pmu && data->cfg->enable_pmu_unk1) {
-			val = readl(usb_phy->pmu + REG_PMU_UNK1);
-			writel(val & ~2, usb_phy->pmu + REG_PMU_UNK1);
-		}
-
 		if (usb_phy->id == 0)
 			sun4i_usb_phy_write(phy, PHY_RES45_CAL_EN,
 					    PHY_RES45_CAL_DATA,
@@ -528,7 +531,6 @@ static const struct sun4i_usb_phy_cfg sun4i_a10_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A10,
 	.dedicated_clocks = false,
-	.enable_pmu_unk1 = false,
 };
 
 static const struct sun4i_usb_phy_cfg sun5i_a13_cfg = {
@@ -537,7 +539,6 @@ static const struct sun4i_usb_phy_cfg sun5i_a13_cfg = {
 	.disc_thresh = 2,
 	.phyctl_offset = REG_PHYCTL_A10,
 	.dedicated_clocks = false,
-	.enable_pmu_unk1 = false,
 };
 
 static const struct sun4i_usb_phy_cfg sun6i_a31_cfg = {
@@ -546,7 +547,6 @@ static const struct sun4i_usb_phy_cfg sun6i_a31_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A10,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = false,
 };
 
 static const struct sun4i_usb_phy_cfg sun7i_a20_cfg = {
@@ -555,7 +555,6 @@ static const struct sun4i_usb_phy_cfg sun7i_a20_cfg = {
 	.disc_thresh = 2,
 	.phyctl_offset = REG_PHYCTL_A10,
 	.dedicated_clocks = false,
-	.enable_pmu_unk1 = false,
 };
 
 static const struct sun4i_usb_phy_cfg sun8i_a23_cfg = {
@@ -564,7 +563,6 @@ static const struct sun4i_usb_phy_cfg sun8i_a23_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A10,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = false,
 };
 
 static const struct sun4i_usb_phy_cfg sun8i_a33_cfg = {
@@ -573,7 +571,6 @@ static const struct sun4i_usb_phy_cfg sun8i_a33_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A33,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = false,
 };
 
 static const struct sun4i_usb_phy_cfg sun8i_a83t_cfg = {
@@ -589,7 +586,7 @@ static const struct sun4i_usb_phy_cfg sun8i_h3_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A33,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = true,
+	.hci_phy_ctl_clear = PHY_CTL_H3_SIDDQ,
 	.phy0_dual_route = true,
 };
 
@@ -599,7 +596,7 @@ static const struct sun4i_usb_phy_cfg sun8i_r40_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A33,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = true,
+	.hci_phy_ctl_clear = PHY_CTL_H3_SIDDQ,
 	.phy0_dual_route = true,
 };
 
@@ -609,7 +606,7 @@ static const struct sun4i_usb_phy_cfg sun8i_v3s_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A33,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = true,
+	.hci_phy_ctl_clear = PHY_CTL_H3_SIDDQ,
 	.phy0_dual_route = true,
 };
 
@@ -619,7 +616,7 @@ static const struct sun4i_usb_phy_cfg sun50i_a64_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A33,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = true,
+	.hci_phy_ctl_clear = PHY_CTL_H3_SIDDQ,
 	.phy0_dual_route = true,
 };
 
@@ -629,7 +626,6 @@ static const struct sun4i_usb_phy_cfg sun50i_h6_cfg = {
 	.disc_thresh = 3,
 	.phyctl_offset = REG_PHYCTL_A33,
 	.dedicated_clocks = true,
-	.enable_pmu_unk1 = true,
 	.phy0_dual_route = true,
 	.missing_phys = BIT(1) | BIT(2),
 };
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/4] phy: sun4i-usb: Add D1 variant
  2022-07-15  4:09 [PATCH 0/4] phy: sun4i-usb: Allwinner D1 Support Samuel Holland
                   ` (2 preceding siblings ...)
  2022-07-15  4:09 ` [PATCH 3/4] phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling Samuel Holland
@ 2022-07-15  4:09 ` Samuel Holland
  2022-07-15  9:16   ` Jagan Teki
  3 siblings, 1 reply; 9+ messages in thread
From: Samuel Holland @ 2022-07-15  4:09 UTC (permalink / raw)
  To: u-boot, Jagan Teki, Andre Przywara; +Cc: Samuel Holland, Joe Hershberger

D1 has a register layout like A100 and H616, with the moved SIDDQ bit.
Unlike H616 it does not have any dependencies between PHY instances.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---

 drivers/phy/allwinner/phy-sun4i-usb.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index 73e660edc37d..2e969ab91e35 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -610,6 +610,15 @@ static const struct sun4i_usb_phy_cfg sun8i_v3s_cfg = {
 	.phy0_dual_route = true,
 };
 
+static const struct sun4i_usb_phy_cfg sun20i_d1_cfg = {
+	.num_phys = 2,
+	.type = sun50i_h6_phy,
+	.phyctl_offset = REG_PHYCTL_A33,
+	.dedicated_clocks = true,
+	.hci_phy_ctl_clear = PHY_CTL_SIDDQ,
+	.phy0_dual_route = true,
+};
+
 static const struct sun4i_usb_phy_cfg sun50i_a64_cfg = {
 	.num_phys = 2,
 	.type = sun50i_a64_phy,
@@ -641,6 +650,7 @@ static const struct udevice_id sun4i_usb_phy_ids[] = {
 	{ .compatible = "allwinner,sun8i-h3-usb-phy", .data = (ulong)&sun8i_h3_cfg },
 	{ .compatible = "allwinner,sun8i-r40-usb-phy", .data = (ulong)&sun8i_r40_cfg },
 	{ .compatible = "allwinner,sun8i-v3s-usb-phy", .data = (ulong)&sun8i_v3s_cfg },
+	{ .compatible = "allwinner,sun20i-d1-usb-phy", .data = (ulong)&sun20i_d1_cfg },
 	{ .compatible = "allwinner,sun50i-a64-usb-phy", .data = (ulong)&sun50i_a64_cfg},
 	{ .compatible = "allwinner,sun50i-h6-usb-phy", .data = (ulong)&sun50i_h6_cfg},
 	{ }
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig
  2022-07-15  4:09 ` [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig Samuel Holland
@ 2022-07-15  9:15   ` Jagan Teki
  0 siblings, 0 replies; 9+ messages in thread
From: Jagan Teki @ 2022-07-15  9:15 UTC (permalink / raw)
  To: Samuel Holland; +Cc: u-boot, Andre Przywara, Joe Hershberger

On Fri, Jul 15, 2022 at 9:39 AM Samuel Holland <samuel@sholland.org> wrote:
>
> This option is used only by the phy-sun4i-usb driver, which does not
> inherently depend on the ARM architecture.
>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---

Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/4] phy: sun4i-usb: Drop use of arch-specific headers
  2022-07-15  4:09 ` [PATCH 2/4] phy: sun4i-usb: Drop use of arch-specific headers Samuel Holland
@ 2022-07-15  9:15   ` Jagan Teki
  0 siblings, 0 replies; 9+ messages in thread
From: Jagan Teki @ 2022-07-15  9:15 UTC (permalink / raw)
  To: Samuel Holland; +Cc: u-boot, Andre Przywara, Joe Hershberger

On Fri, Jul 15, 2022 at 9:39 AM Samuel Holland <samuel@sholland.org> wrote:
>
> Since commit 089ffd0aedb7 ("phy: sun4i-usb: Use CLK and RESET support")
> neither of these headers is used. Dropping them allows the driver to be
> architecture-independent.
>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---

Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/4] phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling
  2022-07-15  4:09 ` [PATCH 3/4] phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling Samuel Holland
@ 2022-07-15  9:16   ` Jagan Teki
  0 siblings, 0 replies; 9+ messages in thread
From: Jagan Teki @ 2022-07-15  9:16 UTC (permalink / raw)
  To: Samuel Holland; +Cc: u-boot, Andre Przywara, Joe Hershberger

On Fri, Jul 15, 2022 at 9:39 AM Samuel Holland <samuel@sholland.org> wrote:
>
> From: Andre Przywara <andre.przywara@arm.com>
>
> As Icenowy pointed out, newer manuals (starting with H6) actually
> document the register block at offset 0x800 as "HCI controller and PHY
> interface", also describe the bits in our "PMU_UNK1" register.
> Let's put proper names to those "unknown" variables and symbols.
>
> While we are at it, generalise the existing code by allowing a bitmap
> of bits to clear and set, to cover newer SoCs: The A100 and H616 use a
> different bit for the SIDDQ control.
>
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---

Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] phy: sun4i-usb: Add D1 variant
  2022-07-15  4:09 ` [PATCH 4/4] phy: sun4i-usb: Add D1 variant Samuel Holland
@ 2022-07-15  9:16   ` Jagan Teki
  0 siblings, 0 replies; 9+ messages in thread
From: Jagan Teki @ 2022-07-15  9:16 UTC (permalink / raw)
  To: Samuel Holland; +Cc: u-boot, Andre Przywara, Joe Hershberger

On Fri, Jul 15, 2022 at 9:39 AM Samuel Holland <samuel@sholland.org> wrote:
>
> D1 has a register layout like A100 and H616, with the moved SIDDQ bit.
> Unlike H616 it does not have any dependencies between PHY instances.
>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---

Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-07-15  9:16 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-15  4:09 [PATCH 0/4] phy: sun4i-usb: Allwinner D1 Support Samuel Holland
2022-07-15  4:09 ` [PATCH 1/4] sunxi: Move INITIAL_USB_SCAN_DELAY to driver Kconfig Samuel Holland
2022-07-15  9:15   ` Jagan Teki
2022-07-15  4:09 ` [PATCH 2/4] phy: sun4i-usb: Drop use of arch-specific headers Samuel Holland
2022-07-15  9:15   ` Jagan Teki
2022-07-15  4:09 ` [PATCH 3/4] phy: sun4i-usb: Rework HCI PHY (aka "pmu_unk1") handling Samuel Holland
2022-07-15  9:16   ` Jagan Teki
2022-07-15  4:09 ` [PATCH 4/4] phy: sun4i-usb: Add D1 variant Samuel Holland
2022-07-15  9:16   ` Jagan Teki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).