mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
Merge branch 'pci/misc' into next
* pci/misc: PCI: Enable INTx if BIOS left them disabled ia64/PCI: Set IORESOURCE_ROM_SHADOW only for the default VGA device x86/PCI: Set IORESOURCE_ROM_SHADOW only for the default VGA device PCI: Update outdated comment for pcibios_bus_report_status() PCI: Cleanup per-arch list of object files PCI: cpqphp: Fix hex vs decimal typo in cpqhpc_probe() x86/PCI: Fix function definition whitespace x86/PCI: Reword comments x86/PCI: Remove unnecessary local variable initialization PCI: Remove unnecessary list_empty(&pci_pme_list) check
This commit is contained in:
commit
94a5f850ae
7 changed files with 75 additions and 74 deletions
|
@ -19,7 +19,7 @@
|
||||||
static int debug_pci;
|
static int debug_pci;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can't use pci_find_device() here since we are
|
* We can't use pci_get_device() here since we are
|
||||||
* called from interrupt context.
|
* called from interrupt context.
|
||||||
*/
|
*/
|
||||||
static void pcibios_bus_report_status(struct pci_bus *bus, u_int status_mask, int warn)
|
static void pcibios_bus_report_status(struct pci_bus *bus, u_int status_mask, int warn)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/vgaarb.h>
|
||||||
|
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
|
|
||||||
|
@ -19,9 +20,10 @@
|
||||||
* IORESOURCE_ROM_SHADOW is used to associate the boot video
|
* IORESOURCE_ROM_SHADOW is used to associate the boot video
|
||||||
* card with this copy. On laptops this copy has to be used since
|
* card with this copy. On laptops this copy has to be used since
|
||||||
* the main ROM may be compressed or combined with another image.
|
* the main ROM may be compressed or combined with another image.
|
||||||
* See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW
|
* See pci_map_rom() for use of this flag. Before marking the device
|
||||||
* is marked here since the boot video device will be the only enabled
|
* with IORESOURCE_ROM_SHADOW check if a vga_default_device is already set
|
||||||
* video device at this point.
|
* by either arch cde or vga-arbitration, if so only apply the fixup to this
|
||||||
|
* already determined primary video card.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void pci_fixup_video(struct pci_dev *pdev)
|
static void pci_fixup_video(struct pci_dev *pdev)
|
||||||
|
@ -35,9 +37,6 @@ static void pci_fixup_video(struct pci_dev *pdev)
|
||||||
return;
|
return;
|
||||||
/* Maybe, this machine supports legacy memory map. */
|
/* Maybe, this machine supports legacy memory map. */
|
||||||
|
|
||||||
if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Is VGA routed to us? */
|
/* Is VGA routed to us? */
|
||||||
bus = pdev->bus;
|
bus = pdev->bus;
|
||||||
while (bus) {
|
while (bus) {
|
||||||
|
@ -60,10 +59,14 @@ static void pci_fixup_video(struct pci_dev *pdev)
|
||||||
}
|
}
|
||||||
bus = bus->parent;
|
bus = bus->parent;
|
||||||
}
|
}
|
||||||
|
if (!vga_default_device() || pdev == vga_default_device()) {
|
||||||
pci_read_config_word(pdev, PCI_COMMAND, &config);
|
pci_read_config_word(pdev, PCI_COMMAND, &config);
|
||||||
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
|
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
|
||||||
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
|
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
|
||||||
dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n");
|
dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n");
|
||||||
|
vga_set_default_device(pdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video);
|
}
|
||||||
|
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
|
||||||
|
PCI_CLASS_DISPLAY_VGA, 8, pci_fixup_video);
|
||||||
|
|
|
@ -218,8 +218,7 @@ static void teardown_mcfg_map(struct pci_root_info *info)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static acpi_status
|
static acpi_status resource_to_addr(struct acpi_resource *resource,
|
||||||
resource_to_addr(struct acpi_resource *resource,
|
|
||||||
struct acpi_resource_address64 *addr)
|
struct acpi_resource_address64 *addr)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
@ -265,8 +264,7 @@ resource_to_addr(struct acpi_resource *resource,
|
||||||
return AE_ERROR;
|
return AE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static acpi_status
|
static acpi_status count_resource(struct acpi_resource *acpi_res, void *data)
|
||||||
count_resource(struct acpi_resource *acpi_res, void *data)
|
|
||||||
{
|
{
|
||||||
struct pci_root_info *info = data;
|
struct pci_root_info *info = data;
|
||||||
struct acpi_resource_address64 addr;
|
struct acpi_resource_address64 addr;
|
||||||
|
@ -278,8 +276,7 @@ count_resource(struct acpi_resource *acpi_res, void *data)
|
||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static acpi_status
|
static acpi_status setup_resource(struct acpi_resource *acpi_res, void *data)
|
||||||
setup_resource(struct acpi_resource *acpi_res, void *data)
|
|
||||||
{
|
{
|
||||||
struct pci_root_info *info = data;
|
struct pci_root_info *info = data;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
@ -435,8 +432,8 @@ static void release_pci_root_info(struct pci_host_bridge *bridge)
|
||||||
__release_pci_root_info(info);
|
__release_pci_root_info(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void probe_pci_root_info(struct pci_root_info *info,
|
||||||
probe_pci_root_info(struct pci_root_info *info, struct acpi_device *device,
|
struct acpi_device *device,
|
||||||
int busnum, int domain)
|
int busnum, int domain)
|
||||||
{
|
{
|
||||||
size_t size;
|
size_t size;
|
||||||
|
@ -473,11 +470,11 @@ probe_pci_root_info(struct pci_root_info *info, struct acpi_device *device,
|
||||||
struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
||||||
{
|
{
|
||||||
struct acpi_device *device = root->device;
|
struct acpi_device *device = root->device;
|
||||||
struct pci_root_info *info = NULL;
|
struct pci_root_info *info;
|
||||||
int domain = root->segment;
|
int domain = root->segment;
|
||||||
int busnum = root->secondary.start;
|
int busnum = root->secondary.start;
|
||||||
LIST_HEAD(resources);
|
LIST_HEAD(resources);
|
||||||
struct pci_bus *bus = NULL;
|
struct pci_bus *bus;
|
||||||
struct pci_sysdata *sd;
|
struct pci_sysdata *sd;
|
||||||
int node;
|
int node;
|
||||||
|
|
||||||
|
@ -509,15 +506,12 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
||||||
sd->domain = domain;
|
sd->domain = domain;
|
||||||
sd->node = node;
|
sd->node = node;
|
||||||
sd->companion = device;
|
sd->companion = device;
|
||||||
/*
|
|
||||||
* Maybe the desired pci bus has been already scanned. In such case
|
|
||||||
* it is unnecessary to scan the pci bus with the given domain,busnum.
|
|
||||||
*/
|
|
||||||
bus = pci_find_bus(domain, busnum);
|
bus = pci_find_bus(domain, busnum);
|
||||||
if (bus) {
|
if (bus) {
|
||||||
/*
|
/*
|
||||||
* If the desired bus exits, the content of bus->sysdata will
|
* If the desired bus has been scanned already, replace
|
||||||
* be replaced by sd.
|
* its bus->sysdata.
|
||||||
*/
|
*/
|
||||||
memcpy(bus->sysdata, sd, sizeof(*sd));
|
memcpy(bus->sysdata, sd, sizeof(*sd));
|
||||||
kfree(info);
|
kfree(info);
|
||||||
|
|
|
@ -313,9 +313,10 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC1, pcie_r
|
||||||
* IORESOURCE_ROM_SHADOW is used to associate the boot video
|
* IORESOURCE_ROM_SHADOW is used to associate the boot video
|
||||||
* card with this copy. On laptops this copy has to be used since
|
* card with this copy. On laptops this copy has to be used since
|
||||||
* the main ROM may be compressed or combined with another image.
|
* the main ROM may be compressed or combined with another image.
|
||||||
* See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW
|
* See pci_map_rom() for use of this flag. Before marking the device
|
||||||
* is marked here since the boot video device will be the only enabled
|
* with IORESOURCE_ROM_SHADOW check if a vga_default_device is already set
|
||||||
* video device at this point.
|
* by either arch cde or vga-arbitration, if so only apply the fixup to this
|
||||||
|
* already determined primary video card.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void pci_fixup_video(struct pci_dev *pdev)
|
static void pci_fixup_video(struct pci_dev *pdev)
|
||||||
|
@ -346,14 +347,15 @@ static void pci_fixup_video(struct pci_dev *pdev)
|
||||||
}
|
}
|
||||||
bus = bus->parent;
|
bus = bus->parent;
|
||||||
}
|
}
|
||||||
|
if (!vga_default_device() || pdev == vga_default_device()) {
|
||||||
pci_read_config_word(pdev, PCI_COMMAND, &config);
|
pci_read_config_word(pdev, PCI_COMMAND, &config);
|
||||||
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
|
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
|
||||||
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
|
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
|
||||||
dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n");
|
dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n");
|
||||||
if (!vga_default_device())
|
|
||||||
vga_set_default_device(pdev);
|
vga_set_default_device(pdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
|
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
|
||||||
PCI_CLASS_DISPLAY_VGA, 8, pci_fixup_video);
|
PCI_CLASS_DISPLAY_VGA, 8, pci_fixup_video);
|
||||||
|
|
||||||
|
|
|
@ -33,21 +33,15 @@ obj-$(CONFIG_PCI_IOV) += iov.o
|
||||||
#
|
#
|
||||||
# Some architectures use the generic PCI setup functions
|
# Some architectures use the generic PCI setup functions
|
||||||
#
|
#
|
||||||
obj-$(CONFIG_X86) += setup-bus.o
|
obj-$(CONFIG_ALPHA) += setup-irq.o
|
||||||
obj-$(CONFIG_ALPHA) += setup-bus.o setup-irq.o
|
obj-$(CONFIG_ARM) += setup-irq.o
|
||||||
obj-$(CONFIG_ARM) += setup-bus.o setup-irq.o
|
obj-$(CONFIG_UNICORE32) += setup-irq.o
|
||||||
obj-$(CONFIG_UNICORE32) += setup-bus.o setup-irq.o
|
obj-$(CONFIG_SUPERH) += setup-irq.o
|
||||||
obj-$(CONFIG_PARISC) += setup-bus.o
|
obj-$(CONFIG_MIPS) += setup-irq.o
|
||||||
obj-$(CONFIG_SUPERH) += setup-bus.o setup-irq.o
|
|
||||||
obj-$(CONFIG_PPC) += setup-bus.o
|
|
||||||
obj-$(CONFIG_FRV) += setup-bus.o
|
|
||||||
obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o
|
|
||||||
obj-$(CONFIG_X86_VISWS) += setup-irq.o
|
obj-$(CONFIG_X86_VISWS) += setup-irq.o
|
||||||
obj-$(CONFIG_MN10300) += setup-bus.o
|
obj-$(CONFIG_TILE) += setup-irq.o
|
||||||
obj-$(CONFIG_MICROBLAZE) += setup-bus.o
|
obj-$(CONFIG_SPARC_LEON) += setup-irq.o
|
||||||
obj-$(CONFIG_TILE) += setup-bus.o setup-irq.o
|
obj-$(CONFIG_M68K) += setup-irq.o
|
||||||
obj-$(CONFIG_SPARC_LEON) += setup-bus.o setup-irq.o
|
|
||||||
obj-$(CONFIG_M68K) += setup-bus.o setup-irq.o
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# ACPI Related PCI FW Functions
|
# ACPI Related PCI FW Functions
|
||||||
|
|
|
@ -920,12 +920,12 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
bus->max_bus_speed = PCI_SPEED_100MHz_PCIX;
|
bus->max_bus_speed = PCI_SPEED_100MHz_PCIX;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (bus_cap & 20) {
|
if (bus_cap & 0x20) {
|
||||||
dbg("bus max supports 66MHz PCI-X\n");
|
dbg("bus max supports 66MHz PCI-X\n");
|
||||||
bus->max_bus_speed = PCI_SPEED_66MHz_PCIX;
|
bus->max_bus_speed = PCI_SPEED_66MHz_PCIX;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (bus_cap & 10) {
|
if (bus_cap & 0x10) {
|
||||||
dbg("bus max supports 66MHz PCI\n");
|
dbg("bus max supports 66MHz PCI\n");
|
||||||
bus->max_bus_speed = PCI_SPEED_66MHz;
|
bus->max_bus_speed = PCI_SPEED_66MHz;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1181,6 +1181,8 @@ EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state);
|
||||||
static int do_pci_enable_device(struct pci_dev *dev, int bars)
|
static int do_pci_enable_device(struct pci_dev *dev, int bars)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
u16 cmd;
|
||||||
|
u8 pin;
|
||||||
|
|
||||||
err = pci_set_power_state(dev, PCI_D0);
|
err = pci_set_power_state(dev, PCI_D0);
|
||||||
if (err < 0 && err != -EIO)
|
if (err < 0 && err != -EIO)
|
||||||
|
@ -1190,6 +1192,14 @@ static int do_pci_enable_device(struct pci_dev *dev, int bars)
|
||||||
return err;
|
return err;
|
||||||
pci_fixup_device(pci_fixup_enable, dev);
|
pci_fixup_device(pci_fixup_enable, dev);
|
||||||
|
|
||||||
|
pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
|
||||||
|
if (pin) {
|
||||||
|
pci_read_config_word(dev, PCI_COMMAND, &cmd);
|
||||||
|
if (cmd & PCI_COMMAND_INTX_DISABLE)
|
||||||
|
pci_write_config_word(dev, PCI_COMMAND,
|
||||||
|
cmd & ~PCI_COMMAND_INTX_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1611,7 +1621,6 @@ static void pci_pme_list_scan(struct work_struct *work)
|
||||||
struct pci_pme_device *pme_dev, *n;
|
struct pci_pme_device *pme_dev, *n;
|
||||||
|
|
||||||
mutex_lock(&pci_pme_list_mutex);
|
mutex_lock(&pci_pme_list_mutex);
|
||||||
if (!list_empty(&pci_pme_list)) {
|
|
||||||
list_for_each_entry_safe(pme_dev, n, &pci_pme_list, list) {
|
list_for_each_entry_safe(pme_dev, n, &pci_pme_list, list) {
|
||||||
if (pme_dev->dev->pme_poll) {
|
if (pme_dev->dev->pme_poll) {
|
||||||
struct pci_dev *bridge;
|
struct pci_dev *bridge;
|
||||||
|
@ -1633,7 +1642,6 @@ static void pci_pme_list_scan(struct work_struct *work)
|
||||||
if (!list_empty(&pci_pme_list))
|
if (!list_empty(&pci_pme_list))
|
||||||
schedule_delayed_work(&pci_pme_work,
|
schedule_delayed_work(&pci_pme_work,
|
||||||
msecs_to_jiffies(PME_TIMEOUT));
|
msecs_to_jiffies(PME_TIMEOUT));
|
||||||
}
|
|
||||||
mutex_unlock(&pci_pme_list_mutex);
|
mutex_unlock(&pci_pme_list_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue