i.MX25 3-stack - over-current change on port 1 - USB host port not working

Teemu Peltola teemu.peltola at nextfour.com
Wed Mar 30 03:42:43 EDT 2011


On 03/21/2011 10:52 AM, Teemu Peltola wrote:
> On 03/17/2011 11:19 AM, Eric Bénard wrote:
>> Hi,
>>
>> On 16/03/2011 15:26, Teemu Peltola wrote:
>>> I have Freescale i.MX25 3-stack development board + debug board
>>> attached to
>>> it. I have built barebox-2011.03.0 using
>>> freescale_mx25_3stack_defconfig with
>>> some modifications to support NAND booting (see below). I have used
>>> buildroot-2011.02 to create 2.6.38 kernel (CONFIG_MACH_MX25_3DS=y
>>> etc.) and
>>> rootfs images.
>>>
>>> When I boot these images from barebox, dmesg displays the following
>>> error
>>> message constantly and USB host port does not work:
>>>
>>> mxc-ehci mxc-ehci.1: GetStatus port:1 status cc001020 102 ACK POWER
>>> sig=se0 OCC
>>> hub 1-0:1.0: over-current change on port 1
>>> hub 1-0:1.0: enabling power on all ports
>>> hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
>>>
>>> If I try to use Freescale RedBoot (mx25_3stack_redboot_TO1_1.bin from
>>> L2.6.31_09.12.00_SDK_images_MX25 package) with the same kernel and
>>> rootfs, USB
>>> works. Is there some initialization that is missing from barebox?
>>>
>> if you don't need USB in barebox don't enable it. I also have problems
>> with OTG port under Linux when it's enabled under barebox. I didn't yet
>> found time to investigate.
>
> Disabling USB in barebox did not help.

It seems that USBH2_PWR signal is not powered. The following patch for 
barebox-2011.03.0 seems to work, using it as GPIO:

--- a/barebox-2011.03.0/arch/arm/boards/freescale-mx25-3-stack/3stack.c 
2011-03-29 09:16:54.247015588 +0300
+++ b/barebox-2011.03.0/arch/arm/boards/freescale-mx25-3-stack/3stack.c 
2011-03-29 09:18:53.675014266 +0300
@@ -168,6 +168,11 @@
         /* Set to Host mode */
         tmp = readl(IMX_OTG_BASE + 0x5a8);
         writel(tmp | 0x3, IMX_OTG_BASE + 0x5a8);
+
+/* usb_top_USBH2_PWR, gpio4_GPIO[11] */
+#define USB_PWR_GPIO 107
+
+       gpio_direction_output(USB_PWR_GPIO, 1);
  }

  static struct device_d usbh2_dev = {
@@ -288,20 +293,9 @@
         MX25_PAD_UART1_RTS__RTS,
         MX25_PAD_UART1_CTS__CTS,
         /* USBH2 */
-       MX25_PAD_D9__USBH2_PWR,
-       MX25_PAD_D8__USBH2_OC,
-       MX25_PAD_LD0__USBH2_CLK,
-       MX25_PAD_LD1__USBH2_DIR,
-       MX25_PAD_LD2__USBH2_STP,
-       MX25_PAD_LD3__USBH2_NXT,
-       MX25_PAD_LD4__USBH2_DATA0,
-       MX25_PAD_LD5__USBH2_DATA1,
-       MX25_PAD_LD6__USBH2_DATA2,
-       MX25_PAD_LD7__USBH2_DATA3,
-       MX25_PAD_HSYNC__USBH2_DATA4,
-       MX25_PAD_VSYNC__USBH2_DATA5,
-       MX25_PAD_LSCLK__USBH2_DATA6,
-       MX25_PAD_OE_ACD__USBH2_DATA7,
+#ifdef CONFIG_USB
+       MX25_PAD_D9__GPIO11,
+#endif
         /* i2c */
         MX25_PAD_I2C1_CLK__SCL,
         MX25_PAD_I2C1_DAT__SDA,


And for Linux 2.6.38.2:

--- a/linux-2.6.38.2/arch/arm/mach-imx/mach-mx25_3ds.c.orig 
2011-03-27 21:37:20.000000000 +0300
+++ b/linux-2.6.38.2/arch/arm/mach-imx/mach-mx25_3ds.c    2011-03-29 
10:49:33.574515896 +0300
@@ -103,6 +103,9 @@
         MX25_PAD_SD1_DATA1__SD1_DATA1,
         MX25_PAD_SD1_DATA2__SD1_DATA2,
         MX25_PAD_SD1_DATA3__SD1_DATA3,
+
+       /* Use USBH2_PWR signal as gpio to enable USB */
+       MX25_PAD_D9__GPIO_4_11
  };

  static const struct fec_platform_data mx25_fec_pdata __initconst = {
@@ -126,6 +129,14 @@
         gpio_set_value(FEC_RESET_B_GPIO, 1);
  }

+#define USBH2_PWR_GPIO         IMX_GPIO_NR(4,11)
+
+static void __init imx25_usb_h2_powerup(void)
+{
+       gpio_request(USBH2_PWR_GPIO, "USBH2 PWR");
+       gpio_direction_output(USBH2_PWR_GPIO, 1);  /* Power up */
+}
+
  static const struct mxc_nand_platform_data
  mx25pdk_nand_board_info __initconst = {
         .width          = 1,
@@ -203,6 +214,7 @@
         imx25_add_imx_uart0(&uart_pdata);
         imx25_add_fsl_usb2_udc(&otg_device_pdata);
         imx25_add_mxc_ehci_hs(&usbh2_pdata);
+       imx25_usb_h2_powerup();
         imx25_add_mxc_nand(&mx25pdk_nand_board_info);
         imx25_add_imxdi_rtc(NULL);
         imx25_add_imx_fb(&mx25pdk_fb_pdata);

BR,

Teemu



More information about the barebox mailing list