/board/efikamx/efikamx-usb.c: cleanup

Signed-off-by: Jana Rapava <ferma...@gmail.com>
---
 board/efikamx/efikamx-usb.c |  111 +++++++++++++++++++++++--------------------
 include/usb/ehci-fsl.h      |   49 +++++++++++++++++++
 2 files changed, 108 insertions(+), 52 deletions(-)

diff --git a/board/efikamx/efikamx-usb.c b/board/efikamx/efikamx-usb.c
index 70d0daa..a94a64f 100644
--- a/board/efikamx/efikamx-usb.c
+++ b/board/efikamx/efikamx-usb.c
@@ -161,57 +161,70 @@ void control_regs_setup(void)
 {
        uint32_t tmp;
 
-       tmp = readl(OTG_BASE_ADDR + 0x800);
-       tmp &= ~((1 << 27) | (1 << 24) | (1 << 12) | (1 << 11));
-       tmp |= 1 << 8;
-       writel(tmp, OTG_BASE_ADDR + 0x800);
-
-       tmp = readl(OTG_BASE_ADDR + 0x808);
-       tmp &= ~(1 << 8);
-       tmp |= 1 << 5;
-       writel(tmp, OTG_BASE_ADDR + 0x808);
-
-       tmp = readl(OTG_BASE_ADDR + 0x80c);
-       tmp &= ~0x3;
-       tmp |= 0x1;
-       writel(tmp, OTG_BASE_ADDR + 0x80c);
-
-       tmp = readl(OTG_BASE_ADDR + 0x810);
-       tmp |= 1 << 25;
-       writel(tmp, OTG_BASE_ADDR + 0x810);
-
-       tmp = readl(OTG_BASE_ADDR + 0x814);
-       tmp &= ~((1 << 8) | (1 << 7));
-       tmp |= 1 << 4;
-       writel(tmp, OTG_BASE_ADDR + 0x814);
+       tmp = readl(OTG_BASE_ADDR + MX51_USB_CTRL_OFFSET);
+       tmp &= ~(MX51_OTG_WUE_BIT | MX51_OTG_PM_BIT | MX51_H1_ULPI_IE_BIT | 
MX51_H1_WUE_BIT);
+       tmp |= MX51_H1_PM_BIT;
+       writel(tmp, OTG_BASE_ADDR + MX51_USB_CTRL_OFFSET);
+
+       tmp = readl(OTG_BASE_ADDR + MX51_PHY_CTRL0_OFFSET);
+       tmp &= ~MX51_OTG_OVERCURD_BIT;
+       tmp |= MX51_EHCI_POWERPINSE_BIT;
+       writel(tmp, OTG_BASE_ADDR + MX51_PHY_CTRL0_OFFSET);
+
+       tmp = readl(OTG_BASE_ADDR + MX51_PHY_CTRL1_OFFSET);
+       tmp &= MX51_SYSCLOCK_MASK;
+       tmp |= MX51_SYSCLOCK_24_MHZ_BIT;
+       writel(tmp, OTG_BASE_ADDR + MX51_PHY_CTRL1_OFFSET);
+
+       tmp = readl(OTG_BASE_ADDR + MX51_USB_CTRL1_OFFSET);
+       tmp |= MX51_H1_EXTCLKE_BIT;
+       writel(tmp, OTG_BASE_ADDR + MX51_USB_CTRL1_OFFSET);
+
+       tmp = readl(OTG_BASE_ADDR + MX51_UH2_CTRL_OFFSET);
+       tmp &= ~(MX51_H2_ULPI_IE_BIT | MX51_H2_WUE_BIT);
+       tmp |= MX51_H2_PM_BIT;
+       writel(tmp, OTG_BASE_ADDR + MX51_UH2_CTRL_OFFSET);
 
        udelay(10000);
 }
 
