Revert "northbridge/intel/peg: Disable unused ports"
This reverts commit 0e06f5bd70
.
It breaks gm45 and also does some magic without being asked too. It
disables bridge devices permanently if no device was found on the se-
condary bus. In a simple notebook world this might be ok, but it breaks
hot-plugging and late detection (if a secondary bus device comes up too
slow for the firmware to detect and the OS has to enumerate it).
Change-Id: Ia2010640d7c55b0bdd44164b81c75dd4be50410b
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/13609
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
b27c24f69b
commit
2dc15e9ea8
|
@ -243,17 +243,6 @@ static void enable_dev(device_t dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 scan_bus_unused(struct bus *link)
|
|
||||||
{
|
|
||||||
struct device *dev;
|
|
||||||
|
|
||||||
for (dev = link->children; dev; dev = dev->sibling) {
|
|
||||||
if (dev->enabled)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void gm45_init(void *const chip_info)
|
static void gm45_init(void *const chip_info)
|
||||||
{
|
{
|
||||||
int dev, fn, bit_base;
|
int dev, fn, bit_base;
|
||||||
|
@ -279,8 +268,7 @@ static void gm45_init(void *const chip_info)
|
||||||
for (; fn >= 0; --fn) {
|
for (; fn >= 0; --fn) {
|
||||||
const struct device *const d =
|
const struct device *const d =
|
||||||
dev_find_slot(0, PCI_DEVFN(dev, fn));
|
dev_find_slot(0, PCI_DEVFN(dev, fn));
|
||||||
if (d && d->enabled && d->link_list && !scan_bus_unused(d->link_list))
|
if (!d || d->enabled) continue;
|
||||||
continue;
|
|
||||||
const u32 deven = pci_read_config32(d0f0, D0F0_DEVEN);
|
const u32 deven = pci_read_config32(d0f0, D0F0_DEVEN);
|
||||||
pci_write_config32(d0f0, D0F0_DEVEN,
|
pci_write_config32(d0f0, D0F0_DEVEN,
|
||||||
deven & ~(1 << (bit_base + fn)));
|
deven & ~(1 << (bit_base + fn)));
|
||||||
|
|
|
@ -368,17 +368,6 @@ static void northbridge_dmi_init(struct device *dev)
|
||||||
DMIBAR32(0x88) = reg32;
|
DMIBAR32(0x88) = reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 scan_bus_unused(struct bus *link)
|
|
||||||
{
|
|
||||||
struct device *dev;
|
|
||||||
|
|
||||||
for (dev = link->children; dev; dev = dev->sibling) {
|
|
||||||
if (dev->enabled)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable unused PEG devices based on devicetree */
|
/* Disable unused PEG devices based on devicetree */
|
||||||
static void disable_peg(void)
|
static void disable_peg(void)
|
||||||
{
|
{
|
||||||
|
@ -389,32 +378,27 @@ static void disable_peg(void)
|
||||||
reg = pci_read_config32(dev, DEVEN);
|
reg = pci_read_config32(dev, DEVEN);
|
||||||
|
|
||||||
dev = dev_find_slot(0, PCI_DEVFN(1, 2));
|
dev = dev_find_slot(0, PCI_DEVFN(1, 2));
|
||||||
if (!dev || !dev->enabled ||
|
if (!dev || !dev->enabled) {
|
||||||
(dev->link_list && scan_bus_unused(dev->link_list))) {
|
|
||||||
printk(BIOS_DEBUG, "Disabling PEG12.\n");
|
printk(BIOS_DEBUG, "Disabling PEG12.\n");
|
||||||
reg &= ~DEVEN_PEG12;
|
reg &= ~DEVEN_PEG12;
|
||||||
}
|
}
|
||||||
dev = dev_find_slot(0, PCI_DEVFN(1, 1));
|
dev = dev_find_slot(0, PCI_DEVFN(1, 1));
|
||||||
if (!dev || !dev->enabled ||
|
if (!dev || !dev->enabled) {
|
||||||
(dev->link_list && scan_bus_unused(dev->link_list))) {
|
|
||||||
printk(BIOS_DEBUG, "Disabling PEG11.\n");
|
printk(BIOS_DEBUG, "Disabling PEG11.\n");
|
||||||
reg &= ~DEVEN_PEG11;
|
reg &= ~DEVEN_PEG11;
|
||||||
}
|
}
|
||||||
dev = dev_find_slot(0, PCI_DEVFN(1, 0));
|
dev = dev_find_slot(0, PCI_DEVFN(1, 0));
|
||||||
if (!dev || !dev->enabled ||
|
if (!dev || !dev->enabled) {
|
||||||
(dev->link_list && scan_bus_unused(dev->link_list))) {
|
|
||||||
printk(BIOS_DEBUG, "Disabling PEG10.\n");
|
printk(BIOS_DEBUG, "Disabling PEG10.\n");
|
||||||
reg &= ~DEVEN_PEG10;
|
reg &= ~DEVEN_PEG10;
|
||||||
}
|
}
|
||||||
dev = dev_find_slot(0, PCI_DEVFN(2, 0));
|
dev = dev_find_slot(0, PCI_DEVFN(2, 0));
|
||||||
if (!dev || !dev->enabled ||
|
if (!dev || !dev->enabled) {
|
||||||
(dev->link_list && scan_bus_unused(dev->link_list))) {
|
|
||||||
printk(BIOS_DEBUG, "Disabling IGD.\n");
|
printk(BIOS_DEBUG, "Disabling IGD.\n");
|
||||||
reg &= ~DEVEN_IGD;
|
reg &= ~DEVEN_IGD;
|
||||||
}
|
}
|
||||||
dev = dev_find_slot(0, PCI_DEVFN(6, 0));
|
dev = dev_find_slot(0, PCI_DEVFN(6, 0));
|
||||||
if (!dev || !dev->enabled ||
|
if (!dev || !dev->enabled) {
|
||||||
(dev->link_list && scan_bus_unused(dev->link_list))) {
|
|
||||||
printk(BIOS_DEBUG, "Disabling PEG60.\n");
|
printk(BIOS_DEBUG, "Disabling PEG60.\n");
|
||||||
reg &= ~DEVEN_PEG60;
|
reg &= ~DEVEN_PEG60;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue