public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev
       [not found] <20051027192603.488616000@whizzy>
@ 2005-10-27 19:30 ` Kristen Accardi
  2005-10-27 23:06   ` Rajesh Shah
  2005-10-27 19:30 ` [patch 2/3] apci: use stored value of pin from pci_dev Kristen Accardi
  2005-10-27 19:30 ` [patch 3/3] pci: " Kristen Accardi
  2 siblings, 1 reply; 5+ messages in thread
From: Kristen Accardi @ 2005-10-27 19:30 UTC (permalink / raw)
  To: pcihpd-discuss; +Cc: acpi-devel, linux-kernel, rajesh.shah, greg, len.brown

plain text document attachment (patch-interrupt-pin)
Store the value of the INTERRUPT_PIN in the pci_dev structure
so that it can be retrieved later.

Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
 
 drivers/pci/probe.c |    1 +
 include/linux/pci.h |    1 +
 2 files changed, 2 insertions(+)

Index: linux-2.6.13/drivers/pci/probe.c
===================================================================
--- linux-2.6.13.orig/drivers/pci/probe.c
+++ linux-2.6.13/drivers/pci/probe.c
@@ -571,6 +571,7 @@ static void pci_read_irq(struct pci_dev 
 	unsigned char irq;
 
 	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
+	dev->pin = irq;
 	if (irq)
 		pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
 	dev->irq = irq;
Index: linux-2.6.13/include/linux/pci.h
===================================================================
--- linux-2.6.13.orig/include/linux/pci.h
+++ linux-2.6.13/include/linux/pci.h
@@ -98,6 +98,7 @@ struct pci_dev {
 	unsigned int	class;		/* 3 bytes: (base,sub,prog-if) */
 	u8		hdr_type;	/* PCI header type (`multi' flag masked out) */
 	u8		rom_base_reg;	/* which config register controls the ROM */
+	u8		pin;  		/* which interrupt pin this device uses */
 
 	struct pci_driver *driver;	/* which driver has allocated this device */
 	u64		dma_mask;	/* Mask of the bits of bus address this

--

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [patch 2/3] apci: use stored value of pin from pci_dev
       [not found] <20051027192603.488616000@whizzy>
  2005-10-27 19:30 ` [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev Kristen Accardi
@ 2005-10-27 19:30 ` Kristen Accardi
  2005-10-27 19:30 ` [patch 3/3] pci: " Kristen Accardi
  2 siblings, 0 replies; 5+ messages in thread
From: Kristen Accardi @ 2005-10-27 19:30 UTC (permalink / raw)
  To: pcihpd-discuss; +Cc: acpi-devel, linux-kernel, rajesh.shah, greg, len.brown

plain text document attachment (patch-interrupt-pin-acpi)
Use the stored value of the Interrupt Pin, rather than try to read
it again.

Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
 
 drivers/acpi/pci_irq.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

Index: linux-2.6.13/drivers/acpi/pci_irq.c
===================================================================
--- linux-2.6.13.orig/drivers/acpi/pci_irq.c
+++ linux-2.6.13/drivers/acpi/pci_irq.c
@@ -361,8 +361,7 @@ acpi_pci_irq_derive(struct pci_dev *dev,
 
 		if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
 			/* PC card has the same IRQ as its cardbridge */
-			pci_read_config_byte(bridge, PCI_INTERRUPT_PIN,
-					     &bridge_pin);
+			bridge_pin = bridge->pin;
 			if (!bridge_pin) {
 				ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 						  "No interrupt pin configured for device %s\n",
@@ -412,7 +411,7 @@ int acpi_pci_irq_enable(struct pci_dev *
 	if (!dev)
 		return_VALUE(-EINVAL);
 
-	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
+	pin = dev->pin;
 	if (!pin) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "No interrupt pin configured for device %s\n",
@@ -503,7 +502,7 @@ void acpi_pci_irq_disable(struct pci_dev
 	if (!dev || !dev->bus)
 		return_VOID;
 
-	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
+	pin = dev->pin;
 	if (!pin)
 		return_VOID;
 	pin--;

--

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [patch 3/3] pci: use stored value of pin from pci_dev
       [not found] <20051027192603.488616000@whizzy>
  2005-10-27 19:30 ` [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev Kristen Accardi
  2005-10-27 19:30 ` [patch 2/3] apci: use stored value of pin from pci_dev Kristen Accardi
@ 2005-10-27 19:30 ` Kristen Accardi
  2 siblings, 0 replies; 5+ messages in thread
From: Kristen Accardi @ 2005-10-27 19:30 UTC (permalink / raw)
  To: pcihpd-discuss; +Cc: acpi-devel, linux-kernel, rajesh.shah, greg, len.brown

plain text document attachment (patch-interrupt-pin-pci)
Use the stored value of the interrupt pin rather than try to read
the config again.

Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
 
 drivers/pci/pci.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6.13/drivers/pci/pci.c
===================================================================
--- linux-2.6.13.orig/drivers/pci/pci.c
+++ linux-2.6.13/drivers/pci/pci.c
@@ -567,7 +567,7 @@ pci_get_interrupt_pin(struct pci_dev *de
 {
 	u8 pin;
 
-	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
+	pin = dev->pin;
 	if (!pin)
 		return -1;
 	pin--;

--

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev
  2005-10-27 19:30 ` [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev Kristen Accardi
@ 2005-10-27 23:06   ` Rajesh Shah
  2005-11-03  0:14     ` Kristen Accardi
  0 siblings, 1 reply; 5+ messages in thread
From: Rajesh Shah @ 2005-10-27 23:06 UTC (permalink / raw)
  To: Kristen Accardi
  Cc: pcihpd-discuss, acpi-devel, linux-kernel, rajesh.shah, greg,
	len.brown

On Thu, Oct 27, 2005 at 12:30:09PM -0700, Kristen Accardi wrote:
> --- linux-2.6.13.orig/drivers/pci/probe.c
> +++ linux-2.6.13/drivers/pci/probe.c
> @@ -571,6 +571,7 @@ static void pci_read_irq(struct pci_dev 
>  	unsigned char irq;
>  
>  	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
> +	dev->pin = irq;

pci_read_irq() is not called for PCI bridges, but some of them
may need an interrupt (e.g. for shpchp, pciehp). Did you check
if this patchset broke such bridges? You should call this
function for PCI bridges too.

Rajesh


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev
  2005-10-27 23:06   ` Rajesh Shah
@ 2005-11-03  0:14     ` Kristen Accardi
  0 siblings, 0 replies; 5+ messages in thread
From: Kristen Accardi @ 2005-11-03  0:14 UTC (permalink / raw)
  To: Rajesh Shah; +Cc: pcihpd-discuss, acpi-devel, linux-kernel, greg, len.brown

On Thu, 2005-10-27 at 16:06 -0700, Rajesh Shah wrote:
> On Thu, Oct 27, 2005 at 12:30:09PM -0700, Kristen Accardi wrote:
> > --- linux-2.6.13.orig/drivers/pci/probe.c
> > +++ linux-2.6.13/drivers/pci/probe.c
> > @@ -571,6 +571,7 @@ static void pci_read_irq(struct pci_dev 
> >  	unsigned char irq;
> >  
> >  	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
> > +	dev->pin = irq;
> 
> pci_read_irq() is not called for PCI bridges, but some of them
> may need an interrupt (e.g. for shpchp, pciehp). Did you check
> if this patchset broke such bridges? You should call this
> function for PCI bridges too.
> 
> Rajesh
> 

You are correct, this does break for bridges on certain architectures.
Some archs seem to re-read the interrupt pin value in
pcibios_enable_device, but others don't.  Adding pci_read_irq to the
bridge patch in this function does seem to fix the problem, and arch
specific code can still override this.  I'll send a new patch for that.
thanks,
Kristen


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-11-03  0:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20051027192603.488616000@whizzy>
2005-10-27 19:30 ` [patch 1/3] pci: store PCI_INTERRUPT_PIN in pci_dev Kristen Accardi
2005-10-27 23:06   ` Rajesh Shah
2005-11-03  0:14     ` Kristen Accardi
2005-10-27 19:30 ` [patch 2/3] apci: use stored value of pin from pci_dev Kristen Accardi
2005-10-27 19:30 ` [patch 3/3] pci: " Kristen Accardi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox