mirror of https://gitee.com/openkylin/linux.git
x86/ce4100: Fix PCI configuration register access for devices without interrupts
Some CE4100 devices such as the: - DFX module (01:0b.7) - entertainment encryption device (01:10.0) - multimedia controller (01:12.0) do not have a device interrupt at all. This patch fixes the PCI controller code to declare the missing PCI configuration register space, as well as a fixup method for forcing the interrupt pin to be 0 for these devices. This is required to ensure that pci drivers matching on these devices will be able to honor the various PCI subsystem calls touching the configuration space. Signed-off-by: Maxime Bizon <mbizon@freebox.fr> Signed-off-by: Florian Fainelli <ffainelli@freebox.fr> Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: rui.zhang@intel.com Cc: alan@linux.intel.com Link: http://lkml.kernel.org/r/1351518020-25556-4-git-send-email-ffainelli@freebox.fr Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
d795991602
commit
37aeec3622
|
@ -115,6 +115,16 @@ static void sata_revid_read(struct sim_dev_reg *reg, u32 *value)
|
|||
reg_read(reg, value);
|
||||
}
|
||||
|
||||
static void reg_noirq_read(struct sim_dev_reg *reg, u32 *value)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
raw_spin_lock_irqsave(&pci_config_lock, flags);
|
||||
/* force interrupt pin value to 0 */
|
||||
*value = reg->sim_reg.value & 0xfff00ff;
|
||||
raw_spin_unlock_irqrestore(&pci_config_lock, flags);
|
||||
}
|
||||
|
||||
static struct sim_dev_reg bus1_fixups[] = {
|
||||
DEFINE_REG(2, 0, 0x10, (16*MB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(2, 0, 0x14, (256), reg_init, reg_read, reg_write)
|
||||
|
@ -144,6 +154,7 @@ static struct sim_dev_reg bus1_fixups[] = {
|
|||
DEFINE_REG(11, 5, 0x10, (64*KB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(11, 6, 0x10, (256), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(11, 7, 0x10, (64*KB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(11, 7, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
|
||||
DEFINE_REG(12, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(12, 0, 0x14, (256), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(12, 1, 0x10, (1024), reg_init, reg_read, reg_write)
|
||||
|
@ -161,8 +172,10 @@ static struct sim_dev_reg bus1_fixups[] = {
|
|||
DEFINE_REG(16, 0, 0x10, (64*KB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(16, 0, 0x14, (64*MB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(16, 0, 0x18, (64*MB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(16, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
|
||||
DEFINE_REG(17, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(18, 0, 0x10, (1*KB), reg_init, reg_read, reg_write)
|
||||
DEFINE_REG(18, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
|
||||
};
|
||||
|
||||
static void __init init_sim_regs(void)
|
||||
|
|
Loading…
Reference in New Issue