* [PATCH RFC 0/4] MVEBU SoC full USB support
@ 2014-06-25 14:08 Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 1/4] usb: add Marvell MVEBU " Sebastian Hesselbarth
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-25 14:08 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
This *RFC* adds a driver stub for ChipIdea USB dual role controllers
found on Marvell MVEBU SoCs. Although, I consider this driver quite
finished, the corresponding DT binding is not. Also, we currently
have no corresponding driver in Linux for both MVEBU CI stub and
USB PHY.
The reason I send it here and now, is to get some input from the
(Linux) MVEBU guys on the binding and functional tests on Armada XP.
While we happily lived some years with ehci-orion ignoring usb-phys
and no usb device support at all on Linux, the situation for barebox
is different, of course. For a boot loader, we desperately need
usb-phy setup (and fixup) and proper DT bindings.
I decided to just add the new binding style to the three board dts
overlays we have for barebox. If we are all happy with it, I'd start
implementing the required Linux driver for usb-phy and CI stub with
mbus setup. As usual, binding docs are missing but I think it is
straight forward from what we know of other SoCs/PHYs already.
I also pushed a branch on barebox/next + a fixup for pinctrl and
the USB patches to
https://github.com/shesselba/barebox-dove.git mvebu/usb
USB host has been tested on all three board obviously, I plan to
test USB device on Dove D3Plug which has an USB device jack, but
similar patches for Marvell Berlin (also CI) worked fine.
Comments?
Sebastian Hesselbarth (4):
usb: add Marvell MVEBU USB support
ARM: dts: add new USB nodes to Kirkwood Guruplug
ARM: dts: add new USB nodes to Dove CuBox
ARM: dts: add new USB nodes to Armada 370 Mirabox
arch/arm/dts/armada-370-mirabox-bb.dts | 35 +++
arch/arm/dts/dove-cubox-bb.dts | 42 +++
arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts | 20 ++
drivers/usb/Kconfig | 1 +
drivers/usb/Makefile | 1 +
drivers/usb/gadget/Kconfig | 4 +-
drivers/usb/mvebu/Kconfig | 35 +++
drivers/usb/mvebu/Makefile | 2 +
drivers/usb/mvebu/core.c | 155 +++++++++++
drivers/usb/mvebu/phy.c | 301 ++++++++++++++++++++++
10 files changed, 594 insertions(+), 2 deletions(-)
create mode 100644 drivers/usb/mvebu/Kconfig
create mode 100644 drivers/usb/mvebu/Makefile
create mode 100644 drivers/usb/mvebu/core.c
create mode 100644 drivers/usb/mvebu/phy.c
---
Cc: barebox@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
--
2.0.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH RFC 1/4] usb: add Marvell MVEBU USB support
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
@ 2014-06-25 14:08 ` Sebastian Hesselbarth
2014-06-30 6:30 ` Sascha Hauer
2014-06-25 14:08 ` [PATCH RFC 2/4] ARM: dts: add new USB nodes to Kirkwood Guruplug Sebastian Hesselbarth
` (4 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-25 14:08 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
This adds support for Marvell specific implementation of ChipIdea
dual role USB controllers found on Marvell MVEBU SoCs (Armada 370,
XP, Dove, Kirkwood).
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
---
Cc: barebox@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/usb/Kconfig | 1 +
drivers/usb/Makefile | 1 +
drivers/usb/gadget/Kconfig | 4 +-
drivers/usb/mvebu/Kconfig | 35 ++++++
drivers/usb/mvebu/Makefile | 2 +
drivers/usb/mvebu/core.c | 155 +++++++++++++++++++++++
drivers/usb/mvebu/phy.c | 301 +++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 497 insertions(+), 2 deletions(-)
create mode 100644 drivers/usb/mvebu/Kconfig
create mode 100644 drivers/usb/mvebu/Makefile
create mode 100644 drivers/usb/mvebu/core.c
create mode 100644 drivers/usb/mvebu/phy.c
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
index 0b349bf619d3..a9275308eb80 100644
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -4,6 +4,7 @@ menuconfig USB
if USB
source drivers/usb/imx/Kconfig
+source drivers/usb/mvebu/Kconfig
source drivers/usb/host/Kconfig
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
index 3cefab7131a6..8e61f96eaa96 100644
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -1,5 +1,6 @@
obj-$(CONFIG_USB) += core/
obj-$(CONFIG_USB_IMX_CHIPIDEA) += imx/
+obj-$(CONFIG_USB_MVEBU) += mvebu/
obj-$(CONFIG_USB_GADGET) += gadget/
obj-$(CONFIG_USB_STORAGE) += storage/
obj-y += host/
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 97a7d215bc5b..a5151edb23d3 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -1,6 +1,6 @@
config USB_HAVE_GADGET_DRIVER
bool
- default y if ARCH_IMX || ARCH_MXS || ARCH_AT91 || ARCH_PXA
+ default y if ARCH_IMX || ARCH_MVEBU || ARCH_MXS || ARCH_AT91 || ARCH_PXA
menuconfig USB_GADGET
depends on USB_HAVE_GADGET_DRIVER
@@ -17,7 +17,7 @@ choice
config USB_GADGET_DRIVER_ARC
bool
prompt "Arc OTG device core"
- depends on ARCH_IMX || ARCH_MXS
+ depends on ARCH_IMX || ARCH_MVEBU || ARCH_MXS
select USB_GADGET_DUALSPEED
select POLLER
diff --git a/drivers/usb/mvebu/Kconfig b/drivers/usb/mvebu/Kconfig
new file mode 100644
index 000000000000..ef452a9a1528
--- /dev/null
+++ b/drivers/usb/mvebu/Kconfig
@@ -0,0 +1,35 @@
+config USB_MVEBU_PHY_40NM
+ bool
+
+config USB_MVEBU_PHY_65NM
+ bool
+
+config USB_MVEBU_PHY
+ bool
+ depends on USB_MVEBU_HOST || USB_MVEBU_DEVICE
+ select USB_MVEBU_PHY_40NM if ARCH_ARMADA_370
+ select USB_MVEBU_PHY_40NM if ARCH_ARMADA_XP
+ select USB_MVEBU_PHY_65NM if ARCH_DOVE
+ select USB_MVEBU_PHY_65NM if ARCH_KIRKWOOD
+
+config USB_MVEBU
+ select USB_MVEBU_PHY
+ bool
+
+config USB_MVEBU_HOST
+ bool "Marvell MVEBU USB host support"
+ depends on ARCH_MVEBU
+ select USB_MVEBU
+ select USB_EHCI
+ help
+ Enables USB host support for the ChipIdea USB controller found on
+ Marvell Orion5x, Kirkwood, Dove, Armada 370, and XP SoCs.
+
+config USB_MVEBU_DEVICE
+ bool "Marvell MVEBU USB device support"
+ depends on ARCH_MVEBU
+ select USB_MVEBU
+ select USB_GADGET_DRIVER_ARC
+ help
+ Enables USB device support for the ChipIdea USB controller found on
+ Marvell Orion5x, Kirkwood, Dove, Armada 370, and XP SoCs.
diff --git a/drivers/usb/mvebu/Makefile b/drivers/usb/mvebu/Makefile
new file mode 100644
index 000000000000..e2569bb2fd42
--- /dev/null
+++ b/drivers/usb/mvebu/Makefile
@@ -0,0 +1,2 @@
+obj-$(CONFIG_USB_MVEBU) += core.o
+obj-$(CONFIG_USB_MVEBU_PHY) += phy.o
diff --git a/drivers/usb/mvebu/core.c b/drivers/usb/mvebu/core.c
new file mode 100644
index 000000000000..b8222d26d972
--- /dev/null
+++ b/drivers/usb/mvebu/core.c
@@ -0,0 +1,155 @@
+/*
+ * Marvell MVEBU USB PHY driver
+ *
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ *
+ * Based on BSP code (C) Marvell International Ltd.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <common.h>
+#include <init.h>
+#include <io.h>
+#include <linux/clk.h>
+#include <linux/mbus.h>
+#include <mach/socid.h>
+#include <regulator.h>
+#include <usb/ehci.h>
+#include <usb/fsl_usb2.h>
+#include <usb/usb.h>
+
+#define EHCI_REGS_OFFSET 0x100
+
+#define BRIDGE_CTRL 0x300
+#define BRIDGE_INTR_CAUSE 0x310
+#define BRIDGE_INTR_MASK 0x314
+#define BRIDGE_ERR_ACCESS 0x31c
+#define WINDOW_CTRL(i) (0x320 + ((i) << 4))
+#define WINDOW_BASE(i) (0x324 + ((i) << 4))
+#define BRIDGE_IPG 0x360
+#define START_IPG(x) ((x) << 0)
+#define START_IPG_MASK START_IPG(0x3f)
+#define NON_START_IPG(x) ((x) << 8)
+#define NON_START_IPG_MASK NON_START_IPG(0x3f)
+
+struct mvebu_usb {
+ struct ehci_data ehci;
+ struct device_d *dev;
+ void __iomem *base;
+ struct clk *clk;
+ struct regulator *vbus;
+ u16 devid;
+ u16 revid;
+ enum usb_dr_mode mode;
+};
+
+static void mvebu_usb_mbus_setup(struct mvebu_usb *usb)
+{
+ const struct mbus_dram_target_info *dram = mvebu_mbus_dram_info();
+ int n;
+
+ for (n = 0; n < 4; n++) {
+ writel(0, usb->base + WINDOW_CTRL(n));
+ writel(0, usb->base + WINDOW_BASE(n));
+ }
+
+ for (n = 0; n < dram->num_cs; n++) {
+ const struct mbus_dram_window *w = &dram->cs[n];
+ u32 reg;
+
+ writel(w->base, usb->base + WINDOW_BASE(n));
+ reg = ((w->size - 1) & 0xffff0000) | (w->mbus_attr << 8) |
+ (dram->mbus_dram_target_id << 4) | 1;
+ writel(reg, usb->base + WINDOW_CTRL(n));
+ }
+}
+
+static void mvebu_usb_ipg_setup(struct mvebu_usb *usb)
+{
+ u32 reg;
+
+ /* IPG Metal fix register not available on below SoCs */
+ if ((usb->devid == DEVID_F5180 && usb->revid <= REVID_F5180N_B1) ||
+ (usb->devid == DEVID_F5181 && usb->revid <= REVID_F5181_B1) ||
+ (usb->devid == DEVID_F5181 && usb->revid == REVID_F5181L) ||
+ (usb->devid == DEVID_F5182 && usb->revid <= REVID_F5182_A1))
+ return;
+
+ reg = readl(usb->base + BRIDGE_IPG);
+ /* Change reserved bits [31:30] from 1 to 0 */
+ reg &= ~(BIT(31) | BIT(30));
+ /* Change NON_START_IPG to 0xd */
+ reg &= ~NON_START_IPG_MASK;
+ reg |= NON_START_IPG(0xd);
+ writel(reg, usb->base + BRIDGE_IPG);
+}
+
+static struct of_device_id mvebu_usb_dt_ids[] = {
+ { .compatible = "marvell,mvebu-usb", },
+};
+
+static int mvebu_usb_probe(struct device_d *dev)
+{
+ struct mvebu_usb *usb;
+ int ret;
+
+ usb = xzalloc(sizeof(*usb));
+
+ usb->base = dev_request_mem_region(dev, 0);
+ if (!usb->base)
+ return -ENOMEM;
+
+ usb->clk = clk_get(dev, NULL);
+ if (IS_ERR(usb->clk))
+ return PTR_ERR(usb->clk);
+
+ usb->vbus = regulator_get(dev, "vbus");
+ if (IS_ERR(usb->vbus))
+ return PTR_ERR(usb->vbus);
+
+ usb->dev = dev;
+ usb->devid = mvebu_get_soc_devid();
+ usb->revid = mvebu_get_soc_revid();
+ usb->mode = of_usb_get_dr_mode(dev->device_node, NULL);
+ if (usb->mode == USB_DR_MODE_UNKNOWN)
+ usb->mode = USB_DR_MODE_HOST;
+
+ usb->ehci.hccr = usb->base + EHCI_REGS_OFFSET;
+ usb->ehci.flags = EHCI_HAS_TT;
+
+ clk_enable(usb->clk);
+
+ mvebu_usb_ipg_setup(usb);
+ mvebu_usb_mbus_setup(usb);
+
+ if (usb->mode == USB_DR_MODE_HOST &&
+ IS_ENABLED(CONFIG_USB_MVEBU_HOST)) {
+ ret = regulator_enable(usb->vbus);
+ if (ret)
+ return ret;
+ ret = ehci_register(dev, &usb->ehci);
+ if (ret)
+ regulator_disable(usb->vbus);
+ } else if (usb->mode == USB_DR_MODE_PERIPHERAL &&
+ IS_ENABLED(CONFIG_USB_MVEBU_DEVICE)) {
+ ret = regulator_disable(usb->vbus);
+ if (ret)
+ return ret;
+ ret = ci_udc_register(dev, usb->base);
+ } else {
+ dev_err(dev, "Unsupported USB role\n");
+ ret = -ENODEV;
+ }
+
+ return ret;
+}
+
+static struct driver_d mvebu_usb_driver = {
+ .name = "mvebu-usb",
+ .probe = mvebu_usb_probe,
+ .of_compatible = mvebu_usb_dt_ids,
+};
+device_platform_driver(mvebu_usb_driver);
diff --git a/drivers/usb/mvebu/phy.c b/drivers/usb/mvebu/phy.c
new file mode 100644
index 000000000000..3eb9dcc12ec0
--- /dev/null
+++ b/drivers/usb/mvebu/phy.c
@@ -0,0 +1,301 @@
+/*
+ * Marvell MVEBU USB PHY driver
+ *
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ *
+ * Based on BSP code (C) Marvell International Ltd.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <common.h>
+#include <init.h>
+#include <io.h>
+#include <linux/clk.h>
+#include <mach/socid.h>
+
+/* 40nm USB PHY registers */
+#define PHY40N_PLL_REG(x) (0x00 + ((x) * 0x04))
+#define PHY40N_PLL_POWERUP BIT(9)
+#define PHY40N_VCO_CALIBRATE BIT(21)
+#define PHY40N_CHANNEL_REG(c,x) (0x40 + ((c) * 0x40) + ((x) * 0x04))
+#define PHY40N_CH_RECALIBRATE BIT(12)
+
+/* 65nm+ USB PHY registers */
+#define PHY_POWER_CTRL 0x00
+#define PHY_PLL_CTRL 0x10
+#define KVCO_EXT BIT(22)
+#define VCO_CALIBRATE BIT(21)
+#define ICP(x) ((x) << 12)
+#define ICP_MASK ICP(0x7)
+#define PHY_TX_CTRL 0x20
+#define HS_STRESS_CTRL BIT(31)
+#define TX_BLOCK_EN BIT(21)
+#define IMP_CAL_VTH(x) ((x) << 14)
+#define IMP_CAL_VTH_MASK IMP_CAL_VTH(0x7)
+#define TX_CALIBRATE BIT(12)
+#define LOWVDD_EN BIT(11)
+#define TX_AMP(x) ((x) << 0)
+#define TX_AMP_MASK TX_AMP(0x7)
+#define PHY_RX_CTRL 0x30
+#define EDGE_DET(x) ((x) << 26)
+#define EDGE_DET_1T EDGE_DET(0x0)
+#define EDGE_DET_2T EDGE_DET(0x1)
+#define EDGE_DET_3T EDGE_DET(0x2)
+#define EDGE_DET_4T EDGE_DET(0x3)
+#define EDGE_DET_MASK EDGE_DET(0x3)
+#define CDR_FASTLOCK_EN BIT(21)
+#define SQ_LENGTH(x) ((x) << 15)
+#define SQ_LENGTH_MASK SQ_LENGTH(0x3)
+#define SQ_THRESH(x) ((x) << 4)
+#define SQ_THRESH_MASK SQ_THRESH(0xf)
+#define LPF_COEFF(x) ((x) << 2)
+#define LPF_COEFF_1_8 LPF_COEFF(0x0)
+#define LPF_COEFF_1_4 LPF_COEFF(0x1)
+#define LPF_COEFF_1_2 LPF_COEFF(0x2)
+#define LPF_COEFF_1_1 LPF_COEFF(0x3)
+#define LPF_COEFF_MASK LPF_COEFF(0x3)
+#define PHY_IVREF_CTRL 0x440
+#define TXVDD12(x) ((x) << 8)
+#define TXVDD12_VDD TXVDD12(0x0)
+#define TXVDD12_1V2 TXVDD12(0x1)
+#define TXVDD12_1V3 TXVDD12(0x2)
+#define TXVDD12_1V4 TXVDD12(0x3)
+#define TXVDD12_MASK TXVDD12(0x3)
+#define PHY_TESTGRP0_CTRL 0x50
+#define FIFO_SQ_RST BIT(15)
+#define PHY_TESTGRP1_CTRL 0x54
+#define PHY_TESTGRP2_CTRL 0x58
+#define PHY_TESTGRP3_CTRL 0x5c
+
+struct mvebu_usbphy {
+ struct device_d *dev;
+ void __iomem *base;
+ struct clk *clk;
+ u16 devid;
+ u16 revid;
+ int (*setup)(struct mvebu_usbphy *phy);
+};
+
+static __maybe_unused int mvebu_usbphy_setup_40nm(struct mvebu_usbphy *phy)
+{
+ struct device_node *cnp;
+ u32 reg;
+
+ /* Set USB PLL REF frequency to 25MHz */
+ reg = readl(phy->base + PHY40N_PLL_REG(1));
+ reg &= ~0x3ff;
+ reg |= 0x605;
+ writel(reg, phy->base + PHY40N_PLL_REG(1));
+
+ /* Power up PLL and PHY channel */
+ reg = readl(phy->base + PHY40N_PLL_REG(2));
+ reg |= PHY40N_PLL_POWERUP;
+ writel(reg, phy->base + PHY40N_PLL_REG(2));
+
+ /* Calibrate VCO */
+ reg = readl(phy->base + PHY40N_PLL_REG(1));
+ reg |= PHY40N_VCO_CALIBRATE;
+ writel(reg, phy->base + PHY40N_PLL_REG(1));
+ udelay(1000);
+
+ /* Setup all individual PHYs */
+ for_each_child_of_node(phy->dev->device_node, cnp) {
+ u32 n;
+
+ if (of_property_read_u32(cnp, "reg", &n))
+ continue;
+
+ reg = readl(phy->base + PHY40N_CHANNEL_REG(n, 3));
+ reg |= BIT(15);
+ writel(reg, phy->base + PHY40N_CHANNEL_REG(n, 3));
+
+ reg = readl(phy->base + PHY40N_CHANNEL_REG(n, 1));
+ reg |= PHY40N_CH_RECALIBRATE;
+ writel(reg, phy->base + PHY40N_CHANNEL_REG(n, 1));
+
+ udelay(40);
+
+ reg = readl(phy->base + PHY40N_CHANNEL_REG(n, 1));
+ reg &= ~PHY40N_CH_RECALIBRATE;
+ writel(reg, phy->base + PHY40N_CHANNEL_REG(n, 1));
+
+ switch (phy->devid) {
+ case DEVID_F6707:
+ case DEVID_F6710:
+ writel(0x20000131, phy->base + PHY40N_CHANNEL_REG(n, 4));
+ break;
+ }
+ }
+
+ return 0;
+}
+
+static __maybe_unused int mvebu_usbphy_setup_65nm(struct mvebu_usbphy *phy)
+{
+ u32 reg;
+
+ /* USB PHY PLL */
+ reg = readl(phy->base + PHY_PLL_CTRL);
+ writel(reg | VCO_CALIBRATE, phy->base + PHY_PLL_CTRL);
+ udelay(100);
+ writel(reg & ~VCO_CALIBRATE, phy->base + PHY_PLL_CTRL);
+
+ /* USB PHY Tx */
+ reg = readl(phy->base + PHY_TX_CTRL);
+ reg &= ~TX_CALIBRATE;
+ writel(reg | TX_CALIBRATE, phy->base + PHY_TX_CTRL);
+ udelay(100);
+ writel(reg & ~TX_CALIBRATE, phy->base + PHY_TX_CTRL);
+
+ switch (phy->devid) {
+ case DEVID_AP510:
+ case DEVID_F6781:
+ reg &= ~(TX_BLOCK_EN | HS_STRESS_CTRL);
+ reg |= LOWVDD_EN;
+ break;
+ }
+
+ switch (phy->devid) {
+ case DEVID_AP510:
+ case DEVID_F6280:
+ reg = (reg & ~IMP_CAL_VTH_MASK) | IMP_CAL_VTH(0x5);
+ break;
+ }
+
+ reg &= ~TX_AMP_MASK;
+ switch (phy->devid) {
+ case DEVID_F6321:
+ case DEVID_F6322:
+ case DEVID_F6323:
+ case DEVID_MV76100:
+ case DEVID_MV78100:
+ case DEVID_MV78200:
+ reg |= TX_AMP(0x4);
+ break;
+ default:
+ reg |= TX_AMP(0x3);
+ break;
+ }
+ writel(reg, phy->base + PHY_TX_CTRL);
+
+ /* USB PHY Rx */
+ reg = readl(phy->base + PHY_RX_CTRL);
+
+ reg = (reg & ~LPF_COEFF_MASK) | LPF_COEFF_1_4;
+
+ reg &= ~SQ_THRESH_MASK;
+ switch (phy->devid) {
+ case DEVID_AP510:
+ case DEVID_F6282:
+ reg |= SQ_THRESH(0xc);
+ break;
+ case DEVID_F6781:
+ reg |= SQ_THRESH(0x7);
+ break;
+ default:
+ reg |= SQ_THRESH(0x8);
+ break;
+ }
+
+ if (phy->devid == DEVID_AP510 ||
+ phy->devid == DEVID_F6781) {
+ reg = (reg & ~SQ_LENGTH_MASK) | SQ_LENGTH(0x1);
+ reg = (reg & ~EDGE_DET_MASK) | EDGE_DET_1T;
+ reg &= ~CDR_FASTLOCK_EN;
+ }
+ writel(reg, phy->base + PHY_RX_CTRL);
+
+ /* USB PHY IVREF */
+ reg = readl(phy->base + PHY_IVREF_CTRL);
+ reg &= ~TXVDD12_MASK;
+ switch (phy->devid) {
+ case DEVID_AP510:
+ case DEVID_F6180:
+ case DEVID_F6190:
+ case DEVID_F6192:
+ case DEVID_F6280:
+ case DEVID_F6281:
+ case DEVID_F6282:
+ case DEVID_F6781:
+ reg |= TXVDD12_1V4;
+ break;
+ default:
+ reg |= TXVDD12_1V2;
+ break;
+ }
+ writel(reg, phy->base + PHY_IVREF_CTRL);
+
+ /* USB PHY Test Group */
+ reg = readl(phy->base + PHY_TESTGRP0_CTRL);
+ if (phy->devid == DEVID_AP510 ||
+ phy->devid == DEVID_F6781)
+ reg &= ~FIFO_SQ_RST;
+ writel(reg, phy->base + PHY_TESTGRP0_CTRL);
+
+ return 0;
+}
+
+static __maybe_unused int mvebu_usbphy_setup_90nm(struct mvebu_usbphy *phy)
+{
+ return -ENODEV;
+}
+
+static __maybe_unused int mvebu_usbphy_setup_150nm(struct mvebu_usbphy *phy)
+{
+ return -ENODEV;
+}
+
+static struct of_device_id mvebu_usbphy_dt_ids[] = {
+#if defined(CONFIG_USB_MVEBU_PHY_40NM)
+ { .compatible = "marvell,mvebu-usb-phy-40nm",
+ .data = (u32)mvebu_usbphy_setup_40nm },
+#endif
+#if defined(CONFIG_USB_MVEBU_PHY_65NM)
+ { .compatible = "marvell,mvebu-usb-phy-65nm",
+ .data = (u32)mvebu_usbphy_setup_65nm },
+#endif
+#if defined(CONFIG_USB_MVEBU_PHY_90NM)
+ { .compatible = "marvell,mvebu-usb-phy-90nm",
+ .data = (u32)mvebu_usbphy_setup_90nm },
+#endif
+#if defined(CONFIG_USB_MVEBU_PHY_150NM)
+ { .compatible = "marvell,mvebu-usb-phy-150nm",
+ .data = (u32)mvebu_usbphy_setup_150nm },
+ {},
+#endif
+};
+
+static int mvebu_usbphy_probe(struct device_d *dev)
+{
+ struct mvebu_usbphy *phy;
+ const struct of_device_id *match =
+ of_match_node(mvebu_usbphy_dt_ids, dev->device_node);
+
+ phy = xzalloc(sizeof(*phy));
+
+ phy->base = dev_request_mem_region(dev, 0);
+ if (!phy->base)
+ return -ENOMEM;
+
+ phy->clk = clk_get(dev, NULL);
+ if (IS_ERR(phy->clk))
+ return PTR_ERR(phy->clk);
+
+ phy->dev = dev;
+ phy->devid = mvebu_get_soc_devid();
+ phy->revid = mvebu_get_soc_revid();
+ phy->setup = (void *)match->data;
+
+ clk_enable(phy->clk);
+ return phy->setup(phy);
+}
+
+static struct driver_d mvebu_usbphy_driver = {
+ .name = "mvebu-usbphy",
+ .probe = mvebu_usbphy_probe,
+ .of_compatible = mvebu_usbphy_dt_ids,
+};
+device_platform_driver(mvebu_usbphy_driver);
--
2.0.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH RFC 2/4] ARM: dts: add new USB nodes to Kirkwood Guruplug
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 1/4] usb: add Marvell MVEBU " Sebastian Hesselbarth
@ 2014-06-25 14:08 ` Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 3/4] ARM: dts: add new USB nodes to Dove CuBox Sebastian Hesselbarth
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-25 14:08 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
Add new MVEBU usb controller nodes to Guruplug dts overlay to show
how it should be included upstream.
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
---
Cc: barebox@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts b/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts
index aba7c06160d0..eaf9869e9483 100644
--- a/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts
+++ b/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts
@@ -11,4 +11,24 @@
barebox,default-trigger = "heartbeat";
};
};
+
+ ocp@f1000000 {
+ musb0: usb@50000 {
+ compatible = "marvell,mvebu-usb";
+ reg = <0x50000 0x400>;
+ interrupts = <19>;
+ clocks = <&gate_clk 3>;
+ usb-phy = <&usb_phy0>;
+ dr_mode = "host";
+ status = "okay";
+ };
+
+ usb_phy0: phy@50400 {
+ compatible = "marvell,mvebu-usb-phy-65nm";
+ reg = <0x50400 0x100>;
+ clocks = <&gate_clk 3>;
+ #phy-cells = <0>;
+ status = "okay";
+ };
+ };
};
--
2.0.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH RFC 3/4] ARM: dts: add new USB nodes to Dove CuBox
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 1/4] usb: add Marvell MVEBU " Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 2/4] ARM: dts: add new USB nodes to Kirkwood Guruplug Sebastian Hesselbarth
@ 2014-06-25 14:08 ` Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 4/4] ARM: dts: add new USB nodes to Armada 370 Mirabox Sebastian Hesselbarth
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-25 14:08 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
Add new MVEBU usb controller nodes to CuBox dts overlay to show
how it should be included upstream.
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
---
Cc: barebox@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/dts/dove-cubox-bb.dts | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/arch/arm/dts/dove-cubox-bb.dts b/arch/arm/dts/dove-cubox-bb.dts
index f7ad55c4e794..65d19c057bab 100644
--- a/arch/arm/dts/dove-cubox-bb.dts
+++ b/arch/arm/dts/dove-cubox-bb.dts
@@ -15,4 +15,46 @@
barebox,default-trigger = "heartbeat";
};
};
+
+ mbus {
+ internal-regs {
+ usb0: usb@50000 {
+ compatible = "marvell,mvebu-usb";
+ reg = <0x50000 0x400>;
+ interrupts = <24>;
+ clocks = <&gate_clk 0>;
+ usb-phy = <&usb_phy0>;
+ vbus-supply = <&usb_power>;
+ dr_mode = "host";
+ status = "okay";
+ };
+
+ usb_phy0: phy@50400 {
+ compatible = "marvell,mvebu-usb-phy-65nm";
+ reg = <0x50400 0x100>;
+ clocks = <&gate_clk 0>;
+ #phy-cells = <0>;
+ status = "okay";
+ };
+
+ usb1: usb@51000 {
+ compatible = "marvell,mvebu-usb";
+ reg = <0x51000 0x400>;
+ interrupts = <25>;
+ clocks = <&gate_clk 1>;
+ usb-phy = <&usb_phy1>;
+ vbus-supply = <&usb_power>;
+ dr_mode = "host";
+ status = "okay";
+ };
+
+ usb_phy1: phy@51400 {
+ compatible = "marvell,mvebu-usb-phy-65nm";
+ reg = <0x51400 0x100>;
+ clocks = <&gate_clk 1>;
+ #phy-cells = <0>;
+ status = "okay";
+ };
+ };
+ };
};
--
2.0.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH RFC 4/4] ARM: dts: add new USB nodes to Armada 370 Mirabox
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
` (2 preceding siblings ...)
2014-06-25 14:08 ` [PATCH RFC 3/4] ARM: dts: add new USB nodes to Dove CuBox Sebastian Hesselbarth
@ 2014-06-25 14:08 ` Sebastian Hesselbarth
2014-06-25 19:18 ` [PATCH RFC 0/4] MVEBU SoC full USB support Jason Cooper
2014-06-25 19:40 ` Thomas Petazzoni
5 siblings, 0 replies; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-25 14:08 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
Add new MVEBU usb controller nodes to Mirabox dts overlay to show
how it should be included upstream.
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
---
Cc: barebox@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/dts/armada-370-mirabox-bb.dts | 35 ++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/arch/arm/dts/armada-370-mirabox-bb.dts b/arch/arm/dts/armada-370-mirabox-bb.dts
index de37a75bb960..a1a5d48aefb2 100644
--- a/arch/arm/dts/armada-370-mirabox-bb.dts
+++ b/arch/arm/dts/armada-370-mirabox-bb.dts
@@ -20,6 +20,41 @@
barebox,default-trigger = "heartbeat";
};
};
+
+ /* USB 2.0 Hub + uSD USB controllers */
+ usb0: usb@50000 {
+ compatible = "marvell,mvebu-usb";
+ reg = <0x50000 0x400>;
+ interrupts = <45>;
+ clocks = <&coreclk 0>;
+ usb-phy = <&usb_phy 0>;
+ dr_mode = "host";
+ status = "okay";
+ };
+
+ usb_phy: phy@50800 {
+ compatible = "marvell,mvebu-usb-phy-40nm";
+ reg = <0x50800 0x100>;
+ clocks = <&coreclk 0>;
+ #phy-cells = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+
+ port@0 { reg = <0>; };
+ port@1 { reg = <1>; };
+ };
+
+ /* mini-PCIe slot */
+ usb1: usb@51000 {
+ compatible = "marvell,mvebu-usb";
+ reg = <0x51000 0x400>;
+ interrupts = <46>;
+ clocks = <&coreclk 0>;
+ usb-phy = <&usb_phy 1>;
+ dr_mode = "host";
+ status = "okay";
+ };
};
};
};
--
2.0.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH RFC 0/4] MVEBU SoC full USB support
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
` (3 preceding siblings ...)
2014-06-25 14:08 ` [PATCH RFC 4/4] ARM: dts: add new USB nodes to Armada 370 Mirabox Sebastian Hesselbarth
@ 2014-06-25 19:18 ` Jason Cooper
2014-06-25 19:27 ` Sebastian Hesselbarth
2014-06-25 19:40 ` Thomas Petazzoni
5 siblings, 1 reply; 11+ messages in thread
From: Jason Cooper @ 2014-06-25 19:18 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: barebox, Thomas Petazzoni, Andrew Lunn
On Wed, Jun 25, 2014 at 04:08:44PM +0200, Sebastian Hesselbarth wrote:
> This *RFC* adds a driver stub for ChipIdea USB dual role controllers
> found on Marvell MVEBU SoCs. Although, I consider this driver quite
> finished, the corresponding DT binding is not. Also, we currently
> have no corresponding driver in Linux for both MVEBU CI stub and
> USB PHY.
>
> The reason I send it here and now, is to get some input from the
> (Linux) MVEBU guys on the binding and functional tests on Armada XP.
My first thought is if this chipidea IP is used beyond the mvebu
ecosystem. Shouldn't we name it and it's compatible strings with
'chipidea' instead of 'marvell'?
Also, is there any other way to differentiate between the two versions
other that manufacturing process resolution? Perhaps the free-electrons
guys could get us some IP revision numbers?
thx,
Jason.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH RFC 0/4] MVEBU SoC full USB support
2014-06-25 19:18 ` [PATCH RFC 0/4] MVEBU SoC full USB support Jason Cooper
@ 2014-06-25 19:27 ` Sebastian Hesselbarth
2014-06-26 12:08 ` Sebastian Hesselbarth
0 siblings, 1 reply; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-25 19:27 UTC (permalink / raw)
To: Jason Cooper; +Cc: barebox, Thomas Petazzoni, Andrew Lunn
On 06/25/2014 09:18 PM, Jason Cooper wrote:
> On Wed, Jun 25, 2014 at 04:08:44PM +0200, Sebastian Hesselbarth wrote:
>> This *RFC* adds a driver stub for ChipIdea USB dual role controllers
>> found on Marvell MVEBU SoCs. Although, I consider this driver quite
>> finished, the corresponding DT binding is not. Also, we currently
>> have no corresponding driver in Linux for both MVEBU CI stub and
>> USB PHY.
>>
>> The reason I send it here and now, is to get some input from the
>> (Linux) MVEBU guys on the binding and functional tests on Armada XP.
>
> My first thought is if this chipidea IP is used beyond the mvebu
> ecosystem. Shouldn't we name it and it's compatible strings with
> 'chipidea' instead of 'marvell'?
While the IP core is CI, you remember the mbus upstream registers?
That registers are very special to MVEBU SoCs and make the IP itself
"marvell".
But I agree, that we could add "chipidea", although spec itself names
it "ARC" already. ARC aquired CI and was later bought by Synopsys, but
at that time it must have been ARC.
> Also, is there any other way to differentiate between the two versions
> other that manufacturing process resolution? Perhaps the free-electrons
> guys could get us some IP revision numbers?
I just followed how Marvell's BSP differentiates USB PHYs. In addition
to 40nm and 65nm, there will be 90nm and 130nm for the older SoCs.
If there is a way for free-electron to get more information about a
better naming, that would be nice.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH RFC 0/4] MVEBU SoC full USB support
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
` (4 preceding siblings ...)
2014-06-25 19:18 ` [PATCH RFC 0/4] MVEBU SoC full USB support Jason Cooper
@ 2014-06-25 19:40 ` Thomas Petazzoni
5 siblings, 0 replies; 11+ messages in thread
From: Thomas Petazzoni @ 2014-06-25 19:40 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: barebox, Jason Cooper, Andrew Lunn
Dear Sebastian Hesselbarth,
On Wed, 25 Jun 2014 16:08:44 +0200, Sebastian Hesselbarth wrote:
> This *RFC* adds a driver stub for ChipIdea USB dual role controllers
> found on Marvell MVEBU SoCs. Although, I consider this driver quite
> finished, the corresponding DT binding is not. Also, we currently
> have no corresponding driver in Linux for both MVEBU CI stub and
> USB PHY.
Very nice! Definitely great to see some work being done on the USB
support, including the PHY initialization.
> The reason I send it here and now, is to get some input from the
> (Linux) MVEBU guys on the binding and functional tests on Armada XP.
I'll try to have a look when time permits.
> While we happily lived some years with ehci-orion ignoring usb-phys
> and no usb device support at all on Linux, the situation for barebox
> is different, of course. For a boot loader, we desperately need
> usb-phy setup (and fixup) and proper DT bindings.
Generally speaking, the Linux support for Armada 370/XP relies a lot on
specific initialization done by the Marvell U-Boot, especially in terms
of USB PHY, PCIe link initialization or SERDES configuration. One of my
goal when starting Armada 370/XP support in Barebox was to start with a
pristine state, and see what is missing in Linux.
> I decided to just add the new binding style to the three board dts
> overlays we have for barebox. If we are all happy with it, I'd start
> implementing the required Linux driver for usb-phy and CI stub with
> mbus setup. As usual, binding docs are missing but I think it is
> straight forward from what we know of other SoCs/PHYs already.
Indeed, Linux support for the USB gadget side would be useful.
> USB host has been tested on all three board obviously, I plan to
> test USB device on Dove D3Plug which has an USB device jack, but
> similar patches for Marvell Berlin (also CI) worked fine.
I think I should be able to test USB device on some of the development
boards, I'll have to check.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH RFC 0/4] MVEBU SoC full USB support
2014-06-25 19:27 ` Sebastian Hesselbarth
@ 2014-06-26 12:08 ` Sebastian Hesselbarth
0 siblings, 0 replies; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-26 12:08 UTC (permalink / raw)
To: Jason Cooper; +Cc: barebox, Thomas Petazzoni, Andrew Lunn
On 06/25/2014 09:27 PM, Sebastian Hesselbarth wrote:
> On 06/25/2014 09:18 PM, Jason Cooper wrote:
>> On Wed, Jun 25, 2014 at 04:08:44PM +0200, Sebastian Hesselbarth wrote:
>>> This *RFC* adds a driver stub for ChipIdea USB dual role controllers
>>> found on Marvell MVEBU SoCs. Although, I consider this driver quite
>>> finished, the corresponding DT binding is not. Also, we currently
>>> have no corresponding driver in Linux for both MVEBU CI stub and
>>> USB PHY.
>>>
>>> The reason I send it here and now, is to get some input from the
>>> (Linux) MVEBU guys on the binding and functional tests on Armada XP.
>>
>> My first thought is if this chipidea IP is used beyond the mvebu
>> ecosystem. Shouldn't we name it and it's compatible strings with
>> 'chipidea' instead of 'marvell'?
>
> While the IP core is CI, you remember the mbus upstream registers?
> That registers are very special to MVEBU SoCs and make the IP itself
> "marvell".
While working with Dove's SDHCI, I thought about the upstream registers
again. Dove's SDHCI shares those registers with Camera IP which makes
it difficult to find a good DT representation again.
Maybe we should think about moving upstream register setup to mbus
driver instead? That would also allow us to get rid of mvebu specific
boiler plates from those standard (fooHCI) IP drivers.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH RFC 1/4] usb: add Marvell MVEBU USB support
2014-06-25 14:08 ` [PATCH RFC 1/4] usb: add Marvell MVEBU " Sebastian Hesselbarth
@ 2014-06-30 6:30 ` Sascha Hauer
2014-06-30 7:46 ` Sebastian Hesselbarth
0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2014-06-30 6:30 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
Hi Sebastian,
> + if (usb->mode == USB_DR_MODE_HOST &&
> + IS_ENABLED(CONFIG_USB_MVEBU_HOST)) {
> + ret = regulator_enable(usb->vbus);
> + if (ret)
> + return ret;
> + ret = ehci_register(dev, &usb->ehci);
> + if (ret)
> + regulator_disable(usb->vbus);
> + } else if (usb->mode == USB_DR_MODE_PERIPHERAL &&
> + IS_ENABLED(CONFIG_USB_MVEBU_DEVICE)) {
> + ret = regulator_disable(usb->vbus);
> + if (ret)
> + return ret;
> + ret = ci_udc_register(dev, usb->base);
> + } else {
> + dev_err(dev, "Unsupported USB role\n");
> + ret = -ENODEV;
> + }
This should probably be shared between i.MX and mvebu. I have a patch
somewhere which implements a device parameter to switch between host and
device mode. It could be used for both i.MX and mvebu.
Otherwise the series looks fine to me.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH RFC 1/4] usb: add Marvell MVEBU USB support
2014-06-30 6:30 ` Sascha Hauer
@ 2014-06-30 7:46 ` Sebastian Hesselbarth
0 siblings, 0 replies; 11+ messages in thread
From: Sebastian Hesselbarth @ 2014-06-30 7:46 UTC (permalink / raw)
To: Sascha Hauer; +Cc: Thomas Petazzoni, barebox, Jason Cooper, Andrew Lunn
On 06/30/2014 08:30 AM, Sascha Hauer wrote:
>> + if (usb->mode == USB_DR_MODE_HOST &&
>> + IS_ENABLED(CONFIG_USB_MVEBU_HOST)) {
>> + ret = regulator_enable(usb->vbus);
>> + if (ret)
>> + return ret;
>> + ret = ehci_register(dev, &usb->ehci);
>> + if (ret)
>> + regulator_disable(usb->vbus);
>> + } else if (usb->mode == USB_DR_MODE_PERIPHERAL &&
>> + IS_ENABLED(CONFIG_USB_MVEBU_DEVICE)) {
>> + ret = regulator_disable(usb->vbus);
>> + if (ret)
>> + return ret;
>> + ret = ci_udc_register(dev, usb->base);
>> + } else {
>> + dev_err(dev, "Unsupported USB role\n");
>> + ret = -ENODEV;
>> + }
>
> This should probably be shared between i.MX and mvebu. I have a patch
> somewhere which implements a device parameter to switch between host and
> device mode. It could be used for both i.MX and mvebu.
Yes. As Jason already mentioned we probably should have a pure ChipIdea
probe() without any vendor-specific stuff.
For Marvell SoCs there is a set of registers that has to be configured
for DMA accesses, but I think we can move them into the bus driver
instead. We could have a list of compatibles and register offsets in
bus/mvebu.c that takes care of the registers on MVEBU for fooHCI IP.
I'll have to double-check if the register content is retained during
clk gating.
Having a ChipIdea probe() will also allow i.MX to reuse the same
function after it has set up the Freescale specific stuff.
> Otherwise the series looks fine to me.
Ok. BTW, I have a similar patch set for SDHCI that I'll send as RFC
in a day or two.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2014-06-30 7:46 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-25 14:08 [PATCH RFC 0/4] MVEBU SoC full USB support Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 1/4] usb: add Marvell MVEBU " Sebastian Hesselbarth
2014-06-30 6:30 ` Sascha Hauer
2014-06-30 7:46 ` Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 2/4] ARM: dts: add new USB nodes to Kirkwood Guruplug Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 3/4] ARM: dts: add new USB nodes to Dove CuBox Sebastian Hesselbarth
2014-06-25 14:08 ` [PATCH RFC 4/4] ARM: dts: add new USB nodes to Armada 370 Mirabox Sebastian Hesselbarth
2014-06-25 19:18 ` [PATCH RFC 0/4] MVEBU SoC full USB support Jason Cooper
2014-06-25 19:27 ` Sebastian Hesselbarth
2014-06-26 12:08 ` Sebastian Hesselbarth
2014-06-25 19:40 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox