All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [PATCH 15/19] usb: ehci-mx6: Use portnr in DM only if PHY is disabled
Date: Fri,  2 Apr 2021 14:48:08 +0200	[thread overview]
Message-ID: <20210402124812.186761-15-marex@denx.de> (raw)
In-Reply-To: <20210402124812.186761-1-marex@denx.de>

In case of legacy platforms which do not implement PHY support,
determine portnr from PHY node DT aliases, just like Linux does.
This is not necessary in case PHY support is enabled and a PHY
driver is available, so only enable the portnr handling for the
legacy platforms.

Fixes: 4de51cc25b5 ("usb: ehci-mx6: Drop assignment of sequence number")
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Ye Li <ye.li@nxp.com>
Cc: uboot-imx <uboot-imx@nxp.com>
---
 drivers/usb/host/ehci-mx6.c | 54 ++++++-------------------------------
 1 file changed, 8 insertions(+), 46 deletions(-)

diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c
index 345be528739..b1cc62fcc37 100644
--- a/drivers/usb/host/ehci-mx6.c
+++ b/drivers/usb/host/ehci-mx6.c
@@ -414,12 +414,12 @@ struct ehci_mx6_priv_data {
 	struct udevice *vbus_supply;
 	struct clk clk;
 	enum usb_init_type init_type;
-	int portnr;
 #if !defined(CONFIG_PHY)
 	/* Legacy iMX6/iMX7/iMX7ULP compat, they do not use PHY framework yet */
 	void __iomem *phy_addr;
 	void __iomem *misc_addr;
 	void __iomem *anatop_addr;
+	int portnr;
 #endif
 };
 
@@ -541,49 +541,6 @@ static int ehci_usb_of_to_plat(struct udevice *dev)
 	return 0;
 }
 