-#define        ULPI_VIEWPORT(base)     (base + 0x170)
+
+#define ULPI_VIEWPORT(base)    (base + 0x170)
+
+/* ULPI viewport control bits */
+#define MX51_ULPI_WU_BIT       (1 << 31)
+#define MX51_ULPI_SS_BIT       (1 << 27)
+#define MX51_ULPI_RWRUN                (1 << 30)
+#define MX51_ULPI_RWCTRL       (1 << 29)
+
+#define shift_to_ulpiaddr(reg) (reg << 16)
+#define ulpi_write_mask(value) (value & 0xff)
+#define ulpi_read_mask(value)  ((value >> 8) & 0xff)
+
 
 void ulpi_write(u32 base, u32 reg, u32 value)
 {
-       if (!(readl(ULPI_VIEWPORT(base)) & (1 << 27))) {
-               writel(1 << 31, ULPI_VIEWPORT(base));
-               while (readl(ULPI_VIEWPORT(base)) & (1 << 31));
+       if (!(readl(ULPI_VIEWPORT(base)) & MX51_ULPI_SS_BIT)) {
+               writel(MX51_ULPI_WU_BIT, ULPI_VIEWPORT(base));
+               while (readl(ULPI_VIEWPORT(base)) & MX51_ULPI_WU_BIT);
        }
-       writel((1 << 30) | (1 << 29) | (reg << 16) | (value & 0xff), 
ULPI_VIEWPORT(base));
-       while (readl(ULPI_VIEWPORT(base)) & (1 << 30));
+       writel(MX51_ULPI_RWRUN | MX51_ULPI_RWCTRL | shift_to_ulpiaddr(reg) | 
ulpi_write_mask(value), ULPI_VIEWPORT(base));
+
+       while (readl(ULPI_VIEWPORT(base)) & MX51_ULPI_RWRUN);
 }
 
 u32 ulpi_read(u32 base, u32 reg)
 {
        u32 tmp;
-       if (!(readl(ULPI_VIEWPORT(base)) & (1 << 27))) {
-               writel(1 << 31, ULPI_VIEWPORT(base));
-               while (readl(ULPI_VIEWPORT(base)) & (1 << 31));
+       if (!(readl(ULPI_VIEWPORT(base)) & MX51_ULPI_SS_BIT)) {
+               writel(MX51_ULPI_WU_BIT, ULPI_VIEWPORT(base));
+               while (readl(ULPI_VIEWPORT(base)) & MX51_ULPI_WU_BIT);
        }
-       writel((1 << 30) | (reg << 16), ULPI_VIEWPORT(base));
+       writel(MX51_ULPI_RWRUN | shift_to_ulpiaddr(reg), ULPI_VIEWPORT(base));
        do {
                tmp = readl(ULPI_VIEWPORT(base));
-       } while (tmp & (1 << 30));
-       return (tmp >> 8) & 0xff;
+       } while (tmp & MX51_ULPI_RWRUN);
+       return ulpi_read_mask(tmp);
 }
 
 #define        ULPI_CTL_WRITE_OFF      0x00
@@ -229,8 +242,9 @@ void ehciX_init(u32 base)
        int reg, i;
 
        /* ULPI INIT */
-       for (reg = 3; reg >=0; reg--)
+       for (reg = MX51_USB_HOST_COUNT-1; reg >= 0; reg--)
                tmp |= ulpi_read(base, reg) << (reg * 8);
+       /* split ID into first and second half */
        printf("Found ULPI TX, ID %04x:%04x\n", tmp >> 16, tmp & 0xffff);
 
        /* ULPI check integrity */
@@ -238,7 +252,6 @@ void ehciX_init(u32 base)
                ulpi_write(base, ULPI_SCRATCH, 0x55 << i);
                tmp = ulpi_read(base, ULPI_SCRATCH);
 
-               // check
                if (tmp != (0x55 << i)) {
                        printf("ULPI integrity check failed\n");
                        return;
@@ -264,8 +277,7 @@ void ehciX_init(u32 base)
 
 void ehci0_init(void)
 {
-       /* Set PORTSC to 16b UTMI mode */
-       writel((1 << 28), OTG_BASE_ADDR + 0x184);
+       writel(MX51_16BIT_UTMI_BIT, OTG_BASE_ADDR + MX51_OTG_PORTSC1_OFFSET);
 }
 
 void ehci1_init(void)
@@ -284,24 +296,21 @@ void ehci1_init(void)
        mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USB_PAD_CONFIG);
        udelay(10000);
 
-       tmp = readl(OTG_BASE_ADDR + 0x340);
-       tmp &= ~(0xff << 16);
-       writel(tmp, OTG_BASE_ADDR + 0x340);
+       tmp = readl(OTG_BASE_ADDR + MX51_UH1_USBCMD_OFFSET);
+       tmp &= MX51_ITC_IMMEDIATE_MASK;
+       writel(tmp, OTG_BASE_ADDR + MX51_UH1_USBCMD_OFFSET);
 
        udelay(10000);
 
-       /* Set PORTSC to ULPI mode */
-       writel((2 << 30), OTG_BASE_ADDR + 0x384);
+       writel(MX51_ULPI_MODE_MASK, OTG_BASE_ADDR + MX51_UH1_PORTSC1_OFFSET);
        udelay(10000);
 
-       ehciX_init(OTG_BASE_ADDR + 0x200);
+       ehciX_init(OTG_BASE_ADDR + MX51_UH1_ID_OFFSET);
 }
 
 
 void ehci2_init(void)
 {
-       u32 tmp;
-
        mxc_request_iomux(MX51_PIN_EIM_A26, IOMUX_CONFIG_ALT1);
        mxc_iomux_set_pad(MX51_PIN_EIM_A26, PAD_CTL_DRV_HIGH |
                                PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
@@ -313,11 +322,10 @@ void ehci2_init(void)
        mxc_request_iomux(MX51_PIN_EIM_A26, IOMUX_CONFIG_ALT2);
        mxc_iomux_set_pad(MX51_PIN_EIM_A26, USB_PAD_CONFIG);
 
-       /* Set PORTSC to ULPI mode */
-       writel((2 << 30), OTG_BASE_ADDR + 0x584);
+       writel(MX51_ULPI_MODE_MASK, OTG_BASE_ADDR + MX51_UH2_PORTSC1_OFFSET);
        udelay(10000);
 
-       ehciX_init(OTG_BASE_ADDR + 0x400);
+       ehciX_init(OTG_BASE_ADDR + MX51_UH2_ID_OFFSET);
 }
 
 int ehci_hcd_init(void)
@@ -338,10 +346,9 @@ int ehci_hcd_init(void)
        /* EfikaMX USB has issues ... */
        udelay(10000);
 
-
        /* Init EHCI core */
        ehci = (struct usb_ehci *)(OTG_BASE_ADDR +
-               (0x200 * CONFIG_MXC_USB_PORT));
+               (MX51_REGISTER_LAYOUT_LENGTH * CONFIG_MXC_USB_PORT));
        hccr = (struct ehci_hccr *)((uint32_t)&ehci->caplength);
        hcor = (struct ehci_hcor *)((uint32_t) hccr +
                        HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
diff --git a/include/usb/ehci-fsl.h b/include/usb/ehci-fsl.h
index 67600ed..5617275 100644
--- a/include/usb/ehci-fsl.h
+++ b/include/usb/ehci-fsl.h
@@ -169,6 +169,55 @@
 #define CONFIG_SYS_FSL_USB_ADDR CONFIG_SYS_MPC512x_USB_ADDR
 #endif
 
+#define MX51_USB_HOST_COUNT    4
+#define MX51_REGISTER_LAYOUT_LENGTH    0x200
+
+/* Register offsets for MX51 */
+#define MX51_UH1_ID_OFFSET     0x200
+#define MX51_UH2_ID_OFFSET     0x400
+
+#define MX51_USB_CTRL_OFFSET   0x800
+#define MX51_PHY_CTRL0_OFFSET  0x808
+#define MX51_PHY_CTRL1_OFFSET  0x80c
+#define MX51_USB_CTRL1_OFFSET  0x810
+#define MX51_UH2_CTRL_OFFSET   0x814
+
+#define MX51_OTG_PORTSC1_OFFSET        0x184
+#define MX51_UH1_PORTSC1_OFFSET        0x384
+#define MX51_UH2_PORTSC1_OFFSET        0x584
+
+#define MX51_UH1_USBCMD_OFFSET 0x340
+
+/* USB_CTRL register bits of interest*/
+#define MX51_OTG_WUE_BIT       (1 << 27)
+#define MX51_OTG_PM_BIT                (1 << 24)
+#define MX51_H1_ULPI_IE_BIT    (1 << 12)
+#define MX51_H1_WUE_BIT                (1 << 11)
+#define MX51_H1_PM_BIT         (1 << 8)
+
+/* PHY_CTRL_0 register bits of interest */
+#define MX51_OTG_OVERCURD_BIT          (1 << 8)
+#define MX51_EHCI_POWERPINSE_BIT       (1 << 5)
+
+/* PHY_CTRL_1 register bits of interest */
+#define MX51_SYSCLOCK_24_MHZ_BIT       (1 << 0)
+#define MX51_SYSCLOCK_MASK             (0xffffffff << 0)
+
+/* USB_CTRL_1 register bits of interest */
+#define MX51_H1_EXTCLKE_BIT    (1 << 25)
+
+/* USB Host 2 CTRL register bits of interest */
+#define MX51_H2_ULPI_IE_BIT    (1 << 8)
+#define MX51_H2_WUE_BIT                (1 << 7)
+#define MX51_H2_PM_BIT         (1 << 4)
+
+/* PORTSCx bits of interest */
+#define MX51_ULPI_MODE_MASK    (2 << 30)
+#define MX51_16BIT_UTMI_BIT    (1 << 28)
+
+/* USBCMD bits of interest */
+#define MX51_ITC_IMMEDIATE_MASK        (~(0xff << 16))
+
 /*
  * USB Registers
  */
-- 
1.7.5.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to