Added: open FINAL_MAINBOARD_FIXUP. If this is set, then the function

final_mainboard_fixup
will be called as the last step in intel_main before calling linuxbiosmain.

Added a final_mainboard_fixup function to the winfast mainboard.c

added a final_southbridge_fixup to southbridge.c for the sis630.

In all cases, this is to get ethernet working until we resolve some problems
with the ethernet interface. Problem is is bar0 does not reliably take the
address  I put into it. If I set 0x2401, sometimes it reads back as 0x2001.
This makes linux unhappy, since 0x2001 is already in use. Second, the
COMMAND bit probing in linuxpci.c does not realize that the enet device
can be a busmaster. So we jam register 0x4 to 0x7. Finally, the interrupt line
is getting zero in zero_irq_settings, but the irq table has no info on
this device, with the result that the interface comes up with no IRQ.
So we set reg 0x3c to 0xb, a known-good value.

Ethernet now works fine on my winfast 6300.

ron
This commit is contained in:
Ronald G. Minnich 2000-10-20 16:54:05 +00:00
commit 2346f26a98
3 changed files with 12 additions and 5 deletions

View file

@ -9,6 +9,7 @@ CPUFLAGS += -DENABLE_FIXED_AND_VARIABLE_MTRRS
CPUFLAGS += -DINBUF_COPY
CPUFLAGS += -DUSE_DOC_MIL
CPUFLAGS += -DCMD_LINE='"root=/dev/hda1 single"'
CPUFLAGS += -DFINAL_MAINBOARD_FIXUP
LINUX=$(TOP)/../linux-2.4.0-test6.sis

View file

@ -3,7 +3,12 @@
void
mainboard_fixup(void)
{
void southbridge_fixup(void);
southbridge_fixup();
printk(KERN_INFO "Mainboard fixup done for Winfast 6300 (and similar)\n");
}
void
final_mainboard_fixup(void)
{
void final_southbridge_fixup(void);
final_southbridge_fixup();
printk(KERN_INFO "Final mainboard fixup done for Winfast 6300 (and similar)\n");
}

View file

@ -82,13 +82,14 @@ void enable_floppy()
// simple fixup (which we hope can leave soon) for the sis southbridge part
void
southbridge_fixup()
final_southbridge_fixup()
{
struct pci_dev *pcidev;
// ethernet fixup. This should all work, and doesn't, yet.
// so we hack it for now.
pcidev = pci_find_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503,
// need a manifest constant for the enet device.
pcidev = pci_find_device(PCI_VENDOR_ID_SI, 0x0900,
(void *)NULL);
if (pcidev != NULL) {
u32 bar0 = 0xb001;