-static int ehci_usb_bind(struct udevice *dev)
-{
-	/*
-	 * TODO:
-	 * This driver is only partly converted to DT probing and still uses
-	 * a tremendous amount of hard-coded addresses. To make things worse,
-	 * the driver depends on specific sequential indexing of controllers,
-	 * from which it derives offsets in the PHY and ANATOP register sets.
-	 *
-	 * Here we attempt to calculate these indexes from DT information as
-	 * well as we can. The USB controllers on all existing iMX6 SoCs
-	 * are placed next to each other, at addresses incremented by 0x200,
-	 * and iMX7 their addresses are shifted by 0x10000.
-	 * Thus, the index is derived from the multiple of 0x200 (0x10000 for
-	 * iMX7) offset from the first controller address.
-	 *
-	 * However, to complete conversion of this driver to DT probing, the
-	 * following has to be done:
-	 * - DM clock framework support for iMX must be implemented
-	 * - usb_power_config() has to be converted to clock framework
-	 *   -> Thus, the ad-hoc "index" variable goes away.
-	 * - USB PHY handling has to be factored out into separate driver
-	 *   -> Thus, the ad-hoc "index" variable goes away from the PHY
-	 *      code, the PHY driver must parse it's address from DT. This
-	 *      USB driver must find the PHY driver via DT phandle.
-	 *   -> usb_power_config() shall be moved to PHY driver
-	 * With these changes in place, the ad-hoc indexing goes away and
-	 * the driver is fully converted to DT probing.
-	 */
-
-	/*
-	 * FIXME: This cannot work with the new sequence numbers.
-	 * Please complete the DM conversion.
-	 *
-	 * u32 controller_spacing = is_mx7() ? 0x10000 : 0x200;
-	 * fdt_addr_t addr = devfdt_get_addr_index(dev, 0);
-	 *
-	 * dev->req_seq = (addr - USB_BASE_ADDR) / controller_spacing;
-	 */
-
-	return 0;
-}
-
 static int mx6_parse_dt_addrs(struct udevice *dev)
 {
 #if !defined(CONFIG_PHY)
@@ -596,11 +553,17 @@ static int mx6_parse_dt_addrs(struct udevice *dev)
 	const void *blob = gd->fdt_blob;
 	int offset = dev_of_offset(dev);
 	void *__iomem addr;
+	int ret, devnump;
 
 	phy_off = fdtdec_lookup_phandle(blob, offset, "fsl,usbphy");
 	if (phy_off < 0)
 		return -EINVAL;
 
+	ret = fdtdec_get_alias_seq(blob, dev->uclass->uc_drv->name,
+				   phy_off, &devnump);
+	if (ret < 0)
+		return ret;
+
 	misc_off = fdtdec_lookup_phandle(blob, offset, "fsl,usbmisc");
 	if (misc_off < 0)
 		return -EINVAL;
@@ -610,6 +573,7 @@ static int mx6_parse_dt_addrs(struct udevice *dev)
 		return -EINVAL;
 
 	priv->phy_addr = addr;
+	priv->portnr = devnump;
 
 	addr = (void __iomem *)fdtdec_get_addr(blob, misc_off, "reg");
 	if ((fdt_addr_t)addr == FDT_ADDR_T_NONE)
@@ -656,7 +620,6 @@ static int ehci_usb_probe(struct udevice *dev)
 		return ret;
 
 	priv->ehci = ehci;
-	priv->portnr = dev_seq(dev);
 	priv->init_type = type;
 
 #if CONFIG_IS_ENABLED(CLK)
@@ -766,7 +729,6 @@ U_BOOT_DRIVER(usb_mx6) = {
 	.id	= UCLASS_USB,
 	.of_match = mx6_usb_ids,
 	.of_to_plat = ehci_usb_of_to_plat,
-	.bind	= ehci_usb_bind,
 	.probe	= ehci_usb_probe,
 	.remove = ehci_usb_remove,
 	.ops	= &ehci_usb_ops,
-- 
2.30.2

  parent reply	other threads:[~2021-04-02 12:48 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-02 12:47 [PATCH 01/19] phy: nop-phy: Add standard usb-nop-xceiv compat string Marek Vasut
2021-04-02 12:47 ` [PATCH 02/19] arc: emsdp/iotdk: Use standard compatible string for USB no-op PHY Marek Vasut
2021-04-02 12:47 ` [PATCH 03/19] ARM: dts: k2g-evm: " Marek Vasut
2021-04-02 12:47 ` [PATCH 04/19] ARM: dts: imx8mm: Replace deprecated fsl, usbphy DT props with phys Marek Vasut
2021-04-02 12:47 ` [PATCH 05/19] ARM: dts: imx8mm: Add power domain nodes Marek Vasut
2021-04-04 23:24   ` Jaehoon Chung
2021-04-02 12:47 ` [PATCH 06/19] imx: power-domain: Add fsl, imx8mm-gpc compatible string Marek Vasut
2021-04-04 23:26   ` Jaehoon Chung
2021-04-02 12:48 ` [PATCH 07/19] usb: ehci-mx6: Turn off Vbus on probe failure Marek Vasut
2021-04-02 12:48 ` [PATCH 08/19] usb: ehci-mx6: Add DM clock support Marek Vasut
2021-04-02 12:48 ` [PATCH 09/19] usb: ehci-mx6: Unify USBNC registers Marek Vasut
2021-04-02 12:48 ` [PATCH 10/19] usb: ehci-mx6: Parse USB PHY and MISC offsets from DT Marek Vasut
2021-04-02 12:48 ` [PATCH 11/19] usb: ehci-mx6: Split ehci_mx6_common_init() Marek Vasut
2021-04-02 12:48 ` [PATCH 12/19] usb: ehci-mx6: Pass PHY address to usb_*_phy*() Marek Vasut
2021-04-02 12:48 ` [PATCH 13/19] usb: ehci-mx6: Split usb_power_config() Marek Vasut
2021-04-02 12:48 ` [PATCH 14/19] usb: ehci-mx6: Pass MISC address to usb_oc_config() Marek Vasut
2021-04-02 12:48 ` Marek Vasut [this message]
2021-04-02 12:48 ` [PATCH 16/19] usb: ehci-mx6: Add generic EHCI PHY support Marek Vasut
2021-04-02 12:48 ` [PATCH 17/19] usb: ehci-mx6: Add fsl,imx7d-usb compatible string Marek Vasut
2021-04-02 12:48 ` [PATCH 18/19] usb: ehci-mx6: Add iMX8M support Marek Vasut
2021-04-02 12:48 ` [PATCH 19/19] ARM: imx8m: verdin-imx8mm: Enable USB Host support Marek Vasut
2021-04-07  7:07   ` Oleksandr Suvorov
2021-04-08  7:08   ` Marcel Ziswiler
2021-04-10  0:48     ` Marek Vasut
2021-04-06 19:34 ` [PATCH 01/19] phy: nop-phy: Add standard usb-nop-xceiv compat string Harm Berntsen
2021-04-06 19:53   ` Marek Vasut

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210402124812.186761-15-marex@denx.de \
    --to=marex@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.