diff options
author | Myles Watson <mylesgw@gmail.com> | 2010-06-17 16:16:56 +0000 |
---|---|---|
committer | Myles Watson <mylesgw@gmail.com> | 2010-06-17 16:16:56 +0000 |
commit | 7eac4450b32f6961d5abd8dae32c5eefc1a07c11 (patch) | |
tree | 455e0181fea42d7c6bab09878ef35dc666789977 /src/southbridge | |
parent | e10757ed525cdd1a5263b9d79e284310c999c0f7 (diff) | |
download | coreboot-7eac4450b32f6961d5abd8dae32c5eefc1a07c11.tar.xz |
Always enable parent resources before child resources.
Always initialize parents before children.
Move s2881 code into a driver.
Signed-off-by: Myles Watson <mylesgw@gmail.com>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5633 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/southbridge')
21 files changed, 15 insertions, 146 deletions
diff --git a/src/southbridge/amd/amd8111/amd8111_lpc.c b/src/southbridge/amd/amd8111/amd8111_lpc.c index 8fe4982721..83887b2199 100644 --- a/src/southbridge/amd/amd8111/amd8111_lpc.c +++ b/src/southbridge/amd/amd8111/amd8111_lpc.c @@ -106,12 +106,6 @@ static void amd8111_lpc_read_resources(device_t dev) res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -static void amd8111_lpc_enable_resources(device_t dev) -{ - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static void lpci_set_subsystem(device_t dev, unsigned vendor, unsigned device) { pci_write_config32(dev, 0x70, @@ -125,7 +119,7 @@ static struct pci_operations lops_pci = { static struct device_operations lpc_ops = { .read_resources = amd8111_lpc_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = amd8111_lpc_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = lpc_init, .scan_bus = scan_static_bus, .enable = amd8111_enable, diff --git a/src/southbridge/amd/cs5530/cs5530_isa.c b/src/southbridge/amd/cs5530/cs5530_isa.c index c949cbf681..c7e8f43f75 100644 --- a/src/southbridge/amd/cs5530/cs5530_isa.c +++ b/src/southbridge/amd/cs5530/cs5530_isa.c @@ -47,17 +47,10 @@ static void isa_init(struct device *dev) { } -static void cs5530_pci_dev_enable_resources(device_t dev) -{ - // TODO: Needed? - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static struct device_operations isa_ops = { .read_resources = cs5530_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = cs5530_pci_dev_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = isa_init, .enable = 0, .scan_bus = scan_static_bus, diff --git a/src/southbridge/amd/cs5535/cs5535.c b/src/southbridge/amd/cs5535/cs5535.c index c1fed9f815..402362bf1e 100644 --- a/src/southbridge/amd/cs5535/cs5535.c +++ b/src/southbridge/amd/cs5535/cs5535.c @@ -87,17 +87,10 @@ static void cs5535_read_resources(device_t dev) res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -static void cs5535_pci_dev_enable_resources(device_t dev) -{ - printk(BIOS_DEBUG, "%s()\n", __func__); - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static struct device_operations southbridge_ops = { .read_resources = cs5535_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = cs5535_pci_dev_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = southbridge_init, .enable = southbridge_enable, .scan_bus = scan_static_bus, diff --git a/src/southbridge/amd/cs5536/cs5536.c b/src/southbridge/amd/cs5536/cs5536.c index d2dbcb152a..c4ceaea4f7 100644 --- a/src/southbridge/amd/cs5536/cs5536.c +++ b/src/southbridge/amd/cs5536/cs5536.c @@ -667,17 +667,10 @@ static void southbridge_enable(struct device *dev) } -static void cs5536_pci_dev_enable_resources(device_t dev) -{ - printk(BIOS_DEBUG, "%s()\n", __func__); - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static struct device_operations southbridge_ops = { .read_resources = cs5536_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = cs5536_pci_dev_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = southbridge_init, // .enable = southbridge_enable, .scan_bus = scan_static_bus, diff --git a/src/southbridge/amd/sb600/sb600_lpc.c b/src/southbridge/amd/sb600/sb600_lpc.c index fd06f4478d..67703d15eb 100644 --- a/src/southbridge/amd/sb600/sb600_lpc.c +++ b/src/southbridge/amd/sb600/sb600_lpc.c @@ -96,13 +96,6 @@ static void sb600_lpc_read_resources(device_t dev) * * @param dev the device whos children's resources are to be enabled * - * This function is call by the global enable_resources() indirectly via the - * device_operation::enable_resources() method of devices. - * - * Indirect mutual recursion: - * enable_childrens_resources() -> enable_resources() - * enable_resources() -> device_operation::enable_resources() - * device_operation::enable_resources() -> enable_children_resources() */ static void sb600_lpc_enable_childrens_resources(device_t dev) { @@ -118,7 +111,6 @@ static void sb600_lpc_enable_childrens_resources(device_t dev) device_t child; for (child = link->children; child; child = child->sibling) { - enable_resources(child); if (child->enabled && (child->path.type == DEVICE_PATH_PNP)) { struct resource *res; diff --git a/src/southbridge/amd/sb700/sb700_lpc.c b/src/southbridge/amd/sb700/sb700_lpc.c index e8bfbfac5d..87b77ca28f 100644 --- a/src/southbridge/amd/sb700/sb700_lpc.c +++ b/src/southbridge/amd/sb700/sb700_lpc.c @@ -108,13 +108,6 @@ static void sb700_lpc_set_resources(struct device *dev) * * @param dev the device whos children's resources are to be enabled * - * This function is call by the global enable_resources() indirectly via the - * device_operation::enable_resources() method of devices. - * - * Indirect mutual recursion: - * enable_childrens_resources() -> enable_resources() - * enable_resources() -> device_operation::enable_resources() - * device_operation::enable_resources() -> enable_children_resources() */ static void sb700_lpc_enable_childrens_resources(device_t dev) { @@ -130,7 +123,6 @@ static void sb700_lpc_enable_childrens_resources(device_t dev) device_t child; for (child = link->children; child; child = child->sibling) { - enable_resources(child); if (child->enabled && (child->path.type == DEVICE_PATH_PNP)) { struct resource *res; diff --git a/src/southbridge/broadcom/bcm5785/bcm5785_lpc.c b/src/southbridge/broadcom/bcm5785/bcm5785_lpc.c index 3a876de69e..a9fc9994c2 100644 --- a/src/southbridge/broadcom/bcm5785/bcm5785_lpc.c +++ b/src/southbridge/broadcom/bcm5785/bcm5785_lpc.c @@ -57,13 +57,6 @@ static void bcm5785_lpc_read_resources(device_t dev) * * @param dev the device whos children's resources are to be enabled * - * This function is call by the global enable_resources() indirectly via the - * device_operation::enable_resources() method of devices. - * - * Indirect mutual recursion: - * enable_childrens_resources() -> enable_resources() - * enable_resources() -> device_operation::enable_resources() - * device_operation::enable_resources() -> enable_children_resources() */ static void bcm5785_lpc_enable_childrens_resources(device_t dev) { @@ -75,7 +68,6 @@ static void bcm5785_lpc_enable_childrens_resources(device_t dev) for (link = dev->link_list; link; link = link->next) { device_t child; for (child = link->children; child; child = child->sibling) { - enable_resources(child); if(child->enabled && (child->path.type == DEVICE_PATH_PNP)) { struct resource *res; for(res = child->resource_list; res; res = res->next) { diff --git a/src/southbridge/intel/esb6300/esb6300_lpc.c b/src/southbridge/intel/esb6300/esb6300_lpc.c index 66ac62bb3f..9a48e05303 100644 --- a/src/southbridge/intel/esb6300/esb6300_lpc.c +++ b/src/southbridge/intel/esb6300/esb6300_lpc.c @@ -351,8 +351,6 @@ static void esb6300_lpc_enable_resources(device_t dev) gpio_cntl = pci_read_config8(dev, 0x5c); gpio_cntl |= (1 << 4); pci_write_config8(dev, 0x5c, gpio_cntl); - - enable_childrens_resources(dev); } static struct pci_operations lops_pci = { diff --git a/src/southbridge/intel/i3100/i3100_lpc.c b/src/southbridge/intel/i3100/i3100_lpc.c index eaa81e40c7..75cc356179 100644 --- a/src/southbridge/intel/i3100/i3100_lpc.c +++ b/src/southbridge/intel/i3100/i3100_lpc.c @@ -404,8 +404,6 @@ static void i3100_lpc_enable_resources(device_t dev) /* Enable the RCBA */ pci_write_config32(dev, RCBA, pci_read_config32(dev, RCBA) | (1 << 0)); - - enable_childrens_resources(dev); } static struct pci_operations lops_pci = { diff --git a/src/southbridge/intel/i82801ax/i82801ax_lpc.c b/src/southbridge/intel/i82801ax/i82801ax_lpc.c index 50be866be3..eca1d0e773 100644 --- a/src/southbridge/intel/i82801ax/i82801ax_lpc.c +++ b/src/southbridge/intel/i82801ax/i82801ax_lpc.c @@ -332,16 +332,10 @@ static void i82801ax_lpc_read_resources(device_t dev) res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -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 = i82801ax_lpc_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = i82801ax_lpc_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = lpc_init, .scan_bus = scan_static_bus, .enable = i82801ax_enable, diff --git a/src/southbridge/intel/i82801bx/i82801bx_lpc.c b/src/southbridge/intel/i82801bx/i82801bx_lpc.c index 96dbd54e37..59511dfe46 100644 --- a/src/southbridge/intel/i82801bx/i82801bx_lpc.c +++ b/src/southbridge/intel/i82801bx/i82801bx_lpc.c @@ -332,16 +332,10 @@ static void i82801bx_lpc_read_resources(device_t dev) 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, + .enable_resources = pci_dev_enable_resources, .init = lpc_init, .scan_bus = scan_static_bus, .enable = i82801bx_enable, diff --git a/src/southbridge/intel/i82801cx/i82801cx_lpc.c b/src/southbridge/intel/i82801cx/i82801cx_lpc.c index 97b2994abf..3720262f05 100644 --- a/src/southbridge/intel/i82801cx/i82801cx_lpc.c +++ b/src/southbridge/intel/i82801cx/i82801cx_lpc.c @@ -229,16 +229,10 @@ static void i82801cx_lpc_read_resources(device_t dev) res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -static void i82801cx_lpc_enable_resources(device_t dev) -{ - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static struct device_operations lpc_ops = { .read_resources = i82801cx_lpc_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = i82801cx_lpc_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = lpc_init, .scan_bus = scan_static_bus, .enable = 0, diff --git a/src/southbridge/intel/i82801dx/i82801dx_lpc.c b/src/southbridge/intel/i82801dx/i82801dx_lpc.c index 652d6d00f7..0bba26a82f 100644 --- a/src/southbridge/intel/i82801dx/i82801dx_lpc.c +++ b/src/southbridge/intel/i82801dx/i82801dx_lpc.c @@ -322,16 +322,10 @@ static void i82801dx_lpc_read_resources(device_t dev) res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -static void i82801dx_lpc_enable_resources(device_t dev) -{ - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static struct device_operations lpc_ops = { .read_resources = i82801dx_lpc_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = i82801dx_lpc_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = lpc_init, .scan_bus = scan_static_bus, .enable = i82801dx_enable, diff --git a/src/southbridge/intel/i82801ex/i82801ex_lpc.c b/src/southbridge/intel/i82801ex/i82801ex_lpc.c index 8753db17e3..df05cc85b7 100644 --- a/src/southbridge/intel/i82801ex/i82801ex_lpc.c +++ b/src/southbridge/intel/i82801ex/i82801ex_lpc.c @@ -335,8 +335,6 @@ static void i82801ex_lpc_enable_resources(device_t dev) gpio_cntl = pci_read_config8(dev, 0x5c); gpio_cntl |= (1 << 4); pci_write_config8(dev, 0x5c, gpio_cntl); - - enable_childrens_resources(dev); } static struct pci_operations lops_pci = { diff --git a/src/southbridge/intel/i82801gx/i82801gx_lpc.c b/src/southbridge/intel/i82801gx/i82801gx_lpc.c index f0e48ec29e..d0e076730c 100644 --- a/src/southbridge/intel/i82801gx/i82801gx_lpc.c +++ b/src/southbridge/intel/i82801gx/i82801gx_lpc.c @@ -481,12 +481,6 @@ static void i82801gx_lpc_read_resources(device_t dev) res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -static void i82801gx_lpc_enable_resources(device_t dev) -{ - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static void set_subsystem(device_t dev, unsigned vendor, unsigned device) { if (!vendor || !device) { @@ -505,7 +499,7 @@ static struct pci_operations pci_ops = { static struct device_operations device_ops = { .read_resources = i82801gx_lpc_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = i82801gx_lpc_enable_resources, + .enable_resources = pci_dev_enable_resources, .init = lpc_init, .scan_bus = scan_static_bus, .enable = i82801gx_enable, diff --git a/src/southbridge/intel/i82801gx/i82801gx_pci.c b/src/southbridge/intel/i82801gx/i82801gx_pci.c index 1bdc67ae86..4c44e1e153 100644 --- a/src/southbridge/intel/i82801gx/i82801gx_pci.c +++ b/src/southbridge/intel/i82801gx/i82801gx_pci.c @@ -110,8 +110,6 @@ static void ich_pci_bus_enable_resources(struct device *dev) /* This is the reason we need our own pci_bus_enable_resources */ ich_pci_dev_enable_resources(dev); - - enable_childrens_resources(dev); } static void set_subsystem(device_t dev, unsigned vendor, unsigned device) diff --git a/src/southbridge/nvidia/ck804/ck804_lpc.c b/src/southbridge/nvidia/ck804/ck804_lpc.c index e626400557..7037d9e2da 100644 --- a/src/southbridge/nvidia/ck804/ck804_lpc.c +++ b/src/southbridge/nvidia/ck804/ck804_lpc.c @@ -222,12 +222,6 @@ static void ck804_lpc_read_resources(device_t dev) * This function is called by the global enable_resources() indirectly via the * device_operation::enable_resources() method of devices. * - * Indirect mutual recursion: - * enable_childrens_resources() -> enable_resources() - * enable_resources() -> device_operation::enable_resources() - * device_operation::enable_resources() -> enable_children_resources() - * - * @param dev The device whose children's resources are to be enabled. */ static void ck804_lpc_enable_childrens_resources(device_t dev) { @@ -240,7 +234,6 @@ static void ck804_lpc_enable_childrens_resources(device_t dev) for (link = dev->link_list; link; link = link->next) { device_t child; for (child = link->children; child; child = child->sibling) { - enable_resources(child); if (child->enabled && (child->path.type == DEVICE_PATH_PNP)) { struct resource *res; for (res = child->resource_list; res; res = res->next) { diff --git a/src/southbridge/nvidia/mcp55/mcp55_lpc.c b/src/southbridge/nvidia/mcp55/mcp55_lpc.c index 0d32cb8275..040ab62273 100644 --- a/src/southbridge/nvidia/mcp55/mcp55_lpc.c +++ b/src/southbridge/nvidia/mcp55/mcp55_lpc.c @@ -195,13 +195,6 @@ static void mcp55_lpc_read_resources(device_t dev) * * @param dev the device whos children's resources are to be enabled * - * This function is called by the global enable_resources() indirectly via the - * device_operation::enable_resources() method of devices. - * - * Indirect mutual recursion: - * enable_childrens_resources() -> enable_resources() - * enable_resources() -> device_operation::enable_resources() - * device_operation::enable_resources() -> enable_children_resources() */ static void mcp55_lpc_enable_childrens_resources(device_t dev) { @@ -215,7 +208,6 @@ static void mcp55_lpc_enable_childrens_resources(device_t dev) for (link = dev->link_list; link; link = link->next) { device_t child; for (child = link->children; child; child = child->sibling) { - enable_resources(child); if(child->enabled && (child->path.type == DEVICE_PATH_PNP)) { struct resource *res; for(res = child->resource_list; res; res = res->next) { diff --git a/src/southbridge/sis/sis966/sis966_lpc.c b/src/southbridge/sis/sis966/sis966_lpc.c index 3b620cac45..b987b4318d 100644 --- a/src/southbridge/sis/sis966/sis966_lpc.c +++ b/src/southbridge/sis/sis966/sis966_lpc.c @@ -188,13 +188,6 @@ static void sis966_lpc_read_resources(device_t dev) * * @param dev the device whos children's resources are to be enabled * - * This function is call by the global enable_resources() indirectly via the - * device_operation::enable_resources() method of devices. - * - * Indirect mutual recursion: - * enable_childrens_resources() -> enable_resources() - * enable_resources() -> device_operation::enable_resources() - * device_operation::enable_resources() -> enable_children_resources() */ static void sis966_lpc_enable_childrens_resources(device_t dev) { @@ -208,7 +201,6 @@ static void sis966_lpc_enable_childrens_resources(device_t dev) for (link = dev->link_list; link; link = link->next) { device_t child; for (child = link->children; child; child = child->sibling) { - enable_resources(child); if(child->enabled && (child->path.type == DEVICE_PATH_PNP)) { struct resource *res; for(res = child->resource_list; res; res = res->next) { diff --git a/src/southbridge/via/vt8235/vt8235_lpc.c b/src/southbridge/via/vt8235/vt8235_lpc.c index 153c405513..15ff5392b2 100644 --- a/src/southbridge/via/vt8235/vt8235_lpc.c +++ b/src/southbridge/via/vt8235/vt8235_lpc.c @@ -241,14 +241,6 @@ static void vt8235_set_resources(device_t dev) pci_dev_set_resources(dev); } -static void vt8235_enable_resources(device_t dev) -{ - /* vt8235 is not a pci bridge and has no resources of its own (other than standard PC i/o addresses) - however it does control the isa bus and so we need to manually call enable childrens resources on that bus */ - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static void southbridge_init(struct device *dev) { vt8235_init(dev); @@ -258,8 +250,8 @@ static void southbridge_init(struct device *dev) static struct device_operations vt8235_lpc_ops = { .read_resources = vt8235_read_resources, .set_resources = vt8235_set_resources, - .enable_resources = vt8235_enable_resources, - .init = &southbridge_init, + .enable_resources = pci_dev_enable_resources, + .init = southbridge_init, .scan_bus = scan_static_bus, }; diff --git a/src/southbridge/via/vt8237r/vt8237r_lpc.c b/src/southbridge/via/vt8237r/vt8237r_lpc.c index 5a08e3b16f..3074bc8c3c 100644 --- a/src/southbridge/via/vt8237r/vt8237r_lpc.c +++ b/src/southbridge/via/vt8237r/vt8237r_lpc.c @@ -505,17 +505,6 @@ static void vt8237r_read_resources(device_t dev) res->flags = IORESOURCE_IO | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; } -/** - * The VT8237R is not a PCI bridge and has no resources of its own (other - * than standard PC I/O addresses), however it does control the ISA bus - * and so we need to manually call enable childrens resources on that bus. - */ -static void vt8237r_enable_resources(device_t dev) -{ - pci_dev_enable_resources(dev); - enable_childrens_resources(dev); -} - static void init_keyboard(struct device *dev) { u8 regval = pci_read_config8(dev, 0x51); @@ -535,16 +524,16 @@ static void southbridge_init_common(struct device *dev) static const struct device_operations vt8237r_lpc_ops_s = { .read_resources = vt8237r_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = vt8237r_enable_resources, - .init = &vt8237s_init, + .enable_resources = pci_dev_enable_resources, + .init = vt8237s_init, .scan_bus = scan_static_bus, }; static const struct device_operations vt8237r_lpc_ops_r = { .read_resources = vt8237r_read_resources, .set_resources = pci_dev_set_resources, - .enable_resources = vt8237r_enable_resources, - .init = &vt8237r_init, + .enable_resources = pci_dev_enable_resources, + .init = vt8237r_init, .scan_bus = scan_static_bus, }; |