* [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms.
@ 2018-05-25 13:51 Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS Jean-Jacques Hiblot
` (10 more replies)
0 siblings, 11 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
Moving to DM_USB and DM_USB_DEV brings some benefits:
- it is required to support DM_ETH and USB network adapters with the same
binary.
- support for USB3 on AM57x comes almost for free
- removal of platform code related to USB
Tested on:
- dra76 evm
- AM572 evm
This series applies on top of the master branch of the u-boot USB tree
(git://git.denx.de/u-boot-usb.git master)
Changes in v6:
- ti-pipe3-phy: take PLL out of IDLE in pipe3_init(). The PLL may have
been put into idle by pipe3_exit()
- DRA7 configs: enable DM_USB and DM_USB_DEV. Use DWC3_GENERIC in place of
DWC3_OF_SIMPLE. disable non DM USB options
- AM57 configs: enable DM_USB and DM_USB_DEV. Use DWC3_GENERIC in place of
DWC3_OF_SIMPLE. disable non DM USB options
- Supports DM USB for peripherals
- Removed DTS changes that disabled USB1 on DRA7 because DM_USB_DEV is
now supported
Changes in v5:
- Rebased on latest u-boot
- Removed patches that have already been merged
Changes in v4:
- Fix word missing in commit log
- Remove dependency on MISC
- Renamed the commit (DM_USB is already enabled, the only missing option
is for the USB2 phy driver)
- Remove dependency on MISC
- Remove omap specific glue layer and use dwc3-of-simple glue layer
Changes in v3:
- in syscon_regmap_lookup_by_phandle(), use dev_dbg() instead of printf()
- added unit test for syscon_regmap_lookup_by_phandle()
Changes in v2:
- Add USB3 support to ti-pipe3-phy driver
- omap-usb2-phy: Implement power_on and power_off callbacks
- am57xx boards: when DM_USB is used, turn on the required USB clocks
- split dts changes in 2 commits: one for binding the children of
ocp2scp at 4a080000, and one to disable USB1 on all DRA7 EVMs
- Enable DM_USB in am57xx_evm_defconfig. USB3 (super speed) is supported.
Jean-Jacques Hiblot (9):
syscon: dm: Add a new method to get a regmap from DTS
phy: Add a new driver for OMAP's USB2 PHYs
dwc3-generic: Add support for the TI DWC3 glue
board: ti: dra7xx-evm: turn on USB clocks in late init stage
dts: dra7x: make ocp2scp at 4a080000 compatible with simple-bus
configs: enable DM_USB and DM_USB_DEV for all DRA7 platforms
configs: am57xx_evm: Enable DM_USB and DM_USB_DEV
board: ti: dra7-evm: remove USB platform code
board: ti: am57xx: remove USB platform code
Vignesh R (2):
phy: ti-pip3-phy: Add support for USB3 PHY
board; ti: am57xx: turn on USB clocks
arch/arm/dts/omap5-u-boot.dtsi | 4 +
arch/sandbox/dts/test.dts | 6 +-
board/ti/am57xx/board.c | 106 ++++------------------
board/ti/dra7xx/evm.c | 123 ++++---------------------
configs/am57xx_evm_defconfig | 10 +-
configs/dra7xx_evm_defconfig | 8 +-
configs/dra7xx_hs_evm_defconfig | 8 +-
drivers/core/syscon-uclass.c | 23 +++++
drivers/phy/Kconfig | 8 ++
drivers/phy/Makefile | 1 +
drivers/phy/omap-usb2-phy.c | 196 ++++++++++++++++++++++++++++++++++++++++
drivers/phy/ti-pipe3-phy.c | 32 +++++--
drivers/usb/dwc3/dwc3-generic.c | 86 ++++++++++++++++++
include/syscon.h | 13 +++
test/dm/syscon.c | 29 ++++++
15 files changed, 441 insertions(+), 212 deletions(-)
create mode 100644 drivers/phy/omap-usb2-phy.c
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-27 0:53 ` Simon Glass
2018-05-25 13:51 ` [U-Boot] [PATCH v6 02/11] phy: ti-pip3-phy: Add support for USB3 PHY Jean-Jacques Hiblot
` (9 subsequent siblings)
10 siblings, 1 reply; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
syscon_regmap_lookup_by_phandle() can be used to get the regmap of a syscon
device from a reference in the DTS. It operates similarly to the linux
version of the namesake function.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4:
- Fix word missing in commit log
Changes in v3:
- in syscon_regmap_lookup_by_phandle(), use dev_dbg() instead of printf()
- added unit test for syscon_regmap_lookup_by_phandle()
Changes in v2: None
arch/sandbox/dts/test.dts | 6 ++++--
drivers/core/syscon-uclass.c | 23 +++++++++++++++++++++++
include/syscon.h | 13 +++++++++++++
test/dm/syscon.c | 29 +++++++++++++++++++++++++++++
4 files changed, 69 insertions(+), 2 deletions(-)
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 5a0f187..9812e30 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -327,6 +327,8 @@
test4 {
compatible = "denx,u-boot-probe-test";
+ first-syscon = <&syscon0>;
+ second-sys-ctrl = <&another_system_controller>;
};
};
@@ -396,12 +398,12 @@
};
};
- syscon at 0 {
+ syscon0: syscon at 0 {
compatible = "sandbox,syscon0";
reg = <0x10 4>;
};
- syscon at 1 {
+ another_system_controller: syscon at 1 {
compatible = "sandbox,syscon1";
reg = <0x20 5
0x28 6
diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c
index 303e166..661cf61 100644
--- a/drivers/core/syscon-uclass.c
+++ b/drivers/core/syscon-uclass.c
@@ -53,6 +53,29 @@ static int syscon_pre_probe(struct udevice *dev)
#endif
}
+struct regmap *syscon_regmap_lookup_by_phandle(struct udevice *dev,
+ const char *name)
+{
+ struct udevice *syscon;
+ struct regmap *r;
+ int err;
+
+ err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
+ name, &syscon);
+ if (err) {
+ dev_dbg(dev, "unable to find syscon device\n");
+ return ERR_PTR(err);
+ }
+
+ r = syscon_get_regmap(syscon);
+ if (!r) {
+ dev_dbg(dev, "unable to find regmap\n");
+ return ERR_PTR(-ENODEV);
+ }
+
+ return r;
+}
+
int syscon_get_by_driver_data(ulong driver_data, struct udevice **devp)
{
struct udevice *dev;
diff --git a/include/syscon.h b/include/syscon.h
index 2aa73e5..3df96e3 100644
--- a/include/syscon.h
+++ b/include/syscon.h
@@ -74,6 +74,19 @@ int syscon_get_by_driver_data(ulong driver_data, struct udevice **devp);
struct regmap *syscon_get_regmap_by_driver_data(ulong driver_data);
/**
+ * syscon_regmap_lookup_by_phandle() - Look up a controller by a phandle
+ *
+ * This operates by looking up the given name in the device (device
+ * tree property) of the device using the system controller.
+ *
+ * @dev: Device using the system controller
+ * @name: Name of property referring to the system controller
+ * @return A pointer to the regmap if found, ERR_PTR(-ve) on error
+ */
+struct regmap *syscon_regmap_lookup_by_phandle(struct udevice *dev,
+ const char *name);
+
+/**
* syscon_get_first_range() - get the first memory range from a syscon regmap
*
* @driver_data: Driver data value to look up
diff --git a/test/dm/syscon.c b/test/dm/syscon.c
index 77c7928..b958bbe 100644
--- a/test/dm/syscon.c
+++ b/test/dm/syscon.c
@@ -6,6 +6,7 @@
#include <common.h>
#include <dm.h>
#include <syscon.h>
+#include <regmap.h>
#include <asm/test.h>
#include <dm/test.h>
#include <test/ut.h>
@@ -43,3 +44,31 @@ static int dm_test_syscon_by_driver_data(struct unit_test_state *uts)
return 0;
}
DM_TEST(dm_test_syscon_by_driver_data, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
+/* Test system controller by phandle */
+static int dm_test_syscon_by_phandle(struct unit_test_state *uts)
+{
+ struct udevice *dev;
+ struct regmap *map;
+
+ ut_assertok(uclass_get_device_by_name(UCLASS_TEST_PROBE, "test4",
+ &dev));
+ if (!dev || IS_ERR(dev))
+ return -ENODEV;
+
+ ut_assertok_ptr(syscon_regmap_lookup_by_phandle(dev, "first-syscon"));
+ map = syscon_regmap_lookup_by_phandle(dev, "first-syscon");
+ if (map && !IS_ERR(map))
+ ut_asserteq(1, map->range_count);
+
+ ut_assertok_ptr(syscon_regmap_lookup_by_phandle(dev,
+ "second-sys-ctrl"));
+ map = syscon_regmap_lookup_by_phandle(dev, "second-sys-controller");
+ if (map && !IS_ERR(map))
+ ut_asserteq(4, map->range_count);
+
+ ut_assert(IS_ERR(syscon_regmap_lookup_by_phandle(dev, "not-present")));
+
+ return 0;
+}
+DM_TEST(dm_test_syscon_by_phandle, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 02/11] phy: ti-pip3-phy: Add support for USB3 PHY
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 03/11] phy: Add a new driver for OMAP's USB2 PHYs Jean-Jacques Hiblot
` (8 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
From: Vignesh R <vigneshr@ti.com>
Add support to handle USB3 PHYs present on AM57xx/DRA7xx SoCs. This is
needed to move AM57xx to DM_USB.
Signed-off-by: Vignesh R <vigneshr@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6:
- ti-pipe3-phy: take PLL out of IDLE in pipe3_init(). The PLL may have
been put into idle by pipe3_exit()
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2:
- Add USB3 support to ti-pipe3-phy driver
drivers/phy/ti-pipe3-phy.c | 32 ++++++++++++++++++++++++--------
1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/drivers/phy/ti-pipe3-phy.c b/drivers/phy/ti-pipe3-phy.c
index b22bbaf..e7e78e3 100644
--- a/drivers/phy/ti-pipe3-phy.c
+++ b/drivers/phy/ti-pipe3-phy.c
@@ -141,7 +141,7 @@ static int omap_pipe3_dpll_program(struct omap_pipe3 *pipe3)
omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION1, val);
val = omap_pipe3_readl(pipe3->pll_ctrl_base, PLL_CONFIGURATION2);
- val &= ~PLL_SELFREQDCO_MASK;
+ val &= ~(PLL_SELFREQDCO_MASK | PLL_IDLE);
val |= dpll_params->freq << PLL_SELFREQDCO_SHIFT;
omap_pipe3_writel(pipe3->pll_ctrl_base, PLL_CONFIGURATION2, val);
@@ -265,10 +265,13 @@ static int pipe3_exit(struct phy *phy)
return -EBUSY;
}
- val = readl(pipe3->pll_reset_reg);
- writel(val | SATA_PLL_SOFT_RESET, pipe3->pll_reset_reg);
- mdelay(1);
- writel(val & ~SATA_PLL_SOFT_RESET, pipe3->pll_reset_reg);
+ if (pipe3->pll_reset_reg) {
+ val = readl(pipe3->pll_reset_reg);
+ writel(val | SATA_PLL_SOFT_RESET, pipe3->pll_reset_reg);
+ mdelay(1);
+ writel(val & ~SATA_PLL_SOFT_RESET, pipe3->pll_reset_reg);
+ }
+
return 0;
}
@@ -331,9 +334,11 @@ static int pipe3_phy_probe(struct udevice *dev)
if (!pipe3->power_reg)
return -EINVAL;
- pipe3->pll_reset_reg = get_reg(dev, "syscon-pllreset");
- if (!pipe3->pll_reset_reg)
- return -EINVAL;
+ if (device_is_compatible(dev, "ti,phy-pipe3-sata")) {
+ pipe3->pll_reset_reg = get_reg(dev, "syscon-pllreset");
+ if (!pipe3->pll_reset_reg)
+ return -EINVAL;
+ }
pipe3->dpll_map = (struct pipe3_dpll_map *)dev_get_driver_data(dev);
@@ -350,8 +355,19 @@ static struct pipe3_dpll_map dpll_map_sata[] = {
{ }, /* Terminator */
};
+static struct pipe3_dpll_map dpll_map_usb[] = {
+ {12000000, {1250, 5, 4, 20, 0} }, /* 12 MHz */
+ {16800000, {3125, 20, 4, 20, 0} }, /* 16.8 MHz */
+ {19200000, {1172, 8, 4, 20, 65537} }, /* 19.2 MHz */
+ {20000000, {1000, 7, 4, 10, 0} }, /* 20 MHz */
+ {26000000, {1250, 12, 4, 20, 0} }, /* 26 MHz */
+ {38400000, {3125, 47, 4, 20, 92843} }, /* 38.4 MHz */
+ { }, /* Terminator */
+};
+
static const struct udevice_id pipe3_phy_ids[] = {
{ .compatible = "ti,phy-pipe3-sata", .data = (ulong)&dpll_map_sata },
+ { .compatible = "ti,omap-usb3", .data = (ulong)&dpll_map_usb},
{ }
};
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 03/11] phy: Add a new driver for OMAP's USB2 PHYs
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 02/11] phy: ti-pip3-phy: Add support for USB3 PHY Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 04/11] dwc3-generic: Add support for the TI DWC3 glue Jean-Jacques Hiblot
` (7 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
This drivers supports the USB2 PHY found on omap5 and dra7 SOCs.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2:
- omap-usb2-phy: Implement power_on and power_off callbacks
drivers/phy/Kconfig | 8 ++
drivers/phy/Makefile | 1 +
drivers/phy/omap-usb2-phy.c | 196 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 205 insertions(+)
create mode 100644 drivers/phy/omap-usb2-phy.c
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 8fc2295..bc35850 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -131,4 +131,12 @@ config MESON_GXL_USB_PHY
This is the generic phy driver for the Amlogic Meson GXL
USB2 and USB3 PHYS.
+config OMAP_USB2_PHY
+ bool "Support OMAP's USB2 PHY"
+ depends on PHY
+ depends on SYSCON
+ help
+ Support for the OMAP's USB2 PHY.
+ This PHY is found on OMAP devices supporting USB2.
+
endmenu
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index ba0803c..6ebaf31 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -14,3 +14,4 @@ obj-$(CONFIG_$(SPL_)PIPE3_PHY) += ti-pipe3-phy.o
obj-$(CONFIG_STI_USB_PHY) += sti_usb_phy.o
obj-$(CONFIG_PHY_STM32_USBPHYC) += phy-stm32-usbphyc.o
obj-$(CONFIG_MESON_GXL_USB_PHY) += meson-gxl-usb2.o meson-gxl-usb3.o
+obj-$(CONFIG_OMAP_USB2_PHY) += omap-usb2-phy.o
diff --git a/drivers/phy/omap-usb2-phy.c b/drivers/phy/omap-usb2-phy.c
new file mode 100644
index 0000000..671539b
--- /dev/null
+++ b/drivers/phy/omap-usb2-phy.c
@@ -0,0 +1,196 @@
+/*
+ * OMAP USB2 PHY LAYER
+ * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Written by Jean-Jacques Hiblot <jjhiblot@ti.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <dm.h>
+#include <errno.h>
+#include <generic-phy.h>
+#include <regmap.h>
+#include <syscon.h>
+
+#define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT BIT(0)
+
+#define OMAP_DEV_PHY_PD BIT(0)
+#define OMAP_USB2_PHY_PD BIT(28)
+
+#define USB2PHY_DISCON_BYP_LATCH BIT(31)
+#define USB2PHY_ANA_CONFIG1 (0x4c)
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct omap_usb2_phy {
+ struct regmap *pwr_regmap;
+ ulong flags;
+ void *phy_base;
+ u32 pwr_reg_offset;
+};
+
+struct usb_phy_data {
+ const char *label;
+ u8 flags;
+ u32 mask;
+ u32 power_on;
+ u32 power_off;
+};
+
+static const struct usb_phy_data omap5_usb2_data = {
+ .label = "omap5_usb2",
+ .flags = 0,
+ .mask = OMAP_DEV_PHY_PD,
+ .power_off = OMAP_DEV_PHY_PD,
+};
+
+static const struct usb_phy_data dra7x_usb2_data = {
+ .label = "dra7x_usb2",
+ .flags = OMAP_USB2_CALIBRATE_FALSE_DISCONNECT,
+ .mask = OMAP_DEV_PHY_PD,
+ .power_off = OMAP_DEV_PHY_PD,
+};
+
+static const struct usb_phy_data dra7x_usb2_phy2_data = {
+ .label = "dra7x_usb2_phy2",
+ .flags = OMAP_USB2_CALIBRATE_FALSE_DISCONNECT,
+ .mask = OMAP_USB2_PHY_PD,
+ .power_off = OMAP_USB2_PHY_PD,
+};
+
+static const struct udevice_id omap_usb2_id_table[] = {
+ {
+ .compatible = "ti,omap5-usb2",
+ .data = (ulong)&omap5_usb2_data,
+ },
+ {
+ .compatible = "ti,dra7x-usb2",
+ .data = (ulong)&dra7x_usb2_data,
+ },
+ {
+ .compatible = "ti,dra7x-usb2-phy2",
+ .data = (ulong)&dra7x_usb2_phy2_data,
+ },
+ {},
+};
+
+static int omap_usb_phy_power(struct phy *usb_phy, bool on)
+{
+ struct udevice *dev = usb_phy->dev;
+ const struct usb_phy_data *data;
+ const struct omap_usb2_phy *phy = dev_get_priv(dev);
+ u32 val;
+ int rc;
+
+ data = (const struct usb_phy_data *)dev_get_driver_data(dev);
+ if (!data)
+ return -EINVAL;
+
+ rc = regmap_read(phy->pwr_regmap, phy->pwr_reg_offset, &val);
+ if (rc)
+ return rc;
+ val &= ~data->mask;
+ if (on)
+ val |= data->power_on;
+ else
+ val |= data->power_off;
+ rc = regmap_write(phy->pwr_regmap, phy->pwr_reg_offset, val);
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+static int omap_usb2_phy_init(struct phy *usb_phy)
+{
+ struct udevice *dev = usb_phy->dev;
+ struct omap_usb2_phy *priv = dev_get_priv(dev);
+ u32 val;
+
+ if (priv->flags & OMAP_USB2_CALIBRATE_FALSE_DISCONNECT) {
+ /*
+ *
+ * Reduce the sensitivity of internal PHY by enabling the
+ * DISCON_BYP_LATCH of the USB2PHY_ANA_CONFIG1 register. This
+ * resolves issues with certain devices which can otherwise
+ * be prone to false disconnects.
+ *
+ */
+ val = readl(priv->phy_base + USB2PHY_ANA_CONFIG1);
+ val |= USB2PHY_DISCON_BYP_LATCH;
+ writel(val, priv->phy_base + USB2PHY_ANA_CONFIG1);
+ }
+
+ return 0;
+}
+
+static int omap_usb2_phy_power_on(struct phy *usb_phy)
+{
+ return omap_usb_phy_power(usb_phy, true);
+}
+
+static int omap_usb2_phy_power_off(struct phy *usb_phy)
+{
+ return omap_usb_phy_power(usb_phy, false);
+}
+
+static int omap_usb2_phy_exit(struct phy *usb_phy)
+{
+ return omap_usb_phy_power(usb_phy, false);
+}
+
+struct phy_ops omap_usb2_phy_ops = {
+ .init = omap_usb2_phy_init,
+ .power_on = omap_usb2_phy_power_on,
+ .power_off = omap_usb2_phy_power_off,
+ .exit = omap_usb2_phy_exit,
+};
+
+int omap_usb2_phy_probe(struct udevice *dev)
+{
+ int rc;
+ struct regmap *regmap;
+ struct omap_usb2_phy *priv = dev_get_priv(dev);
+ const struct usb_phy_data *data;
+ u32 tmp[2];
+
+ data = (const struct usb_phy_data *)dev_get_driver_data(dev);
+ if (!data)
+ return -EINVAL;
+
+ if (data->flags & OMAP_USB2_CALIBRATE_FALSE_DISCONNECT) {
+ u32 base = dev_read_addr(dev);
+
+ if (base == FDT_ADDR_T_NONE)
+ return -EINVAL;
+ priv->phy_base = (void *)base;
+ priv->flags |= OMAP_USB2_CALIBRATE_FALSE_DISCONNECT;
+ }
+
+ regmap = syscon_regmap_lookup_by_phandle(dev, "syscon-phy-power");
+ if (IS_ERR(regmap)) {
+ printf("can't get regmap (err %ld)\n", PTR_ERR(regmap));
+ return PTR_ERR(regmap);
+ }
+ priv->pwr_regmap = regmap;
+
+ rc = dev_read_u32_array(dev, "syscon-phy-power", tmp, 2);
+ if (rc) {
+ printf("couldn't get power reg. offset (err %d)\n", rc);
+ return rc;
+ }
+ priv->pwr_reg_offset = tmp[1];
+
+ return 0;
+}
+
+U_BOOT_DRIVER(omap_usb2_phy) = {
+ .name = "omap_usb2_phy",
+ .id = UCLASS_PHY,
+ .of_match = omap_usb2_id_table,
+ .probe = omap_usb2_phy_probe,
+ .ops = &omap_usb2_phy_ops,
+ .priv_auto_alloc_size = sizeof(struct omap_usb2_phy),
+};
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 04/11] dwc3-generic: Add support for the TI DWC3 glue
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (2 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 03/11] phy: Add a new driver for OMAP's USB2 PHYs Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 05/11] board: ti: dra7xx-evm: turn on USB clocks in late init stage Jean-Jacques Hiblot
` (6 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None
drivers/usb/dwc3/dwc3-generic.c | 86 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 86 insertions(+)
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 9227501..b487f72 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -28,6 +28,7 @@ struct dwc3_generic_peripheral {
struct dwc3 dwc3;
struct phy *phys;
int num_phys;
+ fdt_addr_t base;
};
int dm_usb_gadget_handle_interrupts(struct udevice *dev)
@@ -119,6 +120,90 @@ struct dwc3_glue_ops {
enum usb_dr_mode mode);
};
+void dwc3_ti_select_dr_mode(struct udevice *dev, int index,
+ enum usb_dr_mode mode)
+{
+#define USBOTGSS_UTMI_OTG_STATUS 0x0084
+#define USBOTGSS_UTMI_OTG_OFFSET 0x0480
+
+/* UTMI_OTG_STATUS REGISTER */
+#define USBOTGSS_UTMI_OTG_STATUS_SW_MODE BIT(31)
+#define USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT BIT(9)
+#define USBOTGSS_UTMI_OTG_STATUS_TXBITSTUFFENABLE BIT(8)
+#define USBOTGSS_UTMI_OTG_STATUS_IDDIG BIT(4)
+#define USBOTGSS_UTMI_OTG_STATUS_SESSEND BIT(3)
+#define USBOTGSS_UTMI_OTG_STATUS_SESSVALID BIT(2)
+#define USBOTGSS_UTMI_OTG_STATUS_VBUSVALID BIT(1)
+enum dwc3_omap_utmi_mode {
+ DWC3_OMAP_UTMI_MODE_UNKNOWN = 0,
+ DWC3_OMAP_UTMI_MODE_HW,
+ DWC3_OMAP_UTMI_MODE_SW,
+};
+
+ u32 use_id_pin;
+ u32 host_mode;
+ u32 reg;
+ u32 utmi_mode;
+ u32 utmi_status_offset = USBOTGSS_UTMI_OTG_STATUS;
+
+ struct dwc3_glue_data *glue = dev_get_platdata(dev);
+ void *base = map_physmem(glue->regs, 0x10000, MAP_NOCACHE);
+
+ if (device_is_compatible(dev, "ti,am437x-dwc3"))
+ utmi_status_offset += USBOTGSS_UTMI_OTG_OFFSET;
+
+ utmi_mode = dev_read_u32_default(dev, "utmi-mode",
+ DWC3_OMAP_UTMI_MODE_UNKNOWN);
+ if (utmi_mode != DWC3_OMAP_UTMI_MODE_HW) {
+ debug("%s: OTG is not supported. defaulting to PERIPHERAL\n",
+ dev->name);
+ mode = USB_DR_MODE_PERIPHERAL;
+ }
+
+ switch (mode) {
+ case USB_DR_MODE_PERIPHERAL:
+ use_id_pin = 0;
+ host_mode = 0;
+ break;
+ case USB_DR_MODE_HOST:
+ use_id_pin = 0;
+ host_mode = 1;
+ break;
+ case USB_DR_MODE_OTG:
+ default:
+ use_id_pin = 1;
+ host_mode = 0;
+ break;
+ }
+
+ reg = readl(base + utmi_status_offset);
+
+ reg &= ~(USBOTGSS_UTMI_OTG_STATUS_SW_MODE);
+ if (!use_id_pin)
+ reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
+
+ writel(reg, base + utmi_status_offset);
+
+ reg &= ~(USBOTGSS_UTMI_OTG_STATUS_SESSEND |
+ USBOTGSS_UTMI_OTG_STATUS_VBUSVALID |
+ USBOTGSS_UTMI_OTG_STATUS_IDDIG);
+
+ reg |= USBOTGSS_UTMI_OTG_STATUS_SESSVALID |
+ USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT;
+
+ if (!host_mode)
+ reg |= USBOTGSS_UTMI_OTG_STATUS_IDDIG |
+ USBOTGSS_UTMI_OTG_STATUS_VBUSVALID;
+
+ writel(reg, base + utmi_status_offset);
+
+ unmap_physmem(base, MAP_NOCACHE);
+}
+
+struct dwc3_glue_ops ti_ops = {
+ .select_dr_mode = dwc3_ti_select_dr_mode,
+};
+
static int dwc3_glue_bind(struct udevice *parent)
{
const void *fdt = gd->fdt_blob;
@@ -258,6 +343,7 @@ static int dwc3_glue_remove(struct udevice *dev)
static const struct udevice_id dwc3_glue_ids[] = {
{ .compatible = "xlnx,zynqmp-dwc3" },
+ { .compatible = "ti,dwc3", .data = (ulong)&ti_ops },
{ }
};
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 05/11] board: ti: dra7xx-evm: turn on USB clocks in late init stage
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (3 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 04/11] dwc3-generic: Add support for the TI DWC3 glue Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 06/11] board; ti: am57xx: turn on USB clocks Jean-Jacques Hiblot
` (5 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
For USB ports that use the Driver Model, turn on the clocks during the
late init stage.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None
board/ti/dra7xx/evm.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/board/ti/dra7xx/evm.c b/board/ti/dra7xx/evm.c
index 6918f4d..21ceb01 100644
--- a/board/ti/dra7xx/evm.c
+++ b/board/ti/dra7xx/evm.c
@@ -646,6 +646,19 @@ int dram_init_banksize(void)
return 0;
}
+#if CONFIG_IS_ENABLED(DM_USB) && CONFIG_IS_ENABLED(OF_CONTROL)
+static int device_okay(const char *path)
+{
+ int node;
+
+ node = fdt_path_offset(gd->fdt_blob, path);
+ if (node < 0)
+ return 0;
+
+ return fdtdec_get_is_enabled(gd->fdt_blob, node);
+}
+#endif
+
int board_late_init(void)
{
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
@@ -685,6 +698,12 @@ int board_late_init(void)
if (board_is_dra71x_evm())
palmas_i2c_write_u8(LP873X_I2C_SLAVE_ADDR, 0x9, 0x7);
#endif
+#if CONFIG_IS_ENABLED(DM_USB) && CONFIG_IS_ENABLED(OF_CONTROL)
+ if (device_okay("/ocp/omap_dwc3_1 at 48880000"))
+ enable_usb_clocks(0);
+ if (device_okay("/ocp/omap_dwc3_2 at 488c0000"))
+ enable_usb_clocks(1);
+#endif
return 0;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 06/11] board; ti: am57xx: turn on USB clocks
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (4 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 05/11] board: ti: dra7xx-evm: turn on USB clocks in late init stage Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 07/11] dts: dra7x: make ocp2scp@4a080000 compatible with simple-bus Jean-Jacques Hiblot
` (4 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
From: Vignesh R <vigneshr@ti.com>
Enable USB clocks in late init stage to support ports under DM_USB.
Signed-off-by: Vignesh R <vigneshr@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2:
- am57xx boards: when DM_USB is used, turn on the required USB clocks
board/ti/am57xx/board.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c
index fd9d207..828a36c 100644
--- a/board/ti/am57xx/board.c
+++ b/board/ti/am57xx/board.c
@@ -675,6 +675,19 @@ out:
return;
}
+#if CONFIG_IS_ENABLED(DM_USB) && CONFIG_IS_ENABLED(OF_CONTROL)
+static int device_okay(const char *path)
+{
+ int node;
+
+ node = fdt_path_offset(gd->fdt_blob, path);
+ if (node < 0)
+ return 0;
+
+ return fdtdec_get_is_enabled(gd->fdt_blob, node);
+}
+#endif
+
int board_late_init(void)
{
setup_board_eeprom_env();
@@ -714,6 +727,12 @@ int board_late_init(void)
board_ti_set_ethaddr(2);
#endif
+#if CONFIG_IS_ENABLED(DM_USB) && CONFIG_IS_ENABLED(OF_CONTROL)
+ if (device_okay("/ocp/omap_dwc3_1 at 48880000"))
+ enable_usb_clocks(0);
+ if (device_okay("/ocp/omap_dwc3_2 at 488c0000"))
+ enable_usb_clocks(1);
+#endif
return 0;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 07/11] dts: dra7x: make ocp2scp@4a080000 compatible with simple-bus
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (5 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 06/11] board; ti: am57xx: turn on USB clocks Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 08/11] configs: enable DM_USB and DM_USB_DEV for all DRA7 platforms Jean-Jacques Hiblot
` (3 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
This is required when DM_USB is used, to bind the USB phys.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2:
- split dts changes in 2 commits: one for binding the children of
ocp2scp at 4a080000, and one to disable USB1 on all DRA7 EVMs
arch/arm/dts/omap5-u-boot.dtsi | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/arm/dts/omap5-u-boot.dtsi b/arch/arm/dts/omap5-u-boot.dtsi
index bf2684c..a6a7801 100644
--- a/arch/arm/dts/omap5-u-boot.dtsi
+++ b/arch/arm/dts/omap5-u-boot.dtsi
@@ -15,6 +15,10 @@
ocp {
u-boot,dm-spl;
+ ocp2scp at 4a080000 {
+ compatible = "ti,omap-ocp2scp", "simple-bus";
+ };
+
ocp2scp at 4a090000 {
compatible = "ti,omap-ocp2scp", "simple-bus";
};
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 08/11] configs: enable DM_USB and DM_USB_DEV for all DRA7 platforms
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (6 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 07/11] dts: dra7x: make ocp2scp@4a080000 compatible with simple-bus Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 09/11] configs: am57xx_evm: Enable DM_USB and DM_USB_DEV Jean-Jacques Hiblot
` (2 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6:
- DRA7 configs: enable DM_USB and DM_USB_DEV. Use DWC3_GENERIC in place of
DWC3_OF_SIMPLE. disable non DM USB options
Changes in v5: None
Changes in v4:
- Remove dependency on MISC
- Renamed the commit (DM_USB is already enabled, the only missing option
is for the USB2 phy driver)
Changes in v3: None
Changes in v2: None
configs/dra7xx_evm_defconfig | 8 ++++----
configs/dra7xx_hs_evm_defconfig | 8 ++++----
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig
index 9b81b0c..c27b470 100644
--- a/configs/dra7xx_evm_defconfig
+++ b/configs/dra7xx_evm_defconfig
@@ -53,6 +53,7 @@ CONFIG_DFU_SF=y
CONFIG_DM_GPIO=y
CONFIG_PCF8575_GPIO=y
CONFIG_DM_I2C=y
+CONFIG_MISC=y
CONFIG_DM_MMC=y
CONFIG_MMC_IO_VOLTAGE=y
CONFIG_MMC_UHS_SUPPORT=y
@@ -68,6 +69,7 @@ CONFIG_DRIVER_TI_CPSW=y
CONFIG_PHY_GIGE=y
CONFIG_SPL_PHY=y
CONFIG_PIPE3_PHY=y
+CONFIG_OMAP_USB2_PHY=y
CONFIG_PMIC_PALMAS=y
CONFIG_PMIC_LP873X=y
CONFIG_DM_REGULATOR_FIXED=y
@@ -84,14 +86,12 @@ CONFIG_TIMER=y
CONFIG_OMAP_TIMER=y
CONFIG_USB=y
CONFIG_DM_USB=y
+CONFIG_DM_USB_DEV=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DWC3=y
-CONFIG_USB_XHCI_DRA7XX_INDEX=1
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_GADGET=y
-CONFIG_USB_DWC3_OMAP=y
-CONFIG_USB_DWC3_PHY_OMAP=y
-CONFIG_OMAP_USB_PHY=y
+CONFIG_USB_DWC3_GENERIC=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments"
diff --git a/configs/dra7xx_hs_evm_defconfig b/configs/dra7xx_hs_evm_defconfig
index 536946e..1eca973 100644
--- a/configs/dra7xx_hs_evm_defconfig
+++ b/configs/dra7xx_hs_evm_defconfig
@@ -53,6 +53,7 @@ CONFIG_DFU_SF=y
CONFIG_DM_GPIO=y
CONFIG_PCF8575_GPIO=y
CONFIG_DM_I2C=y
+CONFIG_MISC=y
CONFIG_DM_MMC=y
CONFIG_MMC_IO_VOLTAGE=y
CONFIG_MMC_UHS_SUPPORT=y
@@ -67,6 +68,7 @@ CONFIG_DRIVER_TI_CPSW=y
CONFIG_PHY_GIGE=y
CONFIG_SPL_PHY=y
CONFIG_PIPE3_PHY=y
+CONFIG_OMAP_USB2_PHY=y
CONFIG_PMIC_PALMAS=y
CONFIG_PMIC_LP873X=y
CONFIG_DM_REGULATOR_FIXED=y
@@ -83,14 +85,12 @@ CONFIG_TIMER=y
CONFIG_OMAP_TIMER=y
CONFIG_USB=y
CONFIG_DM_USB=y
+CONFIG_DM_USB_DEV=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DWC3=y
-CONFIG_USB_XHCI_DRA7XX_INDEX=1
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_GADGET=y
-CONFIG_USB_DWC3_OMAP=y
-CONFIG_USB_DWC3_PHY_OMAP=y
-CONFIG_OMAP_USB_PHY=y
+CONFIG_USB_DWC3_GENERIC=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments"
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 09/11] configs: am57xx_evm: Enable DM_USB and DM_USB_DEV
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (7 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 08/11] configs: enable DM_USB and DM_USB_DEV for all DRA7 platforms Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 10/11] board: ti: dra7-evm: remove USB platform code Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 11/11] board: ti: am57xx: " Jean-Jacques Hiblot
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
Enable DM_USB and DM_USB_DEV for AM57xx based boards.
Signed-off-by: Vignesh R <vigneshr@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6:
- AM57 configs: enable DM_USB and DM_USB_DEV. Use DWC3_GENERIC in place of
DWC3_OF_SIMPLE. disable non DM USB options
Changes in v5:
- Rebased on latest u-boot
- Removed patches that have already been merged
Changes in v4:
- Remove dependency on MISC
- Remove omap specific glue layer and use dwc3-of-simple glue layer
Changes in v3: None
Changes in v2:
- Enable DM_USB in am57xx_evm_defconfig. USB3 (super speed) is supported.
configs/am57xx_evm_defconfig | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig
index 0e99268..7f629c0 100644
--- a/configs/am57xx_evm_defconfig
+++ b/configs/am57xx_evm_defconfig
@@ -47,6 +47,7 @@ CONFIG_DFU_MMC=y
CONFIG_DFU_RAM=y
CONFIG_DM_GPIO=y
CONFIG_DM_I2C=y
+CONFIG_MISC=y
CONFIG_DM_MMC=y
CONFIG_MMC_OMAP_HS=y
CONFIG_DM_SPI_FLASH=y
@@ -57,6 +58,9 @@ CONFIG_PHY_MICREL=y
CONFIG_PHY_MICREL_KSZ90X1=y
CONFIG_DM_ETH=y
CONFIG_DRIVER_TI_CPSW=y
+CONFIG_PHY=y
+CONFIG_PIPE3_PHY=y
+CONFIG_OMAP_USB2_PHY=y
CONFIG_DM_PMIC=y
CONFIG_PMIC_PALMAS=y
CONFIG_DM_REGULATOR=y
@@ -67,13 +71,13 @@ CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_TI_QSPI=y
CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_DM_USB_DEV=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DWC3=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_GADGET=y
-CONFIG_USB_DWC3_OMAP=y
-CONFIG_USB_DWC3_PHY_OMAP=y
-CONFIG_OMAP_USB_PHY=y
+CONFIG_USB_DWC3_GENERIC=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments"
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 10/11] board: ti: dra7-evm: remove USB platform code
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (8 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 09/11] configs: am57xx_evm: Enable DM_USB and DM_USB_DEV Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 11/11] board: ti: am57xx: " Jean-Jacques Hiblot
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None
board/ti/dra7xx/evm.c | 104 --------------------------------------------------
1 file changed, 104 deletions(-)
diff --git a/board/ti/dra7xx/evm.c b/board/ti/dra7xx/evm.c
index 21ceb01..10fe494 100644
--- a/board/ti/dra7xx/evm.c
+++ b/board/ti/dra7xx/evm.c
@@ -915,110 +915,6 @@ const struct mmc_platform_fixups *platform_fixups_mmc(uint32_t addr)
}
#endif
-#ifdef CONFIG_USB_DWC3
-static struct dwc3_device usb_otg_ss1 = {
- .maximum_speed = USB_SPEED_SUPER,
- .base = DRA7_USB_OTG_SS1_BASE,
- .tx_fifo_resize = false,
- .index = 0,
-};
-
-static struct dwc3_omap_device usb_otg_ss1_glue = {
- .base = (void *)DRA7_USB_OTG_SS1_GLUE_BASE,
- .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
- .index = 0,
-};
-
-static struct ti_usb_phy_device usb_phy1_device = {
- .pll_ctrl_base = (void *)DRA7_USB3_PHY1_PLL_CTRL,
- .usb2_phy_power = (void *)DRA7_USB2_PHY1_POWER,
- .usb3_phy_power = (void *)DRA7_USB3_PHY1_POWER,
- .index = 0,
-};
-
-static struct dwc3_device usb_otg_ss2 = {
- .maximum_speed = USB_SPEED_SUPER,
- .base = DRA7_USB_OTG_SS2_BASE,
- .tx_fifo_resize = false,
- .index = 1,
-};
-
-static struct dwc3_omap_device usb_otg_ss2_glue = {
- .base = (void *)DRA7_USB_OTG_SS2_GLUE_BASE,
- .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
- .index = 1,
-};
-
-static struct ti_usb_phy_device usb_phy2_device = {
- .usb2_phy_power = (void *)DRA7_USB2_PHY2_POWER,
- .index = 1,
-};
-
-int board_usb_init(int index, enum usb_init_type init)
-{
- enable_usb_clocks(index);
- switch (index) {
- case 0:
- if (init == USB_INIT_DEVICE) {
- usb_otg_ss1.dr_mode = USB_DR_MODE_PERIPHERAL;
- usb_otg_ss1_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
- } else {
- usb_otg_ss1.dr_mode = USB_DR_MODE_HOST;
- usb_otg_ss1_glue.vbus_id_status = OMAP_DWC3_ID_GROUND;
- }
-
- ti_usb_phy_uboot_init(&usb_phy1_device);
- dwc3_omap_uboot_init(&usb_otg_ss1_glue);
- dwc3_uboot_init(&usb_otg_ss1);
- break;
- case 1:
- if (init == USB_INIT_DEVICE) {
- usb_otg_ss2.dr_mode = USB_DR_MODE_PERIPHERAL;
- usb_otg_ss2_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
- } else {
- usb_otg_ss2.dr_mode = USB_DR_MODE_HOST;
- usb_otg_ss2_glue.vbus_id_status = OMAP_DWC3_ID_GROUND;
- }
-
- ti_usb_phy_uboot_init(&usb_phy2_device);
- dwc3_omap_uboot_init(&usb_otg_ss2_glue);
- dwc3_uboot_init(&usb_otg_ss2);
- break;
- default:
- printf("Invalid Controller Index\n");
- }
-
- return 0;
-}
-
-int board_usb_cleanup(int index, enum usb_init_type init)
-{
- switch (index) {
- case 0:
- case 1:
- ti_usb_phy_uboot_exit(index);
- dwc3_uboot_exit(index);
- dwc3_omap_uboot_exit(index);
- break;
- default:
- printf("Invalid Controller Index\n");
- }
- disable_usb_clocks(index);
- return 0;
-}
-
-int usb_gadget_handle_interrupts(int index)
-{
- u32 status;
-
- status = dwc3_omap_uboot_interrupt_status(index);
- if (status)
- dwc3_uboot_handle_interrupt(index);
-
- return 0;
-}
-#endif
-
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_OS_BOOT)
int spl_start_uboot(void)
{
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 11/11] board: ti: am57xx: remove USB platform code
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
` (9 preceding siblings ...)
2018-05-25 13:51 ` [U-Boot] [PATCH v6 10/11] board: ti: dra7-evm: remove USB platform code Jean-Jacques Hiblot
@ 2018-05-25 13:51 ` Jean-Jacques Hiblot
10 siblings, 0 replies; 13+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25 13:51 UTC (permalink / raw)
To: u-boot
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
Changes in v6:
- Supports DM USB for peripherals
- Removed DTS changes that disabled USB1 on DRA7 because DM_USB_DEV is
now supported
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None
board/ti/am57xx/board.c | 87 -------------------------------------------------
1 file changed, 87 deletions(-)
diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c
index 828a36c..00b8a79 100644
--- a/board/ti/am57xx/board.c
+++ b/board/ti/am57xx/board.c
@@ -883,93 +883,6 @@ int spl_start_uboot(void)
}
#endif
-#ifdef CONFIG_USB_DWC3
-static struct dwc3_device usb_otg_ss2 = {
- .maximum_speed = USB_SPEED_HIGH,
- .base = DRA7_USB_OTG_SS2_BASE,
- .tx_fifo_resize = false,
- .index = 1,
-};
-
-static struct dwc3_omap_device usb_otg_ss2_glue = {
- .base = (void *)DRA7_USB_OTG_SS2_GLUE_BASE,
- .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
- .index = 1,
-};
-
-static struct ti_usb_phy_device usb_phy2_device = {
- .usb2_phy_power = (void *)DRA7_USB2_PHY2_POWER,
- .index = 1,
-};
-
-int usb_gadget_handle_interrupts(int index)
-{
- u32 status;
-
- status = dwc3_omap_uboot_interrupt_status(index);
- if (status)
- dwc3_uboot_handle_interrupt(index);
-
- return 0;
-}
-#endif /* CONFIG_USB_DWC3 */
-
-#if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP)
-int board_usb_init(int index, enum usb_init_type init)
-{
- enable_usb_clocks(index);
- switch (index) {
- case 0:
- if (init == USB_INIT_DEVICE) {
- printf("port %d can't be used as device\n", index);
- disable_usb_clocks(index);
- return -EINVAL;
- }
- break;
- case 1:
- if (init == USB_INIT_DEVICE) {
-#ifdef CONFIG_USB_DWC3
- usb_otg_ss2.dr_mode = USB_DR_MODE_PERIPHERAL;
- usb_otg_ss2_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
- ti_usb_phy_uboot_init(&usb_phy2_device);
- dwc3_omap_uboot_init(&usb_otg_ss2_glue);
- dwc3_uboot_init(&usb_otg_ss2);
-#endif
- } else {
- printf("port %d can't be used as host\n", index);
- disable_usb_clocks(index);
- return -EINVAL;
- }
-
- break;
- default:
- printf("Invalid Controller Index\n");
- }
-
- return 0;
-}
-
-int board_usb_cleanup(int index, enum usb_init_type init)
-{
-#ifdef CONFIG_USB_DWC3
- switch (index) {
- case 0:
- case 1:
- if (init == USB_INIT_DEVICE) {
- ti_usb_phy_uboot_exit(index);
- dwc3_uboot_exit(index);
- dwc3_omap_uboot_exit(index);
- }
- break;
- default:
- printf("Invalid Controller Index\n");
- }
-#endif
- disable_usb_clocks(index);
- return 0;
-}
-#endif /* defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP) */
-
#ifdef CONFIG_DRIVER_TI_CPSW
/* Delay value to add to calibrated value */
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS
2018-05-25 13:51 ` [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS Jean-Jacques Hiblot
@ 2018-05-27 0:53 ` Simon Glass
0 siblings, 0 replies; 13+ messages in thread
From: Simon Glass @ 2018-05-27 0:53 UTC (permalink / raw)
To: u-boot
On 25 May 2018 at 07:51, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> syscon_regmap_lookup_by_phandle() can be used to get the regmap of a syscon
> device from a reference in the DTS. It operates similarly to the linux
> version of the namesake function.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>
> ---
>
> Changes in v6: None
> Changes in v5: None
> Changes in v4:
> - Fix word missing in commit log
>
> Changes in v3:
> - in syscon_regmap_lookup_by_phandle(), use dev_dbg() instead of printf()
> - added unit test for syscon_regmap_lookup_by_phandle()
>
> Changes in v2: None
>
> arch/sandbox/dts/test.dts | 6 ++++--
> drivers/core/syscon-uclass.c | 23 +++++++++++++++++++++++
> include/syscon.h | 13 +++++++++++++
> test/dm/syscon.c | 29 +++++++++++++++++++++++++++++
> 4 files changed, 69 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
Sorry noticed a nit and a few questions below.
>
> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> index 5a0f187..9812e30 100644
> --- a/arch/sandbox/dts/test.dts
> +++ b/arch/sandbox/dts/test.dts
> @@ -327,6 +327,8 @@
>
> test4 {
> compatible = "denx,u-boot-probe-test";
> + first-syscon = <&syscon0>;
> + second-sys-ctrl = <&another_system_controller>;
> };
> };
>
> @@ -396,12 +398,12 @@
> };
> };
>
> - syscon at 0 {
> + syscon0: syscon at 0 {
> compatible = "sandbox,syscon0";
> reg = <0x10 4>;
> };
>
> - syscon at 1 {
> + another_system_controller: syscon at 1 {
> compatible = "sandbox,syscon1";
> reg = <0x20 5
> 0x28 6
> diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c
> index 303e166..661cf61 100644
> --- a/drivers/core/syscon-uclass.c
> +++ b/drivers/core/syscon-uclass.c
> @@ -53,6 +53,29 @@ static int syscon_pre_probe(struct udevice *dev)
> #endif
> }
>
> +struct regmap *syscon_regmap_lookup_by_phandle(struct udevice *dev,
> + const char *name)
> +{
> + struct udevice *syscon;
> + struct regmap *r;
> + int err;
> +
> + err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
> + name, &syscon);
> + if (err) {
> + dev_dbg(dev, "unable to find syscon device\n");
> + return ERR_PTR(err);
> + }
> +
> + r = syscon_get_regmap(syscon);
> + if (!r) {
> + dev_dbg(dev, "unable to find regmap\n");
> + return ERR_PTR(-ENODEV);
> + }
> +
> + return r;
> +}
> +
> int syscon_get_by_driver_data(ulong driver_data, struct udevice **devp)
> {
> struct udevice *dev;
> diff --git a/include/syscon.h b/include/syscon.h
> index 2aa73e5..3df96e3 100644
> --- a/include/syscon.h
> +++ b/include/syscon.h
> @@ -74,6 +74,19 @@ int syscon_get_by_driver_data(ulong driver_data, struct udevice **devp);
> struct regmap *syscon_get_regmap_by_driver_data(ulong driver_data);
>
> /**
> + * syscon_regmap_lookup_by_phandle() - Look up a controller by a phandle
> + *
> + * This operates by looking up the given name in the device (device
> + * tree property) of the device using the system controller.
> + *
> + * @dev: Device using the system controller
> + * @name: Name of property referring to the system controller
> + * @return A pointer to the regmap if found, ERR_PTR(-ve) on error
> + */
> +struct regmap *syscon_regmap_lookup_by_phandle(struct udevice *dev,
> + const char *name);
> +
> +/**
> * syscon_get_first_range() - get the first memory range from a syscon regmap
> *
> * @driver_data: Driver data value to look up
> diff --git a/test/dm/syscon.c b/test/dm/syscon.c
> index 77c7928..b958bbe 100644
> --- a/test/dm/syscon.c
> +++ b/test/dm/syscon.c
> @@ -6,6 +6,7 @@
> #include <common.h>
> #include <dm.h>
> #include <syscon.h>
> +#include <regmap.h>
> #include <asm/test.h>
> #include <dm/test.h>
> #include <test/ut.h>
> @@ -43,3 +44,31 @@ static int dm_test_syscon_by_driver_data(struct unit_test_state *uts)
> return 0;
> }
> DM_TEST(dm_test_syscon_by_driver_data, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
> +
> +/* Test system controller by phandle */
> +static int dm_test_syscon_by_phandle(struct unit_test_state *uts)
> +{
> + struct udevice *dev;
> + struct regmap *map;
> +
> + ut_assertok(uclass_get_device_by_name(UCLASS_TEST_PROBE, "test4",
> + &dev));
> + if (!dev || IS_ERR(dev))
> + return -ENODEV;
If the above function returns 0, then dev is valid. Also an error is
never returned in 'dev'. So you should drop these two lines.
> +
> + ut_assertok_ptr(syscon_regmap_lookup_by_phandle(dev, "first-syscon"));
> + map = syscon_regmap_lookup_by_phandle(dev, "first-syscon");
> + if (map && !IS_ERR(map))
Don't you want to ut_assert() that? And below?
> + ut_asserteq(1, map->range_count);
> +
> + ut_assertok_ptr(syscon_regmap_lookup_by_phandle(dev,
> + "second-sys-ctrl"));
> + map = syscon_regmap_lookup_by_phandle(dev, "second-sys-controller");
> + if (map && !IS_ERR(map))
> + ut_asserteq(4, map->range_count);
> +
> + ut_assert(IS_ERR(syscon_regmap_lookup_by_phandle(dev, "not-present")));
> +
> + return 0;
> +}
> +DM_TEST(dm_test_syscon_by_phandle, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
> --
> 2.7.4
>
Regards,
Simon
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-05-27 0:53 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-25 13:51 [U-Boot] [PATCH v6 00/11] Add support for DM_USB and DM_USB_DEV for TI's DRA7 EVMs and AM57 EVMs platforms Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 01/11] syscon: dm: Add a new method to get a regmap from DTS Jean-Jacques Hiblot
2018-05-27 0:53 ` Simon Glass
2018-05-25 13:51 ` [U-Boot] [PATCH v6 02/11] phy: ti-pip3-phy: Add support for USB3 PHY Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 03/11] phy: Add a new driver for OMAP's USB2 PHYs Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 04/11] dwc3-generic: Add support for the TI DWC3 glue Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 05/11] board: ti: dra7xx-evm: turn on USB clocks in late init stage Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 06/11] board; ti: am57xx: turn on USB clocks Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 07/11] dts: dra7x: make ocp2scp@4a080000 compatible with simple-bus Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 08/11] configs: enable DM_USB and DM_USB_DEV for all DRA7 platforms Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 09/11] configs: am57xx_evm: Enable DM_USB and DM_USB_DEV Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 10/11] board: ti: dra7-evm: remove USB platform code Jean-Jacques Hiblot
2018-05-25 13:51 ` [U-Boot] [PATCH v6 11/11] board: ti: am57xx: " Jean-Jacques Hiblot
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.