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
19 lines
485 B
C
19 lines
485 B
C
#ifndef CK804_CHIP_H
|
|
#define CK804_CHIP_H
|
|
|
|
struct southbridge_nvidia_ck804_config
|
|
{
|
|
unsigned int usb1_hc_reset : 1;
|
|
unsigned int ide0_enable : 1;
|
|
unsigned int ide1_enable : 1;
|
|
unsigned int sata0_enable : 1;
|
|
unsigned int sata1_enable : 1;
|
|
unsigned long nic_rom_address;
|
|
unsigned long raid_rom_address;
|
|
unsigned int mac_eeprom_smbus;
|
|
unsigned int mac_eeprom_addr;
|
|
};
|
|
struct chip_operations;
|
|
extern struct chip_operations southbridge_nvidia_ck804_ops;
|
|
|
|
#endif /* CK804_CHIP_H */
|