imx27 external data abort on ehci init
Ole Reinhardt
ole.reinhardt at embedded-it.de
Tue Dec 22 21:01:58 EST 2009
Hi all,
I'm porting the kernel to a new i.MX27 based board, which has connected
a SMSC USB3320 ulpi phy to USB Host 2.
The kernel is a 2.6.31.6 with the patches from the recent phytec oselas
bsp.
I'm facing (two) problem(s), when initialising the host.
1.)
When not using the ulpi tools and just have a ehci2 platform init
function, the kernel is crashing (see log below).
It fails in ehci-hub.c, function ehci_hub_control, at ehci_writel in:
case USB_PORT_FEAT_POWER:
if (HCS_PPC (ehci->hcs_params))
ehci_writel(ehci,
temp & ~(PORT_RWC_BITS | PORT_POWER),
status_reg);
2.)
When first trying to talk to the ulpi bus, I just get ulpi timeouts (the
read does not succeed).
I know that similar problems were just discussed some time ago on this
list, but I did not find a final answer / solution.
So any help ist very much appreciated!
Regards,
Ole Reinhardt
Here is my code:
static int dlt2_usbh2_init(struct platform_device *pdev)
{
int ret;
uint32_t temp;
uint32_t flags;
/* request phy /reset line and disable it (reset) */
ret = gpio_request(GPIO_PORTC + 19, "usb-host-phy-reset");
if (ret)
return ret;
/* reset phy, phy will be disabled */
gpio_direction_output(GPIO_PORTC + 19, 0);
mdelay(10);
temp = readl(IO_ADDRESS(OTG_BASE_ADDR) + 0x600);
temp &= ~(3 << 21);
// temp &= ~((3 << 21) | 1);
// temp |= (1 << 5) | (1 << 16) | (1 << 19) | (1 << 11) | (1 << 20);
temp |= (1 << 5) | (1 << 16) | (1 << 19) | (1 << 20);
writel(temp, IO_ADDRESS(OTG_BASE_ADDR) + 0x600);
/* Enable ULPI mode in PORTSC register */
temp = readl(IO_ADDRESS(OTG_BASE_ADDR) + 0x584);
temp &= ~(3 << 30);
temp |= 2 << 30;
writel(temp, IO_ADDRESS(OTG_BASE_ADDR) + 0x584);
mdelay(10);
/* enable phy */
gpio_set_value(GPIO_PORTC + 19, 1);
mdelay(10);
// Enabling this will result in timeouts
// ret = usb3320_set_vbus_power(IO_ADDRESS(OTG_BASE_ADDR + 0x570), 1);
return ret;
}
static struct mxc_usbh_platform_data ehci2_pdata = {
.init = dlt2_usbh2_init,
};
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
mxc-ehci mxc-ehci.1: initializing i.MX USB Controller
mxc-ehci mxc-ehci.1: Freescale On-Chip EHCI Host Controller
mxc-ehci mxc-ehci.1: new USB bus registered, assigned bus number 1
Unhandled fault: external abort on non-linefetch (0x808) at 0xc88c2584
Internal error: : 808 [#1] PREEMPT
Modules linked in:
CPU: 0 Tainted: G W (2.6.31.6 #52)
PC is at ehci_hub_control+0x738/0x814
LR is at 0x1
pc : [<c0247060>] lr : [<00000001>] psr: 00000093
sp : c7819e40 ip : 00000001 fp : 00000000
r10: 20000013 r9 : c88c2584 r8 : c79b2ed0
r7 : c7818000 r6 : c79b2e00 r5 : c88c2540 r4 : 00000000
r3 : 80000000 r2 : 00000007 r1 : 80001000 r0 : 00000001
Flags: nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0005317f Table: a0004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc7818270)
Stack: (0xc7819e40 to 0xc781a000)
9e40: 00001000 c79b2ef4 00000000 c79b8c00 00000000 00000037 c03f1a2c
c79b2ed0
9e60: c79b2e00 c79b2ed0 00000000 c79b2e00 00000000 00000000 00000000
00000037
9e80: c03f1a2c c02499fc 00000000 00000000 00000001 00000000 c79b2e00
000000a0
9ea0: c79b8c00 c0232f7c c79bcaa0 c03f1a2c f4015200 c7819ec8 c002ffa0
00000000
9ec0: 00000000 c03ef330 c79b2e00 c03ef328 c79bcaa0 c024a778 00000000
00000000
9ee0: 00000000 00000037 c780f158 c03ef330 c03ef364 c040dc54 c0448fb0
c797dea0
9f00: 00000000 c040b028 c04162cc c01eff9c c040dc54 c01eef6c c7826e28
c03ef330
9f20: c03ef364 c040dc54 c01ef064 c01ef0e8 00000000 c7819f40 c040dc54
c01ee2a0
9f40: c78034d8 c7859bf0 c001febc c01eea18 c001febc c040dc54 00000000
c01eeab0
9f60: c03772d8 c001fb90 c044a210 c001febc c040dc54 00000000 c7818000
00000000
9f80: c00186cc c01ef468 c044a210 c001febc c001fb90 00000000 c7818000
c0018734
9fa0: c001fe2c c00262e0 c7819fb6 c00710a8 c00259c8 00000001 00000035
00000000
9fc0: 00000000 c001fe2c c001febc c001fb90 00000000 00000000 00000000
00000000
9fe0: 00000000 c0008744 00000000 00000000 00000000 c00273a8 08ffbf00
002ffb02
[<c0247060>] (ehci_hub_control+0x738/0x814) from [<c02499fc>]
(ehci_mxc_setup+0)
[<c02499fc>] (ehci_mxc_setup+0x304/0x368) from [<c0232f7c>] (usb_add_hcd
+0x1c4/)
[<c0232f7c>] (usb_add_hcd+0x1c4/0x5b0) from [<c024a778>]
(ehci_mxc_drv_probe+0x)
[<c024a778>] (ehci_mxc_drv_probe+0x190/0x30c) from [<c01eff9c>]
(platform_drv_p)
[<c01eff9c>] (platform_drv_probe+0x1c/0x24) from [<c01eef6c>]
(driver_probe_dev)
[<c01eef6c>] (driver_probe_device+0x88/0x180) from [<c01ef0e8>]
(__driver_attac)
[<c01ef0e8>] (__driver_attach+0x84/0x88) from [<c01ee2a0>]
(bus_for_each_dev+0x)
[<c01ee2a0>] (bus_for_each_dev+0x54/0x80) from [<c01eeab0>]
(bus_add_driver+0xb)
[<c01eeab0>] (bus_add_driver+0xb8/0x2c4) from [<c01ef468>]
(driver_register+0x5)
[<c01ef468>] (driver_register+0x58/0x140) from [<c0018734>]
(ehci_hcd_init+0x68)
[<c0018734>] (ehci_hcd_init+0x68/0xa4) from [<c00262e0>]
(do_one_initcall+0x30/)
[<c00262e0>] (do_one_initcall+0x30/0x1b0) from [<c0008744>] (kernel_init
+0xa0/0)
[<c0008744>] (kernel_init+0xa0/0x114) from [<c00273a8>]
(kernel_thread_exit+0x0)
Code: e598300c e3130010 13c13a01 13c3302a (15893000)
---[ end trace 1b75b31a2719ed1d ]---
note: swapper[1] exited with preempt_count 2
Kernel panic - not syncing: Attempted to kill init!
--
Thermotemp GmbH, Embedded-IT
Embedded Hard-/ Software and Open Source Development,
Integration and Consulting
Geschäftsstelle Siegen - Steinstraße 67 - D-57072 Siegen -
tel +49 (0)271 5513597, +49 (0)271-73681 - fax +49 (0)271 736 97
Hauptsitz - Hademarscher Weg 7 - 13503 Berlin
Tel +49 (0)30 4315205 - Fax +49 (0)30 43665002
Geschäftsführer: Jörg Friedrichs, Ole Reinhardt
Handelsregister Berlin Charlottenburg HRB 45978 UstID DE 156329280
More information about the linux-arm-kernel
mailing list