The early init code of several Intel southbridge chipsets calls
pci_locate_device() to locate the SMBus controller and LPC bridge devices on the PCI bus. Since these devices are always located at a fixed PCI bus:device:function, the code can be simplified by hardcoding the devices. Signed-off-by: Ed Swierk <eswierk@arastra.com> Acked-by: Corey Osgood <corey.osgood@gmail.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3205 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
2c6b33ce3e
commit
c4e052cd50
|
@ -4,12 +4,8 @@
|
||||||
|
|
||||||
static void enable_smbus(void)
|
static void enable_smbus(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x25a4), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("SMBUS controller not found\r\n");
|
|
||||||
}
|
|
||||||
uint8_t enable;
|
|
||||||
print_spew("SMBus controller enabled\r\n");
|
print_spew("SMBus controller enabled\r\n");
|
||||||
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
||||||
pci_write_config8(dev, 0x40, 1);
|
pci_write_config8(dev, 0x40, 1);
|
||||||
|
@ -19,11 +15,6 @@ static void enable_smbus(void)
|
||||||
|
|
||||||
/* Disable interrupt generation */
|
/* Disable interrupt generation */
|
||||||
outb(0, SMBUS_IO_BASE + SMBHSTCTL);
|
outb(0, SMBUS_IO_BASE + SMBHSTCTL);
|
||||||
|
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("ISA bridge not found\r\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smbus_read_byte(unsigned device, unsigned address)
|
static int smbus_read_byte(unsigned device, unsigned address)
|
||||||
|
|
|
@ -20,12 +20,7 @@
|
||||||
|
|
||||||
static void i3100_enable_superio(void)
|
static void i3100_enable_superio(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x0);
|
||||||
dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_INTEL,
|
|
||||||
PCI_DEVICE_ID_INTEL_3100_LPC), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("LPC bridge not found\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable decoding of I/O locations for SuperIO devices */
|
/* Enable decoding of I/O locations for SuperIO devices */
|
||||||
pci_write_config16(dev, 0x82, 0x340f);
|
pci_write_config16(dev, 0x82, 0x340f);
|
||||||
|
@ -33,12 +28,7 @@ static void i3100_enable_superio(void)
|
||||||
|
|
||||||
static void i3100_halt_tco_timer(void)
|
static void i3100_halt_tco_timer(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0, 0x1f, 0);
|
||||||
dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_INTEL,
|
|
||||||
PCI_DEVICE_ID_INTEL_3100_LPC), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("LPC bridge not found\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Temporarily enable the ACPI I/O range at 0x4000 */
|
/* Temporarily enable the ACPI I/O range at 0x4000 */
|
||||||
pci_write_config32(dev, 0x40, 0x4000 | (1 << 0));
|
pci_write_config32(dev, 0x40, 0x4000 | (1 << 0));
|
||||||
|
|
|
@ -24,12 +24,8 @@
|
||||||
|
|
||||||
static void enable_smbus(void)
|
static void enable_smbus(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||||
dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_INTEL,
|
|
||||||
PCI_DEVICE_ID_INTEL_3100_SMB), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("SMBus controller not found\r\n");
|
|
||||||
}
|
|
||||||
print_spew("SMBus controller enabled\r\n");
|
print_spew("SMBus controller enabled\r\n");
|
||||||
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
||||||
pci_write_config8(dev, 0x40, 1);
|
pci_write_config8(dev, 0x40, 1);
|
||||||
|
|
|
@ -3,11 +3,7 @@
|
||||||
|
|
||||||
static void enable_smbus(void)
|
static void enable_smbus(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||||
dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_SMB), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("SMBUS controller not found\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
print_debug("SMBus controller enabled\r\n");
|
print_debug("SMBus controller enabled\r\n");
|
||||||
/* set smbus iobase */
|
/* set smbus iobase */
|
||||||
|
|
|
@ -22,11 +22,8 @@
|
||||||
|
|
||||||
static void enable_smbus(void)
|
static void enable_smbus(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x24d3), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("SMBUS controller not found\r\n");
|
|
||||||
}
|
|
||||||
print_spew("SMBus controller enabled\r\n");
|
print_spew("SMBus controller enabled\r\n");
|
||||||
|
|
||||||
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
||||||
|
@ -42,13 +39,6 @@ static void enable_smbus(void)
|
||||||
|
|
||||||
/* clear any lingering errors, so the transaction will run */
|
/* clear any lingering errors, so the transaction will run */
|
||||||
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
||||||
|
|
||||||
#if 0 // It's unlikely that half the southbridge suddenly vanishes?
|
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("ISA bridge not found\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smbus_read_byte(unsigned device, unsigned address)
|
static int smbus_read_byte(unsigned device, unsigned address)
|
||||||
|
|
|
@ -21,11 +21,7 @@
|
||||||
|
|
||||||
static void enable_smbus(void)
|
static void enable_smbus(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x24c3), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("SMBUS controller not found\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
print_debug("SMBus controller enabled\r\n");
|
print_debug("SMBus controller enabled\r\n");
|
||||||
/* set smbus iobase */
|
/* set smbus iobase */
|
||||||
|
|
|
@ -4,11 +4,8 @@
|
||||||
|
|
||||||
static void enable_smbus(void)
|
static void enable_smbus(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev = PCI_DEV(0x0, 0x1f, 0x3);
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x24d3), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("SMBUS controller not found\r\n");
|
|
||||||
}
|
|
||||||
print_spew("SMBus controller enabled\r\n");
|
print_spew("SMBus controller enabled\r\n");
|
||||||
|
|
||||||
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
pci_write_config32(dev, 0x20, SMBUS_IO_BASE | 1);
|
||||||
|
@ -24,13 +21,6 @@ static void enable_smbus(void)
|
||||||
|
|
||||||
/* clear any lingering errors, so the transaction will run */
|
/* clear any lingering errors, so the transaction will run */
|
||||||
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
|
||||||
|
|
||||||
#if 0 // It's unlikely that half the southbridge suddenly vanishes?
|
|
||||||
dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
|
|
||||||
if (dev == PCI_DEV_INVALID) {
|
|
||||||
die("ISA bridge not found\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smbus_read_byte(unsigned device, unsigned address)
|
static int smbus_read_byte(unsigned device, unsigned address)
|
||||||
|
|
Loading…
Reference in New Issue