Message ID | 1486636765-19899-1-git-send-email-kostap@marvell.com |
---|---|
State | Superseded |
Delegated to: | Stefan Roese |
Headers | show |
On 02/09/2017 11:39 AM, kostap@marvell.com wrote: > From: Konstantin Porotchkin <kostap@marvell.com> > > The USB device should linked to VBUS regulator through "vbus-supply" > DTS property. > This patch adds handling for "vbus-supply" property inside the USB > device entry for turning on the VBUS regulator upon the host adapter probe. > > Signed-off-by: Konstantin Porotchkin <kostap@marvell.com> > Cc: Stefan Roese <sr@denx.de> > Cc: Marek Vasut <marex@denx.de> > Cc: Nadav Haklai <nadavh@marvell.com> > Cc: Neta Zur Hershkovits <neta@marvell.com> > Cc: Igal Liberman <igall@marvell.com> > Cc: Haim Boot <hayim@marvell.com> > --- > Changes for v4: > - Move the VBUS supply handling to use regulator framework > - Select DM_REGULATOR by Kconfig for mvebu XHCI driver > > doc/device-tree-bindings/usb/marvell.xhci-usb.txt | 29 +++++++++++++++++++++++ > drivers/usb/host/Kconfig | 1 + > drivers/usb/host/xhci-mvebu.c | 14 ++++++++++- > 3 files changed, 43 insertions(+), 1 deletion(-) > create mode 100644 doc/device-tree-bindings/usb/marvell.xhci-usb.txt > > diff --git a/doc/device-tree-bindings/usb/marvell.xhci-usb.txt b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt > new file mode 100644 > index 0000000..cd21115 > --- /dev/null > +++ b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt > @@ -0,0 +1,29 @@ > +Marvell SOC USB controllers > + > +This controller is integrated in Armada 3700/8K. > +It uses the same properties as a generic XHCI host controller > + > +Required properties : > + - compatible: should be one or more of: > + - "marvell,armada3700-xhci", "generic-xhci" for Armada 37xx SoCs > + - "marvell,armada-8k-xhci", "generic-xhci" for Armada A8K SoCs > + - reg: should contain address and length of the standard XHCI > + register set for the device. > + - interrupts: one XHCI interrupt should be described here. > + > +Optional properties: > + - clocks: reference to a clock I asked in the previous version , multiple times , what clock are these? > + - vbus-supply : If present, specifies the fixed regulator to be turned on > + for providing power to the USB VBUS rail. > + > +Example: > + cpm_usb3_0: usb3@500000 { > + compatible = "marvell,armada-8k-xhci", > + "generic-xhci"; > + reg = <0x500000 0x4000>; > + interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cpm_syscon0 1 22>; > + vbus-supply = <®_usb3h0_vbus>; > + status = "disabled"; > + }; > + > diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig > index 5129a57..0bf8274 100644 > --- a/drivers/usb/host/Kconfig > +++ b/drivers/usb/host/Kconfig > @@ -25,6 +25,7 @@ config USB_XHCI_MVEBU > bool "MVEBU USB 3.0 support" > default y > depends on ARCH_MVEBU > + select DM_REGULATOR > help > Choose this option to add support for USB 3.0 driver on mvebu > SoCs, which includes Armada8K, Armada3700 and other Armada > diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c > index 46eb937..35d89ab 100644 > --- a/drivers/usb/host/xhci-mvebu.c > +++ b/drivers/usb/host/xhci-mvebu.c > @@ -10,6 +10,7 @@ > #include <dm.h> > #include <fdtdec.h> > #include <usb.h> > +#include <power/regulator.h> > #include <asm/gpio.h> > > #include "xhci.h" > @@ -44,12 +45,23 @@ static int xhci_usb_probe(struct udevice *dev) > struct mvebu_xhci_platdata *plat = dev_get_platdata(dev); > struct mvebu_xhci *ctx = dev_get_priv(dev); > struct xhci_hcor *hcor; > - int len; > + int len, ret; > + struct udevice *regulator; > > ctx->hcd = (struct xhci_hccr *)plat->hcd_base; > len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase)); > hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len); > > + ret = device_get_supply_regulator(dev, "vbus-supply", ®ulator); > + if (!ret) { > + ret = regulator_set_enable(regulator, true); > + if (ret) { > + printf("Failed to turn ON the VBUS regulator\n"); > + return ret; > + } > + } else > + printf("No VBUS regulator found\n"); This should be debug() , looks good otherwise. > /* Enable USB xHCI (VBUS, reset etc) in board specific code */ > board_xhci_enable(); > >
On 02/09/2017 12:39 PM, Marek Vasut wrote: > On 02/09/2017 11:39 AM, kostap@marvell.com wrote: >> From: Konstantin Porotchkin <kostap@marvell.com> >> >> The USB device should linked to VBUS regulator through "vbus-supply" >> DTS property. >> This patch adds handling for "vbus-supply" property inside the USB >> device entry for turning on the VBUS regulator upon the host adapter probe. >> >> Signed-off-by: Konstantin Porotchkin <kostap@marvell.com> >> Cc: Stefan Roese <sr@denx.de> >> Cc: Marek Vasut <marex@denx.de> >> Cc: Nadav Haklai <nadavh@marvell.com> >> Cc: Neta Zur Hershkovits <neta@marvell.com> >> Cc: Igal Liberman <igall@marvell.com> >> Cc: Haim Boot <hayim@marvell.com> >> --- >> Changes for v4: >> - Move the VBUS supply handling to use regulator framework >> - Select DM_REGULATOR by Kconfig for mvebu XHCI driver >> >> doc/device-tree-bindings/usb/marvell.xhci-usb.txt | 29 +++++++++++++++++++++++ >> drivers/usb/host/Kconfig | 1 + >> drivers/usb/host/xhci-mvebu.c | 14 ++++++++++- >> 3 files changed, 43 insertions(+), 1 deletion(-) >> create mode 100644 doc/device-tree-bindings/usb/marvell.xhci-usb.txt >> >> diff --git a/doc/device-tree-bindings/usb/marvell.xhci-usb.txt b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt >> new file mode 100644 >> index 0000000..cd21115 >> --- /dev/null >> +++ b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt >> @@ -0,0 +1,29 @@ >> +Marvell SOC USB controllers >> + >> +This controller is integrated in Armada 3700/8K. >> +It uses the same properties as a generic XHCI host controller >> + >> +Required properties : >> + - compatible: should be one or more of: >> + - "marvell,armada3700-xhci", "generic-xhci" for Armada 37xx SoCs >> + - "marvell,armada-8k-xhci", "generic-xhci" for Armada A8K SoCs >> + - reg: should contain address and length of the standard XHCI >> + register set for the device. >> + - interrupts: one XHCI interrupt should be described here. >> + >> +Optional properties: >> + - clocks: reference to a clock > > I asked in the previous version , multiple times , what clock are these? Yep, we discussed these clocks already. Do you want me to add a notice here? Like "the platform clocks that should be enabled upon initialization. may not exist on all platforms" > >> + - vbus-supply : If present, specifies the fixed regulator to be turned on >> + for providing power to the USB VBUS rail. >> + >> +Example: >> + cpm_usb3_0: usb3@500000 { >> + compatible = "marvell,armada-8k-xhci", >> + "generic-xhci"; >> + reg = <0x500000 0x4000>; >> + interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; >> + clocks = <&cpm_syscon0 1 22>; >> + vbus-supply = <®_usb3h0_vbus>; >> + status = "disabled"; >> + }; >> + >> diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig >> index 5129a57..0bf8274 100644 >> --- a/drivers/usb/host/Kconfig >> +++ b/drivers/usb/host/Kconfig >> @@ -25,6 +25,7 @@ config USB_XHCI_MVEBU >> bool "MVEBU USB 3.0 support" >> default y >> depends on ARCH_MVEBU >> + select DM_REGULATOR >> help >> Choose this option to add support for USB 3.0 driver on mvebu >> SoCs, which includes Armada8K, Armada3700 and other Armada >> diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c >> index 46eb937..35d89ab 100644 >> --- a/drivers/usb/host/xhci-mvebu.c >> +++ b/drivers/usb/host/xhci-mvebu.c >> @@ -10,6 +10,7 @@ >> #include <dm.h> >> #include <fdtdec.h> >> #include <usb.h> >> +#include <power/regulator.h> >> #include <asm/gpio.h> >> >> #include "xhci.h" >> @@ -44,12 +45,23 @@ static int xhci_usb_probe(struct udevice *dev) >> struct mvebu_xhci_platdata *plat = dev_get_platdata(dev); >> struct mvebu_xhci *ctx = dev_get_priv(dev); >> struct xhci_hcor *hcor; >> - int len; >> + int len, ret; >> + struct udevice *regulator; >> >> ctx->hcd = (struct xhci_hccr *)plat->hcd_base; >> len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase)); >> hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len); >> >> + ret = device_get_supply_regulator(dev, "vbus-supply", ®ulator); >> + if (!ret) { >> + ret = regulator_set_enable(regulator, true); >> + if (ret) { >> + printf("Failed to turn ON the VBUS regulator\n"); >> + return ret; >> + } >> + } else >> + printf("No VBUS regulator found\n"); > > This should be debug() , looks good otherwise. OK, will change it to "debug" > >> /* Enable USB xHCI (VBUS, reset etc) in board specific code */ >> board_xhci_enable(); >> >> > >
On 02/09/2017 11:46 AM, Konstantin Porotchkin wrote: > > > On 02/09/2017 12:39 PM, Marek Vasut wrote: >> On 02/09/2017 11:39 AM, kostap@marvell.com wrote: >>> From: Konstantin Porotchkin <kostap@marvell.com> >>> >>> The USB device should linked to VBUS regulator through "vbus-supply" >>> DTS property. >>> This patch adds handling for "vbus-supply" property inside the USB >>> device entry for turning on the VBUS regulator upon the host adapter >>> probe. >>> >>> Signed-off-by: Konstantin Porotchkin <kostap@marvell.com> >>> Cc: Stefan Roese <sr@denx.de> >>> Cc: Marek Vasut <marex@denx.de> >>> Cc: Nadav Haklai <nadavh@marvell.com> >>> Cc: Neta Zur Hershkovits <neta@marvell.com> >>> Cc: Igal Liberman <igall@marvell.com> >>> Cc: Haim Boot <hayim@marvell.com> >>> --- >>> Changes for v4: >>> - Move the VBUS supply handling to use regulator framework >>> - Select DM_REGULATOR by Kconfig for mvebu XHCI driver >>> >>> doc/device-tree-bindings/usb/marvell.xhci-usb.txt | 29 >>> +++++++++++++++++++++++ >>> drivers/usb/host/Kconfig | 1 + >>> drivers/usb/host/xhci-mvebu.c | 14 ++++++++++- >>> 3 files changed, 43 insertions(+), 1 deletion(-) >>> create mode 100644 doc/device-tree-bindings/usb/marvell.xhci-usb.txt >>> >>> diff --git a/doc/device-tree-bindings/usb/marvell.xhci-usb.txt >>> b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt >>> new file mode 100644 >>> index 0000000..cd21115 >>> --- /dev/null >>> +++ b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt >>> @@ -0,0 +1,29 @@ >>> +Marvell SOC USB controllers >>> + >>> +This controller is integrated in Armada 3700/8K. >>> +It uses the same properties as a generic XHCI host controller >>> + >>> +Required properties : >>> + - compatible: should be one or more of: >>> + - "marvell,armada3700-xhci", "generic-xhci" for Armada 37xx SoCs >>> + - "marvell,armada-8k-xhci", "generic-xhci" for Armada A8K SoCs >>> + - reg: should contain address and length of the standard XHCI >>> + register set for the device. >>> + - interrupts: one XHCI interrupt should be described here. >>> + >>> +Optional properties: >>> + - clocks: reference to a clock >> >> I asked in the previous version , multiple times , what clock are these? > Yep, we discussed these clocks already. Do you want me to add a notice > here? > Like "the platform clocks that should be enabled upon initialization. > may not exist on all platforms" Any description than opaque "reference to a clock" is better. I guess these clock have a description in the datasheet , so something like that would do. >>> + - vbus-supply : If present, specifies the fixed regulator to be >>> turned on >>> + for providing power to the USB VBUS rail. >>> + >>> +Example: >>> + cpm_usb3_0: usb3@500000 { >>> + compatible = "marvell,armada-8k-xhci", >>> + "generic-xhci"; >>> + reg = <0x500000 0x4000>; >>> + interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; >>> + clocks = <&cpm_syscon0 1 22>; >>> + vbus-supply = <®_usb3h0_vbus>; >>> + status = "disabled"; >>> + }; >>> + >>> diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig >>> index 5129a57..0bf8274 100644 >>> --- a/drivers/usb/host/Kconfig >>> +++ b/drivers/usb/host/Kconfig >>> @@ -25,6 +25,7 @@ config USB_XHCI_MVEBU >>> bool "MVEBU USB 3.0 support" >>> default y >>> depends on ARCH_MVEBU >>> + select DM_REGULATOR >>> help >>> Choose this option to add support for USB 3.0 driver on mvebu >>> SoCs, which includes Armada8K, Armada3700 and other Armada >>> diff --git a/drivers/usb/host/xhci-mvebu.c >>> b/drivers/usb/host/xhci-mvebu.c >>> index 46eb937..35d89ab 100644 >>> --- a/drivers/usb/host/xhci-mvebu.c >>> +++ b/drivers/usb/host/xhci-mvebu.c >>> @@ -10,6 +10,7 @@ >>> #include <dm.h> >>> #include <fdtdec.h> >>> #include <usb.h> >>> +#include <power/regulator.h> >>> #include <asm/gpio.h> >>> >>> #include "xhci.h" >>> @@ -44,12 +45,23 @@ static int xhci_usb_probe(struct udevice *dev) >>> struct mvebu_xhci_platdata *plat = dev_get_platdata(dev); >>> struct mvebu_xhci *ctx = dev_get_priv(dev); >>> struct xhci_hcor *hcor; >>> - int len; >>> + int len, ret; >>> + struct udevice *regulator; >>> >>> ctx->hcd = (struct xhci_hccr *)plat->hcd_base; >>> len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase)); >>> hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len); >>> >>> + ret = device_get_supply_regulator(dev, "vbus-supply", ®ulator); >>> + if (!ret) { >>> + ret = regulator_set_enable(regulator, true); >>> + if (ret) { >>> + printf("Failed to turn ON the VBUS regulator\n"); >>> + return ret; >>> + } >>> + } else >>> + printf("No VBUS regulator found\n"); >> >> This should be debug() , looks good otherwise. > OK, will change it to "debug" Hm , in fact, you can drop it altogether . It's not really useful. >>> /* Enable USB xHCI (VBUS, reset etc) in board specific code */ >>> board_xhci_enable(); >>> >>> >> >>
diff --git a/doc/device-tree-bindings/usb/marvell.xhci-usb.txt b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt new file mode 100644 index 0000000..cd21115 --- /dev/null +++ b/doc/device-tree-bindings/usb/marvell.xhci-usb.txt @@ -0,0 +1,29 @@ +Marvell SOC USB controllers + +This controller is integrated in Armada 3700/8K. +It uses the same properties as a generic XHCI host controller + +Required properties : + - compatible: should be one or more of: + - "marvell,armada3700-xhci", "generic-xhci" for Armada 37xx SoCs + - "marvell,armada-8k-xhci", "generic-xhci" for Armada A8K SoCs + - reg: should contain address and length of the standard XHCI + register set for the device. + - interrupts: one XHCI interrupt should be described here. + +Optional properties: + - clocks: reference to a clock + - vbus-supply : If present, specifies the fixed regulator to be turned on + for providing power to the USB VBUS rail. + +Example: + cpm_usb3_0: usb3@500000 { + compatible = "marvell,armada-8k-xhci", + "generic-xhci"; + reg = <0x500000 0x4000>; + interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&cpm_syscon0 1 22>; + vbus-supply = <®_usb3h0_vbus>; + status = "disabled"; + }; + diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 5129a57..0bf8274 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -25,6 +25,7 @@ config USB_XHCI_MVEBU bool "MVEBU USB 3.0 support" default y depends on ARCH_MVEBU + select DM_REGULATOR help Choose this option to add support for USB 3.0 driver on mvebu SoCs, which includes Armada8K, Armada3700 and other Armada diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c index 46eb937..35d89ab 100644 --- a/drivers/usb/host/xhci-mvebu.c +++ b/drivers/usb/host/xhci-mvebu.c @@ -10,6 +10,7 @@ #include <dm.h> #include <fdtdec.h> #include <usb.h> +#include <power/regulator.h> #include <asm/gpio.h> #include "xhci.h" @@ -44,12 +45,23 @@ static int xhci_usb_probe(struct udevice *dev) struct mvebu_xhci_platdata *plat = dev_get_platdata(dev); struct mvebu_xhci *ctx = dev_get_priv(dev); struct xhci_hcor *hcor; - int len; + int len, ret; + struct udevice *regulator; ctx->hcd = (struct xhci_hccr *)plat->hcd_base; len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase)); hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len); + ret = device_get_supply_regulator(dev, "vbus-supply", ®ulator); + if (!ret) { + ret = regulator_set_enable(regulator, true); + if (ret) { + printf("Failed to turn ON the VBUS regulator\n"); + return ret; + } + } else + printf("No VBUS regulator found\n"); + /* Enable USB xHCI (VBUS, reset etc) in board specific code */ board_xhci_enable();