Re: SBus HME startup failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> it's me again with the E3500 and 2.6.29-rc2+git. I said it was working 
> fine but I have found 2 glitches and this is one of them.
> 
> It seems the SBus HME card is detected but initialization fails:
> 
> [  145.666490] sunhme.c:v3.10 August 26, 2008 David S. Miller (davem@xxxxxxxxxxxxx)
> [  145.755837] eth0: HAPPY MEAL (SBUS) 10/100baseT Ethernet 08:00:20:b6:ee:e2
> [  145.836295] happymeal: Cannot map MAC TX registers.
> [  145.895305] PCI: Enabling device: (0000:00:01.1), cmd 2
> [  145.897821] eth1: HAPPY MEAL (PCI/CheerIO) 10/100BaseT Ethernet 08:00:20:b6:ee:e2
> 
> PCI one is detected and works fine.

Another data point: SBus+PCI mixed system (HME-s on both buses) breaks 
for PCI too (I did put a PCI Quad HME into the E3500 for testing).

I did some detective work and found two possible culprits:

First, happy_meal_probe() does first happy_meal_sbus_init() and then 
happy_meal_pci_init(). All these crashes happen during SBus init 
routines. These sbus routines are actually just OF init routines 
nowadays. So happy_meal_sbus_probe_one() get feed all matching OF nodes, 
both SBus and PCI. The SBus code seems to break with the PCI nodes - 
this is the "Cannot map MAC TX registers" part.

So, should these routines filter for sbus bus type at some point? Or 
should they take over PCI too (IMHO a bad idea) and be renamed to of_* 
instead of sbus_*?

Second, I got a consistent oops in quattro_sbus_interrupt() with PCI 
Quattro card. This seems to be a related but different problem - 
happy_meal_sbus_init() does quattro_sbus_register_irqs() unconditionally 
after registering OF driver and without checking that things get set up 
correctly. Calling of_register_driver seems to call into the drivers 
probe() function several times. It seems to return success if any of its 
probe() invocations returned success, but in hme case we only may enable 
quattro irqs when all quattro cards were initialized successfully (and 
one successfully and one unsuccessfully could also breat the interrupts 
it seems).

Wondering if there are other SBUS+PCI drivers wiht problems like that... 
a quick grep under drivers/net shows no more drivers using both sbus and 
pci API-s.

Here is a dmesg excerpt with many debug printks, most should be 
self-explanatory:

[  131.645707] happy_meal_probe()
[  131.680197] happy_meal_sbus_init()
[  131.721545] hme_sbus_probe(node=fffff8004fca1600, name=SUNW,hme, is_qfe=0, model=<NULL>)
[  131.817763] happy_meal_sbus_probe_one(op=fffff8004ecdc000, is_qfe=0)
[  131.893785] happy_meal_sbus_probe_one continues to alloc_etherdev
[  131.966732] sunhme.c:v3.10 August 26, 2008 David S. Miller (davem@xxxxxxxxxxxxx)
[  132.058168] eth0: HAPPY MEAL (SBUS) 10/100baseT Ethernet 08:00:20:b6:ee:e2
[  132.138758] happy_meal_sbus_probe_one() returning success
[  132.203038] hme_sbus_probe returning 0
[  132.247906] hme_sbus_probe(node=fffff8004fc9d0c0, name=SUNW,hme, is_qfe=0, model=SUNW,cheerio)
[  132.350987] happy_meal_sbus_probe_one(op=fffff8004ec7a000, is_qfe=0)
[  132.427038] happy_meal_sbus_probe_one continues to alloc_etherdev
[  132.499978] happymeal: Cannot map MAC TX registers.
[  132.558302] happy_meal_sbus_probe_one() returning error -19
[  132.624973] hme_sbus_probe returning -19
[  132.671980] hme_sbus_probe(node=fffff8004fc99200, name=SUNW,qfe, is_qfe=1, model=SUNW,pci-qfe)
[  132.775037] happy_meal_sbus_probe_one(op=fffff8004ec7e000, is_qfe=1)
[  132.851058] happy_meal_sbus_probe_one() found sbus quattro, qp=fffff8004dbe8300
[  132.938592] happy_meal_sbus_probe_one continues to alloc_etherdev
[  133.011527] happymeal: Cannot map MAC TX registers.
[  133.069864] happy_meal_sbus_probe_one() returning error -19
[  133.136530] hme_sbus_probe returning -19
[  133.183527] hme_sbus_probe(node=fffff8004fc96f40, name=SUNW,qfe, is_qfe=1, model=SUNW,pci-qfe)
[  133.286588] happy_meal_sbus_probe_one(op=fffff8004ec7f000, is_qfe=1)
[  133.362622] happy_meal_sbus_probe_one() found sbus quattro, qp=fffff8004dbe8300
[  133.450149] happy_meal_sbus_probe_one continues to alloc_etherdev
[  133.523090] happymeal: Cannot map MAC TX registers.
[  133.581416] happy_meal_sbus_probe_one() returning error -19
[  133.648092] hme_sbus_probe returning -19
[  133.695084] hme_sbus_probe(node=fffff8004fc94c80, name=SUNW,qfe, is_qfe=1, model=SUNW,pci-qfe)
[  133.798147] happy_meal_sbus_probe_one(op=fffff8004ec7b000, is_qfe=1)
[  133.874179] happy_meal_sbus_probe_one() found sbus quattro, qp=fffff8004dbe8300
[  133.961726] happy_meal_sbus_probe_one continues to alloc_etherdev
[  134.034644] happymeal: Cannot map MAC TX registers.
[  134.092976] happy_meal_sbus_probe_one() returning error -19
[  134.159656] hme_sbus_probe returning -19
[  134.206647] hme_sbus_probe(node=fffff8004fc929c0, name=SUNW,qfe, is_qfe=1, model=SUNW,pci-qfe)
[  134.309714] happy_meal_sbus_probe_one(op=fffff8004ec77000, is_qfe=1)
[  134.385739] happy_meal_sbus_probe_one() found sbus quattro, qp=fffff8004dbe8300
[  134.473272] happy_meal_sbus_probe_one continues to alloc_etherdev
[  134.546213] happymeal: Cannot map MAC TX registers.
[  134.604545] happy_meal_sbus_probe_one() returning error -19
[  134.671207] hme_sbus_probe returning -19
[  134.718766] happy_meal_sbus_init() finished of_register_driver successfully, registering irqs
[  134.820225] quattro_sbus_register_irqs()
[  134.867195] quattro_sbus_register_irqs() requesting irq
[  134.929723] OOPS: Bogus kernel PC [0000000000000000] in fault handler
[  135.006646] OOPS: RPC [00000000005f7fa0]
[  135.053532] OOPS: RPC <quattro_sbus_interrupt+0x40/0x120>
[  135.118120] OOPS: Fault was to vaddr[200804000]


-- 
Meelis Roos (mroos@xxxxx)      http://www.cs.ut.ee/~mroos/
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux