Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Apr 2014 16:41:37 -0600
From:      Ian Lepore <ian@FreeBSD.org>
To:        Winston Smith <smith.winston.101@gmail.com>
Cc:        FreeBSD ARM <freebsd-arm@FreeBSD.org>
Subject:   Re: BBB @ 1Ghz hangs with 10-STABLE (11-CURRENT is ok)
Message-ID:  <1398897697.22079.80.camel@revolution.hippie.lan>
In-Reply-To: <CADH-AwF%2B59f9%2BtDdiAcQbf2zVS5r7_AMAXQ0TG8mBs0q8bfrKg@mail.gmail.com>
References:  <CADH-AwF%2B59f9%2BtDdiAcQbf2zVS5r7_AMAXQ0TG8mBs0q8bfrKg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2014-04-30 at 18:24 -0400, Winston Smith wrote:
> After getting a 2014.01 u-boot built with Xuebing's patches, I found
> that 10-STABLE hangs at some point after the kernel has configured the
> usb hubs.  The abbreviated console log is below; since the kernel had
> booted, I was able to get a stack trace (also included below).
> 
> However, the patched u-boot works ok with 11-CURRENT.  Looking at the
> patches, it wasn't immediately apparent as to what exactly enables the
> 1Ghz mode ... maybe it's just having a newer u-boot?
> 
> Is there something specific in 11-CURRENT that enables/supports the
> 1Ghz operation?
> 
> Thanks!
> 
> 
> -W
> ---
> 
> 
> -Boot SPL 2014.01 (Apr 29 2014 - 18:25:45)
> reading args
> spl: error reading image args, err - -1
> reading bb-uboot.img
> reading bb-uboot.img
> 
> 
> U-Boot 2014.01 (Apr 29 2014 - 18:25:45)
> 
> I2C:   ready
> DRAM:  512 MiB
> NAND:  0 MiB
> MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
> *** Warning - readenv() failed, using default environment
> 
> Net:   <ethaddr> not set. Validating first E-fuse MAC
> cpsw, usb_ether
> Hit any key to stop autoboot:  0
> mmc0 is current device
> SD/MMC found on device 0
> reading bb-uEnv.txt
> reading bbubldr
> 251703 bytes read in 17 ms (14.1 MiB/s)
> reading bboneblk.dtb
> 15278 bytes read in 5 ms (2.9 MiB/s)
> ## Starting application at 0x88000054 ...
> Consoles: U-Boot console
> Compatible U-Boot API signature found @9f62b240
> 
> FreeBSD/armv6 U-Boot loader, Revision 1.2
> (root@freebsd, Tue Apr 29 12:08:39 EDT 2014)
> 
> DRAM: 512MB
> Number of U-Boot devices: 2
> U-Boot env: loaderdev not set, will probe all devices.
> Found U-Boot device: disk
>   Probing all disk devices...
>   Checking unit=0 slice=<auto> partition=<auto>... good.
> Loading /boot/defaults/loader.conf
> /boot/kernel/kernel data=0x468f08+0x17d8dc syms=[0x4+0x84b30+0x4+0x501f3]
> /boot/kernel/geom_label.ko text=0x50dc data=0x864+0x30
> syms=[0x4+0x1020+0x4+0xfe2]
> 
> Hit [Enter] to boot immediately, or any other key for command prompt.
> Booting [/boot/kernel/kernel]...
> Using DTB provided by U-Boot at address 0x0x80000100.
> Kernel entry at 0x80200100...
> 
> ...
> 
> 
> Timecounters tick every 10.000 msec
> usbus0: 480Mbps High Speed USB v2.0
> usbus1: 480Mbps High Speed USB v2.0
> ugen1.1: <Mentor Graphics> at usbus1
> uhub0: <Mentor Graphics OTG Root HUB, class 9/0, rev 2.00/1.00, addr
> 1> on usbus1
> ugen0.1: <Mentor Graphics> at usbus0
> uhub1: <Mentor Graphics OTG Root HUB, class 9/0, rev 2.00/1.00, addr
> 1> on usbus0
> mmcsd0: 4GB <SDHC SA04G 1.0 SN 628739603 MFG 09/2011 by 2 TM> at mmc0
> 48.0MHz/4bit/65535-block
> uhub0: 1 port with 1 removable, self powered
> uhub1: 1 port with 1 removable, self powered
> random: unblocking device.
> 
> KDB: enter: Break to debugger
> [ thread pid 10 tid 100002 ]
> Stopped at      $d:     ldrb    r15, [r15, r15, ror r15]!
> db> trace
> Tracing pid 10 tid 100002 td 0xc279b320
> db_trace_self() at db_trace_self
>          pc = 0xc054086c  lr = 0xc022e3c0 (db_stack_trace+0xf4)
>          sp = 0xdbe5da28  fp = 0xdbe5da40
>         r10 = 0xc07e1850
> db_stack_trace() at db_stack_trace+0xf4
>          pc = 0xc022e3c0  lr = 0xc022dd30 (db_command+0x270)
>          sp = 0xdbe5da48  fp = 0xdbe5dae8
>          r4 = 0x00000000  r5 = 0x00000000
>          r6 = 0x00000063
> db_command() at db_command+0x270
>          pc = 0xc022dd30  lr = 0xc022da94 (db_command_loop+0x60)
>          sp = 0xdbe5daf0  fp = 0xdbe5db00
>          r4 = 0xc05829b1  r5 = 0xc059dbfc
>          r6 = 0xc07e183c  r7 = 0xdbe5dcd0
>          r8 = 0xc067e3a0  r9 = 0xc067e3a4
>         r10 = 0xc063b060
> db_command_loop() at db_command_loop+0x60
>          pc = 0xc022da94  lr = 0xc023045c (db_trap+0xd8)
>          sp = 0xdbe5db08  fp = 0xdbe5dc28
>          r4 = 0x00000000  r5 = 0xc07e1848
>          r6 = 0xc067e3d0
> db_trap() at db_trap+0xd8
>          pc = 0xc023045c  lr = 0xc0399170 (kdb_trap+0xd4)
>          sp = 0xdbe5dc30  fp = 0xdbe5dc50
>          r4 = 0x00000000  r5 = 0x00000001
>          r6 = 0xc067e3d0  r7 = 0xdbe5dcd0
> kdb_trap() at kdb_trap+0xd4
>          pc = 0xc0399170  lr = 0xc05535a8 (undefinedinstruction+0x2b0)
>          sp = 0xdbe5dc58  fp = 0xdbe5dcc8
>          r4 = 0x00000000  r5 = 0xc0553240
>          r6 = 0x00000000  r7 = 0xe7ffffff
>          r8 = 0xc279b320  r9 = 0xdbe5dcd0
>         r10 = 0xc03989a4
> undefinedinstruction() at undefinedinstruction+0x2b0
>          pc = 0xc05535a8  lr = 0xc0542374 (exception_exit)
>          sp = 0xdbe5dcd0  fp = 0xdbe5dd28
>          r4 = 0x00000001  r5 = 0xdbe5ddb8
>          r6 = 0xc2805b74  r7 = 0x00060000
>          r8 = 0x00000001  r9 = 0xc064014c
>         r10 = 0xc2805a00
> exception_exit() at exception_exit
>          pc = 0xc0542374  lr = 0xc0398994 (kdb_break+0x50)
>          sp = 0xdbe5dd24  fp = 0xdbe5dd28
>          r0 = 0xc067e3b4  r1 = 0x00000000
>          r2 = 0x00000001  r3 = 0x60000193
>          r4 = 0x00000001  r5 = 0xdbe5ddb8
>          r6 = 0xc2805b74  r7 = 0x00060000
>          r8 = 0x00000001  r9 = 0xc064014c
>         r10 = 0xc2805a00 r12 = 0x00000000
> $a() at $a
>          pc = 0xc03989a8  lr = 0xc02612f0 (uart_intr+0x9c)
>          sp = 0xdbe5dd30  fp = 0xdbe5dd70
>          r4 = 0x00000000
> uart_intr() at uart_intr+0x9c
>          pc = 0xc02612f0  lr = 0xc0333050 (intr_event_handle+0x80)
>          sp = 0xdbe5dd78  fp = 0xdbe5dd98
>          r4 = 0xc267ae00  r5 = 0xdbe5ddb8
>          r6 = 0xc0666dd0  r7 = 0xc279b320
>          r8 = 0x00000000  r9 = 0xc0597b05
>         r10 = 0xc27f2c00
> intr_event_handle() at intr_event_handle+0x80
>          pc = 0xc0333050  lr = 0xc0543598 (arm_handler_execute+0x50)
>          sp = 0xdbe5dda0  fp = 0xdbe5ddb0
>          r4 = 0xdbe5ddb8  r5 = 0x00000048
>          r6 = 0xc0666dd0  r7 = 0xc07def68
>          r8 = 0x00274e80  r9 = 0xc0668184
>         r10 = 0xc08dd004
> arm_handler_execute() at arm_handler_execute+0x50
>          pc = 0xc0543598  lr = 0xc0561118 (irq_entry+0x6c)
>          sp = 0xdbe5ddb8  fp = 0xdbe5de10
>          r4 = 0x00000001  r5 = 0xc059fdf3
>          r6 = 0xc07e3490  r7 = 0xc067df4c
> irq_entry() at irq_entry+0x6c
>          pc = 0xc0561118  lr = 0xc0543bec (cpu_idle+0x24)
>          sp = 0xdbe5de0c  fp = 0xdbe5de10
>          r0 = 0x00000001  r1 = 0x00015924
>          r2 = 0x00000002  r3 = 0x00000000
>          r4 = 0x00000001  r5 = 0xc059fdf3
>          r6 = 0xc07e3490  r7 = 0xc067df4c
>          r8 = 0x00274e80  r9 = 0xc0668184
>         r10 = 0xc08dd004 r12 = 0x00000000
> sched_runnable() at sched_runnable
>          pc = 0xc038773c  lr = 0xc0388a0c (sched_idletd+0xc4)
>          sp = 0xdbe5de18  fp = 0xdbe5de38
> sched_idletd() at sched_idletd+0xc4
>          pc = 0xc0388a0c  lr = 0xc03307ac (fork_exit+0x88)
>          sp = 0xdbe5de40  fp = 0xdbe5de58
>          r4 = 0xc279b320  r5 = 0xc2798320
>          r6 = 0xc0388948  r7 = 0x00000000
>          r8 = 0xdbe5de60  r9 = 0x00000000
>         r10 = 0x00000000
> fork_exit() at fork_exit+0x88
>          pc = 0xc03307ac  lr = 0xc0551b0c (fork_trampoline+0x14)
>          sp = 0xdbe5de60  fp = 0x00000000
>          r4 = 0xc0388948  r5 = 0x00000000
>          r6 = 0x3bffcfdb  r7 = 0xf9fcd7ef
>          r8 = 0x00000000
> fork_trampoline() at fork_trampoline+0x14
>          pc = 0xc0551b0c  lr = 0xc0551b0c (fork_trampoline+0x14)
>          sp = 0xdbe5de60  fp = 0x00000000
> Unable to unwind further
> db>

That backtrace is just the idle thread; usually that's a sign that some
device driver is waiting for an interrupt to finish configuring the
device and it never gets it and just hangs.  Often usb is the culprit --
we very often rely on u-boot to set up the usb hardware and if it
doesn't the kernel hangs trying to access it.  Sometimes you just need a
"usb start" in u-boot before launching the kernel or ubldr.  Or maybe
there are some more fixes in 11 that haven't been merged back to 10 yet.

As to the 1ghz stuff, it was my understanding that the patches make
u-boot set the clock faster.  It would probably be better to just have
our kernel code do that, but I haven't had time to look at the patches
and see how much work is involved.

-- Ian





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