Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 May 2009 18:55:18 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        freebsd-usb@freebsd.org
Cc:        Gavin Atkinson <gavin@freebsd.org>
Subject:   Re: USB panic on 8.0/arm
Message-ID:  <200905121855.19123.hselasky@c2i.net>
In-Reply-To: <1242146062.5455.60.camel@buffy.york.ac.uk>
References:  <1242146062.5455.60.camel@buffy.york.ac.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 12 May 2009, Gavin Atkinson wrote:
> Hi all,
>
> I have an NSLU2, which I am netbooting.  I've been doing most of my work
> on it with USB removed from the kernel because the old stack would
> always panic.  I've recently been trying the new USB stack, and have
> found that it still panics most of the time on boot.  But not all the
> time.
>
> Firstly, please note that the version of Linux that was installed onto
> this hardware when I got it (not the factory installed OS, though) also
> seems to have problems most of the time with the USB controller, so I
> guess there is a chance that this is a hardware problem.
>
> That said, here are the symptoms:  No USB in kernel, boots fine every
> time.
>
> New USB stack in the kernel: Just once, I've seen it probe and attach
> just fine.  Here's proof:
>
> [snip]
> real memory  = 33554432 (32 MB)
> avail memory = 25829376 (24 MB)
> ixp0: <Intel IXP4XX> on motherboard
> ixp0: 37603<RCOMP,USB,ETH0,ETH1,PCI>
> pcib0: <IXP4XX PCI Bus> on ixp0
> pci0: <PCI bus> on pcib0
> ohci0: <NEC uPD 9210 USB controller> irq 28 at device 1.0 on pci0
> ohci0: [ITHREAD]
> usbus0: <NEC uPD 9210 USB controller> on ohci0
> ohci1: <NEC uPD 9210 USB controller> irq 27 at device 1.1 on pci0
> ohci1: [ITHREAD]
> usbus1: <NEC uPD 9210 USB controller> on ohci1
> ehci0: <NEC uPD 720100 USB 2.0 controller> irq 26 at device 1.2 on pci0
> ehci0: [ITHREAD]
> usbus2: EHCI version 1.0
> usbus2: <NEC uPD 720100 USB 2.0 controller> on ehci0
> ixpclk0: <IXP4XX Timer> on ixp0
> [snip]
>
> Every other time I've booted with USB compiled in, I'll get a panic:
>
> RedBoot> go
> KDB: debugger backends: ddb
> KDB: current backend: ddb
> Copyright (c) 1992-2009 The FreeBSD Project.
> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
>         The Regents of the University of California. All rights reserved.
> FreeBSD is a registered trademark of The FreeBSD Foundation.
> FreeBSD 8.0-CURRENT #5: Fri May  8 16:28:01 BST 2009
>     root@buffy.york.ac.uk:/usr/obj/arm/usr/src-test/sys/NSLU
> CPU: IXP425 266MHz rev 1 (ARMv5TE) (XScale core)
>   DC enabled IC enabled WB enabled LABT branch prediction enabled
>   32KB/32B 32-way Instruction cache
>   32KB/32B 32-way write-back-locking Data cache
> real memory  = 33554432 (32 MB)
> avail memory = 25829376 (24 MB)
> ixp0: <Intel IXP4XX> on motherboard
> ixp0: 37603<RCOMP,USB,ETH0,ETH1,PCI>
> pcib0: <IXP4XX PCI Bus> on ixp0
> pci0: <PCI bus> on pcib0
> ohci0: <NEC uPD 9210 USB controller> irq 28 at device 1.0 on pci0
> ohci0: [ITHREAD]
> Fatal kernel mode data abort: 'External Linefetch Abort (P)'
> trapframe: 0xc00fbafc
> FSR=00000406, FAR=Invalid,  spsr=600000d3
> r0 =c0ae4000, r1 =f8000000, r2 =00000034, r3 =c0ae407c
> r4 =00001270, r5 =00001278, r6 =00001274, r7 =00000003
> r8 =00001140, r9 =c0ae5000, r10=00001140, r11=c00fbb88
> r12=c0ae407c, ssp=c00fbb48, slr=c023c14c, pc =c023c148
>
> [thread pid 0 tid 100000 ]
> Stopped at      ohci_suspend+0x140c:    ldr     r15, [r3, #0x024]
> db> bt
> Tracing pid 0 tid 100000 td 0xc04fd110
> db_trace_thread() at db_trace_thread+0xc
> scp=0xc041ee94 rlv=0xc0213778 (db_command_init+0x4c8)
>         rsp=0xc00fb7f4 rfp=0xc00fb810
>         r10=0x00000001 r9=0xc0503bd8
>         r8=0xc04fa75c r7=0x00000062 r6=0x00000002 r5=0x00000010
>         r4=0xc04fd110
> db_command_init() at db_command_init+0x3f0
> scp=0xc02136a0 rlv=0xc0213008 (db_skip_to_eol+0x49c)
>         rsp=0xc00fb814 rfp=0xc00fb8b8
>         r5=0x00000000 r4=0xc04cf0c0
> db_skip_to_eol() at db_skip_to_eol+0x1d0
> scp=0xc0212d3c rlv=0xc0213174 (db_command_loop+0x60)
>         rsp=0xc00fb8bc rfp=0xc00fb8c8
>         r10=0x00000000 r8=0x00000406
>         r7=0xc00fbafc r6=0xc0503bd0 r5=0x600000d3 r4=0xc00fb8d4
> db_command_loop() at db_command_loop+0xc
> scp=0xc0213120 rlv=0xc02153b0 (X_db_sym_numargs+0xf4)
>         rsp=0xc00fb8cc rfp=0xc00fb9e8
> X_db_sym_numargs() at X_db_sym_numargs+0x14
> scp=0xc02152d0 rlv=0xc02cf8e8 (kdb_trap+0xa4)
>         rsp=0xc00fb9ec rfp=0xc00fba14
>         r4=0x000000c0
> kdb_trap() at kdb_trap+0xc
> scp=0xc02cf850 rlv=0xc042e844 (badaddr_read+0x280)
>         rsp=0xc00fba18 rfp=0xc00fba34
>         r10=0xc00fbef8 r9=0x00000000
>         r8=0xc00fbafc r7=0x00000406 r6=0x00000000 r5=0x00000406
>         r4=0xc00fbafc
> badaddr_read() at badaddr_read+0xfc
> scp=0xc042e6c0 rlv=0xc042ec08 (prefetch_abort_handler+0x36c)
>         rsp=0xc00fba38 rfp=0xc00fba58
>         r6=0xc04fd110 r5=0xc00fbef8
>         r4=0xc00fbafc
> prefetch_abort_handler() at prefetch_abort_handler+0x2a4
> scp=0xc042eb40 rlv=0xc042edd4 (data_abort_handler+0x110)
>         rsp=0xc00fba5c rfp=0xc00fbaf8
>         r7=0xc04fd110 r6=0x00001274
>         r5=0xffff1004 r4=0xc05189ec
> data_abort_handler() at data_abort_handler+0xc
> scp=0xc042ecd0 rlv=0xc04208dc (address_exception_entry+0x50)
>         rsp=0xc00fbafc rfp=0xc00fbb88
>         r10=0x00001140 r9=0xc0ae5000
>         r8=0x00001140 r7=0x00000003 r6=0x00001274 r5=0xffff1004
>         r4=0x01070000
> ohci_suspend() at ohci_suspend+0x1138
> scp=0xc023be74 rlv=0xc023ccc0 (ohci_init+0x208)
>         rsp=0xc00fbb8c rfp=0xc00fbbc4
>         r10=0x00001140 r9=0x00000006
>         r8=0x00001140 r7=0xc0ae5aa0 r6=0x00000000 r5=0xc0ae5000
>         r4=0x00000000
> ohci_init() at ohci_init+0xc
> scp=0xc023cac4 rlv=0xc023e6ac (ohci_interrupt+0x1990)
>         rsp=0xc00fbbc8 rfp=0xc00fbc00
>         r10=0xc0ae5aa0 r9=0x00000009
>         r8=0xc0a9ee80 r7=0xc0ae5000 r6=0x00001154 r5=0x00001150
>         r4=0x00001268
> ohci_interrupt() at ohci_interrupt+0x1380
> scp=0xc023e09c rlv=0xc02c9fb0 (device_attach+0x2c8)
>         rsp=0xc00fbc04 rfp=0xc00fbc40
>         r10=0xc0a9ee80 r8=0xffffffff
>         r7=0xc02c8640 r6=0xc0a9eecc r5=0x80000000 r4=0xc0ae2000
> device_attach() at device_attach+0xc
> scp=0xc02c9cf4 rlv=0xc02cac00 (device_probe_and_attach+0x34)
>         rsp=0xc00fbc44 rfp=0xc00fbc54
>         r10=0xc0ae2000 r8=0xffffffff
>         r7=0xc02c8640 r6=0x00000000 r5=0x00000000 r4=0xc0a9ee80
> device_probe_and_attach() at device_probe_and_attach+0xc
> scp=0xc02cabd8 rlv=0xc02cacf0 (bus_generic_attach+0x20)
>         rsp=0xc00fbc58 rfp=0xc00fbc68
>         r4=0xc0a9ee80
> bus_generic_attach() at bus_generic_attach+0xc
> scp=0xc02cacdc rlv=0xc022a190 (pci_add_children+0x240)
>         rsp=0xc00fbc6c rfp=0xc00fbc8c
>         r4=0xc0ae2000
> pci_add_children() at pci_add_children+0x154
> scp=0xc022a0a4 rlv=0xc02c9fb0 (device_attach+0x2c8)
>         rsp=0xc00fbc90 rfp=0xc00fbccc
>         r6=0xc0ae204c r5=0x80000000
>         r4=0xc0a9d380
> device_attach() at device_attach+0xc
> scp=0xc02c9cf4 rlv=0xc02cac00 (device_probe_and_attach+0x34)
>         rsp=0xc00fbcd0 rfp=0xc00fbce0
>         r10=0xc0a9d380 r8=0xffffffff
>         r7=0xc02c8640 r6=0xc0a9d380 r5=0xc0ae4000 r4=0xc0ae2000
> device_probe_and_attach() at device_probe_and_attach+0xc
> scp=0xc02cabd8 rlv=0xc02cacf0 (bus_generic_attach+0x20)
>         rsp=0xc00fbce4 rfp=0xc00fbcf4
>         r4=0xc0ae2000
> bus_generic_attach() at bus_generic_attach+0xc
> scp=0xc02cacdc rlv=0xc0433f50 (cpu_initclocks+0x1104)
>         rsp=0xc00fbcf8 rfp=0xc00fbd40
>         r4=0xffffffff
> cpu_initclocks() at cpu_initclocks+0xe3c
> scp=0xc0433c88 rlv=0xc02c9fb0 (device_attach+0x2c8)
>         rsp=0xc00fbd44 rfp=0xc00fbd80
>         r6=0xc0a9d3cc r5=0x80000000
>         r4=0xc0a9d500
> device_attach() at device_attach+0xc
> scp=0xc02c9cf4 rlv=0xc02cac00 (device_probe_and_attach+0x34)
>         rsp=0xc00fbd84 rfp=0xc00fbd94
>         r10=0xc0a9d500 r8=0xffffffff
>         r7=0xc02c8640 r6=0xc0a9d500 r5=0xc0a9d480 r4=0xc0a9d380
> device_probe_and_attach() at device_probe_and_attach+0xc
> scp=0xc02cabd8 rlv=0xc02cacf0 (bus_generic_attach+0x20)
>         rsp=0xc00fbd98 rfp=0xc00fbda8
>         r4=0xc0a9d380
> bus_generic_attach() at bus_generic_attach+0xc
> scp=0xc02cacdc rlv=0xc0432be0 (arm_unmask_irq+0x894)
>         rsp=0xc00fbdac rfp=0xc00fbdec
>         r4=0xc0a9d500
> arm_unmask_irq() at arm_unmask_irq+0x534
> scp=0xc0432880 rlv=0xc02c9fb0 (device_attach+0x2c8)
>         rsp=0xc00fbdf0 rfp=0xc00fbe2c
>         r6=0xc0a9d54c r5=0x80000000
>         r4=0xc0a9d680
> device_attach() at device_attach+0xc
> scp=0xc02c9cf4 rlv=0xc02cac00 (device_probe_and_attach+0x34)
>         rsp=0xc00fbe30 rfp=0xc00fbe40
>         r10=0xc0a9d680 r8=0xffffffff
>         r7=0xc02c8640 r6=0xc0a9d6cc r5=0x80000000 r4=0xc0a9d500
> device_probe_and_attach() at device_probe_and_attach+0xc
> scp=0xc02cabd8 rlv=0xc02cacf0 (bus_generic_attach+0x20)
>         rsp=0xc00fbe44 rfp=0xc00fbe54
>         r4=0xc0a9d500
> bus_generic_attach() at bus_generic_attach+0xc
> scp=0xc02cacdc rlv=0xc0423594 (minidumpsys+0xb18)
>         rsp=0xc00fbe58 rfp=0xc00fbe68
>         r4=0xc0a9d680
> minidumpsys() at minidumpsys+0xb08
> scp=0xc0423584 rlv=0xc02c9fb0 (device_attach+0x2c8)
>         rsp=0xc00fbe6c rfp=0xc00fbea8
>         r4=0xc048f730
> device_attach() at device_attach+0xc
> scp=0xc02c9cf4 rlv=0xc02cac00 (device_probe_and_attach+0x34)
>         rsp=0xc00fbeac rfp=0xc00fbebc
>         r10=0x0000000a r8=0x00000000
>         r7=0x00200198 r6=0x00000006 r5=0x002001a4 r4=0xc0a9d680
> device_probe_and_attach() at device_probe_and_attach+0xc
> scp=0xc02cabd8 rlv=0xc02cac2c (root_bus_configure+0x28)
>         rsp=0xc00fbec0 rfp=0xc00fbed0
>         r4=0xc0a9d680
> root_bus_configure() at root_bus_configure+0xc
> scp=0xc02cac10 rlv=0xc0419e48 (xdr_sizeof+0x1d0)
>         rsp=0xc00fbed4 rfp=0xc00fbee0
>         r4=0xc0491d3c
> xdr_sizeof() at xdr_sizeof+0x1cc
> scp=0xc0419e44 rlv=0xc0274d28 (mi_startup+0xdc)
>         rsp=0xc00fbee4 rfp=0xc00fbef4
> mi_startup() at mi_startup+0xc
> scp=0xc0274c58 rlv=0xc020023c (btext+0x13c)
>         rsp=0xc00fbef8 rfp=0x00000000
>         r4=0x0020027c
> db>
>
> Any suggestions as to what I can test or how I can get any useful
> information?
>

In :

src/sys/dev/usb/controller/ohci_pci.c

Can you try to move the pci busmaster enable call further down in the attach 
routine, until the I/O resources are setup, then add before enable busmaster:

#define OBARR(sc) bus_space_barrier((sc)->sc_io_tag, (sc)->sc_io_hdl, 0, 
(sc)->sc_io_size, \
                        BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE)
#define OWRITE1(sc, r, x) \
 do { OBARR(sc); bus_space_write_1((sc)->sc_io_tag, (sc)->sc_io_hdl, (r), 
(x)); } while (0)

        OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_HCR);     /* Reset HC */

I'm not sure if it helps. It's just a guess.

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905121855.19123.hselasky>