On 02/03/12 15:38, Govindraj.R wrote: > From: "Govindraj.R" <govindraj.r...@ti.com> > > Clean up added ehci-omap.c and make it generic for re-use across > omap-soc having same ehci ip block. Also pass the modes to be configured > from board file and configure the ports accordingly. All usb layers > are not cache aligned, till then keep cache off for usb ops as ehci will use > internally dma for all usb ops. > > * Add a generic common header ehci-omap.h having common ip block > data and reg shifts. > * Rename and modify ehci-omap3 to ehci.h retain only conflicting > sysc reg shifts remove others and move to common header file. > > Signed-off-by: Govindraj.R <govindraj.r...@ti.com>
Some final neats below, otherwise: Acked-by: Igor Grinberg <grinb...@compulab.co.il> > --- > arch/arm/include/asm/arch-omap3/ehci.h | 55 +++++++ > arch/arm/include/asm/arch-omap3/ehci_omap3.h | 58 ------- > arch/arm/include/asm/arch-omap4/ehci.h | 49 ++++++ > arch/arm/include/asm/ehci-omap.h | 148 ++++++++++++++++++ > drivers/usb/host/ehci-omap.c | 212 > +++++++++++++++++++------- > 5 files changed, 408 insertions(+), 114 deletions(-) > create mode 100644 arch/arm/include/asm/arch-omap3/ehci.h > delete mode 100644 arch/arm/include/asm/arch-omap3/ehci_omap3.h > create mode 100644 arch/arm/include/asm/arch-omap4/ehci.h > create mode 100644 arch/arm/include/asm/ehci-omap.h [...] > diff --git a/arch/arm/include/asm/ehci-omap.h > b/arch/arm/include/asm/ehci-omap.h > new file mode 100644 > index 0000000..c99ac20 > --- /dev/null > +++ b/arch/arm/include/asm/ehci-omap.h [...] > + > +/* ULPI */ > +#define ULPI_SET(a) (a + 1) > +#define ULPI_CLR(a) (a + 2) > +#define ULPI_FUNC_CTRL 0x04 > +#define ULPI_FUNC_CTRL_RESET (1 << 5) The above should be removed as it is not used anymore. > + > +struct omap_usbhs_board_data { > + enum usbhs_omap_port_mode port_mode[OMAP_HS_USB_PORTS]; > +}; > + > +struct omap_usbtll { > + u32 rev; /* 0x00 */ > + u32 hwinfo; /* 0x04 */ > + u8 reserved1[0x8]; Are you sure you want this to be an array of bytes instead of register (u32) wide fields? IMO, u32 reserved1[2]; looks much better than: u8 reserved1[0x8]; and does not have alignment issues, but if you think u8 is better, I will not object. > + u32 sysc; /* 0x10 */ > + u32 syss; /* 0x14 */ > + u32 irqst; /* 0x18 */ > + u32 irqen; /* 0x1c */ > + u8 reserved2[0x10]; > + u32 shared_conf; /* 0x30 */ > + u8 reserved3[0xc]; > + u32 channel_conf; /* 0x40 */ > +}; > + > +struct omap_uhh { > + u32 rev; /* 0x00 */ > + u32 hwinfo; /* 0x04 */ > + u8 reserved1[0x8]; > + u32 sysc; /* 0x10 */ > + u32 syss; /* 0x14 */ > + u8 reserved2[0x28]; > + u32 hostconfig; /* 0x40 */ > + u32 debugcsr; /* 0x44 */ > +}; > + > +struct omap_ehci { > + u32 hccapbase; /* 0x00 */ > + u32 hcsparams; /* 0x04 */ > + u32 hccparams; /* 0x08 */ > + u8 reserved1[0x04]; > + u32 usbcmd; /* 0x10 */ > + u32 usbsts; /* 0x14 */ > + u32 usbintr; /* 0x18 */ > + u32 frindex; /* 0x1c */ > + u32 ctrldssegment; /* 0x20 */ > + u32 periodiclistbase; /* 0x24 */ > + u32 asysnclistaddr; /* 0x28 */ > + u8 reserved2[0x24]; > + u32 configflag; /* 0x50 */ > + u32 portsc_i; /* 0x54 */ > + u8 reserved3[0x38]; > + u32 insreg00; /* 0x90 */ > + u32 insreg01; /* 0x94 */ > + u32 insreg02; /* 0x98 */ > + u32 insreg03; /* 0x9c */ > + u32 insreg04; /* 0xa0 */ > + u32 insreg05_utmi_ulpi; /* 0xa4 */ > + u32 insreg06; /* 0xa8 */ > + u32 insreg07; /* 0xac */ > + u32 insreg08; /* 0xb0 */ > +}; > + > +int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata); > +int omap_ehci_hcd_stop(void); > + > +#endif /* _OMAP_COMMON_EHCI_H_ */ [...] > diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c > index 93d3bb7..89c3c3a 100644 > --- a/drivers/usb/host/ehci-omap.c > +++ b/drivers/usb/host/ehci-omap.c [...] > +static void omap_ehci_soft_phy_reset(int port) > +{ > + struct ulpi_viewport ulpi_vp; > + > + ulpi_vp.viewport_addr = (u32)&ehci->insreg05_utmi_ulpi; > + ulpi_vp.port_num = port; > + > + ulpi_reset(&ulpi_vp); > + no need for the empty line here > +} > + [...] > /* > - * Initialize the OMAP3 EHCI controller and PHY. > - * Based on "drivers/usb/host/ehci-omap.c" from Linux 2.6.37. > + * Initialize the OMAP EHCI controller and PHY. > + * Based on "drivers/usb/host/ehci-omap.c" from Linux 3.1 > * See there for additional Copyrights. > */ > -int ehci_hcd_init(void) > +int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata) > { > - int ret; > + int ret = 0; > + unsigned int i, reg = 0, rev = 0; no need to initialize ret here, it is done below. > > - debug("Initializing OMAP3 EHCI\n"); > + debug("Initializing OMAP EHCI\n"); > > ret = board_usb_init(); > if (ret < 0) [...] -- Regards, Igor. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot