2006-12-07 22:58:21

by Jeff Garzik

[permalink] [raw]
Subject: [git patch] improve INTx toggle for PCI MSI


"it boots" on ICH7 at least.

Please pull from 'intx' branch of
master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6.git intx

to receive the following updates:

drivers/pci/msi.c | 12 ++++--------
1 files changed, 4 insertions(+), 8 deletions(-)

Jeff Garzik:
PCI MSI: always toggle legacy-INTx-enable bit upon MSI entry/exit

diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 9fc9a34..c2828a3 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -255,10 +255,8 @@ static void enable_msi_mode(struct pci_d
pci_write_config_word(dev, msi_control_reg(pos), control);
dev->msix_enabled = 1;
}
- if (pci_find_capability(dev, PCI_CAP_ID_EXP)) {
- /* PCI Express Endpoint device detected */
- pci_intx(dev, 0); /* disable intx */
- }
+
+ pci_intx(dev, 0); /* disable intx */
}

void disable_msi_mode(struct pci_dev *dev, int pos, int type)
@@ -276,10 +274,8 @@ void disable_msi_mode(struct pci_dev *de
pci_write_config_word(dev, msi_control_reg(pos), control);
dev->msix_enabled = 0;
}
- if (pci_find_capability(dev, PCI_CAP_ID_EXP)) {
- /* PCI Express Endpoint device detected */
- pci_intx(dev, 1); /* enable intx */
- }
+
+ pci_intx(dev, 1); /* enable intx */
}

static int msi_lookup_irq(struct pci_dev *dev, int type)


2006-12-08 16:44:29

by Daniel Barkalow

[permalink] [raw]
Subject: Re: [git patch] improve INTx toggle for PCI MSI

On Thu, 7 Dec 2006, Jeff Garzik wrote:

> "it boots" on ICH7 at least.

It solves my problem (and doesn't break anything).

-Daniel
*This .sig left intentionally blank*

2006-12-07 23:08:53

by Andrew Morton

[permalink] [raw]
Subject: Re: [git patch] improve INTx toggle for PCI MSI

On Thu, 7 Dec 2006 17:58:12 -0500
Jeff Garzik <[email protected]> wrote:

>
> "it boots" on ICH7 at least.

That's a rave review ;)

> Please pull from 'intx' branch of
> master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6.git intx
>
> to receive the following updates:
>
> drivers/pci/msi.c | 12 ++++--------
> 1 files changed, 4 insertions(+), 8 deletions(-)
>
> Jeff Garzik:
> PCI MSI: always toggle legacy-INTx-enable bit upon MSI entry/exit

Why?

> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> index 9fc9a34..c2828a3 100644
> --- a/drivers/pci/msi.c
> +++ b/drivers/pci/msi.c
> @@ -255,10 +255,8 @@ static void enable_msi_mode(struct pci_d
> pci_write_config_word(dev, msi_control_reg(pos), control);
> dev->msix_enabled = 1;
> }
> - if (pci_find_capability(dev, PCI_CAP_ID_EXP)) {
> - /* PCI Express Endpoint device detected */
> - pci_intx(dev, 0); /* disable intx */
> - }
> +
> + pci_intx(dev, 0); /* disable intx */
> }
>
> void disable_msi_mode(struct pci_dev *dev, int pos, int type)
> @@ -276,10 +274,8 @@ void disable_msi_mode(struct pci_dev *de
> pci_write_config_word(dev, msi_control_reg(pos), control);
> dev->msix_enabled = 0;
> }
> - if (pci_find_capability(dev, PCI_CAP_ID_EXP)) {
> - /* PCI Express Endpoint device detected */
> - pci_intx(dev, 1); /* enable intx */
> - }
> +
> + pci_intx(dev, 1); /* enable intx */
> }
>
> static int msi_lookup_irq(struct pci_dev *dev, int type)

2006-12-07 23:09:53

by Linus Torvalds

[permalink] [raw]
Subject: Re: [git patch] improve INTx toggle for PCI MSI



On Thu, 7 Dec 2006, Jeff Garzik wrote:
>
> "it boots" on ICH7 at least.

Ok. Pulled, pushed out.

There was some noise saying that this may actually fix the problems with
the NVidia "Intel HDA" sound situation? Can people who saw that issue try
it out whether this just makes MSI works for them?

Takashi added to the To: field, because he hopefully remembers and has a
clue about the proper identities in question.. Iirc, you needed to have
not only a NVidia chipset, but also have the legacy interrupt shared with
some other device to see the problem.

Linus

2006-12-08 03:00:34

by Takashi Iwai

[permalink] [raw]
Subject: Re: [git patch] improve INTx toggle for PCI MSI

2006/12/8, Linus Torvalds <[email protected]>:
>
>
> On Thu, 7 Dec 2006, Jeff Garzik wrote:
> >
> > "it boots" on ICH7 at least.
>
> Ok. Pulled, pushed out.
>
> There was some noise saying that this may actually fix the problems with
> the NVidia "Intel HDA" sound situation? Can people who saw that issue try
> it out whether this just makes MSI works for them?
>
> Takashi added to the To: field, because he hopefully remembers and has a
> clue about the proper identities in question.. Iirc, you needed to have
> not only a NVidia chipset, but also have the legacy interrupt shared with
> some other device to see the problem.

Well, I'm on vacation now, so cannot answer much, too :)

IIRC, the problem was with HD-audio and network devices on Nvidia.
The explicit call of pci_intx() (currently implemented in hd-audio
driver locally) helped avoiding the orphan irq problem, but doesn't
fix the MSI problem itself. (Some might have been fixed indeed,
but I don't have reports in hands.)


Takashi