No subject
Sun Aug 18 03:03:50 CEST 2013
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
More information about the U-Boot
mailing list