Little confused by this. Isn't this supposed to be posted to the list first for review, before being commited? Is it ok for the same person to "Signed-off-by:" and "Acked-by:"?? See comments below...
Thanks - Joe
Quoting svn@openbios.org:
Author: uwe Date: 2007-11-07 23:09:02 +0100 (Wed, 07 Nov 2007) New Revision: 2951
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c Log: 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
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/Config.lb 2007-11-07 22:09:02 UTC (rev 2951) @@ -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
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -30,7 +30,7 @@ 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 @@ if (index == 0) { index = 14; }
All devices are not on Bus 0. The NIC and PCI Cards are on Bus 1 down from the PCI Bus.
- 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
} if (new_disable_mask != cur_disable_mask) { pci_write_config16(lpc_dev, FUNC_DIS, new_disable_mask);new_disable_mask |= (1 << index); /* Disable it, if desired. */
@@ -61,6 +62,6 @@ }
struct chip_operations southbridge_intel_i82801xx_ops = {
- CHIP_NAME("Intel i82801 Series Southbridge")
- CHIP_NAME("Intel 82801 Series Southbridge") .enable_dev = i82801xx_enable,
};
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_ac97.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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 @@ .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 & 82801ER */ -static const struct pci_driver i82801ex_ac97_audio __pci_driver = { +/* 82801EB/ER (ICH5/ICH5R) */ +static const struct pci_driver i82801eb_ac97_audio __pci_driver = { .ops = &ac97_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d5,
- .device = PCI_DEVICE_ID_INTEL_82801EB_AC97_AUDIO,
};
-static const struct pci_driver i82801ex_ac97_modem __pci_driver = { +static const struct pci_driver i82801eb_ac97_modem __pci_driver = { .ops = &ac97_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d6,
- .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,
+};
+/* 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. */
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c ===================================================================
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_early_smbus.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -29,7 +29,7 @@ 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. */
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_nic.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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 @@ .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 = 0x103a,
- .device = PCI_DEVICE_ID_INTEL_82801BA_LAN,
};
-static const struct pci_driver i82801ex_nic __pci_driver = { +/* 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 = 0x1051,
- .device = PCI_DEVICE_ID_INTEL_82801DB_LAN,
};
My NIC on the 82801DB is .device = 0x103a, this is also what is in the datasheet.
+/* 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,
+};
+/* 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 = 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,
+};
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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
This should be setup to only work with ICH's that support sata.
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_smbus.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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 @@ 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 @@ .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 = 0x2413,
- .device = PCI_DEVICE_ID_INTEL_82801AA_SMB,
};
-/* 82801AB */ -static const struct pci_driver smbus_driver __pci_driver = { +/* 82801AB (ICH0) */ +static const struct pci_driver i82801ab_smb __pci_driver = { .ops = &smbus_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2423,
- .device = PCI_DEVICE_ID_INTEL_82801AB_SMB,
};
-/* 82801BA */ -static const struct pci_driver smbus_driver __pci_driver = { +/* 82801BA/BAM (ICH2/ICH2-M) */ +static const struct pci_driver i82801ba_smb __pci_driver = { .ops = &smbus_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2443,
- .device = PCI_DEVICE_ID_INTEL_82801BA_SMB,
};
-/* 82801CA */ -static const struct pci_driver smbus_driver __pci_driver = { +/* 82801CA/CAM (ICH3-S/ICH3-M) */ +static const struct pci_driver i82801ca_smb __pci_driver = { .ops = &smbus_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2483,
- .device = PCI_DEVICE_ID_INTEL_82801CA_SMB,
};
-/* 82801DB and 82801DBM */ -static const struct pci_driver smbus_driver __pci_driver = { +/* 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 = 0x24c3,
- .device = PCI_DEVICE_ID_INTEL_82801DB_SMB,
};
-/* 82801EB and 82801ER */ -static const struct pci_driver smbus_driver __pci_driver = { +/* 82801EB/ER (ICH5/ICH5R) */ +static const struct pci_driver i82801eb_smb __pci_driver = { .ops = &smbus_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d3,
- .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,
+};
+/* 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 = PCI_DEVICE_ID_INTEL_82801GB_SMB,
+};
+/* 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 = PCI_DEVICE_ID_INTEL_82801HB_LAN,
+};
+/* 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 = PCI_DEVICE_ID_INTEL_82801IB_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,
+};
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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 @@ /* 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 @@ .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 = 0x2412,
- .device = PCI_DEVICE_ID_INTEL_82801AA_USB,
};
-/* 82801AB */ -static const struct pci_driver i82801ab_usb_1 __pci_driver = { +/* 82801AB (ICH0) */ +static const struct pci_driver i82801ab_usb1 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2422,
- .device = PCI_DEVICE_ID_INTEL_82801AB_USB,
};
-/* 82801BA */ -static const struct pci_driver i82801ba_usb_1 __pci_driver = { +/* 82801BA/BAM (ICH2/ICH2-M) */ +static const struct pci_driver i82801ba_usb1 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2442,
- .device = PCI_DEVICE_ID_INTEL_82801BA_USB1,
};
-static const struct pci_driver i82801ba_usb_2 __pci_driver = { +static const struct pci_driver i82801ba_usb2 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2444,
- .device = PCI_DEVICE_ID_INTEL_82801BA_USB2,
};
-/* 82801CA */ -static const struct pci_driver i82801ca_usb_1 __pci_driver = { +/* 82801CA/CAM (ICH3-S/ICH3-M) */ +static const struct pci_driver i82801ca_usb1 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2482,
- .device = PCI_DEVICE_ID_INTEL_82801CA_USB1,
};
-static const struct pci_driver i82801ca_usb_2 __pci_driver = { +static const struct pci_driver i82801ca_usb2 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2484,
- .device = PCI_DEVICE_ID_INTEL_82801CA_USB2,
};
-static const struct pci_driver i82801ca_usb_3 __pci_driver = { +static const struct pci_driver i82801ca_usb3 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x2487,
- .device = PCI_DEVICE_ID_INTEL_82801CA_USB3,
};
-/* 82801DB and 82801DBM */ -static const struct pci_driver i82801db_usb_1 __pci_driver = { +/* 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 = 0x24c2,
- .device = PCI_DEVICE_ID_INTEL_82801DB_USB1,
};
-static const struct pci_driver i82801db_usb_2 __pci_driver = { +static const struct pci_driver i82801db_usb2 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24c4,
- .device = PCI_DEVICE_ID_INTEL_82801DB_USB2,
};
-static const struct pci_driver i82801db_usb_3 __pci_driver = { +static const struct pci_driver i82801db_usb3 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24c7,
- .device = PCI_DEVICE_ID_INTEL_82801DB_USB3,
};
-/* 82801EB and 82801ER */ -static const struct pci_driver i82801ex_usb_1 __pci_driver = { +/* 82801EB/ER (ICH5/ICH5R) */ +static const struct pci_driver i82801eb_usb1 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d2,
- .device = PCI_DEVICE_ID_INTEL_82801EB_USB1,
};
-static const struct pci_driver i82801ex_usb_2 __pci_driver = { +static const struct pci_driver i82801eb_usb2 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d4,
- .device = PCI_DEVICE_ID_INTEL_82801EB_USB2,
};
-static const struct pci_driver i82801ex_usb_3 __pci_driver = { +static const struct pci_driver i82801eb_usb3 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24d7,
- .device = PCI_DEVICE_ID_INTEL_82801EB_USB3,
};
-static const struct pci_driver i82801ex_usb_4 __pci_driver = { +static const struct pci_driver i82801eb_usb4 __pci_driver = { .ops = &usb_ops, .vendor = PCI_VENDOR_ID_INTEL,
- .device = 0x24de,
- .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 = PCI_DEVICE_ID_INTEL_82801GB_USB3,
+};
+static const struct pci_driver i82801gb_usb4 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801GB_USB4,
+};
+/* 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 = PCI_DEVICE_ID_INTEL_82801HB_USB1,
+};
+static const struct pci_driver i82801hb_usb2 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801HB_USB2,
+};
+static const struct pci_driver i82801hb_usb3 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801HB_USB3,
+};
+static const struct pci_driver i82801hb_usb4 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801HB_USB4,
+};
+static const struct pci_driver i82801hb_usb5 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801HB_USB5,
+};
+/* 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 = PCI_DEVICE_ID_INTEL_82801IB_USB1,
+};
+static const struct pci_driver i82801ib_usb2 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801IB_USB2,
+};
+static const struct pci_driver i82801ib_usb3 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801IB_USB3,
+};
+static const struct pci_driver i82801ib_usb4 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801IB_USB4,
+};
+static const struct pci_driver i82801ib_usb5 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801IB_USB5,
+};
+static const struct pci_driver i82801ib_usb6 __pci_driver = {
- .ops = &usb_ops,
- .vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_DEVICE_ID_INTEL_82801IB_USB6,
+};
+/* 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,
+};
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c ===================================================================
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_usb_ehci.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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)
-- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios
joe@smittys.pointclark.net wrote:
Little confused by this. Isn't this supposed to be posted to the list first for review, before being commited? Is it ok for the same person to "Signed-off-by:" and "Acked-by:"?? See comments below...
This qualifies as a "trivial" patch, in other words the only changes are to improve comments and fix possible whitespace errors (I think using defined PCI IDs also qualifies as trivial). There are no real changes to the actual code, so nothing should be broken in the process. Hence the normal process is forgone.
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -30,7 +30,7 @@ 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 @@ if (index == 0) { index = 14; }
All devices are not on Bus 0. The NIC and PCI Cards are on Bus 1 down from the PCI Bus.
Interesting, I'll have a look at that tomorrow. This isn't a change in the code in any way though, just fixing a comment.
-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 = 0x103a,
- .device = PCI_DEVICE_ID_INTEL_82801BA_LAN,
};
-static const struct pci_driver i82801ex_nic __pci_driver = { +/* 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 = 0x1051,
- .device = PCI_DEVICE_ID_INTEL_82801DB_LAN,
};
My NIC on the 82801DB is .device = 0x103a, this is also what is in the datasheet.
It's because of the way the patch got set up. For some reason, it's replacing the lines where the i82801ex driver was with the i82801db (which is a few lines up). Since PCI_DEVICE_ID_INTEL_82801DB_LAN = 0x103a, it should be fine.
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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
This should be setup to only work with ICH's that support sata.
And it does. The driver is included per default, but will only load/run when LB comes across a device ID for an SATA device. No ID, the driver doesn't do anything. It should probably be somehow fixed to only build for SATA-supporting chipsets, but alas the world isn't perfect ;)
-Corey
On Thu, Nov 08, 2007 at 01:09:16AM -0500, Corey Osgood wrote:
- /* 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 @@ if (index == 0) { index = 14; }
All devices are not on Bus 0. The NIC and PCI Cards are on Bus 1 down from the PCI Bus.
Interesting, I'll have a look at that tomorrow. This isn't a change in the code in any way though, just fixing a comment.
Yep. But Joe is correct, the code probably needs fixing.
-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 = 0x103a,
- .device = PCI_DEVICE_ID_INTEL_82801BA_LAN,
};
-static const struct pci_driver i82801ex_nic __pci_driver = { +/* 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 = 0x1051,
- .device = PCI_DEVICE_ID_INTEL_82801DB_LAN,
};
My NIC on the 82801DB is .device = 0x103a, this is also what is in the datasheet.
It's because of the way the patch got set up. For some reason, it's replacing the lines where the i82801ex driver was with the i82801db (which is a few lines up). Since PCI_DEVICE_ID_INTEL_82801DB_LAN = 0x103a, it should be fine.
Yes, the IDs are correct, I think.
When there are multiple ICH* southbridges with the same PCI device IDs, I always used the "first" one, but you could really use any of them.
Example:
#define PCI_DEVICE_ID_INTEL_82801FB_IDE 0x266f #define PCI_DEVICE_ID_INTEL_82801FR_IDE 0x266f #define PCI_DEVICE_ID_INTEL_82801FW_IDE 0x266f #define PCI_DEVICE_ID_INTEL_82801FRW_IDE 0x266f #define PCI_DEVICE_ID_INTEL_82801FBM_IDE 0x266f
It doesn't matter which of the above you use, they're all the same.
Modified: trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c
trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c 2007-11-07 19:07:17 UTC (rev 2950) +++ trunk/LinuxBIOSv2/src/southbridge/intel/i82801xx/i82801xx_sata.c 2007-11-07 22:09:02 UTC (rev 2951) @@ -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
This should be setup to only work with ICH's that support sata.
That, _and_ the code probably needs fixing to work with all the different SATA devices on different ICH* southbridges. I haven't yet checked which differences (if any) there are, though.
And it does. The driver is included per default, but will only load/run when LB comes across a device ID for an SATA device. No ID, the driver doesn't do anything.
Yep.
It should probably be somehow fixed to only build for SATA-supporting chipsets, but alas the world isn't perfect ;)
Yeah, we could do that, but it's not really high on the (my) priority list, as the overhead is minimal. If I'm not mistaken such a struct contains two 16bit values and a pointer. We have _way_ more critical stuff to care about than this, IHMO.
Uwe.
/* 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;
All devices are not on Bus 0. The NIC and PCI Cards are on Bus 1 down from the PCI Bus.
Interesting, I'll have a look at that tomorrow. This isn't a change in the code in any way though, just fixing a comment.
Yep. But Joe is correct, the code probably needs fixing.
Looking at the code this function came from in i82801xx.c it looks ok. I think the comment is just misleading. The function is simply just looking for the LPC Bridge on Bus 0, which is correct, the LPC Bridge will always be on Bus 0.
Thanks - Joe