Help debugging: Fatal kernel mode data abort: 'External Linefetch Abort (P)'

Olivier Houchard mlfbsd at ci0.org
Sun Oct 4 22:32:20 UTC 2009


> Hi Olivier,
> 
> I have tried the patch and here are the boot results:
> 
> 
> i80321: BAR0 = 20000004.00000000 BAR1 = 40000004.00000000
> i80219: BAR0 = 20000000.00000000 BAR1 = 40000000.00000000
> i80219: I/O Processor, acting as PCI host
> i80321: SBDR = 0xa0000000 SBR0 = 0x00000018 SBR1 = 0x00000020
> i80321: BANK0 = 0x10000000 BANK1 = 0x10000000
> i80321: Reserve space for private devices (Inbound Window 1)
> hi:0x00000000 lo:0x8000000c xlate:0x80000000 size:0x04000000
> i80321: RAM access (Inbound Window 2)
> hi:0x00000000 lo:0xa000000c xlate:0xa0000000 size:0x20000000
> obio0 on iq0
> uart0: <16550 or compatible> on obio0
> uart0: [FILTER]
> uart0: console (115200,n,8,1)
> itimer0: <i80321 timer> on iq0
> iopwdog0: <i80321 Watchdog, must be tickled every 7 seconds> on iq0
> pcib0: <i80321 PCI bus> on iq0
> pci0: <PCI bus> on pcib0
> Device 1 routed to irq 27
> Device 2 routed to irq 30
> Device 3 routed to irq 29
> Device 5 routed to irq 30
> Device 5 routed to irq 29
> Device 5 routed to irq 27
> em0: <Intel(R) PRO/1000 Network Connection 6.9.14> port 
> 0xfe400000-0xfe40003f mem 0-0x1ffff,0x20000-0x3ffff irq 27 at device 1.0 
> on pci0
> em0: Start: 0x00000000
> em0: End: 0x0001FFFF
> em0: Size: 0x00020000
> Fatal kernel mode data abort: 'External Linefetch Abort (P)'
> trapframe: 0xc00faad0
> FSR=00000406, FAR=Invalid,  spsr=200000d3
> r0 =c00d0400, r1 =cd5bf000, r2 =00000010, r3 =0000000a
> r4 =c317e008, r5 =cd5bf000, r6 =c00d0400, r7 =c130212c
> r8 =c317e008, r9 =c0071180, r10=c317e000, r11=c00fab40
> r12=c00fab44, ssp=c00fab1c, slr=c106a96c, pc =c106a968
> 
> [thread pid 0 tid 100000 ]
> Stopped at      e1000_init_script_state_82541+0x24c:    blx     r7
> db>
> 
> 
> 
> As you can see I added some debug to if_em.c as such:
> 
> Index: sys/dev/e1000/if_em.c
> ===================================================================
> --- sys/dev/e1000/if_em.c    (revision 197472)
> +++ sys/dev/e1000/if_em.c    (working copy)
> @@ -2770,6 +2770,9 @@
>         rman_get_bustag(adapter->memory);
>     adapter->osdep.mem_bus_space_handle =
>         rman_get_bushandle(adapter->memory);
> +    device_printf(dev,"Start: 0x%08lX\n", rman_get_start(adapter->memory));
> +    device_printf(dev,"End: 0x%08lX\n", rman_get_end(adapter->memory));
> +    device_printf(dev,"Size: 0x%08lX\n", rman_get_size(adapter->memory));
>     adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
> 
>     /* Only older adapters use IO mapping */
> 
> 
> But the memory mapping seems to be missing the most significant 0x8.
> 

I fail to see how it happens.
Could you printf the value of sc->sc_mem once set in i80321_pci_attach(),
and if it appears to be 0, the value of i80321_softc->sc_owin[0].owin_xlate_lo 
at the different points it can be set ?

Thanks a lot,

Olivier


More information about the freebsd-hackers mailing list