From mboxrd@z Thu Jan 1 00:00:00 1970 From: Date: Sun, 18 Aug 2013 01:03:50 -0000 Subject: No subject Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de LAN9730 and HSIC1 is connected to the USB3503A. I do not see anything connected to the USB PHY, or I do not yet understand it fully. While tracing thru ehci-hcd.c I can see that for root hub enumeration all the submit_control_msg() are sent to ehci_submit_root() and these seem to function - port enable, status change, get descriptor etc... As soon as it does a "get descriptor" to the device on the port, the submit_control_msg() calls ehci_submit_async(). This then builds the QH, qTD structures, and starts the HCD to process async requests (CMD_ASE). This is where, I have narrowed it down to the hcd getting into a halt state. I do not know why it gets halted, as I haven't debugged more. Is it possible that the phy has not been set correctly, as you mention? This is the ouput in the enumeration phase that I am referring to that halts the HCD: ---- 8< ---- New Device 1 usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 length 0x40 EHCI timed out on TD - token=0x80008c80 ---- 8< ---- Also, there is nothing connected to the PHY that I can test basic operation of the phy as you had mentioned earlier. This is the code that initializes the phy etc int ehci_hcd_init(void) { u32 phypwr, phyclk, rstcon, a, con, dat, offset, value, pull; unsigned char i2c_dat; unsigned val = 0; unsigned int tmp; /* set XuhostOVERCUR to in-active by controlling ET6PUD[15:14] 0x0 : pull-up/down disabled 0x1 : pull-down enabled 0x2 : reserved 0x3 : pull-up enabled */ #define ETC6PUD 0x11000228 writel((__raw_readl(ETC6PUD) & ~(0x3 << 14)) | (0x3 << 14), ETC6PUD); rstcon = __raw_readl(ETC6PUD); printf("[SURI] - after set - ETC6PUD has value: %x\n", rstcon); #define S5P_USB_PHY_CONTROL 0x10020704 #define S5P_HSIC_1_PHY_CONTROL 0x10020708 #define S5P_HSIC_2_PHY_CONTROL 0x1002070C a = 1; writel(a, S5P_USB_PHY_CONTROL); // This is what gives us the right hcd a = readl(S5P_USB_PHY_CONTROL); printf("[SURI] - after set - read S5P_USB_PHY_CONTROL: %x\n", a); writel(a, S5P_HSIC_1_PHY_CONTROL); a = readl(S5P_HSIC_1_PHY_CONTROL); printf("[SURI] - after set - read S5P_HSIC_1_PHY_CONTROL: %x\n", a); writel(a, S5P_HSIC_2_PHY_CONTROL); a = readl(S5P_HSIC_2_PHY_CONTROL); printf("[SURI] - after set - read S5P_HSIC_2_PHY_CONTROL: %x\n", a); #define EXYNOS4_USB20PHY_CFG 0x1001021C a = 1; writel(a, EXYNOS4_USB20PHY_CFG); #define EXYNOS4_PHYPWR 0x125B0000 #define EXYNOS4_PHYCLK 0x125B0004 #define EXYNOS4_RSTCON 0x125B0008 phyclk = 5; writel(phyclk, EXYNOS4_PHYCLK); /* set to normal of Device */ #define PHY0_NORMAL_MASK (0x39 << 0) phypwr = readl(EXYNOS4_PHYPWR) & ~PHY0_NORMAL_MASK; writel(phypwr, EXYNOS4_PHYPWR); /* set to normal of Host */ phypwr = readl(EXYNOS4_PHYPWR); #define PHY1_STD_NORMAL_MASK (0x7 << 6) #define EXYNOS4X12_HSIC0_NORMAL_MASK (0x7 << 9) #define EXYNOS4X12_HSIC1_NORMAL_MASK (0x7 << 12) phypwr &= ~(PHY1_STD_NORMAL_MASK | EXYNOS4X12_HSIC0_NORMAL_MASK | EXYNOS4X12_HSIC1_NORMAL_MASK); writel(phypwr, EXYNOS4_PHYPWR); /* reset both PHY and Link of Device */ #define PHY0_SWRST_MASK (0x7 << 0) rstcon = readl(EXYNOS4_RSTCON) | PHY0_SWRST_MASK; writel(rstcon, EXYNOS4_RSTCON); udelay(10); rstcon &= ~PHY0_SWRST_MASK; writel(rstcon, EXYNOS4_RSTCON); /* reset both PHY and Link of Host */ #define EXYNOS4X12_HOST_LINK_PORT_SWRST_MASK (0xf << 7) #define EXYNOS4X12_PHY1_SWRST_MASK (0xf << 3) rstcon = readl(EXYNOS4_RSTCON) | EXYNOS4X12_HOST_LINK_PORT_SWRST_MASK | EXYNOS4X12_PHY1_SWRST_MASK; writel(rstcon, EXYNOS4_RSTCON); udelay(10); rstcon &= ~(EXYNOS4X12_HOST_LINK_PORT_SWRST_MASK | EXYNOS4X12_PHY1_SWRST_MASK); writel(rstcon, EXYNOS4_RSTCON); udelay(80); hccr = (struct ehci_hccr *) 0x12580000; hcor = (struct ehci_hcor *)((uint32_t) hccr + HC_LENGTH(ehci_readl(&hccr->cr_capbase))); printf("Exynos4412-ehci: init hccr %x and hcor %x hc_length %x\n", (uint32_t)hccr, (uint32_t)hcor, (uint32_t)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); mdelay(100); /* Here is where I reset the usb3503a */ /* GPX3_5 is NRESET, GPX3_4 is HUB_CONNECT and GPX3_0 is NINT */ /* The above is from the odroid-u2 schematics */ #define GPX3BASE ((void *) (0x11000C60)) /* Start */ gpio_direction_output(GPX3BASE, 5, 0); gpio_set_value(GPX3BASE, 5, 0); mdelay(100); /* RefCLK 24MHz */ gpio_direction_output(GPX3BASE, 0, 0); gpio_set_value(GPX3BASE, 0, 0); mdelay(100); gpio_direction_output(GPX3BASE, 4, 0); gpio_set_value(GPX3BASE, 4, 0); mdelay(100); // RESET pin set to 1 gpio_set_value(GPX3BASE, 5, 1); // Hub Wait RefClk stage mdelay(10); // Hub Configuration stage a = usb3503_read(USB3503_SP_ILOCK, &i2c_dat, (unsigned char) 1); val = i2c_dat; printf("Read %x from USB3503 SP_ILOCK\n", i2c_dat); // Reads 32 which is default // Other i2c can follow here if need be for configuring the usb3503a // Set CONNECT to 1 to move to hub configure phase. gpio_set_value(GPX3BASE, 4, 1); mdelay(10); // Make INT line as input. gpio_direction_input(GPX3BASE, 0); mdelay(10); return 0; } > >> >> When it comes to starting up usb via usb start, I seem to hit the below >> sequence - with debug on ... The u-boot is quite an older u-boot, but I >> have ported most of the usb code over from the arndale port over at >> insignal - which seems to have usb working (they too have a usb3503a but >> with exynos5) >> >> My question is how do I debug this to get it working. Looks like the hcd >> does not see the usb3503a, am I correct? >> ---------------------------- 8< ---------------------------- >> (Re)start USB... >> USB: Exynos4412-ehci: init hccr 12580000 and hcor 12580010 hc_length 10 >> Register 1313 NbrPorts 3 >> USB EHCI 1.00 >> samsung_gpiolib_4bit_output: base: 11000c60 offset: 5 value: 0 >> s3c_gpiolib_set: reg: 11000c64 offset: 5 value: 0 >> samsung_gpiolib_4bit_output: base: 11000c60 offset: 0 value: 0 >> s3c_gpiolib_set: reg: 11000c64 offset: 0 value: 0 >> samsung_gpiolib_4bit_output: base: 11000c60 offset: 4 value: 0 >> s3c_gpiolib_set: reg: 11000c64 offset: 4 value: 0 >> s3c_gpiolib_set: reg: 11000c64 offset: 5 value: 1 >> Read 32 from USB3503 SP_ILOCK >> s3c_gpiolib_set: reg: 11000c64 offset: 4 value: 1 >> Wrote 33 to USB3503_SP_ILOCK >> samsung_gpiolib_4bit_input: base: 11000c60 offset: 0 >> scanning bus for devices... New Device 0 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 >> length 0x40 >> set address 1 >> usb_control_msg: request: 0x5, requesttype: 0x0, value 0x1 index 0x0 length >> 0x0 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 >> length 0x12 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 >> length 0x9 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 >> length 0x19 >> get_conf_no 0 Result 25, wLength 25 >> if 0, ep 0 >> ##EP epmaxpacketin[1] = 8 >> set configuration 1 >> usb_control_msg: request: 0x9, requesttype: 0x0, value 0x1 index 0x0 length >> 0x0 >> new device strings: Mfr=1, Product=2, SerialNumber=0 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x300 index 0x0 >> length 0xFF >> USB device number 1 default language ID 0x1 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x301 index 0x1 >> length 0xFF >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x302 index 0x1 >> length 0xFF >> Manufacturer u-boot >> Product EHCI Host Controller >> SerialNumber >> Vendor: 0x0000 Product 0x0000 Version 1.0 >> USB hub found >> usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 >> length 0x4 >> usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 >> length 0x8 >> 3 ports detected >> individual port power switching >> standalone hub >> global over-current protection >> power on to power good time: 20ms >> hub controller current requirement: 0mA >> port 1 is removable >> port 2 is removable >> port 3 is removable >> usb_control_msg: request: 0x0, requesttype: 0xA0, value 0x0 index 0x0 >> length 0x4 >> get_hub_status returned status 1, change 103 >> local power source is lost (inactive) >> no over-current condition exists >> enabling power on all ports >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x8 index 0x1 >> length 0x0 >> port 1 returns 0 >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x8 index 0x2 >> length 0x0 >> port 2 returns 0 >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x8 index 0x3 >> length 0x0 >> The request port(2) is not configured >> port 3 returns 80000000 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 >> length 0x4 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 >> length 0x4 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 >> length 0x4 >> The request port(2) is not configured >> port 3: get_port_status failed >> usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x1 >> length 0x0 >> port 1 returns 0 >> usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x2 >> length 0x0 >> port 2 returns 0 >> usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x3 >> length 0x0 >> The request port(2) is not configured >> port 3 returns 80000000 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 >> length 0x4 >> Port 1 Status 500 Change 0 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 >> length 0x4 >> Port 2 Status 501 Change 1 >> port 2 connection change >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 >> length 0x4 >> portstatus 501, change 1, 480 Mb/s >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x10 index 0x2 >> length 0x0 >> hub_port_reset: resetting port 1... >> usb_control_msg: request: 0x3, requesttype: 0x23, value 0x4 index 0x2 >> length 0x0 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 >> length 0x4 >> portstatus 503, change 10, 480 Mb/s >> STAT_C_CONNECTION = 0 STAT_CONNECTION = 1 USB_PORT_STAT_ENABLE 1 >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x14 index 0x2 >> length 0x0 >> New Device 1 >> usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 >> length 0x40 >> EHCI timed out on TD - token=0x80008c80 >> hub_port_reset: resetting port 1... >> usb_control_msg: request: 0x3, requesttype: 0x23, value 0x4 index 0x2 >> length 0x0 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 >> length 0x4 >> portstatus 503, change 10, 480 Mb/s >> STAT_C_CONNECTION = 0 STAT_CONNECTION = 1 USB_PORT_STAT_ENABLE 1 >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x14 index 0x2 >> length 0x0 >> set address 2 >> usb_control_msg: request: 0x5, requesttype: 0x0, value 0x2 index 0x0 length >> 0x0 >> EHCI fail timeout STS_ASS set >> >> USB device not accepting new address (error=80000000) >> hub: disabling port 2 >> usb_control_msg: request: 0x1, requesttype: 0x23, value 0x1 index 0x2 >> length 0x0 >> usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 >> length 0x4 >> The request port(2) is not configured >> get_port_status failed >> 2 USB Device(s) found >> scan end >> scanning bus for storage devices... 0 Storage Device(s) found >> scanning bus for ethernet devices... [0] IntIdVendor: 1060 >> IntIdProdcut: 60416 IdVendor: 0 IdProduct: 0 >> [1] IntIdVendor: 1060 IntIdProdcut: 38144 IdVendor: 0 IdProduct: 0 >> [0] IntIdVendor: 1060 IntIdProdcut: 60416 IdVendor: 0 IdProduct: 0 >> [1] IntIdVendor: 1060 IntIdProdcut: 38144 IdVendor: 0 IdProduct: 0 >> 0 Ethernet Device(s) found >> ----------------------------------------------------------------- >> >> _______________________________________________ >> U-Boot mailing list >> U-Boot at lists.denx.de >> http://lists.denx.de/mailman/listinfo/u-boot >> > > > > -- > Best Regards > Vivek