aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2007-11-07 22:09:02 +0000
committerUwe Hermann <uwe@hermann-uwe.de>2007-11-07 22:09:02 +0000
commitcce5040153689f9e4908f04c2bb61819984d221f (patch)
treed9609d4eddd75c4162ef42508ab0bd7ae2cb8584
parentf9f1ae8ddb4011be41822d907bda4bc6db3c90bb (diff)
Add initial support for all known ICH* southbridges to the
i82801xx code for the following parts: - AC97 audio/modem - Onboard network interface cards (NICs) - USB 1.1 controllers - SMBus controllers Some other parts are still missing and will be added later. Use PCI ID #defines from pci_ids.h everywhere. Constify various structs. Also, fix some random cosmetic issues in the code. All of this is relatively trivial and tested by manually building all boards which currently use the i82801xx code. Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2951 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--src/southbridge/intel/i82801xx/Config.lb1
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx.c9
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_ac97.c73
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_early_smbus.c2
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_nic.c66
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_sata.c1
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_smbus.c83
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_usb.c198
-rw-r--r--src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c1
9 files changed, 342 insertions, 92 deletions
diff --git a/src/southbridge/intel/i82801xx/Config.lb b/src/southbridge/intel/i82801xx/Config.lb
index 5f18ef89c3..35544193b2 100644
--- a/src/southbridge/intel/i82801xx/Config.lb
+++ b/src/southbridge/intel/i82801xx/Config.lb
@@ -17,6 +17,7 @@
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
##
+
driver i82801xx.o
driver i82801xx_usb.o
driver i82801xx_lpc.o
diff --git a/src/southbridge/intel/i82801xx/i82801xx.c b/src/southbridge/intel/i82801xx/i82801xx.c
index c2ff949734..a0d34bde82 100644
--- a/src/southbridge/intel/i82801xx/i82801xx.c
+++ b/src/southbridge/intel/i82801xx/i82801xx.c
@@ -30,7 +30,7 @@ void i82801xx_enable(device_t dev)
unsigned int index = 0;
uint16_t cur_disable_mask, new_disable_mask;
- /* All 82801 devices should be on bus 0. */
+ /* 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)
@@ -50,10 +50,11 @@ void i82801xx_enable(device_t dev)
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
+ new_disable_mask = cur_disable_mask & ~(1 << index); /* Enable it. */
if (!dev->enabled) {
- new_disable_mask |= (1 << index); // disable it, if desired
+ 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);
@@ -61,6 +62,6 @@ void i82801xx_enable(device_t dev)
}
struct chip_operations southbridge_intel_i82801xx_ops = {
- CHIP_NAME("Intel i82801 Series Southbridge")
+ CHIP_NAME("Intel 82801 Series Southbridge")
.enable_dev = i82801xx_enable,
};
diff --git a/src/southbridge/intel/i82801xx/i82801xx_ac97.c b/src/southbridge/intel/i82801xx/i82801xx_ac97.c
index 14e2b4ae6e..f79e2b4e99 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_ac97.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_ac97.c
@@ -19,13 +19,15 @@
* 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 "i82801xx.h"
-static struct device_operations ac97_ops = {
+static const struct device_operations ac97_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
@@ -34,80 +36,109 @@ static struct device_operations ac97_ops = {
.enable = i82801xx_enable,
};
-/* 82801AA */
+/* 82801AA (ICH) */
static const struct pci_driver i82801aa_ac97_audio __pci_driver = {
.ops = &ac97_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2415,
+ .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 = 0x2416,
+ .device = PCI_DEVICE_ID_INTEL_82801AA_AC97_MODEM,
};
-/* 82801AB */
+/* 82801AB (ICH0) */
static const struct pci_driver i82801ab_ac97_audio __pci_driver = {
.ops = &ac97_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2425,
+ .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 = 0x2426,
+ .device = PCI_DEVICE_ID_INTEL_82801AB_AC97_MODEM,
};
-/* 82801BA */
+/* 82801BA/BAM (ICH2/ICH2-M) */
static const struct pci_driver i82801ba_ac97_audio __pci_driver = {
.ops = &ac97_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2445,
+ .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 = 0x2446,
+ .device = PCI_DEVICE_ID_INTEL_82801BA_AC97_MODEM,
};
-/* 82801CA */
+/* 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 = 0x2485,
+ .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 = 0x2486,
+ .device = PCI_DEVICE_ID_INTEL_82801CA_AC97_MODEM,
};
-/* 82801DB & 82801DBM */
+/* 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 = 0x24c5,
+ .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 = 0x24c6,
+ .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,
};
-/* 82801EB & 82801ER */
-static const struct pci_driver i82801ex_ac97_audio __pci_driver = {
+/* 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 = 0x24d5,
+ .device = PCI_DEVICE_ID_INTEL_82801FB_AC97_AUDIO,
};
-static const struct pci_driver i82801ex_ac97_modem __pci_driver = {
+static const struct pci_driver i82801fb_ac97_modem __pci_driver = {
.ops = &ac97_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d6,
+ .device = PCI_DEVICE_ID_INTEL_82801FB_AC97_MODEM,
};
+
+/* 82801GB/GR/GDH/GBM/GHM (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH) */
+/* Note: 82801GU (ICH7-U) doesn't have AC97 audio/modem. */
+static const struct pci_driver i82801gb_ac97_audio __pci_driver = {
+ .ops = &ac97_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_AC97_AUDIO,
+};
+
+static const struct pci_driver i82801gb_ac97_modem __pci_driver = {
+ .ops = &ac97_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_AC97_MODEM,
+};
+
+/* Note: There's no AC97 audio/modem on ICH8/ICH9/C-ICH. */
diff --git a/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c b/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c
index 214ca0834e..df73827e40 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c
@@ -29,7 +29,7 @@ static void enable_smbus(void)
device_t dev;
uint16_t device_id;
- /* Set the SMBus device staticly. */
+ /* Set the SMBus device statically. */
dev = PCI_DEV(0x0, 0x1f, 0x3);
/* Check to make sure we've got the right device. */
diff --git a/src/southbridge/intel/i82801xx/i82801xx_nic.c b/src/southbridge/intel/i82801xx/i82801xx_nic.c
index 410b36b502..2a10e63e75 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_nic.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_nic.c
@@ -18,12 +18,14 @@
* 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 = {
+static const struct device_operations nic_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
@@ -31,14 +33,68 @@ static struct device_operations nic_ops = {
.scan_bus = 0,
};
-static const struct pci_driver i82801dbm_nic __pci_driver = {
+/* 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 = 0x103a,
+ .device = PCI_DEVICE_ID_INTEL_82801FB_LAN,
};
-static const struct pci_driver i82801ex_nic __pci_driver = {
+/* 82801GB/GR/GDH/GBM/GHM (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH) */
+/* Note: 82801GU (ICH7-U) doesn't have a NIC. */
+static const struct pci_driver i82801gb_nic __pci_driver = {
.ops = &nic_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x1051,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_LAN,
};
+
+/* 82801HB/HR/HDH/HDO/HBM/HEM (ICH8/ICH8R/ICH8DH/ICH8DO/ICH8M/ICH8M-E) */
+static const struct pci_driver i82801hb_nic __pci_driver = {
+ .ops = &nic_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_LAN,
+};
+
+/* 82801IB/IR/IH/IO (ICH9/ICH9R/ICH9DH/ICH9DO) */
+static const struct pci_driver i82801ib_nic __pci_driver = {
+ .ops = &nic_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_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,
+};
+
diff --git a/src/southbridge/intel/i82801xx/i82801xx_sata.c b/src/southbridge/intel/i82801xx/i82801xx_sata.c
index 782a52f3e8..e382c8ed3a 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_sata.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_sata.c
@@ -23,7 +23,6 @@
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_ids.h>
-#include <device/pci_ops.h>
#include "i82801xx.h"
/* TODO: Set dynamically, if the user only wants one SATA channel or none
diff --git a/src/southbridge/intel/i82801xx/i82801xx_smbus.c b/src/southbridge/intel/i82801xx/i82801xx_smbus.c
index 25177e1983..92f459e85e 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_smbus.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_smbus.c
@@ -18,16 +18,18 @@
* 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 "i82801_model_specific.h"
#include "i82801xx.h"
#include "i82801_smbus.h"
-static int smbus_read_byte(struct bus *bus, device_t dev, uint8_t address)
+static int smbus_read_byte(struct bus *bus, device_t dev, u8 address)
{
- unsigned device;
+ unsigned device; /* TODO: u16? */
struct resource *res;
device = dev->path.u.i2c.device;
@@ -36,11 +38,11 @@ static int smbus_read_byte(struct bus *bus, device_t dev, uint8_t address)
return do_smbus_read_byte(res->base, device, address);
}
-static struct smbus_bus_operations lops_smbus_bus = {
+static const struct smbus_bus_operations lops_smbus_bus = {
.read_byte = smbus_read_byte,
};
-static struct device_operations smbus_ops = {
+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,
@@ -50,44 +52,79 @@ static struct device_operations smbus_ops = {
.ops_smbus_bus = &lops_smbus_bus,
};
-/* 82801AA */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 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 = 0x2413,
+ .device = PCI_DEVICE_ID_INTEL_82801EB_SMB,
};
-/* 82801AB */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 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 = 0x2423,
+ .device = PCI_DEVICE_ID_INTEL_82801FB_SMB,
};
-/* 82801BA */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
+static const struct pci_driver i82801gb_smb __pci_driver = {
.ops = &smbus_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2443,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_SMB,
};
-/* 82801CA */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801HB/HR/HDH/HDO/HBM/HEM (ICH8/ICH8R/ICH8DH/ICH8DO/ICH8M/ICH8M-E) */
+static const struct pci_driver i82801hb_smb __pci_driver = {
.ops = &smbus_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2483,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_LAN,
};
-/* 82801DB and 82801DBM */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801IB/IR/IH/IO (ICH9/ICH9R/ICH9DH/ICH9DO) */
+static const struct pci_driver i82801ib_smb __pci_driver = {
.ops = &smbus_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24c3,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_SMB,
};
-/* 82801EB and 82801ER */
-static const struct pci_driver smbus_driver __pci_driver = {
+/* 82801E (C-ICH) */
+static const struct pci_driver i82801e_smb __pci_driver = {
.ops = &smbus_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d3,
+ .device = PCI_DEVICE_ID_INTEL_82801E_SMB,
};
diff --git a/src/southbridge/intel/i82801xx/i82801xx_usb.c b/src/southbridge/intel/i82801xx/i82801xx_usb.c
index bbd951b590..0d8feab17b 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_usb.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_usb.c
@@ -18,11 +18,12 @@
* 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 <device/pci_ops.h>
#include "i82801xx.h"
static void usb_init(struct device *dev)
@@ -30,7 +31,7 @@ static void usb_init(struct device *dev)
/* TODO: Any init needed? Some ports have it, others don't. */
}
-static struct device_operations usb_ops = {
+static const struct device_operations usb_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
@@ -39,92 +40,217 @@ static struct device_operations usb_ops = {
.enable = i82801xx_enable,
};
-/* 82801AA */
-static const struct pci_driver i82801aa_usb_1 __pci_driver = {
+/* 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,
+};
+
+/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
+static const struct pci_driver i82801gb_usb1 __pci_driver = {
+ .ops = &usb_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_USB1,
+};
+
+static const struct pci_driver i82801gb_usb2 __pci_driver = {
+ .ops = &usb_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_USB2,
+};
+
+static const struct pci_driver i82801gb_usb3 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2412,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_USB3,
};
-/* 82801AB */
-static const struct pci_driver i82801ab_usb_1 __pci_driver = {
+static const struct pci_driver i82801gb_usb4 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2422,
+ .device = PCI_DEVICE_ID_INTEL_82801GB_USB4,
};
-/* 82801BA */
-static const struct pci_driver i82801ba_usb_1 __pci_driver = {
+/* 82801HB/HR/HDH/HDO/HBM/HEM (ICH8/ICH8R/ICH8DH/ICH8DO/ICH8M/ICH8M-E) */
+static const struct pci_driver i82801hb_usb1 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2442,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_USB1,
};
-static const struct pci_driver i82801ba_usb_2 __pci_driver = {
+static const struct pci_driver i82801hb_usb2 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2444,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_USB2,
};
-/* 82801CA */
-static const struct pci_driver i82801ca_usb_1 __pci_driver = {
+static const struct pci_driver i82801hb_usb3 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2482,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_USB3,
};
-static const struct pci_driver i82801ca_usb_2 __pci_driver = {
+static const struct pci_driver i82801hb_usb4 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2484,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_USB4,
};
-static const struct pci_driver i82801ca_usb_3 __pci_driver = {
+static const struct pci_driver i82801hb_usb5 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2487,
+ .device = PCI_DEVICE_ID_INTEL_82801HB_USB5,
};
-/* 82801DB and 82801DBM */
-static const struct pci_driver i82801db_usb_1 __pci_driver = {
+/* 82801IB/IR/IH/IO (ICH9/ICH9R/ICH9DH/ICH9DO) */
+static const struct pci_driver i82801ib_usb1 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24c2,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_USB1,
};
-static const struct pci_driver i82801db_usb_2 __pci_driver = {
+static const struct pci_driver i82801ib_usb2 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24c4,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_USB2,
};
-static const struct pci_driver i82801db_usb_3 __pci_driver = {
+static const struct pci_driver i82801ib_usb3 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24c7,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_USB3,
};
-/* 82801EB and 82801ER */
-static const struct pci_driver i82801ex_usb_1 __pci_driver = {
+static const struct pci_driver i82801ib_usb4 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d2,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_USB4,
};
-static const struct pci_driver i82801ex_usb_2 __pci_driver = {
+static const struct pci_driver i82801ib_usb5 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d4,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_USB5,
};
-static const struct pci_driver i82801ex_usb_3 __pci_driver = {
+static const struct pci_driver i82801ib_usb6 __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d7,
+ .device = PCI_DEVICE_ID_INTEL_82801IB_USB6,
};
-static const struct pci_driver i82801ex_usb_4 __pci_driver = {
+/* 82801E (C-ICH) */
+static const struct pci_driver i82801e_usb __pci_driver = {
.ops = &usb_ops,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24de,
+ .device = PCI_DEVICE_ID_INTEL_82801E_USB,
};
diff --git a/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c b/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c
index fe0540c730..a82534339f 100644
--- a/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c
+++ b/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c
@@ -23,7 +23,6 @@
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_ids.h>
-#include <device/pci_ops.h>
#include "i82801xx.h"
static void usb_ehci_init(struct device *dev)