dm: ehci-mx6: support driver model
Subsystems (2)
PATCH 1/1 dm: ehci-mx6: support driver model
Support driver model for ehci mx6 driver.
Consolidate code to be shared between DM and non-DM, such as introducing ehci_mx6_common_init.
For simplicity, some old fasion code are keeped for DM usage, such as board_ehci_power and board_usb_phy_mode. And 'dr-mode', usbphy and vbus handling code for DM is not added now. These will be added in future patches.
--- drivers/usb/host/ehci-mx6.c | 144 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 14 deletions(-)
drivers/usb/host/ehci-mx6.c +130 -14
@@ -15,6 +15,7 @@#include <asm/arch/imx-regs.h> #include <asm/arch/clock.h> #include <asm/imx-common/iomux-v3.h> +#include <dm.h> #include "ehci.h"
@@ -303,6 +304,30 @@ int __weak board_ehci_power(int port, int on)return 0 ; } +int ehci_mx6_common_init (struct usb_ehci *ehci,int index) +{ +int ret; + +enable_usboh3_clk (1 ); +mdelay (1 ); + +/* Do board specific initialization */ + ret =board_ehci_hcd_init (index); +if (ret) +return ret; + +usb_power_config (index); +usb_oc_config (index); + +#if defined(CONFIG_MX6 ) +usb_internal_phy_clock_gate (index,1 ); +usb_phy_enable (index, ehci); +#endif + +return 0 ; +} + +#ifndef CONFIG_DM_USB int ehci_hcd_init (int index,enum usb_init_type init,struct ehci_hccr **hccr,struct ehci_hcor **hcor) {
@@ -318,26 +343,18 @@ int ehci_hcd_init(int index, enum usb_init_type init,if (index >3 )return -EINVAL ; -enable_usboh3_clk (1 ); -mdelay (1 ); -/* Do board specific initialization */ - ret =board_ehci_hcd_init (index); + ret =ehci_mx6_common_init (ehci, index);if (ret)return ret; -usb_power_config (index); -usb_oc_config (index); - -#if defined(CONFIG_MX6 ) -usb_internal_phy_clock_gate (index,1 ); -usb_phy_enable (index, ehci); -#endif type =board_usb_phy_mode (index); - *hccr = (struct ehci_hccr *)((uint32_t )&ehci->caplength); - *hcor = (struct ehci_hcor *)((uint32_t )*hccr + -HC_LENGTH (ehci_readl (&(*hccr)->cr_capbase))); +if (hccr && hcor) { + *hccr = (struct ehci_hccr *)((uint32_t )&ehci->caplength); + *hcor = (struct ehci_hcor *)((uint32_t )*hccr + +HC_LENGTH (ehci_readl (&(*hccr)->cr_capbase))); + }if ((type == init) || (type ==USB_INIT_DEVICE ))board_ehci_power (index, (type ==USB_INIT_DEVICE ) ?0 :1 );
@@ -359,3 +376,102 @@ int ehci_hcd_stop(int index) {return 0 ; } +#else +struct ehci_mx6_priv_data { +struct ehci_ctrl ctrl; +struct usb_ehci *ehci; +enum usb_init_type init_type; +int portnr; +}; + +static int mx6_init_after_reset (struct ehci_ctrl *dev) +{ +struct ehci_mx6_priv_data *priv = dev->priv; +enum usb_init_type type = priv->init_type; +struct usb_ehci *ehci = priv->ehci; +int ret; + + ret =ehci_mx6_common_init (priv->ehci, priv->portnr); +if (ret) +return ret; + +board_ehci_power (priv->portnr, (type ==USB_INIT_DEVICE ) ?0 :1 ); + +if (type ==USB_INIT_DEVICE ) +return 0 ; + +setbits_le32 (&ehci->usbmode,CM_HOST ); +writel (CONFIG_MXC_USB_PORTSC , &ehci->portsc); +setbits_le32 (&ehci->portsc,USB_EN ); + +mdelay (10 ); + +return 0 ; +} + +static const struct ehci_ops mx6_ehci_ops = { + .init_after_reset = mx6_init_after_reset +}; + +static int ehci_usb_probe (struct udevice *dev) +{ +struct usb_platdata *plat =dev_get_platdata (dev); +struct usb_ehci *ehci = (struct usb_ehci *)dev_get_addr (dev); +struct ehci_mx6_priv_data *priv =dev_get_priv (dev); +struct ehci_hccr *hccr; +struct ehci_hcor *hcor; +int ret; + + priv->ehci = ehci; + priv->portnr = dev->seq; + priv->init_type = plat->init_type; + + ret =ehci_mx6_common_init (ehci, priv->portnr); +if (ret) +return ret; + +board_ehci_power (priv->portnr, (priv->init_type ==USB_INIT_DEVICE ) ?0 :1 ); + +if (priv->init_type ==USB_INIT_HOST ) { +setbits_le32 (&ehci->usbmode,CM_HOST ); +writel (CONFIG_MXC_USB_PORTSC , &ehci->portsc); +setbits_le32 (&ehci->portsc,USB_EN ); + } + +mdelay (10 ); + + hccr = (struct ehci_hccr *)((uint32_t )&ehci->caplength); + hcor = (struct ehci_hcor *)((uint32_t )hccr + +HC_LENGTH (ehci_readl (&(hccr)->cr_capbase))); + +return ehci_register (dev, hccr, hcor, &mx6_ehci_ops,0 , priv->init_type); +} + +static int ehci_usb_remove (struct udevice *dev) +{ +int ret; + + ret =ehci_deregister (dev); +if (ret) +return ret; + +return 0 ; +} + +static const struct udevice_id mx6_usb_ids[] = { + { .compatible ="fsl,imx27-usb" }, + { } +}; + +U_BOOT_DRIVER (usb_mx6) = { + .name ="ehci_mx6" , + .id =UCLASS_USB , + .of_match = mx6_usb_ids, + .probe = ehci_usb_probe, + .remove = ehci_usb_remove, + .ops = &ehci_usb_ops, + .platdata_auto_alloc_size =sizeof (struct usb_platdata ), + .priv_auto_alloc_size =sizeof (struct ehci_mx6_priv_data ), + .flags =DM_FLAG_ALLOC_PRIV_DMA , +}; +#endif
Signature · 1 line
2.6.2
PATCH 1/1 dm: ehci-mx6: support driver model
Hi Peng,
Quoted 8 lines · Peng Fan
Support driver model for ehci mx6 driver.
Consolidate code to be shared between DM and non-DM, such as introducingehci_mx6_common_init.
For simplicity, some old fasion code are keeped for DM usage, such asboard_ehci_powerandboard_usb_phy_mode. And 'dr-mode', usbphy and vbus handling code for DM is not added now. These will be added in future patches.
Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>Cc Marek Vasut <[email protected]>Cc Mateusz Kulikowski <[email protected]>Cc Stefan Agner <[email protected]>Cc Simon Glass <[email protected]>--- drivers/usb/host/ehci-mx6.c | 144 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 14 deletions(-)
Good start. Do you have a plan to drop the board_...() functions?
Regards,
Simon
PATCH 1/1 dm: ehci-mx6: support driver model
Quoted 20 lines · Simon Glass
Hi Peng,
Quoted 8 lines · Peng Fan
Support driver model for ehci mx6 driver.
Consolidate code to be shared between DM and non-DM, such as introducingehci_mx6_common_init.
For simplicity, some old fasion code are keeped for DM usage, such asboard_ehci_powerandboard_usb_phy_mode. And 'dr-mode', usbphy and vbus handling code for DM is not added now. These will be added in future patches.Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>Cc Marek Vasut <[email protected]>Cc Mateusz Kulikowski <[email protected]>Cc Stefan Agner <[email protected]>Cc Simon Glass <[email protected]>--- drivers/usb/host/ehci-mx6.c | 144 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 14 deletions(-)
Quoted 3 lines
Reviewed-by Simon Glass <[email protected]>Good start. Do you have a plan to drop the board_...() functions?
Applied to u-boot-usb/next, thanks
Signature · 2 lines
Best regards, Marek Vasut
PATCH 1/1 dm: ehci-mx6: support driver model
In reply to Simon GlassHi Simon,
Quoted 20 lines · Simon Glass
Hi Peng,
Quoted 8 lines · Peng Fan
Support driver model for ehci mx6 driver.
Consolidate code to be shared between DM and non-DM, such as introducingehci_mx6_common_init.
For simplicity, some old fasion code are keeped for DM usage, such asboard_ehci_powerandboard_usb_phy_mode. And 'dr-mode', usbphy and vbus handling code for DM is not added now. These will be added in future patches.Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>Cc Marek Vasut <[email protected]>Cc Mateusz Kulikowski <[email protected]>Cc Stefan Agner <[email protected]>Cc Simon Glass <[email protected]>--- drivers/usb/host/ehci-mx6.c | 144 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 14 deletions(-)
Quoted 3 lines
Reviewed-by Simon Glass <[email protected]>Good start. Do you have a plan to drop the board_...() functions?
Yeah. I'll drop the board_ functions for dt+dm for ehci-mx6 in following up patches.
Thanks,
Peng.
Quoted 3 lines
Regards,
Simon
PATCH 1/1 dm: ehci-mx6: support driver model
Hi Peng,
Quoted 23 lines · Peng Fan
Hi Simon,
Quoted 20 lines · Simon Glass
Hi Peng,
Quoted 16 lines · Peng Fan
Support driver model for ehci mx6 driver.
Consolidate code to be shared between DM and non-DM, such as introducingehci_mx6_common_init.
For simplicity, some old fasion code are keeped for DM usage, such asboard_ehci_powerandboard_usb_phy_mode. And 'dr-mode', usbphy and vbus handling code for DM is not added now. These will be added in future patches.Signed-off-by Peng Fan <[email protected]>Cc Marek Vasut <[email protected]>Cc Mateusz Kulikowski <[email protected]>Cc Stefan Agner <[email protected]>Cc Simon Glass <[email protected]>--- drivers/usb/host/ehci-mx6.c | 144 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 14 deletions(-)
Quoted 6 lines
Quoted 3 lines
Reviewed-by Simon Glass <[email protected]>Good start. Do you have a plan to drop the board_...() functions?
Yeah. I'll drop the
board_functions for dt+dm for ehci-mx6 in following up patches.
Have you tested this? Do we have any board that using this dm driver. It's not working for me may be I would have add vbus-supply or something.
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.
PATCH 1/1 dm: ehci-mx6: support driver model
Hi Jagan,
Quoted 28 lines · Jagan Teki
Hi Peng,
Quoted 25 lines · Peng Fan
Hi Simon,
Quoted 22 lines · Simon Glass
Hi Peng,
Quoted 8 lines · Peng Fan
Support driver model for ehci mx6 driver.
Consolidate code to be shared between DM and non-DM, such as introducingehci_mx6_common_init.
For simplicity, some old fasion code are keeped for DM usage, such asboard_ehci_powerandboard_usb_phy_mode. And 'dr-mode', usbphy and vbus handling code for DM is not added now. These will be added in future patches.Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>Cc Marek Vasut <[email protected]>Cc Mateusz Kulikowski <[email protected]>Cc Stefan Agner <[email protected]>Cc Simon Glass <[email protected]>--- drivers/usb/host/ehci-mx6.c | 144 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 14 deletions(-)Reviewed-by Simon Glass <[email protected]>
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
Good start. Do you have a plan to drop the board_...() functions?
Yeah. I'll drop the
board_functions for dt+dm for ehci-mx6 in following up patches.Have you tested this? Do we have any board that using this dm driver. It's not working for me may be I would have add vbus-supply or something.
Sorry for late reply. I tested it. I have not upstream any board that use this dm driver. The board_ functions are needed when you using this driver, I did not remove this.
Regards,
Peng.
Quoted 7 lines
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.