This does the following:
cd coreboot/src/southbridge svn mv i82801ca i82801cx svn mv i82801dbm i82801dx svn mv i82801er i82801ex svn copy i82801xx i82801bx svn mv i82801xx i82801ax Plus, fixing up the filenames in these directories and the romstage.c and Kconfig files of the mainboards using those drivers. Plus, switching the thomson ip1000 and rca rm4100 to the i82801dx driver. There's a lot more to be done, like - adding device IDs for the ICH3 and newer drivers that have been kept in i82801xx so far - drop the additional parts support from the ax and bx drivers. Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> Acked-by: Joseph Smith <joe@settoplinux.org> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5167 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
be07eb29bc
commit
138be8315b
154 changed files with 2484 additions and 405 deletions
|
@ -23,7 +23,7 @@ config BOARD_ASUS_MEW_AM
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82810
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801AX
|
||||
select SUPERIO_SMSC_SMSCSUPERIO
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -7,7 +7,7 @@ chip northbridge/intel/i82810 # Northbridge
|
|||
device pci_domain 0 on # PCI domain
|
||||
device pci 0.0 on end # Graphics Memory Controller Hub (GMCH)
|
||||
device pci 1.0 on end # Chipset Graphics Controller (CGC)
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801ax # Southbridge
|
||||
register "ide0_enable" = "1"
|
||||
register "ide1_enable" = "1"
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ax/i82801ax_early_smbus.c"
|
||||
#include "northbridge/intel/i82810/raminit.h"
|
||||
#include "lib/debug.c"
|
||||
#include "pc80/udelay_io.c"
|
||||
|
|
|
@ -23,7 +23,7 @@ config BOARD_ASUS_MEW_VM
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82810
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801AX
|
||||
select SUPERIO_SMSC_LPC47B272
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -4,7 +4,7 @@ chip northbridge/intel/i82810
|
|||
device pci 1.0 on # Onboard Video
|
||||
# device pci 1.0 on end
|
||||
end
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801ax # Southbridge
|
||||
register "ide0_enable" = "1"
|
||||
register "ide1_enable" = "1"
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#define SERIAL_DEV PNP_DEV(0x2e, LPC47B272_SP1)
|
||||
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ax/i82801ax_early_smbus.c"
|
||||
#include "lib/debug.c"
|
||||
#include "pc80/udelay_io.c"
|
||||
#include "lib/delay.c"
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_DELL_S1850
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7520
|
||||
select SOUTHBRIDGE_INTEL_I82801ER
|
||||
select SOUTHBRIDGE_INTEL_I82801EX
|
||||
select SOUTHBRIDGE_INTEL_PXHD
|
||||
select SUPERIO_NSC_PC8374
|
||||
select ROMCC
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
chip northbridge/intel/e7520 # mch
|
||||
device pci_domain 0 on
|
||||
chip southbridge/intel/i82801er # i82801er
|
||||
chip southbridge/intel/i82801ex # i82801er
|
||||
# USB ports
|
||||
device pci 1d.0 on end
|
||||
device pci 1d.1 on end
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ex/i82801ex_early_smbus.c"
|
||||
#include "northbridge/intel/e7520/raminit.h"
|
||||
#include "superio/nsc/pc8374/pc8374_early_init.c"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_DIGITALLOGIC_ADL855PC
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_MPGA479M
|
||||
select NORTHBRIDGE_INTEL_I855
|
||||
select SOUTHBRIDGE_INTEL_I82801DBM
|
||||
select SOUTHBRIDGE_INTEL_I82801DX
|
||||
select SUPERIO_WINBOND_W83627HF
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -2,7 +2,7 @@ chip northbridge/intel/i855
|
|||
device pci_domain 0 on
|
||||
device pci 0.0 on end
|
||||
device pci 1.0 on end
|
||||
chip southbridge/intel/i82801dbm
|
||||
chip southbridge/intel/i82801dx
|
||||
# pci 11.0 on end
|
||||
# pci 11.1 on end
|
||||
# pci 11.2 on end
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801dbm/i82801dbm_early_smbus.c"
|
||||
#include "southbridge/intel/i82801dx/i82801dx.h"
|
||||
#include "southbridge/intel/i82801dx/i82801dx_early_smbus.c"
|
||||
#include "northbridge/intel/i855/raminit.h"
|
||||
|
||||
#if 0
|
||||
|
|
|
@ -26,7 +26,7 @@ config BOARD_HP_E_VECTRA_P2706T
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82810
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801AX
|
||||
select SUPERIO_NSC_PC87360
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -8,7 +8,7 @@ chip northbridge/intel/i82810 # Northbridge
|
|||
device pci_domain 0 on
|
||||
device pci 0.0 on end # Host bridge
|
||||
device pci 1.0 on end # Onboard VGA
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801ax # Southbridge
|
||||
register "ide0_enable" = "1"
|
||||
register "ide1_enable" = "1"
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "northbridge/intel/i82810/raminit.h"
|
||||
#include "cpu/x86/mtrr/earlymtrr.c"
|
||||
#include "cpu/x86/bist.h"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ax/i82801ax_early_smbus.c"
|
||||
#include "pc80/udelay_io.c"
|
||||
#include "lib/debug.c"
|
||||
#include "northbridge/intel/i82810/raminit.c"
|
||||
|
|
|
@ -4,7 +4,7 @@ config BOARD_INTEL_JARRELL
|
|||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7520
|
||||
select SOUTHBRIDGE_INTEL_PXHD
|
||||
select SOUTHBRIDGE_INTEL_I82801ER
|
||||
select SOUTHBRIDGE_INTEL_I82801EX
|
||||
select SUPERIO_NSC_PC87427
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -17,7 +17,7 @@ chip northbridge/intel/e7520
|
|||
end
|
||||
end
|
||||
device pci 06.0 on end
|
||||
chip southbridge/intel/i82801er # i82801er
|
||||
chip southbridge/intel/i82801ex # i82801er
|
||||
device pci 1d.0 on end
|
||||
device pci 1d.1 on end
|
||||
device pci 1d.2 on end
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ex/i82801ex_early_smbus.c"
|
||||
#include "northbridge/intel/e7520/raminit.h"
|
||||
#include "superio/nsc/pc87427/pc87427.h"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
|
|
|
@ -4,7 +4,7 @@ config BOARD_INTEL_XE7501DEVKIT
|
|||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7501
|
||||
select SOUTHBRIDGE_INTEL_I82870
|
||||
select SOUTHBRIDGE_INTEL_I82801CA
|
||||
select SOUTHBRIDGE_INTEL_I82801CX
|
||||
select SUPERIO_SMSC_LPC47B272
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -20,7 +20,7 @@ chip northbridge/intel/e7501
|
|||
end
|
||||
end
|
||||
device pci 6.0 on end # E7501 Power management registers? (undocumented)
|
||||
chip southbridge/intel/i82801ca
|
||||
chip southbridge/intel/i82801cx
|
||||
device pci 1d.0 off end # USB (might not work, Southbridge code needs looking at)
|
||||
device pci 1d.1 off end # USB (not populated)
|
||||
device pci 1d.2 off end # USB (not populated)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <arch/romcc_io.h>
|
||||
#include <cpu/x86/lapic.h>
|
||||
#include "pc80/mc146818rtc_early.c"
|
||||
#include "southbridge/intel/i82801ca/cmos_failover.c"
|
||||
#include "southbridge/intel/i82801cx/cmos_failover.c"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
#include "northbridge/intel/e7501/reset_test.c"
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
void i82801ca_hard_reset(void);
|
||||
void i82801cx_hard_reset(void);
|
||||
|
||||
void hard_reset(void)
|
||||
{
|
||||
i82801ca_hard_reset();
|
||||
i82801cx_hard_reset();
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801ca/i82801ca_early_smbus.c"
|
||||
#include "southbridge/intel/i82801cx/i82801cx_early_smbus.c"
|
||||
#include "northbridge/intel/e7501/raminit.h"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
#include "northbridge/intel/e7501/debug.c"
|
||||
|
|
|
@ -23,7 +23,7 @@ config BOARD_MITAC_6513WU
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82810
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801AX
|
||||
select SUPERIO_SMSC_SMSCSUPERIO
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -27,7 +27,7 @@ chip northbridge/intel/i82810 # Northbridge
|
|||
device pci_domain 0 on # PCI domain
|
||||
device pci 0.0 on end # Graphics Memory Controller Hub (GMCH)
|
||||
device pci 1.0 on end
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801ax # Southbridge
|
||||
register "pirqa_routing" = "0x03"
|
||||
register "pirqb_routing" = "0x05"
|
||||
register "pirqc_routing" = "0x09"
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ax/i82801ax_early_smbus.c"
|
||||
#include "northbridge/intel/i82810/raminit.h"
|
||||
#include "lib/debug.c"
|
||||
#include "pc80/udelay_io.c"
|
||||
|
|
|
@ -23,7 +23,7 @@ config BOARD_MSI_MS_6178
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82810
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801AX
|
||||
select SUPERIO_WINBOND_W83627HF
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -27,7 +27,7 @@ chip northbridge/intel/i82810 # Northbridge
|
|||
device pci_domain 0 on
|
||||
device pci 0.0 on end # Host bridge
|
||||
device pci 1.0 on end # Onboard VGA
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801ax # Southbridge
|
||||
register "ide0_enable" = "1"
|
||||
register "ide1_enable" = "1"
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "northbridge/intel/i82810/raminit.h"
|
||||
#include "cpu/x86/mtrr/earlymtrr.c"
|
||||
#include "cpu/x86/bist.h"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ax/i82801ax_early_smbus.c"
|
||||
#include "pc80/udelay_io.c"
|
||||
#include "lib/debug.c"
|
||||
#include "northbridge/intel/i82810/raminit.c"
|
||||
|
|
|
@ -23,7 +23,7 @@ config BOARD_NEC_POWERMATE_2000
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82810
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801AX
|
||||
select SUPERIO_SMSC_SMSCSUPERIO
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -7,7 +7,7 @@ chip northbridge/intel/i82810 # Northbridge
|
|||
device pci_domain 0 on
|
||||
device pci 0.0 on end # Host bridge
|
||||
device pci 1.0 off end # Onboard video
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801ax # Southbridge
|
||||
register "ide0_enable" = "1"
|
||||
register "ide1_enable" = "1"
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "northbridge/intel/i82810/raminit.h"
|
||||
#include "cpu/x86/mtrr/earlymtrr.c"
|
||||
#include "cpu/x86/bist.h"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ax/i82801ax_early_smbus.c"
|
||||
#include "pc80/udelay_io.c"
|
||||
#include "northbridge/intel/i82810/raminit.c"
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_RCA_RM4100
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82830
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801DX
|
||||
select SUPERIO_SMSC_SMSCSUPERIO
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
|
|
@ -2,7 +2,7 @@ chip northbridge/intel/i82830 # Northbridge
|
|||
device pci_domain 0 on # PCI domain
|
||||
device pci 0.0 on end # Host bridge
|
||||
device pci 2.0 on end # VGA (Intel 82830 CGC)
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801dx # Southbridge
|
||||
register "pirqa_routing" = "0x05"
|
||||
register "pirqb_routing" = "0x06"
|
||||
register "pirqc_routing" = "0x07"
|
||||
|
|
|
@ -34,8 +34,8 @@ static void mb_gpio_init(void)
|
|||
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
||||
|
||||
/* Set the value for GPIO base address register and enable GPIO. */
|
||||
pci_write_config32(dev, GPIO_BASE_ICH0_5, (ICH_IO_BASE_ADDR | 1));
|
||||
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
||||
pci_write_config32(dev, GPIO_BASE, (ICH_IO_BASE_ADDR | 1));
|
||||
pci_write_config8(dev, GPIO_CNTL, 0x10);
|
||||
|
||||
/* Set GPIO23 to high, this enables the LAN controller. */
|
||||
udelay(10);
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
|
||||
#include "northbridge/intel/i82830/raminit.h"
|
||||
#include "northbridge/intel/i82830/memory_initialized.c"
|
||||
#include "southbridge/intel/i82801xx/i82801xx.h"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_reset.c"
|
||||
#include "southbridge/intel/i82801dx/i82801dx.h"
|
||||
#include "southbridge/intel/i82801dx/i82801dx_reset.c"
|
||||
#include "cpu/x86/mtrr/earlymtrr.c"
|
||||
#include "cpu/x86/bist.h"
|
||||
#include "spd_table.h"
|
||||
|
@ -44,7 +44,7 @@
|
|||
|
||||
#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
|
||||
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801dx/i82801dx_early_smbus.c"
|
||||
|
||||
/**
|
||||
* The onboard 64MB PC133 memory does not have a SPD EEPROM so the
|
||||
|
@ -127,4 +127,4 @@ static void main(unsigned long bist)
|
|||
/* Check RAM. */
|
||||
/* ram_check(0, 640 * 1024); */
|
||||
/* ram_check(64512 * 1024, 65536 * 1024); */
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_SUPERMICRO_X6DHE_G2
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7520
|
||||
select SOUTHBRIDGE_INTEL_I82801ER
|
||||
select SOUTHBRIDGE_INTEL_I82801EX
|
||||
select SOUTHBRIDGE_INTEL_PXHD
|
||||
select SUPERIO_NSC_PC87427
|
||||
select ROMCC
|
||||
|
|
|
@ -6,7 +6,7 @@ chip northbridge/intel/e7520 # MCH
|
|||
device pnp 00.3 off end
|
||||
end
|
||||
device pci_domain 0 on
|
||||
chip southbridge/intel/i82801er # ICH5R
|
||||
chip southbridge/intel/i82801ex # ICH5R
|
||||
register "pirq_a_d" = "0x0b070a05"
|
||||
register "pirq_e_h" = "0x0a808080"
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ex/i82801ex_early_smbus.c"
|
||||
#include "northbridge/intel/e7520/raminit.h"
|
||||
#include "superio/nsc/pc87427/pc87427.h"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_SUPERMICRO_X6DHR_IG
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7520
|
||||
select SOUTHBRIDGE_INTEL_I82801ER
|
||||
select SOUTHBRIDGE_INTEL_I82801EX
|
||||
select SOUTHBRIDGE_INTEL_PXHD
|
||||
select SUPERIO_WINBOND_W83627HF
|
||||
select ROMCC
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
chip northbridge/intel/e7520 # mch
|
||||
device pci_domain 0 on
|
||||
chip southbridge/intel/i82801er # i82801er
|
||||
chip southbridge/intel/i82801ex # i82801er
|
||||
# USB ports
|
||||
device pci 1d.0 on end
|
||||
device pci 1d.1 on end
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ex/i82801ex_early_smbus.c"
|
||||
#include "northbridge/intel/e7520/raminit.h"
|
||||
#include "superio/winbond/w83627hf/w83627hf.h"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_SUPERMICRO_X6DHR_IG2
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7520
|
||||
select SOUTHBRIDGE_INTEL_I82801ER
|
||||
select SOUTHBRIDGE_INTEL_I82801EX
|
||||
select SOUTHBRIDGE_INTEL_PXHD
|
||||
select SUPERIO_WINBOND_W83627HF
|
||||
select ROMCC
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
chip northbridge/intel/e7520 # mch
|
||||
device pci_domain 0 on
|
||||
chip southbridge/intel/i82801er # i82801er
|
||||
chip southbridge/intel/i82801ex # i82801er
|
||||
# USB ports
|
||||
device pci 1d.0 on end
|
||||
device pci 1d.1 on end
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "pc80/serial.c"
|
||||
#include "arch/i386/lib/console.c"
|
||||
#include "lib/ramtest.c"
|
||||
#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ex/i82801ex_early_smbus.c"
|
||||
#include "northbridge/intel/e7520/raminit.h"
|
||||
#include "superio/winbond/w83627hf/w83627hf.h"
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
|
|
|
@ -3,7 +3,7 @@ config BOARD_THOMSON_IP1000
|
|||
select ARCH_X86
|
||||
select CPU_INTEL_SOCKET_PGA370
|
||||
select NORTHBRIDGE_INTEL_I82830
|
||||
select SOUTHBRIDGE_INTEL_I82801XX
|
||||
select SOUTHBRIDGE_INTEL_I82801DX
|
||||
select SUPERIO_SMSC_SMSCSUPERIO
|
||||
select ROMCC
|
||||
select HAVE_PIRQ_TABLE
|
||||
|
@ -28,4 +28,4 @@ config HAVE_OPTION_TABLE
|
|||
config IRQ_SLOT_COUNT
|
||||
int
|
||||
default 7
|
||||
depends on BOARD_THOMSON_IP1000
|
||||
depends on BOARD_THOMSON_IP1000
|
||||
|
|
|
@ -2,7 +2,7 @@ chip northbridge/intel/i82830 # Northbridge
|
|||
device pci_domain 0 on # PCI domain
|
||||
device pci 0.0 on end # Host bridge
|
||||
device pci 2.0 on end # VGA (Intel 82830 CGC)
|
||||
chip southbridge/intel/i82801xx # Southbridge
|
||||
chip southbridge/intel/i82801dx # Southbridge
|
||||
register "pirqa_routing" = "0x05"
|
||||
register "pirqb_routing" = "0x06"
|
||||
register "pirqc_routing" = "0x07"
|
||||
|
|
|
@ -34,8 +34,8 @@ static void mb_gpio_init(void)
|
|||
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
||||
|
||||
/* Set the value for GPIO base address register and enable GPIO. */
|
||||
pci_write_config32(dev, GPIO_BASE_ICH0_5, (ICH_IO_BASE_ADDR | 1));
|
||||
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
||||
pci_write_config32(dev, GPIO_BASE, (ICH_IO_BASE_ADDR | 1));
|
||||
pci_write_config8(dev, GPIO_CNTL, 0x10);
|
||||
|
||||
/* Set GPIO23 to high, this enables the LAN controller. */
|
||||
udelay(10);
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
|
||||
#include "northbridge/intel/i82830/raminit.h"
|
||||
#include "northbridge/intel/i82830/memory_initialized.c"
|
||||
#include "southbridge/intel/i82801xx/i82801xx.h"
|
||||
#include "southbridge/intel/i82801xx/i82801xx_reset.c"
|
||||
#include "southbridge/intel/i82801dx/i82801dx.h"
|
||||
#include "southbridge/intel/i82801dx/i82801dx_reset.c"
|
||||
#include "cpu/x86/mtrr/earlymtrr.c"
|
||||
#include "cpu/x86/bist.h"
|
||||
#include "spd_table.h"
|
||||
|
@ -44,7 +44,7 @@
|
|||
|
||||
#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
|
||||
|
||||
#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
|
||||
#include "southbridge/intel/i82801dx/i82801dx_early_smbus.c"
|
||||
|
||||
/**
|
||||
* The onboard 64MB PC133 memory does not have a SPD EEPROM so the
|
||||
|
@ -127,4 +127,4 @@ static void main(unsigned long bist)
|
|||
/* Check RAM. */
|
||||
/* ram_check(0, 640 * 1024); */
|
||||
/* ram_check(64512 * 1024, 65536 * 1024); */
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ config BOARD_TYAN_S2735
|
|||
select CPU_INTEL_SOCKET_MPGA604
|
||||
select NORTHBRIDGE_INTEL_E7501
|
||||
select SOUTHBRIDGE_INTEL_I82870
|
||||
select SOUTHBRIDGE_INTEL_I82801ER
|
||||
select SOUTHBRIDGE_INTEL_I82801EX
|
||||
select SUPERIO_WINBOND_W83627HF
|
||||
select HAVE_PIRQ_TABLE
|
||||
select HAVE_MP_TABLE
|
||||
|
|
|
@ -14,7 +14,7 @@ chip northbridge/intel/e7501
|
|||
end
|
||||
end
|
||||
device pci 6.0 on end
|
||||
chip southbridge/intel/i82801er
|
||||
chip southbridge/intel/i82801ex
|
||||
device pci 1d.0 on end
|
||||
device pci 1d.1 on end
|
||||
device pci 1d.2 on end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
void i82801er_hard_reset(void);
|
||||
void i82801ex_hard_reset(void);
|
||||
|
||||
/* FIXME: There's another hard_reset() in romstage.c. Why? */
|
||||
void hard_reset(void)
|
||||
{
|
||||
i82801er_hard_reset();
|
||||
i82801ex_hard_reset();
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ static void post_code(uint8_t value) {
|
|||
}
|
||||
#endif
|
||||
|
||||
#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
|
||||
#include "southbridge/intel/i82801ex/i82801ex_early_smbus.c"
|
||||
#include "northbridge/intel/e7501/raminit.h"
|
||||
|
||||
#include "cpu/x86/lapic/boot_cpu.c"
|
||||
|
@ -82,7 +82,7 @@ static inline int spd_read_byte(unsigned device, unsigned address)
|
|||
|
||||
#if CONFIG_USE_FALLBACK_IMAGE == 1
|
||||
|
||||
#include "southbridge/intel/i82801er/cmos_failover.c"
|
||||
#include "southbridge/intel/i82801ex/cmos_failover.c"
|
||||
|
||||
void real_main(unsigned long bist);
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
source src/southbridge/intel/esb6300/Kconfig
|
||||
source src/southbridge/intel/i3100/Kconfig
|
||||
source src/southbridge/intel/i82371eb/Kconfig
|
||||
source src/southbridge/intel/i82801ca/Kconfig
|
||||
source src/southbridge/intel/i82801dbm/Kconfig
|
||||
source src/southbridge/intel/i82801er/Kconfig
|
||||
source src/southbridge/intel/i82801ax/Kconfig
|
||||
source src/southbridge/intel/i82801bx/Kconfig
|
||||
source src/southbridge/intel/i82801cx/Kconfig
|
||||
source src/southbridge/intel/i82801dx/Kconfig
|
||||
source src/southbridge/intel/i82801ex/Kconfig
|
||||
source src/southbridge/intel/i82801gx/Kconfig
|
||||
source src/southbridge/intel/i82801xx/Kconfig
|
||||
source src/southbridge/intel/i82870/Kconfig
|
||||
source src/southbridge/intel/pxhd/Kconfig
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_ESB6300) += esb6300
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I3100) += i3100
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82371EB) += i82371eb
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801CA) += i82801ca
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801DBM) += i82801dbm
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801ER) += i82801er
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801AX) += i82801ax
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801BX) += i82801bx
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801CX) += i82801cx
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801DX) += i82801dx
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801EX) += i82801ex
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801GX) += i82801gx
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82801XX) += i82801xx
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_I82870) += i82870
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_INTEL_PXHD) += pxhd
|
||||
|
||||
|
|
|
@ -18,6 +18,6 @@
|
|||
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
##
|
||||
|
||||
config SOUTHBRIDGE_INTEL_I82801XX
|
||||
config SOUTHBRIDGE_INTEL_I82801AX
|
||||
bool
|
||||
|
|
@ -18,21 +18,21 @@
|
|||
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
##
|
||||
|
||||
driver-y += i82801xx.o
|
||||
driver-y += i82801xx_ac97.o
|
||||
driver-y += i82801xx_ide.o
|
||||
driver-y += i82801xx_lpc.o
|
||||
driver-y += i82801xx_nic.o
|
||||
driver-y += i82801xx_pci.o
|
||||
driver-y += i82801xx_sata.o
|
||||
# driver-y += i82801xx_smbus.o
|
||||
driver-y += i82801xx_usb.o
|
||||
driver-y += i82801xx_usb_ehci.o
|
||||
driver-y += i82801ax.o
|
||||
driver-y += i82801ax_ac97.o
|
||||
driver-y += i82801ax_ide.o
|
||||
driver-y += i82801ax_lpc.o
|
||||
driver-y += i82801ax_nic.o
|
||||
driver-y += i82801ax_pci.o
|
||||
driver-y += i82801ax_sata.o
|
||||
# driver-y += i82801ax_smbus.o
|
||||
driver-y += i82801ax_usb.o
|
||||
driver-y += i82801ax_usb_ehci.o
|
||||
|
||||
obj-y += i82801xx_reset.o
|
||||
obj-y += i82801xx_watchdog.o
|
||||
obj-y += i82801ax_reset.o
|
||||
obj-y += i82801ax_watchdog.o
|
||||
|
||||
# TODO: What about cmos_failover.c?
|
||||
|
||||
# TODO: Fix and enable i82801xx_smbus.o later.
|
||||
# TODO: Fix and enable i82801ax_smbus.o later.
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* The i82801xx code currently supports:
|
||||
* The i82801ax code currently supports:
|
||||
* - 82801AA
|
||||
* - 82801AB
|
||||
* - 82801BA
|
||||
|
@ -32,10 +32,10 @@
|
|||
* This code should NOT be used for ICH6 and later versions.
|
||||
*/
|
||||
|
||||
#ifndef SOUTHBRIDGE_INTEL_I82801XX_CHIP_H
|
||||
#define SOUTHBRIDGE_INTEL_I82801XX_CHIP_H
|
||||
#ifndef SOUTHBRIDGE_INTEL_I82801AX_CHIP_H
|
||||
#define SOUTHBRIDGE_INTEL_I82801AX_CHIP_H
|
||||
|
||||
struct southbridge_intel_i82801xx_config {
|
||||
struct southbridge_intel_i82801ax_config {
|
||||
/**
|
||||
* Interrupt Routing configuration
|
||||
* If bit7 is 1, the interrupt is disabled.
|
||||
|
@ -53,6 +53,6 @@ struct southbridge_intel_i82801xx_config {
|
|||
uint8_t ide1_enable;
|
||||
};
|
||||
|
||||
extern struct chip_operations southbridge_intel_i82801xx_ops;
|
||||
extern struct chip_operations southbridge_intel_i82801ax_ops;
|
||||
|
||||
#endif
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
static void check_cmos_failed(void)
|
||||
{
|
67
src/southbridge/intel/i82801ax/i82801ax.c
Normal file
67
src/southbridge/intel/i82801ax/i82801ax.c
Normal file
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Digital Design Corporation
|
||||
* (Written by Steven J. Magnani <steve@digidescorp.com> for Digital Design)
|
||||
* Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include "i82801ax.h"
|
||||
|
||||
void i82801ax_enable(device_t dev)
|
||||
{
|
||||
unsigned int index = 0;
|
||||
uint16_t cur_disable_mask, new_disable_mask;
|
||||
|
||||
/* All 82801xx devices should be on bus 0. */
|
||||
unsigned int devfn = PCI_DEVFN(0x1f, 0); // LPC
|
||||
device_t lpc_dev = dev_find_slot(0, devfn); // 0
|
||||
if (!lpc_dev)
|
||||
return;
|
||||
|
||||
/* We're going to assume, perhaps incorrectly, that if a function
|
||||
* exists it can be disabled. Workarounds for ICH variants that don't
|
||||
* follow this should be done by checking the device ID.
|
||||
*/
|
||||
if (PCI_SLOT(dev->path.pci.devfn) == 31) {
|
||||
index = PCI_FUNC(dev->path.pci.devfn);
|
||||
} else if (PCI_SLOT(dev->path.pci.devfn) == 29) {
|
||||
index = 8 + PCI_FUNC(dev->path.pci.devfn);
|
||||
}
|
||||
|
||||
/* Function 0 is a bit of an exception. */
|
||||
if (index == 0) {
|
||||
index = 14;
|
||||
}
|
||||
|
||||
cur_disable_mask = pci_read_config16(lpc_dev, FUNC_DIS);
|
||||
new_disable_mask = cur_disable_mask & ~(1 << index); /* Enable it. */
|
||||
if (!dev->enabled) {
|
||||
new_disable_mask |= (1 << index); /* Disable it, if desired. */
|
||||
}
|
||||
if (new_disable_mask != cur_disable_mask) {
|
||||
pci_write_config16(lpc_dev, FUNC_DIS, new_disable_mask);
|
||||
}
|
||||
}
|
||||
|
||||
struct chip_operations southbridge_intel_i82801ax_ops = {
|
||||
CHIP_NAME("Intel ICH/ICH0 (82801AA/AB) Series Southbridge")
|
||||
.enable_dev = i82801ax_enable,
|
||||
};
|
|
@ -18,12 +18,12 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef SOUTHBRIDGE_INTEL_I82801XX_I82801XX_H
|
||||
#define SOUTHBRIDGE_INTEL_I82801XX_I82801XX_H
|
||||
#ifndef SOUTHBRIDGE_INTEL_I82801AX_I82801AX_H
|
||||
#define SOUTHBRIDGE_INTEL_I82801AX_I82801AX_H
|
||||
|
||||
#if !defined( __ROMCC__ ) && !defined(__PRE_RAM__)
|
||||
#include "chip.h"
|
||||
extern void i82801xx_enable(device_t dev);
|
||||
extern void i82801ax_enable(device_t dev);
|
||||
#endif
|
||||
|
||||
#define PCI_DMA_CFG 0x90
|
||||
|
@ -117,4 +117,4 @@ extern void i82801xx_enable(device_t dev);
|
|||
/* HPET, if present */
|
||||
#define HPET_ADDR 0xfed0000
|
||||
|
||||
#endif /* SOUTHBRIDGE_INTEL_I82801XX_I82801XX_H */
|
||||
#endif /* SOUTHBRIDGE_INTEL_I82801AX_I82801AX_H */
|
|
@ -25,7 +25,7 @@
|
|||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
static struct device_operations ac97_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
|
@ -33,7 +33,7 @@ static struct device_operations ac97_ops = {
|
|||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = 0,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801xx_enable,
|
||||
.enable = i82801ax_enable,
|
||||
};
|
||||
|
||||
/* 82801AA (ICH) */
|
|
@ -18,7 +18,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
static void i82801xx_halt_tco_timer(void)
|
||||
static void i82801ax_halt_tco_timer(void)
|
||||
{
|
||||
device_t dev;
|
||||
uint16_t halt_tco_timer;
|
|
@ -21,8 +21,8 @@
|
|||
*/
|
||||
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801xx_smbus.h"
|
||||
#include "i82801ax.h"
|
||||
#include "i82801ax_smbus.h"
|
||||
|
||||
static void enable_smbus(void)
|
||||
{
|
|
@ -25,9 +25,9 @@
|
|||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
typedef struct southbridge_intel_i82801xx_config config_t;
|
||||
typedef struct southbridge_intel_i82801ax_config config_t;
|
||||
|
||||
static void ide_init(struct device *dev)
|
||||
{
|
||||
|
@ -67,7 +67,7 @@ static struct device_operations ide_ops = {
|
|||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = ide_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801xx_enable,
|
||||
.enable = i82801ax_enable,
|
||||
};
|
||||
|
||||
/* 82801AA */
|
|
@ -30,13 +30,13 @@
|
|||
#include <pc80/mc146818rtc.h>
|
||||
#include <pc80/isa-dma.h>
|
||||
#include <arch/io.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
#define GPIO_BASE_ADDR 0x00000500 /* GPIO Base Address Register */
|
||||
|
||||
#define NMI_OFF 0
|
||||
|
||||
typedef struct southbridge_intel_i82801xx_config config_t;
|
||||
typedef struct southbridge_intel_i82801ax_config config_t;
|
||||
|
||||
/* PIRQ[n]_ROUT[3:0] - PIRQ Routing Control
|
||||
* 0x00 - 0000 = Reserved
|
||||
|
@ -74,7 +74,7 @@ typedef struct southbridge_intel_i82801xx_config config_t;
|
|||
* specific IRQ values in your mainboards Config.lb.
|
||||
*/
|
||||
|
||||
void i82801xx_enable_apic(struct device *dev)
|
||||
void i82801ax_enable_apic(struct device *dev)
|
||||
{
|
||||
uint32_t reg32;
|
||||
volatile uint32_t *ioapic_index = (volatile uint32_t *)0xfec00000;
|
||||
|
@ -108,7 +108,7 @@ void i82801xx_enable_apic(struct device *dev)
|
|||
*ioapic_data = 1; /* Use Processor System Bus to deliver interrupts. */
|
||||
}
|
||||
|
||||
void i82801xx_enable_serial_irqs(struct device *dev)
|
||||
void i82801ax_enable_serial_irqs(struct device *dev)
|
||||
{
|
||||
/* Set packet length and toggle silent mode bit. */
|
||||
pci_write_config8(dev, SERIRQ_CNTL,
|
||||
|
@ -118,7 +118,7 @@ void i82801xx_enable_serial_irqs(struct device *dev)
|
|||
/* TODO: Explain/#define the real meaning of these magic numbers. */
|
||||
}
|
||||
|
||||
static void i82801xx_pirq_init(device_t dev, uint16_t ich_model)
|
||||
static void i82801ax_pirq_init(device_t dev, uint16_t ich_model)
|
||||
{
|
||||
/* Get the chip configuration */
|
||||
config_t *config = dev->chip_info;
|
||||
|
@ -176,7 +176,7 @@ static void i82801xx_pirq_init(device_t dev, uint16_t ich_model)
|
|||
}
|
||||
}
|
||||
|
||||
static void i82801xx_power_options(device_t dev)
|
||||
static void i82801ax_power_options(device_t dev)
|
||||
{
|
||||
uint8_t byte;
|
||||
int pwr_on = -1;
|
||||
|
@ -220,7 +220,7 @@ static void gpio_init(device_t dev, uint16_t ich_model)
|
|||
}
|
||||
}
|
||||
|
||||
void i82801xx_rtc_init(struct device *dev)
|
||||
void i82801ax_rtc_init(struct device *dev)
|
||||
{
|
||||
uint8_t reg8;
|
||||
uint32_t reg32;
|
||||
|
@ -240,7 +240,7 @@ void i82801xx_rtc_init(struct device *dev)
|
|||
pci_write_config8(dev, RTC_CONF, 0x04);
|
||||
}
|
||||
|
||||
void i82801xx_lpc_route_dma(struct device *dev, uint8_t mask)
|
||||
void i82801ax_lpc_route_dma(struct device *dev, uint8_t mask)
|
||||
{
|
||||
uint16_t reg16;
|
||||
int i;
|
||||
|
@ -255,7 +255,7 @@ void i82801xx_lpc_route_dma(struct device *dev, uint8_t mask)
|
|||
pci_write_config16(dev, PCI_DMA_CFG, reg16);
|
||||
}
|
||||
|
||||
static void i82801xx_lpc_decode_en(device_t dev, uint16_t ich_model)
|
||||
static void i82801ax_lpc_decode_en(device_t dev, uint16_t ich_model)
|
||||
{
|
||||
/* Decode 0x3F8-0x3FF (COM1) for COMA port, 0x2F8-0x2FF (COM2) for COMB.
|
||||
* LPT decode defaults to 0x378-0x37F and 0x778-0x77F.
|
||||
|
@ -302,36 +302,36 @@ static void lpc_init(struct device *dev)
|
|||
pci_write_config16(dev, PCI_COMMAND, 0x000f);
|
||||
|
||||
/* IO APIC initialization. */
|
||||
i82801xx_enable_apic(dev);
|
||||
i82801ax_enable_apic(dev);
|
||||
|
||||
i82801xx_enable_serial_irqs(dev);
|
||||
i82801ax_enable_serial_irqs(dev);
|
||||
|
||||
/* Setup the PIRQ. */
|
||||
i82801xx_pirq_init(dev, ich_model);
|
||||
i82801ax_pirq_init(dev, ich_model);
|
||||
|
||||
/* Setup power options. */
|
||||
i82801xx_power_options(dev);
|
||||
i82801ax_power_options(dev);
|
||||
|
||||
/* Set the state of the GPIO lines. */
|
||||
gpio_init(dev, ich_model);
|
||||
|
||||
/* Initialize the real time clock. */
|
||||
i82801xx_rtc_init(dev);
|
||||
i82801ax_rtc_init(dev);
|
||||
|
||||
/* Route DMA. */
|
||||
i82801xx_lpc_route_dma(dev, 0xff);
|
||||
i82801ax_lpc_route_dma(dev, 0xff);
|
||||
|
||||
/* Initialize ISA DMA. */
|
||||
isa_dma_init();
|
||||
|
||||
/* Setup decode ports and LPC I/F enables. */
|
||||
i82801xx_lpc_decode_en(dev, ich_model);
|
||||
i82801ax_lpc_decode_en(dev, ich_model);
|
||||
|
||||
/* Initialize the High Precision Event Timers, if present. */
|
||||
enable_hpet(dev);
|
||||
}
|
||||
|
||||
static void i82801xx_lpc_read_resources(device_t dev)
|
||||
static void i82801ax_lpc_read_resources(device_t dev)
|
||||
{
|
||||
struct resource *res;
|
||||
|
||||
|
@ -357,19 +357,19 @@ static void i82801xx_lpc_read_resources(device_t dev)
|
|||
res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
|
||||
}
|
||||
|
||||
static void i82801xx_lpc_enable_resources(device_t dev)
|
||||
static void i82801ax_lpc_enable_resources(device_t dev)
|
||||
{
|
||||
pci_dev_enable_resources(dev);
|
||||
enable_childrens_resources(dev);
|
||||
}
|
||||
|
||||
static struct device_operations lpc_ops = {
|
||||
.read_resources = i82801xx_lpc_read_resources,
|
||||
.read_resources = i82801ax_lpc_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = i82801xx_lpc_enable_resources,
|
||||
.enable_resources = i82801ax_lpc_enable_resources,
|
||||
.init = lpc_init,
|
||||
.scan_bus = scan_static_bus,
|
||||
.enable = i82801xx_enable,
|
||||
.enable = i82801ax_enable,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801aa_lpc __pci_driver = {
|
|
@ -23,7 +23,7 @@
|
|||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
/* TODO: Set dynamically, if the user only wants one SATA channel or none
|
||||
* at all.
|
||||
|
@ -64,7 +64,7 @@ static struct device_operations sata_ops = {
|
|||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = sata_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801xx_enable,
|
||||
.enable = i82801ax_enable,
|
||||
};
|
||||
|
||||
/* 82801EB */
|
|
@ -24,7 +24,7 @@
|
|||
#include <smbus.h>
|
||||
#include <pci.h>
|
||||
#include <arch/io.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
#include "i82801_smbus.h"
|
||||
|
||||
static int smbus_read_byte(struct bus *bus, device_t dev, u8 address)
|
|
@ -24,7 +24,7 @@
|
|||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
static void usb_init(struct device *dev)
|
||||
{
|
||||
|
@ -37,7 +37,7 @@ static struct device_operations usb_ops = {
|
|||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = usb_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801xx_enable,
|
||||
.enable = i82801ax_enable,
|
||||
};
|
||||
|
||||
/* 82801AA (ICH) */
|
|
@ -23,7 +23,7 @@
|
|||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801ax.h"
|
||||
|
||||
static void usb_ehci_init(struct device *dev)
|
||||
{
|
||||
|
@ -65,7 +65,7 @@ static struct device_operations usb_ehci_ops = {
|
|||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = usb_ehci_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801xx_enable,
|
||||
.enable = i82801ax_enable,
|
||||
.ops_pci = &lops_pci,
|
||||
};
|
||||
|
23
src/southbridge/intel/i82801bx/Kconfig
Normal file
23
src/southbridge/intel/i82801bx/Kconfig
Normal file
|
@ -0,0 +1,23 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 2 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
##
|
||||
|
||||
config SOUTHBRIDGE_INTEL_I82801BX
|
||||
bool
|
||||
|
38
src/southbridge/intel/i82801bx/Makefile.inc
Normal file
38
src/southbridge/intel/i82801bx/Makefile.inc
Normal file
|
@ -0,0 +1,38 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 2 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
##
|
||||
|
||||
driver-y += i82801bx.o
|
||||
driver-y += i82801bx_ac97.o
|
||||
driver-y += i82801bx_ide.o
|
||||
driver-y += i82801bx_lpc.o
|
||||
driver-y += i82801bx_nic.o
|
||||
driver-y += i82801bx_pci.o
|
||||
driver-y += i82801bx_sata.o
|
||||
# driver-y += i82801bx_smbus.o
|
||||
driver-y += i82801bx_usb.o
|
||||
driver-y += i82801bx_usb_ehci.o
|
||||
|
||||
obj-y += i82801bx_reset.o
|
||||
obj-y += i82801bx_watchdog.o
|
||||
|
||||
# TODO: What about cmos_failover.c?
|
||||
|
||||
# TODO: Fix and enable i82801bx_smbus.o later.
|
||||
|
58
src/southbridge/intel/i82801bx/chip.h
Normal file
58
src/southbridge/intel/i82801bx/chip.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007 Corey Osgood <corey_osgood@verizon.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* The i82801bx code currently supports:
|
||||
* - 82801AA
|
||||
* - 82801AB
|
||||
* - 82801BA
|
||||
* - 82801CA
|
||||
* - 82801DB
|
||||
* - 82801DBM
|
||||
* - 82801EB
|
||||
* - 82801ER
|
||||
*
|
||||
* This code should NOT be used for ICH6 and later versions.
|
||||
*/
|
||||
|
||||
#ifndef SOUTHBRIDGE_INTEL_I82801BX_CHIP_H
|
||||
#define SOUTHBRIDGE_INTEL_I82801BX_CHIP_H
|
||||
|
||||
struct southbridge_intel_i82801bx_config {
|
||||
/**
|
||||
* Interrupt Routing configuration
|
||||
* If bit7 is 1, the interrupt is disabled.
|
||||
*/
|
||||
uint8_t pirqa_routing;
|
||||
uint8_t pirqb_routing;
|
||||
uint8_t pirqc_routing;
|
||||
uint8_t pirqd_routing;
|
||||
uint8_t pirqe_routing;
|
||||
uint8_t pirqf_routing;
|
||||
uint8_t pirqg_routing;
|
||||
uint8_t pirqh_routing;
|
||||
|
||||
uint8_t ide0_enable;
|
||||
uint8_t ide1_enable;
|
||||
};
|
||||
|
||||
extern struct chip_operations southbridge_intel_i82801bx_ops;
|
||||
|
||||
#endif
|
32
src/southbridge/intel/i82801bx/cmos_failover.c
Normal file
32
src/southbridge/intel/i82801bx/cmos_failover.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "i82801bx.h"
|
||||
|
||||
static void check_cmos_failed(void)
|
||||
{
|
||||
uint8_t byte;
|
||||
byte = pci_read_config8(PCI_DEV(0, 0x1f, 0), GEN_PMCON_3);
|
||||
if (byte & RTC_FAILED) {
|
||||
//clear bit 1 and bit 2
|
||||
byte = cmos_read(RTC_BOOT_BYTE);
|
||||
byte &= 0x0c;
|
||||
byte |= CONFIG_MAX_REBOOT_CNT << 4;
|
||||
cmos_write(byte, RTC_BOOT_BYTE);
|
||||
}
|
||||
}
|
|
@ -23,9 +23,9 @@
|
|||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include "i82801xx.h"
|
||||
#include "i82801bx.h"
|
||||
|
||||
void i82801xx_enable(device_t dev)
|
||||
void i82801bx_enable(device_t dev)
|
||||
{
|
||||
unsigned int index = 0;
|
||||
uint16_t cur_disable_mask, new_disable_mask;
|
||||
|
@ -61,7 +61,7 @@ void i82801xx_enable(device_t dev)
|
|||
}
|
||||
}
|
||||
|
||||
struct chip_operations southbridge_intel_i82801xx_ops = {
|
||||
CHIP_NAME("Intel 82801 Series Southbridge")
|
||||
.enable_dev = i82801xx_enable,
|
||||
struct chip_operations southbridge_intel_i82801bx_ops = {
|
||||
CHIP_NAME("Intel ICH2 (82801Bx) Series Southbridge")
|
||||
.enable_dev = i82801bx_enable,
|
||||
};
|
121
src/southbridge/intel/i82801bx/i82801bx.h
Normal file
121
src/southbridge/intel/i82801bx/i82801bx.h
Normal file
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef SOUTHBRIDGE_INTEL_I82801BX_I82801BX_H
|
||||
#define SOUTHBRIDGE_INTEL_I82801BX_I82801BX_H
|
||||
|
||||
#if !defined( __ROMCC__ ) && !defined(__PRE_RAM__)
|
||||
#include "chip.h"
|
||||
extern void i82801bx_enable(device_t dev);
|
||||
#endif
|
||||
|
||||
#define PCI_DMA_CFG 0x90
|
||||
#define SERIRQ_CNTL 0x64
|
||||
#define GEN_CNTL 0xd0
|
||||
#define GEN_STS 0xd4
|
||||
#define RTC_CONF 0xd8
|
||||
#define GEN_PMCON_3 0xa4
|
||||
|
||||
#define PMBASE 0x40
|
||||
#define PMBASE_ADDR 0x0400 /* ACPI Base Address Register */
|
||||
#define ACPI_CNTL 0x44
|
||||
#define BIOS_CNTL 0x4E
|
||||
#define GPIO_BASE_ICH0_5 0x58 /* LPC GPIO Base Addr. Reg. (ICH0-ICH5) */
|
||||
#define GPIO_BASE_ICH6_9 0x48 /* LPC GPIO Base Address Register (ICH6-ICH9) */
|
||||
#define GPIO_CNTL_ICH0_5 0x5C /* LPC GPIO Control Register (ICH0-ICH5) */
|
||||
#define GPIO_CNTL_ICH6_9 0x4C /* LPC GPIO Control Register (ICH6-ICH9) */
|
||||
|
||||
#define PIRQA_ROUT 0x60
|
||||
#define PIRQB_ROUT 0x61
|
||||
#define PIRQC_ROUT 0x62
|
||||
#define PIRQD_ROUT 0x63
|
||||
#define PIRQE_ROUT 0x68
|
||||
#define PIRQF_ROUT 0x69
|
||||
#define PIRQG_ROUT 0x6A
|
||||
#define PIRQH_ROUT 0x6B
|
||||
|
||||
#define FUNC_DIS 0xF2
|
||||
|
||||
#define COM_DEC 0xE0 /* LPC I/F Communication Port Decode Ranges (ICH0-ICH5) */
|
||||
#define LPC_IO_DEC 0x80 /* IO Decode Ranges Register (ICH6-ICH9) */
|
||||
#define LPC_EN_ICH0_5 0xE6 /* LPC IF Enables Register (ICH0-ICH5) */
|
||||
#define LPC_EN_ICH6_9 0x82 /* LPC IF Enables Register (ICH6-ICH9) */
|
||||
|
||||
#define SBUS_NUM 0x19
|
||||
#define SUB_BUS_NUM 0x1A
|
||||
#define SMLT 0x1B
|
||||
#define IOBASE 0x1C
|
||||
#define IOLIM 0x1D
|
||||
#define MEMBASE 0x20
|
||||
#define MEMLIM 0x22
|
||||
#define CNF 0x50
|
||||
#define MTT 0x70
|
||||
#define PCI_MAST_STS 0x82
|
||||
|
||||
#define TCOBASE 0x60 /* TCO Base Address Register */
|
||||
#define TCO1_CNT 0x08 /* TCO1 Control Register */
|
||||
|
||||
/* GEN_PMCON_3 bits */
|
||||
#define RTC_BATTERY_DEAD (1 << 2)
|
||||
#define RTC_POWER_FAILED (1 << 1)
|
||||
#define SLEEP_AFTER_POWER_FAIL (1 << 0)
|
||||
|
||||
/* PCI Configuration Space (D31:F1) */
|
||||
#define IDE_TIM_PRI 0x40 /* IDE timings, primary */
|
||||
#define IDE_TIM_SEC 0x42 /* IDE timings, secondary */
|
||||
|
||||
/* IDE_TIM bits */
|
||||
#define IDE_DECODE_ENABLE (1 << 15)
|
||||
|
||||
/* PCI Configuration Space (D31:F3) */
|
||||
#define SMB_BASE 0x20
|
||||
#define HOSTC 0x40
|
||||
|
||||
/* HOSTC bits */
|
||||
#define I2C_EN (1 << 2)
|
||||
#define SMB_SMI_EN (1 << 1)
|
||||
#define HST_EN (1 << 0)
|
||||
|
||||
/* SMBus I/O bits.
|
||||
* TODO: Does it matter where we put the SMBus IO base, as long as we keep
|
||||
* consistent and don't interfere with anything else?
|
||||
*/
|
||||
/* #define SMBUS_IO_BASE 0x1000 */
|
||||
#define SMBUS_IO_BASE 0x0f00
|
||||
|
||||
#define SMBHSTSTAT 0x0
|
||||
#define SMBHSTCTL 0x2
|
||||
#define SMBHSTCMD 0x3
|
||||
#define SMBXMITADD 0x4
|
||||
#define SMBHSTDAT0 0x5
|
||||
#define SMBHSTDAT1 0x6
|
||||
#define SMBBLKDAT 0x7
|
||||
#define SMBTRNSADD 0x9
|
||||
#define SMBSLVDATA 0xa
|
||||
#define SMLINK_PIN_CTL 0xe
|
||||
#define SMBUS_PIN_CTL 0xf
|
||||
|
||||
#define SMBUS_TIMEOUT (10 * 1000 * 100)
|
||||
|
||||
/* HPET, if present */
|
||||
#define HPET_ADDR 0xfed0000
|
||||
|
||||
#endif /* SOUTHBRIDGE_INTEL_I82801BX_I82801BX_H */
|
||||
|
128
src/southbridge/intel/i82801bx/i82801bx_ac97.c
Normal file
128
src/southbridge/intel/i82801bx/i82801bx_ac97.c
Normal file
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* This code should work for all ICH* southbridges with AC97 audio/modem. */
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801bx.h"
|
||||
|
||||
static struct device_operations ac97_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = 0,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801bx_enable,
|
||||
};
|
||||
|
||||
/* 82801AA (ICH) */
|
||||
static const struct pci_driver i82801aa_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AA_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801aa_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AA_AC97_MODEM,
|
||||
};
|
||||
|
||||
/* 82801AB (ICH0) */
|
||||
static const struct pci_driver i82801ab_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AB_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ab_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AB_AC97_MODEM,
|
||||
};
|
||||
|
||||
/* 82801BA/BAM (ICH2/ICH2-M) */
|
||||
static const struct pci_driver i82801ba_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801BA_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ba_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801BA_AC97_MODEM,
|
||||
};
|
||||
|
||||
/* 82801CA/CAM (ICH3-S/ICH3-M) */
|
||||
static const struct pci_driver i82801ca_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801CA_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ca_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801CA_AC97_MODEM,
|
||||
};
|
||||
|
||||
/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
|
||||
static const struct pci_driver i82801db_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801db_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_AC97_MODEM,
|
||||
};
|
||||
|
||||
/* 82801EB/ER (ICH5/ICH5R) */
|
||||
static const struct pci_driver i82801eb_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801eb_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_AC97_MODEM,
|
||||
};
|
||||
|
||||
/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
|
||||
static const struct pci_driver i82801fb_ac97_audio __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_AC97_AUDIO,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801fb_ac97_modem __pci_driver = {
|
||||
.ops = &ac97_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_AC97_MODEM,
|
||||
};
|
40
src/southbridge/intel/i82801bx/i82801bx_early_lpc.c
Normal file
40
src/southbridge/intel/i82801bx/i82801bx_early_lpc.c
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2008 Joseph Smith <joe@settoplinux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
static void i82801bx_halt_tco_timer(void)
|
||||
{
|
||||
device_t dev;
|
||||
uint16_t halt_tco_timer;
|
||||
|
||||
/* Set the LPC device statically. */
|
||||
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
||||
|
||||
/* Temporarily set ACPI base address (I/O space). */
|
||||
pci_write_config32(dev, PMBASE, (PMBASE_ADDR | 1));
|
||||
|
||||
/* Temporarily enable ACPI I/O. */
|
||||
pci_write_config8(dev, ACPI_CNTL, 0x10);
|
||||
|
||||
/* Halt the TCO timer, preventing SMI and automatic reboot */
|
||||
outw(inw(PMBASE_ADDR + TCOBASE + TCO1_CNT) | (1 << 11), PMBASE_ADDR + TCOBASE + TCO1_CNT);
|
||||
|
||||
/* Disable ACPI I/O. */
|
||||
pci_write_config8(dev, ACPI_CNTL, 0x00);
|
||||
}
|
81
src/southbridge/intel/i82801bx/i82801bx_early_smbus.c
Normal file
81
src/southbridge/intel/i82801bx/i82801bx_early_smbus.c
Normal file
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer)
|
||||
* Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801bx.h"
|
||||
#include "i82801bx_smbus.h"
|
||||
|
||||
static void enable_smbus(void)
|
||||
{
|
||||
device_t dev;
|
||||
uint16_t device_id;
|
||||
|
||||
/* Set the SMBus device statically. */
|
||||
dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||
|
||||
/* Check to make sure we've got the right device. */
|
||||
device_id = pci_read_config16(dev, 0x2);
|
||||
|
||||
/* Clear bits 7-4 (the only bits that vary between models). */
|
||||
device_id &= 0xff0f;
|
||||
|
||||
if (device_id != 0x2403) {
|
||||
die("Device not found, Corey probably screwed up!");
|
||||
}
|
||||
|
||||
/* Set SMBus I/O base. */
|
||||
pci_write_config32(dev, SMB_BASE,
|
||||
SMBUS_IO_BASE | PCI_BASE_ADDRESS_SPACE_IO);
|
||||
|
||||
/* Set SMBus enable. */
|
||||
pci_write_config8(dev, HOSTC, HST_EN);
|
||||
|
||||
/* Set SMBus I/O space enable. */
|
||||
pci_write_config16(dev, PCI_COMMAND, PCI_COMMAND_IO);
|
||||
|
||||
/* Disable interrupt generation. */
|
||||
outb(0, SMBUS_IO_BASE + SMBHSTCTL);
|
||||
|
||||
/* Clear any lingering errors, so transactions can run. */
|
||||
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
|
||||
print_debug("SMBus controller enabled\r\n");
|
||||
}
|
||||
|
||||
static inline int smbus_read_byte(unsigned device, unsigned address)
|
||||
{
|
||||
return do_smbus_read_byte(device, address);
|
||||
}
|
||||
|
||||
static void smbus_write_byte(unsigned device, unsigned address,
|
||||
unsigned char val)
|
||||
{
|
||||
print_err("Unimplemented smbus_write_byte() called\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int smbus_write_block(unsigned device, unsigned length,
|
||||
unsigned cmd, unsigned data1,
|
||||
unsigned data2)
|
||||
{
|
||||
return do_smbus_write_block(device, length, cmd, data1, data2);
|
||||
}
|
120
src/southbridge/intel/i82801bx/i82801bx_ide.c
Normal file
120
src/southbridge/intel/i82801bx/i82801bx_ide.c
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer)
|
||||
* Copyright (C) 2005 Digital Design Corporation
|
||||
* (Written by Steven J. Magnani <steve@digidescorp.com> for Digital Design)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801bx.h"
|
||||
|
||||
typedef struct southbridge_intel_i82801bx_config config_t;
|
||||
|
||||
static void ide_init(struct device *dev)
|
||||
{
|
||||
/* Get the chip configuration */
|
||||
config_t *config = dev->chip_info;
|
||||
|
||||
/* TODO: Needs to be tested for compatibility with ICH5(R). */
|
||||
/* Enable IDE devices so the Linux IDE driver will work. */
|
||||
uint16_t ideTimingConfig;
|
||||
|
||||
ideTimingConfig = pci_read_config16(dev, IDE_TIM_PRI);
|
||||
ideTimingConfig &= ~IDE_DECODE_ENABLE;
|
||||
if (!config || config->ide0_enable) {
|
||||
/* Enable primary IDE interface. */
|
||||
ideTimingConfig |= IDE_DECODE_ENABLE;
|
||||
printk_debug("IDE0: Primary IDE interface is enabled\n");
|
||||
} else {
|
||||
printk_info("IDE0: Primary IDE interface is disabled\n");
|
||||
}
|
||||
pci_write_config16(dev, IDE_TIM_PRI, ideTimingConfig);
|
||||
|
||||
ideTimingConfig = pci_read_config16(dev, IDE_TIM_SEC);
|
||||
ideTimingConfig &= ~IDE_DECODE_ENABLE;
|
||||
if (!config || config->ide1_enable) {
|
||||
/* Enable secondary IDE interface. */
|
||||
ideTimingConfig |= IDE_DECODE_ENABLE;
|
||||
printk_debug("IDE1: Secondary IDE interface is enabled\n");
|
||||
} else {
|
||||
printk_info("IDE1: Secondary IDE interface is disabled\n");
|
||||
}
|
||||
pci_write_config16(dev, IDE_TIM_SEC, ideTimingConfig);
|
||||
}
|
||||
|
||||
static struct device_operations ide_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = ide_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801bx_enable,
|
||||
};
|
||||
|
||||
/* 82801AA */
|
||||
static const struct pci_driver i82801aa_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2411,
|
||||
};
|
||||
|
||||
/* 82801AB */
|
||||
static const struct pci_driver i82801ab_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2421,
|
||||
};
|
||||
|
||||
/* 82801BA */
|
||||
static const struct pci_driver i82801ba_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x244b,
|
||||
};
|
||||
|
||||
/* 82801CA */
|
||||
static const struct pci_driver i82801ca_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x248b,
|
||||
};
|
||||
|
||||
/* 82801DB */
|
||||
static const struct pci_driver i82801db_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24cb,
|
||||
};
|
||||
|
||||
/* 82801DBM */
|
||||
static const struct pci_driver i82801dbm_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24ca,
|
||||
};
|
||||
|
||||
/* 82801EB & 82801ER */
|
||||
static const struct pci_driver i82801ex_ide __pci_driver = {
|
||||
.ops = &ide_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24db,
|
||||
};
|
416
src/southbridge/intel/i82801bx/i82801bx_lpc.c
Normal file
416
src/southbridge/intel/i82801bx/i82801bx_lpc.c
Normal file
|
@ -0,0 +1,416 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2003 Linux Networx
|
||||
* Copyright (C) 2003 SuSE Linux AG
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* From 82801DBM, needs to be fixed to support everything the 82801ER does. */
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include <pc80/mc146818rtc.h>
|
||||
#include <pc80/isa-dma.h>
|
||||
#include <arch/io.h>
|
||||
#include "i82801bx.h"
|
||||
|
||||
#define GPIO_BASE_ADDR 0x00000500 /* GPIO Base Address Register */
|
||||
|
||||
#define NMI_OFF 0
|
||||
|
||||
typedef struct southbridge_intel_i82801bx_config config_t;
|
||||
|
||||
/* PIRQ[n]_ROUT[3:0] - PIRQ Routing Control
|
||||
* 0x00 - 0000 = Reserved
|
||||
* 0x01 - 0001 = Reserved
|
||||
* 0x02 - 0010 = Reserved
|
||||
* 0x03 - 0011 = IRQ3
|
||||
* 0x04 - 0100 = IRQ4
|
||||
* 0x05 - 0101 = IRQ5
|
||||
* 0x06 - 0110 = IRQ6
|
||||
* 0x07 - 0111 = IRQ7
|
||||
* 0x08 - 1000 = Reserved
|
||||
* 0x09 - 1001 = IRQ9
|
||||
* 0x0A - 1010 = IRQ10
|
||||
* 0x0B - 1011 = IRQ11
|
||||
* 0x0C - 1100 = IRQ12
|
||||
* 0x0D - 1101 = Reserved
|
||||
* 0x0E - 1110 = IRQ14
|
||||
* 0x0F - 1111 = IRQ15
|
||||
* PIRQ[n]_ROUT[7] - PIRQ Routing Control
|
||||
* 0x80 - The PIRQ is not routed.
|
||||
*/
|
||||
|
||||
#define PIRQA 0x03
|
||||
#define PIRQB 0x04
|
||||
#define PIRQC 0x05
|
||||
#define PIRQD 0x06
|
||||
#define PIRQE 0x07
|
||||
#define PIRQF 0x09
|
||||
#define PIRQG 0x0A
|
||||
#define PIRQH 0x0B
|
||||
|
||||
/*
|
||||
* Use 0x0ef8 for a bitmap to cover all these IRQ's.
|
||||
* Use the defined IRQ values above or set mainboard
|
||||
* specific IRQ values in your mainboards Config.lb.
|
||||
*/
|
||||
|
||||
void i82801bx_enable_apic(struct device *dev)
|
||||
{
|
||||
uint32_t reg32;
|
||||
volatile uint32_t *ioapic_index = (volatile uint32_t *)0xfec00000;
|
||||
volatile uint32_t *ioapic_data = (volatile uint32_t *)0xfec00010;
|
||||
|
||||
/* Set ACPI base address (I/O space). */
|
||||
pci_write_config32(dev, PMBASE, (PMBASE_ADDR | 1));
|
||||
|
||||
/* Enable ACPI I/O and power management. */
|
||||
pci_write_config8(dev, ACPI_CNTL, 0x10);
|
||||
|
||||
reg32 = pci_read_config32(dev, GEN_CNTL);
|
||||
reg32 |= (3 << 7); /* Enable IOAPIC */
|
||||
reg32 |= (1 << 13); /* Coprocessor error enable */
|
||||
reg32 |= (1 << 1); /* Delayed transaction enable */
|
||||
reg32 |= (1 << 2); /* DMA collection buffer enable */
|
||||
pci_write_config32(dev, GEN_CNTL, reg32);
|
||||
printk_debug("IOAPIC Southbridge enabled %x\n", reg32);
|
||||
|
||||
*ioapic_index = 0;
|
||||
*ioapic_data = (1 << 25);
|
||||
|
||||
*ioapic_index = 0;
|
||||
reg32 = *ioapic_data;
|
||||
printk_debug("Southbridge APIC ID = %x\n", reg32);
|
||||
if (reg32 != (1 << 25))
|
||||
die("APIC Error\n");
|
||||
|
||||
/* TODO: From i82801ca, needed/useful on other ICH? */
|
||||
*ioapic_index = 3; /* Select Boot Configuration register. */
|
||||
*ioapic_data = 1; /* Use Processor System Bus to deliver interrupts. */
|
||||
}
|
||||
|
||||
void i82801bx_enable_serial_irqs(struct device *dev)
|
||||
{
|
||||
/* Set packet length and toggle silent mode bit. */
|
||||
pci_write_config8(dev, SERIRQ_CNTL,
|
||||
(1 << 7) | (1 << 6) | ((21 - 17) << 2) | (0 << 0));
|
||||
pci_write_config8(dev, SERIRQ_CNTL,
|
||||
(1 << 7) | (0 << 6) | ((21 - 17) << 2) | (0 << 0));
|
||||
/* TODO: Explain/#define the real meaning of these magic numbers. */
|
||||
}
|
||||
|
||||
static void i82801bx_pirq_init(device_t dev, uint16_t ich_model)
|
||||
{
|
||||
/* Get the chip configuration */
|
||||
config_t *config = dev->chip_info;
|
||||
|
||||
if (config->pirqa_routing) {
|
||||
pci_write_config8(dev, PIRQA_ROUT, config->pirqa_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQA_ROUT, PIRQA);
|
||||
}
|
||||
|
||||
if (config->pirqb_routing) {
|
||||
pci_write_config8(dev, PIRQB_ROUT, config->pirqb_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQB_ROUT, PIRQB);
|
||||
}
|
||||
|
||||
if (config->pirqc_routing) {
|
||||
pci_write_config8(dev, PIRQC_ROUT, config->pirqc_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQC_ROUT, PIRQC);
|
||||
}
|
||||
|
||||
if (config->pirqd_routing) {
|
||||
pci_write_config8(dev, PIRQD_ROUT, config->pirqd_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQD_ROUT, PIRQD);
|
||||
}
|
||||
|
||||
/* Route PIRQE - PIRQH (for ICH2-ICH9). */
|
||||
if (ich_model >= 0x2440) {
|
||||
|
||||
if (config->pirqe_routing) {
|
||||
pci_write_config8(dev, PIRQE_ROUT, config->pirqe_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQE_ROUT, PIRQE);
|
||||
}
|
||||
|
||||
if (config->pirqf_routing) {
|
||||
pci_write_config8(dev, PIRQF_ROUT, config->pirqf_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQF_ROUT, PIRQF);
|
||||
}
|
||||
|
||||
if (config->pirqg_routing) {
|
||||
pci_write_config8(dev, PIRQG_ROUT, config->pirqg_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQG_ROUT, PIRQG);
|
||||
}
|
||||
|
||||
if (config->pirqh_routing) {
|
||||
pci_write_config8(dev, PIRQH_ROUT, config->pirqh_routing);
|
||||
} else {
|
||||
pci_write_config8(dev, PIRQH_ROUT, PIRQH);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void i82801bx_power_options(device_t dev)
|
||||
{
|
||||
uint8_t byte;
|
||||
int pwr_on = -1;
|
||||
int nmi_option;
|
||||
|
||||
/* power after power fail */
|
||||
/* FIXME this doesn't work! */
|
||||
/* Which state do we want to goto after g3 (power restored)?
|
||||
* 0 == S0 Full On
|
||||
* 1 == S5 Soft Off
|
||||
*/
|
||||
pci_write_config8(dev, GEN_PMCON_3, pwr_on ? 0 : 1);
|
||||
printk_info("Set power %s if power fails\n", pwr_on ? "on" : "off");
|
||||
|
||||
/* Set up NMI on errors. */
|
||||
byte = inb(0x61);
|
||||
byte &= ~(1 << 3); /* IOCHK# NMI Enable */
|
||||
byte &= ~(1 << 2); /* PCI SERR# Enable */
|
||||
outb(byte, 0x61);
|
||||
byte = inb(0x70);
|
||||
|
||||
nmi_option = NMI_OFF;
|
||||
get_option(&nmi_option, "nmi");
|
||||
if (nmi_option) {
|
||||
byte &= ~(1 << 7); /* Set NMI. */
|
||||
outb(byte, 0x70);
|
||||
}
|
||||
}
|
||||
|
||||
static void gpio_init(device_t dev, uint16_t ich_model)
|
||||
{
|
||||
/* Set the value for GPIO base address register and enable GPIO.
|
||||
* Note: ICH-ICH5 registers differ from ICH6-ICH9.
|
||||
*/
|
||||
if (ich_model <= 0x24D0) {
|
||||
pci_write_config32(dev, GPIO_BASE_ICH0_5, (GPIO_BASE_ADDR | 1));
|
||||
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
||||
} else if (ich_model >= 0x2640) {
|
||||
pci_write_config32(dev, GPIO_BASE_ICH6_9, (GPIO_BASE_ADDR | 1));
|
||||
pci_write_config8(dev, GPIO_CNTL_ICH6_9, 0x10);
|
||||
}
|
||||
}
|
||||
|
||||
void i82801bx_rtc_init(struct device *dev)
|
||||
{
|
||||
uint8_t reg8;
|
||||
uint32_t reg32;
|
||||
int rtc_failed;
|
||||
|
||||
reg8 = pci_read_config8(dev, GEN_PMCON_3);
|
||||
rtc_failed = reg8 & RTC_BATTERY_DEAD;
|
||||
if (rtc_failed) {
|
||||
reg8 &= ~(1 << 1); /* Preserve the power fail state. */
|
||||
pci_write_config8(dev, GEN_PMCON_3, reg8);
|
||||
}
|
||||
reg32 = pci_read_config32(dev, GEN_STS);
|
||||
rtc_failed |= reg32 & (1 << 2);
|
||||
rtc_init(rtc_failed);
|
||||
|
||||
/* Enable access to the upper 128 byte bank of CMOS RAM. */
|
||||
pci_write_config8(dev, RTC_CONF, 0x04);
|
||||
}
|
||||
|
||||
void i82801bx_lpc_route_dma(struct device *dev, uint8_t mask)
|
||||
{
|
||||
uint16_t reg16;
|
||||
int i;
|
||||
|
||||
reg16 = pci_read_config16(dev, PCI_DMA_CFG);
|
||||
reg16 &= 0x300;
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (i == 4)
|
||||
continue;
|
||||
reg16 |= ((mask & (1 << i)) ? 3 : 1) << (i * 2);
|
||||
}
|
||||
pci_write_config16(dev, PCI_DMA_CFG, reg16);
|
||||
}
|
||||
|
||||
static void i82801bx_lpc_decode_en(device_t dev, uint16_t ich_model)
|
||||
{
|
||||
/* Decode 0x3F8-0x3FF (COM1) for COMA port, 0x2F8-0x2FF (COM2) for COMB.
|
||||
* LPT decode defaults to 0x378-0x37F and 0x778-0x77F.
|
||||
* Floppy decode defaults to 0x3F0-0x3F5, 0x3F7.
|
||||
* We also need to set the value for LPC I/F Enables Register.
|
||||
* Note: ICH-ICH5 registers differ from ICH6-ICH9.
|
||||
*/
|
||||
if (ich_model <= 0x24D0) {
|
||||
pci_write_config8(dev, COM_DEC, 0x10);
|
||||
pci_write_config16(dev, LPC_EN_ICH0_5, 0x300F);
|
||||
} else if (ich_model >= 0x2640) {
|
||||
pci_write_config8(dev, LPC_IO_DEC, 0x10);
|
||||
pci_write_config16(dev, LPC_EN_ICH6_9, 0x300F);
|
||||
}
|
||||
}
|
||||
|
||||
static void enable_hpet(struct device *dev)
|
||||
{
|
||||
#ifdef HPET_PRESENT
|
||||
uint32_t reg32;
|
||||
uint32_t code = (0 & 0x3);
|
||||
|
||||
reg32 = pci_read_config32(dev, GEN_CNTL);
|
||||
reg32 |= (1 << 17); /* Enable HPET. */
|
||||
/*
|
||||
* Bits [16:15] Memory Address Range
|
||||
* 00 FED0_0000h - FED0_03FFh
|
||||
* 01 FED0_1000h - FED0_13FFh
|
||||
* 10 FED0_2000h - FED0_23FFh
|
||||
* 11 FED0_3000h - FED0_33FFh
|
||||
*/
|
||||
reg32 &= ~(3 << 15); /* Clear it */
|
||||
reg32 |= (code << 15);
|
||||
/* TODO: reg32 is never written to anywhere? */
|
||||
printk_debug("Enabling HPET @0x%x\n", HPET_ADDR | (code << 12));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void lpc_init(struct device *dev)
|
||||
{
|
||||
uint16_t ich_model = pci_read_config16(dev, PCI_DEVICE_ID);
|
||||
|
||||
/* Set the value for PCI command register. */
|
||||
pci_write_config16(dev, PCI_COMMAND, 0x000f);
|
||||
|
||||
/* IO APIC initialization. */
|
||||
i82801bx_enable_apic(dev);
|
||||
|
||||
i82801bx_enable_serial_irqs(dev);
|
||||
|
||||
/* Setup the PIRQ. */
|
||||
i82801bx_pirq_init(dev, ich_model);
|
||||
|
||||
/* Setup power options. */
|
||||
i82801bx_power_options(dev);
|
||||
|
||||
/* Set the state of the GPIO lines. */
|
||||
gpio_init(dev, ich_model);
|
||||
|
||||
/* Initialize the real time clock. */
|
||||
i82801bx_rtc_init(dev);
|
||||
|
||||
/* Route DMA. */
|
||||
i82801bx_lpc_route_dma(dev, 0xff);
|
||||
|
||||
/* Initialize ISA DMA. */
|
||||
isa_dma_init();
|
||||
|
||||
/* Setup decode ports and LPC I/F enables. */
|
||||
i82801bx_lpc_decode_en(dev, ich_model);
|
||||
|
||||
/* Initialize the High Precision Event Timers, if present. */
|
||||
enable_hpet(dev);
|
||||
}
|
||||
|
||||
static void i82801bx_lpc_read_resources(device_t dev)
|
||||
{
|
||||
struct resource *res;
|
||||
|
||||
/* Get the normal PCI resources of this device. */
|
||||
pci_dev_read_resources(dev);
|
||||
|
||||
/* Add an extra subtractive resource for both memory and I/O. */
|
||||
res = new_resource(dev, IOINDEX_SUBTRACTIVE(0, 0));
|
||||
res->base = 0;
|
||||
res->size = 0x1000;
|
||||
res->flags = IORESOURCE_IO | IORESOURCE_SUBTRACTIVE |
|
||||
IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
|
||||
|
||||
res = new_resource(dev, IOINDEX_SUBTRACTIVE(1, 0));
|
||||
res->base = 0xff800000;
|
||||
res->size = 0x00800000; /* 8 MB for flash */
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_SUBTRACTIVE |
|
||||
IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
|
||||
|
||||
res = new_resource(dev, 3); /* IOAPIC */
|
||||
res->base = 0xfec00000;
|
||||
res->size = 0x00001000;
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
|
||||
}
|
||||
|
||||
static void i82801bx_lpc_enable_resources(device_t dev)
|
||||
{
|
||||
pci_dev_enable_resources(dev);
|
||||
enable_childrens_resources(dev);
|
||||
}
|
||||
|
||||
static struct device_operations lpc_ops = {
|
||||
.read_resources = i82801bx_lpc_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = i82801bx_lpc_enable_resources,
|
||||
.init = lpc_init,
|
||||
.scan_bus = scan_static_bus,
|
||||
.enable = i82801bx_enable,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801aa_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2410,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ab_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2420,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ba_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2440,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ca_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2480,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801db_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24c0,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801dbm_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24cc,
|
||||
};
|
||||
|
||||
/* 82801EB and 82801ER */
|
||||
static const struct pci_driver i82801ex_lpc __pci_driver = {
|
||||
.ops = &lpc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24d0,
|
||||
};
|
78
src/southbridge/intel/i82801bx/i82801bx_nic.c
Normal file
78
src/southbridge/intel/i82801bx/i82801bx_nic.c
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* This code should work for all ICH* southbridges with a NIC. */
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
|
||||
static struct device_operations nic_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = 0,
|
||||
.scan_bus = 0,
|
||||
};
|
||||
|
||||
/* Note: There's no NIC on 82801AA/AB (ICH/ICH0). */
|
||||
|
||||
/* 82801BA/BAM/CA/CAM (ICH2/ICH2-M/ICH3-S/ICH3-M) */
|
||||
static const struct pci_driver i82801ba_nic __pci_driver = {
|
||||
.ops = &nic_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801BA_LAN,
|
||||
};
|
||||
|
||||
/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
|
||||
static const struct pci_driver i82801db_nic __pci_driver = {
|
||||
.ops = &nic_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_LAN,
|
||||
};
|
||||
|
||||
/* 82801EB/ER (ICH5/ICH5R) */
|
||||
static const struct pci_driver i82801eb_nic __pci_driver = {
|
||||
.ops = &nic_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_LAN,
|
||||
};
|
||||
|
||||
/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
|
||||
static const struct pci_driver i82801fb_nic __pci_driver = {
|
||||
.ops = &nic_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_LAN,
|
||||
};
|
||||
|
||||
/* 82801E (C-ICH) */
|
||||
static const struct pci_driver i82801e_nic1 __pci_driver = {
|
||||
.ops = &nic_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801E_LAN1,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801e_nic2 __pci_driver = {
|
||||
.ops = &nic_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801E_LAN2,
|
||||
};
|
||||
|
72
src/southbridge/intel/i82801bx/i82801bx_pci.c
Normal file
72
src/southbridge/intel/i82801bx/i82801bx_pci.c
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
|
||||
static void pci_init(struct device *dev)
|
||||
{
|
||||
uint16_t reg16;
|
||||
|
||||
/* Clear system errors */
|
||||
reg16 = pci_read_config16(dev, 0x06);
|
||||
reg16 |= 0xf900; /* Clear possible errors */
|
||||
pci_write_config16(dev, 0x06, reg16);
|
||||
|
||||
reg16 = pci_read_config16(dev, 0x1e);
|
||||
reg16 |= 0xf800; /* Clear possible errors */
|
||||
pci_write_config16(dev, 0x1e, reg16);
|
||||
}
|
||||
|
||||
static struct device_operations pci_ops = {
|
||||
.read_resources = pci_bus_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_bus_enable_resources,
|
||||
.init = pci_init,
|
||||
.scan_bus = pci_scan_bridge,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801aa_pci __pci_driver = {
|
||||
.ops = &pci_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2418,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ab_pci __pci_driver = {
|
||||
.ops = &pci_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2428,
|
||||
};
|
||||
|
||||
/* 82801BA, 82801CA, 82801DB, 82801EB, and 82801ER */
|
||||
static const struct pci_driver i82801misc_pci __pci_driver = {
|
||||
.ops = &pci_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x244e,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801dbm_pci __pci_driver = {
|
||||
.ops = &pci_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x2448,
|
||||
};
|
27
src/southbridge/intel/i82801bx/i82801bx_reset.c
Normal file
27
src/southbridge/intel/i82801bx/i82801bx_reset.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2002 Eric Biederman <ebiederm@xmission.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
|
||||
void hard_reset(void)
|
||||
{
|
||||
/* Try rebooting through port 0xcf9. */
|
||||
outb((1 << 2) | (1 << 1), 0xcf9);
|
||||
}
|
82
src/southbridge/intel/i82801bx/i82801bx_sata.c
Normal file
82
src/southbridge/intel/i82801bx/i82801bx_sata.c
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801bx.h"
|
||||
|
||||
/* TODO: Set dynamically, if the user only wants one SATA channel or none
|
||||
* at all.
|
||||
*/
|
||||
static void sata_init(struct device *dev)
|
||||
{
|
||||
/* SATA configuration */
|
||||
pci_write_config8(dev, 0x04, 0x07);
|
||||
pci_write_config8(dev, 0x09, 0x8f);
|
||||
|
||||
/* Set timmings */
|
||||
pci_write_config16(dev, 0x40, 0x0a307);
|
||||
pci_write_config16(dev, 0x42, 0x0a307);
|
||||
|
||||
/* Sync DMA */
|
||||
pci_write_config16(dev, 0x48, 0x000f);
|
||||
pci_write_config16(dev, 0x4a, 0x1111);
|
||||
|
||||
/* 66 MHz */
|
||||
pci_write_config16(dev, 0x54, 0xf00f);
|
||||
|
||||
/* Combine IDE - SATA configuration */
|
||||
pci_write_config8(dev, 0x90, 0x0);
|
||||
|
||||
/* Port 0 & 1 enable */
|
||||
pci_write_config8(dev, 0x92, 0x33);
|
||||
|
||||
/* Initialize SATA. */
|
||||
pci_write_config16(dev, 0xa0, 0x0018);
|
||||
pci_write_config32(dev, 0xa4, 0x00000264);
|
||||
pci_write_config16(dev, 0xa0, 0x0040);
|
||||
pci_write_config32(dev, 0xa4, 0x00220043);
|
||||
}
|
||||
|
||||
static struct device_operations sata_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = sata_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801bx_enable,
|
||||
};
|
||||
|
||||
/* 82801EB */
|
||||
static const struct pci_driver i82801eb_sata_driver __pci_driver = {
|
||||
.ops = &sata_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24d1,
|
||||
};
|
||||
|
||||
/* 82801ER */
|
||||
static const struct pci_driver i82801er_sata_driver __pci_driver = {
|
||||
.ops = &sata_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24df,
|
||||
};
|
109
src/southbridge/intel/i82801bx/i82801bx_smbus.c
Normal file
109
src/southbridge/intel/i82801bx/i82801bx_smbus.c
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Yinghai Lu <yinghailu@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* TODO: Check datasheets if this will work for all ICH* southbridges. */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <smbus.h>
|
||||
#include <pci.h>
|
||||
#include <arch/io.h>
|
||||
#include "i82801bx.h"
|
||||
#include "i82801_smbus.h"
|
||||
|
||||
static int smbus_read_byte(struct bus *bus, device_t dev, u8 address)
|
||||
{
|
||||
unsigned device; /* TODO: u16? */
|
||||
struct resource *res;
|
||||
|
||||
device = dev->path.i2c.device;
|
||||
res = find_resource(bus->dev, 0x20);
|
||||
|
||||
return do_smbus_read_byte(res->base, device, address);
|
||||
}
|
||||
|
||||
static struct smbus_bus_operations lops_smbus_bus = {
|
||||
.read_byte = smbus_read_byte,
|
||||
};
|
||||
|
||||
static const struct device_operations smbus_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = 0,
|
||||
.scan_bus = scan_static_bus,
|
||||
.enable = i82801er_enable,
|
||||
.ops_smbus_bus = &lops_smbus_bus,
|
||||
};
|
||||
|
||||
/* 82801AA (ICH) */
|
||||
static const struct pci_driver i82801aa_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AA_SMB,
|
||||
};
|
||||
|
||||
/* 82801AB (ICH0) */
|
||||
static const struct pci_driver i82801ab_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AB_SMB,
|
||||
};
|
||||
|
||||
/* 82801BA/BAM (ICH2/ICH2-M) */
|
||||
static const struct pci_driver i82801ba_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801BA_SMB,
|
||||
};
|
||||
|
||||
/* 82801CA/CAM (ICH3-S/ICH3-M) */
|
||||
static const struct pci_driver i82801ca_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801CA_SMB,
|
||||
};
|
||||
|
||||
/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
|
||||
static const struct pci_driver i82801db_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_SMB,
|
||||
};
|
||||
|
||||
/* 82801EB/ER (ICH5/ICH5R) */
|
||||
static const struct pci_driver i82801eb_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_SMB,
|
||||
};
|
||||
|
||||
/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
|
||||
static const struct pci_driver i82801fb_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_SMB,
|
||||
};
|
||||
|
||||
/* 82801E (C-ICH) */
|
||||
static const struct pci_driver i82801e_smb __pci_driver = {
|
||||
.ops = &smbus_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801E_SMB,
|
||||
};
|
183
src/southbridge/intel/i82801bx/i82801bx_smbus.h
Normal file
183
src/southbridge/intel/i82801bx/i82801bx_smbus.h
Normal file
|
@ -0,0 +1,183 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Yinghai Lu <yinghailu@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <device/smbus_def.h>
|
||||
|
||||
static void smbus_delay(void)
|
||||
{
|
||||
inb(0x80);
|
||||
}
|
||||
|
||||
static int smbus_wait_until_ready(void)
|
||||
{
|
||||
unsigned loops = SMBUS_TIMEOUT;
|
||||
unsigned char byte;
|
||||
do {
|
||||
smbus_delay();
|
||||
if (--loops == 0)
|
||||
break;
|
||||
byte = inb(SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
} while (byte & 1);
|
||||
return loops ? 0 : -1;
|
||||
}
|
||||
|
||||
static int smbus_wait_until_done(void)
|
||||
{
|
||||
unsigned loops = SMBUS_TIMEOUT;
|
||||
unsigned char byte;
|
||||
do {
|
||||
smbus_delay();
|
||||
if (--loops == 0)
|
||||
break;
|
||||
byte = inb(SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
} while ((byte & 1) || (byte & ~((1 << 6) | (1 << 0))) == 0);
|
||||
return loops ? 0 : -1;
|
||||
}
|
||||
|
||||
static int smbus_wait_until_blk_done(void)
|
||||
{
|
||||
unsigned loops = SMBUS_TIMEOUT;
|
||||
unsigned char byte;
|
||||
do {
|
||||
smbus_delay();
|
||||
if (--loops == 0)
|
||||
break;
|
||||
byte = inb(SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
} while ((byte & (1 << 7)) == 0);
|
||||
return loops ? 0 : -1;
|
||||
}
|
||||
|
||||
static int do_smbus_read_byte(unsigned device, unsigned address)
|
||||
{
|
||||
unsigned char global_status_register;
|
||||
unsigned char byte;
|
||||
|
||||
if (smbus_wait_until_ready() < 0) {
|
||||
return SMBUS_WAIT_UNTIL_READY_TIMEOUT;
|
||||
}
|
||||
/* Setup transaction */
|
||||
/* Disable interrupts */
|
||||
outb(inb(SMBUS_IO_BASE + SMBHSTCTL) & (~1), SMBUS_IO_BASE + SMBHSTCTL);
|
||||
/* Set the device I'm talking too */
|
||||
outb(((device & 0x7f) << 1) | 1, SMBUS_IO_BASE + SMBXMITADD);
|
||||
/* Set the command/address... */
|
||||
outb(address & 0xff, SMBUS_IO_BASE + SMBHSTCMD);
|
||||
/* Set up for a byte data read */
|
||||
outb((inb(SMBUS_IO_BASE + SMBHSTCTL) & 0xe3) | (0x2 << 2),
|
||||
(SMBUS_IO_BASE + SMBHSTCTL));
|
||||
/* Clear any lingering errors, so the transaction will run */
|
||||
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
|
||||
/* Clear the data byte... */
|
||||
outb(0, SMBUS_IO_BASE + SMBHSTDAT0);
|
||||
|
||||
/* Start the command */
|
||||
outb((inb(SMBUS_IO_BASE + SMBHSTCTL) | 0x40),
|
||||
SMBUS_IO_BASE + SMBHSTCTL);
|
||||
|
||||
/* Poll for transaction completion */
|
||||
if (smbus_wait_until_done() < 0) {
|
||||
return SMBUS_WAIT_UNTIL_DONE_TIMEOUT;
|
||||
}
|
||||
|
||||
global_status_register = inb(SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
|
||||
/* Ignore the "In Use" status... */
|
||||
global_status_register &= ~(3 << 5);
|
||||
|
||||
/* Read results of transaction */
|
||||
byte = inb(SMBUS_IO_BASE + SMBHSTDAT0);
|
||||
if (global_status_register != (1 << 1)) {
|
||||
return SMBUS_ERROR;
|
||||
}
|
||||
return byte;
|
||||
}
|
||||
|
||||
/* This function is neither used nor tested by me (Corey Osgood), the author
|
||||
(Yinghai) probably tested/used it on i82801er */
|
||||
static int do_smbus_write_block(unsigned device, unsigned length, unsigned cmd,
|
||||
unsigned data1, unsigned data2)
|
||||
{
|
||||
#warning "do_smbus_write_block is commented out"
|
||||
print_err("Untested smbus_write_block called\r\n");
|
||||
#if 0
|
||||
unsigned char global_control_register;
|
||||
unsigned char global_status_register;
|
||||
unsigned char byte;
|
||||
unsigned char stat;
|
||||
int i;
|
||||
|
||||
/* Clear the PM timeout flags, SECOND_TO_STS */
|
||||
outw(inw(0x0400 + 0x66), 0x0400 + 0x66);
|
||||
|
||||
if (smbus_wait_until_ready(SMBUS_IO_BASE) < 0) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* Setup transaction */
|
||||
/* Obtain ownership */
|
||||
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
for (stat = 0; (stat & 0x40) == 0;) {
|
||||
stat = inb(SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
}
|
||||
/* Clear the done bit */
|
||||
outb(0x80, SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
/* Disable interrupts */
|
||||
outb(inb(SMBUS_IO_BASE + SMBHSTCTL) & (~1), SMBUS_IO_BASE + SMBHSTCTL);
|
||||
|
||||
/* Set the device I'm talking too */
|
||||
outb(((device & 0x7f) << 1), SMBUS_IO_BASE + SMBXMITADD);
|
||||
|
||||
/* Set the command address */
|
||||
outb(cmd & 0xff, SMBUS_IO_BASE + SMBHSTCMD);
|
||||
|
||||
/* Set the block length */
|
||||
outb(length & 0xff, SMBUS_IO_BASE + SMBHSTDAT0);
|
||||
|
||||
/* Try sending out the first byte of data here */
|
||||
byte = (data1 >> (0)) & 0x0ff;
|
||||
outb(byte, SMBUS_IO_BASE + SMBBLKDAT);
|
||||
/* Issue a block write command */
|
||||
outb((inb(SMBUS_IO_BASE + SMBHSTCTL) & 0xe3) | (0x5 << 2) | 0x40,
|
||||
SMBUS_IO_BASE + SMBHSTCTL);
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
|
||||
/* Poll for transaction completion */
|
||||
if (smbus_wait_until_blk_done(SMBUS_IO_BASE) < 0) {
|
||||
return -3;
|
||||
}
|
||||
|
||||
/* Load the next byte */
|
||||
if (i > 3)
|
||||
byte = (data2 >> (i % 4)) & 0x0ff;
|
||||
else
|
||||
byte = (data1 >> (i)) & 0x0ff;
|
||||
outb(byte, SMBUS_IO_BASE + SMBBLKDAT);
|
||||
|
||||
/* Clear the done bit */
|
||||
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT),
|
||||
SMBUS_IO_BASE + SMBHSTSTAT);
|
||||
}
|
||||
|
||||
print_debug("SMBUS Block complete\r\n");
|
||||
return 0;
|
||||
#endif
|
||||
}
|
163
src/southbridge/intel/i82801bx/i82801bx_usb.c
Normal file
163
src/southbridge/intel/i82801bx/i82801bx_usb.c
Normal file
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* This code should work for all ICH* southbridges with USB. */
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801bx.h"
|
||||
|
||||
static void usb_init(struct device *dev)
|
||||
{
|
||||
/* TODO: Any init needed? Some ports have it, others don't. */
|
||||
}
|
||||
|
||||
static struct device_operations usb_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = usb_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801bx_enable,
|
||||
};
|
||||
|
||||
/* 82801AA (ICH) */
|
||||
static const struct pci_driver i82801aa_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AA_USB,
|
||||
};
|
||||
|
||||
/* 82801AB (ICH0) */
|
||||
static const struct pci_driver i82801ab_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801AB_USB,
|
||||
};
|
||||
|
||||
/* 82801BA/BAM (ICH2/ICH2-M) */
|
||||
static const struct pci_driver i82801ba_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801BA_USB1,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ba_usb2 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801BA_USB2,
|
||||
};
|
||||
|
||||
/* 82801CA/CAM (ICH3-S/ICH3-M) */
|
||||
static const struct pci_driver i82801ca_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801CA_USB1,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ca_usb2 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801CA_USB2,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801ca_usb3 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801CA_USB3,
|
||||
};
|
||||
|
||||
/* 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) */
|
||||
static const struct pci_driver i82801db_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_USB1,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801db_usb2 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_USB2,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801db_usb3 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801DB_USB3,
|
||||
};
|
||||
|
||||
/* 82801EB/ER (ICH5/ICH5R) */
|
||||
static const struct pci_driver i82801eb_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_USB1,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801eb_usb2 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_USB2,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801eb_usb3 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_USB3,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801eb_usb4 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801EB_USB4,
|
||||
};
|
||||
|
||||
/* 82801FB/FR/FW/FRW/FBM (ICH6/ICH6R/ICH6W/ICH6RW/ICH6-M) */
|
||||
static const struct pci_driver i82801fb_usb1 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_USB1,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801fb_usb2 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_USB2,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801fb_usb3 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_USB3,
|
||||
};
|
||||
|
||||
static const struct pci_driver i82801fb_usb4 __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801FB_USB4,
|
||||
};
|
||||
|
||||
/* 82801E (C-ICH) */
|
||||
static const struct pci_driver i82801e_usb __pci_driver = {
|
||||
.ops = &usb_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = PCI_DEVICE_ID_INTEL_82801E_USB,
|
||||
};
|
84
src/southbridge/intel/i82801bx/i82801bx_usb_ehci.c
Normal file
84
src/southbridge/intel/i82801bx/i82801bx_usb_ehci.c
Normal file
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2005 Tyan Computer
|
||||
* (Written by Yinghai Lu <yinghailu@gmail.com> for Tyan Computer>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "i82801bx.h"
|
||||
|
||||
static void usb_ehci_init(struct device *dev)
|
||||
{
|
||||
/* TODO: Is any special init really needed? */
|
||||
uint32_t cmd;
|
||||
|
||||
printk_debug("EHCI: Setting up controller.. ");
|
||||
cmd = pci_read_config32(dev, PCI_COMMAND);
|
||||
pci_write_config32(dev, PCI_COMMAND, cmd | PCI_COMMAND_MASTER);
|
||||
|
||||
printk_debug("done.\n");
|
||||
}
|
||||
|
||||
static void usb_ehci_set_subsystem(device_t dev, unsigned vendor,
|
||||
unsigned device)
|
||||
{
|
||||
uint8_t access_cntl;
|
||||
|
||||
access_cntl = pci_read_config8(dev, 0x80);
|
||||
|
||||
/* Enable writes to protected registers. */
|
||||
pci_write_config8(dev, 0x80, access_cntl | 1);
|
||||
|
||||
/* Write the subsystem vendor and device ID. */
|
||||
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
|
||||
((device & 0xffff) << 16) | (vendor & 0xffff));
|
||||
|
||||
/* Restore protection. */
|
||||
pci_write_config8(dev, 0x80, access_cntl);
|
||||
}
|
||||
|
||||
static struct pci_operations lops_pci = {
|
||||
.set_subsystem = &usb_ehci_set_subsystem,
|
||||
};
|
||||
|
||||
static struct device_operations usb_ehci_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = usb_ehci_init,
|
||||
.scan_bus = 0,
|
||||
.enable = i82801bx_enable,
|
||||
.ops_pci = &lops_pci,
|
||||
};
|
||||
|
||||
/* 82801DB and 82801DBM */
|
||||
static const struct pci_driver i82801db_usb_ehci __pci_driver = {
|
||||
.ops = &usb_ehci_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24cd,
|
||||
};
|
||||
|
||||
/* 82801EB and 82801ER */
|
||||
static const struct pci_driver i82801ex_usb_ehci __pci_driver = {
|
||||
.ops = &usb_ehci_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x24dd,
|
||||
};
|
54
src/southbridge/intel/i82801bx/i82801bx_watchdog.c
Normal file
54
src/southbridge/intel/i82801bx/i82801bx_watchdog.c
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2006 John Dufresne <jon.dufresne@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <arch/io.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
|
||||
/* TODO: I'm fairly sure the same functionality is provided elsewhere. */
|
||||
|
||||
void watchdog_off(void)
|
||||
{
|
||||
device_t dev;
|
||||
unsigned long value, base;
|
||||
|
||||
/* Turn off the ICH5 watchdog. */
|
||||
dev = dev_find_slot(0, PCI_DEVFN(0x1f, 0));
|
||||
|
||||
/* Enable I/O space. */
|
||||
value = pci_read_config16(dev, 0x04);
|
||||
value |= (1 << 10);
|
||||
pci_write_config16(dev, 0x04, value);
|
||||
|
||||
/* Get TCO base. */
|
||||
base = (pci_read_config32(dev, 0x40) & 0x0fffe) + 0x60;
|
||||
|
||||
/* Disable the watchdog timer. */
|
||||
value = inw(base + 0x08);
|
||||
value |= 1 << 11;
|
||||
outw(value, base + 0x08);
|
||||
|
||||
/* Clear TCO timeout status. */
|
||||
outw(0x0008, base + 0x04);
|
||||
outw(0x0002, base + 0x06);
|
||||
|
||||
printk_debug("ICH Watchdog disabled\r\n");
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
config SOUTHBRIDGE_INTEL_I82801CA
|
||||
bool
|
|
@ -1,8 +0,0 @@
|
|||
driver-y += i82801ca.o
|
||||
driver-y += i82801ca_usb.o
|
||||
driver-y += i82801ca_lpc.o
|
||||
driver-y += i82801ca_ide.o
|
||||
driver-y += i82801ca_ac97.o
|
||||
#driver-y += i82801ca_nic.o
|
||||
driver-y += i82801ca_pci.o
|
||||
obj-y += i82801ca_reset.o
|
|
@ -1,9 +0,0 @@
|
|||
#ifndef I82801CA_CHIP_H
|
||||
#define I82801CA_CHIP_H
|
||||
|
||||
struct southbridge_intel_i82801ca_config
|
||||
{
|
||||
};
|
||||
extern struct chip_operations southbridge_intel_i82801ca_ops;
|
||||
|
||||
#endif /* I82801CA_CHIP_H */
|
2
src/southbridge/intel/i82801cx/Kconfig
Normal file
2
src/southbridge/intel/i82801cx/Kconfig
Normal file
|
@ -0,0 +1,2 @@
|
|||
config SOUTHBRIDGE_INTEL_I82801CX
|
||||
bool
|
8
src/southbridge/intel/i82801cx/Makefile.inc
Normal file
8
src/southbridge/intel/i82801cx/Makefile.inc
Normal file
|
@ -0,0 +1,8 @@
|
|||
driver-y += i82801cx.o
|
||||
driver-y += i82801cx_usb.o
|
||||
driver-y += i82801cx_lpc.o
|
||||
driver-y += i82801cx_ide.o
|
||||
driver-y += i82801cx_ac97.o
|
||||
#driver-y += i82801cx_nic.o
|
||||
driver-y += i82801cx_pci.o
|
||||
obj-y += i82801cx_reset.o
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue