I have Sun Ultra40 workstation. Southbridge is nVidia CrushK8-04/nforce
commit958a1f308a272cb0fcb0e280e2815893a86df457
authorRoman Kononov <kononov195-lbl@yahoo.com>
Fri, 2 Feb 2007 22:40:10 +0000 (2 22:40 +0000)
committerRonald G. Minnich <rminnich@gmail.com>
Fri, 2 Feb 2007 22:40:10 +0000 (2 22:40 +0000)
treef5ab101b5e6708483539061d60185de9807bee94
parentff54db47fd116b8b460fa1453623dea487fb0234
I have Sun Ultra40 workstation. Southbridge is nVidia CrushK8-04/nforce
2200 (too many names, sounds like a criminal).

1) Linuxbios loads kernel A; kernel A loads kernel B. Everything works
fine.

2) Then I push the reset button.

3) Linuxbios loads kernel A; kernel A loads kernel B. Kernel B complains
about wrong checksum of the mptable and crushes later.

An investigation showed that in 3), short after kernel A (v2.6.19.2)
sets
the Bus Master Enable bit of the nVidia's USB1 controller
(pci_set_master()),
the mptable gets two bytes at physical address 0x80 damaged.

Nothing is plugged to the USB ports. Other two Sun workstations had the
same
behavior. This does not make sense to me unless the controller has a HW
bug.

I believe, this should better be fixed in the kernel USB driver.

For now this patch offers a possibility for linuxbios to reset the USB
controller by setting HostControllerReset bit in HcCommandStatus
Register.
It is enablead by using 'register "usb1_hc_reset"="1"' in 'chip
southbridge/nvidia/ck804' section of the mainboard's Config.lb.

Signed-off-by: Roman Kononov <kononov195-lbl@yahoo.com>
Acked-by: Ronald G. Minnich <rminnich@gmail.com
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2546 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
src/southbridge/nvidia/ck804/chip.h
src/southbridge/nvidia/ck804/ck804_usb.c