diff mbox

[RFC,2/2] disable boot interrupts on Intel X58 and 55x0

Message ID 20090904165545.26294.94612.sendpatchset@t500 (mailing list archive)
State RFC, archived
Headers show

Commit Message

Stefan Assmann Sept. 4, 2009, 4:55 p.m. UTC
Disable boot interrupts on Intel X58, 55x0 systems by setting the Disable PCI
INTx Routing to ICH bit (default is 0).

Disable PCI INTx Routing to ICH: When this bit is set, local INTx messages
received from the CB DMA/PCI Express ports of the IOH are not routed to legacy
ICH - they are either converted into MSI via the integrated I/OxAPIC (if the
I/OxAPIC mask bit is clear in the appropriate entries) or cause no further action
(when mask bit is set). When this bit is clear, local INTx messages received from
the CB DMA/PCI Express ports of the IOH are routed to legacy ICH, provided the
corresponding mask bit in the IOAPIC is set.
See Intel document #321328-001, section 19.10.2.27.

Signed-off-by: Stefan Assmann <sassmann@redhat.com>
---

 drivers/pci/quirks.c    |   24 ++++++++++++++++++++++++
 include/linux/pci_ids.h |    1 +
 2 files changed, 25 insertions(+)

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Daniel Walker Sept. 4, 2009, 5:06 p.m. UTC | #1
On Fri, 2009-09-04 at 12:55 -0400, Stefan Assmann wrote:
> + * Disable boot interrupts on Intel X58, 55x0 (Tylersburg).
> + * See Intel document #321328-001, section 19.10.2.27.
> + * (Disable PCI INTx Routing to ICH)
> + */
> +#define INTEL_X58_55x0_QPIPINTRC_OFFSET        0xe0
> +#define INTEL_X58_55x0_QPIPINTRC_BIT   (1<<25)
> +static void quirk_disable_intel_tylersburg_boot_interrupt(struct
> pci_dev *dev)
> +{
> +       u32 pci_config_dword;
> +
> +       if (noioapicquirk)
> +               return;
> +
> +       pci_read_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET,
> &pci_config_dword);
> +       pci_config_dword |= INTEL_X58_55x0_QPIPINTRC_BIT;
> +       pci_write_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET,
> pci_config_dword);
> +
> +       printk(KERN_INFO "disabled boot interrupt on device 0x%04x:0x%
> 04x\n",
> +               dev->vendor, dev->device);
> +}
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);


These lines are wildly long .. Could you reduce these down to a max of
80 characters..

Daniel

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stefan Assmann Sept. 5, 2009, 9:07 a.m. UTC | #2
On 04.09.2009 19:06, Daniel Walker wrote:
> On Fri, 2009-09-04 at 12:55 -0400, Stefan Assmann wrote:
>> + * Disable boot interrupts on Intel X58, 55x0 (Tylersburg).
>> + * See Intel document #321328-001, section 19.10.2.27.
>> + * (Disable PCI INTx Routing to ICH)
>> + */
>> +#define INTEL_X58_55x0_QPIPINTRC_OFFSET        0xe0
>> +#define INTEL_X58_55x0_QPIPINTRC_BIT   (1<<25)
>> +static void quirk_disable_intel_tylersburg_boot_interrupt(struct
>> pci_dev *dev)
>> +{
>> +       u32 pci_config_dword;
>> +
>> +       if (noioapicquirk)
>> +               return;
>> +
>> +       pci_read_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET,
>> &pci_config_dword);
>> +       pci_config_dword |= INTEL_X58_55x0_QPIPINTRC_BIT;
>> +       pci_write_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET,
>> pci_config_dword);
>> +
>> +       printk(KERN_INFO "disabled boot interrupt on device 0x%04x:0x%
>> 04x\n",
>> +               dev->vendor, dev->device);
>> +}
>> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
>> +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> 
> 
> These lines are wildly long .. Could you reduce these down to a max of
> 80 characters..

Hi Daniel,

you're right about the lines being to long, however if you take a peek
at drivers/pci/quirks.c you'll see that all the quirks are done this
way. :)

  Stefan
--
Stefan Assmann         | Red Hat GmbH
Software Engineer      | Otto-Hahn-Strasse 20, 85609 Dornach
                       | HR: Amtsgericht Muenchen HRB 153243
                       | GF: Brendan Lane, Charlie Peters,
sassmann at redhat.com |     Michael Cunningham, Charles Cachera
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Daniel Walker Sept. 5, 2009, 2:47 p.m. UTC | #3
On Sat, 2009-09-05 at 11:07 +0200, Stefan Assmann wrote:
> On 04.09.2009 19:06, Daniel Walker wrote:
> > On Fri, 2009-09-04 at 12:55 -0400, Stefan Assmann wrote:
> >> + * Disable boot interrupts on Intel X58, 55x0 (Tylersburg).
> >> + * See Intel document #321328-001, section 19.10.2.27.
> >> + * (Disable PCI INTx Routing to ICH)
> >> + */
> >> +#define INTEL_X58_55x0_QPIPINTRC_OFFSET        0xe0
> >> +#define INTEL_X58_55x0_QPIPINTRC_BIT   (1<<25)
> >> +static void quirk_disable_intel_tylersburg_boot_interrupt(struct
> >> pci_dev *dev)
> >> +{
> >> +       u32 pci_config_dword;
> >> +
> >> +       if (noioapicquirk)
> >> +               return;
> >> +
> >> +       pci_read_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET,
> >> &pci_config_dword);
> >> +       pci_config_dword |= INTEL_X58_55x0_QPIPINTRC_BIT;
> >> +       pci_write_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET,
> >> pci_config_dword);
> >> +
> >> +       printk(KERN_INFO "disabled boot interrupt on device 0x%04x:0x%
> >> 04x\n",
> >> +               dev->vendor, dev->device);
> >> +}
> >> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> >> +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> > 
> > 
> > These lines are wildly long .. Could you reduce these down to a max of
> > 80 characters..
> 
> Hi Daniel,
> 
> you're right about the lines being to long, however if you take a peek
> at drivers/pci/quirks.c you'll see that all the quirks are done this
> way. :)

I looked, the whole thing is a mess .. Really all these lines need to be
cleaned up.. It doesn't help to have you add more to it tho. Especially
the tab's or spaces between the commas, I can say I understand why that
is.. If there is a good reason why it's like that I'm all ears..

Daniel

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Olaf Dabrunz Sept. 5, 2009, 4:18 p.m. UTC | #4
On 05-Sep-09, Daniel Walker wrote:
> On Sat, 2009-09-05 at 11:07 +0200, Stefan Assmann wrote:
> > On 04.09.2009 19:06, Daniel Walker wrote:
> > > On Fri, 2009-09-04 at 12:55 -0400, Stefan Assmann wrote:
> > >> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> > >> +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> > > 
> > > 
> > > These lines are wildly long .. Could you reduce these down to a max of
> > > 80 characters..
> > 
> > Hi Daniel,
> > 
> > you're right about the lines being to long, however if you take a peek
> > at drivers/pci/quirks.c you'll see that all the quirks are done this
> > way. :)
> 
> I looked, the whole thing is a mess .. Really all these lines need to be
> cleaned up.. It doesn't help to have you add more to it tho. Especially
> the tab's or spaces between the commas, I can say I understand why that
> is.. If there is a good reason why it's like that I'm all ears..

It makes adding/deleting/modifying the entries easier, with one-line
editor operations. And if all data for one ID-to-quirk relationship is
on one line, with tabs to make for nice columns, I can more easily see
which device is linked to which quirk. That is why I usually prefer one
line per entry. And the entries in quirks.c are long, but not too long
for that IMHO.

I agree that the 80 columns restriction is a good thing in almost all
cases, as it limits the amount of information that is put on a single
line, and it limits the number of indentation levels within a function.

But in this case I think we are better off with one line per entry, even
if the line becomes longer than 80 characters. The information on one
line is not that much (one macro with 3 parameters), only the
identifiers try to be readable and discernible and therefore become
long.

So this will only be a problem for terminals that are limited to 80
rows, and I do not think that anyone is that restricted nowadays.

Regards,
Daniel Walker Sept. 5, 2009, 5:07 p.m. UTC | #5
On Sat, 2009-09-05 at 18:18 +0200, Olaf Dabrunz wrote:
> On 05-Sep-09, Daniel Walker wrote:
> > On Sat, 2009-09-05 at 11:07 +0200, Stefan Assmann wrote:
> > > On 04.09.2009 19:06, Daniel Walker wrote:
> > > > On Fri, 2009-09-04 at 12:55 -0400, Stefan Assmann wrote:
> > > >> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> > > >> +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_QPI_TBG15,  quirk_disable_intel_tylersburg_boot_interrupt);
> > > > 
> > > > 
> > > > These lines are wildly long .. Could you reduce these down to a max of
> > > > 80 characters..
> > > 
> > > Hi Daniel,
> > > 
> > > you're right about the lines being to long, however if you take a peek
> > > at drivers/pci/quirks.c you'll see that all the quirks are done this
> > > way. :)
> > 
> > I looked, the whole thing is a mess .. Really all these lines need to be
> > cleaned up.. It doesn't help to have you add more to it tho. Especially
> > the tab's or spaces between the commas, I can say I understand why that
> > is.. If there is a good reason why it's like that I'm all ears..
> 
> It makes adding/deleting/modifying the entries easier, with one-line
> editor operations. And if all data for one ID-to-quirk relationship is
> on one line, with tabs to make for nice columns, I can more easily see
> which device is linked to which quirk. That is why I usually prefer one
> line per entry. And the entries in quirks.c are long, but not too long
> for that IMHO.

Firstly I would say these entries aren't consistent at all.. Some are
comma tab delimited, some are comma space delimited, and some are mixed
space plus tab delimited plus comma delimited.. Many are actually broken
down into less than 80 max length already..

I'm not sure I see how this makes "adding/deleting/modifying" easier ..
We have lots of other situations where lines are broken down less than
80, function arguments, macros, structures all sorts of stuff. 

Taking this block for instance,

DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5780,
                        quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5780S,
                        quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5714,
                        quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5714S,
                        quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5715,
                        quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5715S,
                        quirk_msi_intx_disable_bug);

In this block there is a fairly clear pattern you can follow. One
problem with using tabs is that in order to get the perceive benefit
your suggesting you would be forced to have a terminal at a certain
size. Without that the single lines just end up line wrapped but in a
less consistent way. You also have the problem that people have to
deliberately add this formatting , sometimes one tab is enough,
sometimes you need two tabs, maybe someone uses spaces instead .. So you
end up with people potentially using all sorts of different methods and
maybe not getting it right (not to mention it's special formatting just
for this file)..

> So this will only be a problem for terminals that are limited to 80
> rows, and I do not think that anyone is that restricted nowadays.

It's more than that.. In order to un-wrap the lines in this file you
have to have a terminal at over 130 characters in width.

I think it would be better to create a script that parses this file and
produces consistent list in the format your describing, just for review
purposes.. That way it takes the human element out of it, and it still
lets you look at the formatting that your looking for.

Daniel

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Henrique de Moraes Holschuh Sept. 7, 2009, 1:37 a.m. UTC | #6
On Sat, 05 Sep 2009, Daniel Walker wrote:
> I'm not sure I see how this makes "adding/deleting/modifying" easier ..
> We have lots of other situations where lines are broken down less than
> 80, function arguments, macros, structures all sorts of stuff. 
> 
> Taking this block for instance,
> 
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>                         PCI_DEVICE_ID_TIGON3_5780,
>                         quirk_msi_intx_disable_bug);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>                         PCI_DEVICE_ID_TIGON3_5780S,
>                         quirk_msi_intx_disable_bug);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>                         PCI_DEVICE_ID_TIGON3_5714,
>                         quirk_msi_intx_disable_bug);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>                         PCI_DEVICE_ID_TIGON3_5714S,
>                         quirk_msix_intx_disable_bug);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>                         PCI_DEVICE_ID_TIGON3_5715,
>                         quirk_msi_intx_disable_bug);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>                         PCI_DEVICE_ID_TIGON3_5715S,
>                         quirk_msi_intx_disable_bug);

You must have an alien brain of some sort if reading that is easier than the
tabular (single-line) format for you.

Please try finding the one entry in there which is different (I changed one
of them) with a quick glance.  Chances are you'll just skip over it and
think all of them do the same thing.
Daniel Walker Sept. 7, 2009, 1:53 a.m. UTC | #7
On Sun, 2009-09-06 at 22:37 -0300, Henrique de Moraes Holschuh wrote:
> On Sat, 05 Sep 2009, Daniel Walker wrote:
> > I'm not sure I see how this makes "adding/deleting/modifying" easier ..
> > We have lots of other situations where lines are broken down less than
> > 80, function arguments, macros, structures all sorts of stuff. 
> > 
> > Taking this block for instance,
> > 
> > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
> >                         PCI_DEVICE_ID_TIGON3_5780,
> >                         quirk_msi_intx_disable_bug);
> > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
> >                         PCI_DEVICE_ID_TIGON3_5780S,
> >                         quirk_msi_intx_disable_bug);
> > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
> >                         PCI_DEVICE_ID_TIGON3_5714,
> >                         quirk_msi_intx_disable_bug);
> > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
> >                         PCI_DEVICE_ID_TIGON3_5714S,
> >                         quirk_msx_intx_disable_bug);
> > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
> >                         PCI_DEVICE_ID_TIGON3_5715,
> >                         quirk_msi_intx_disable_bug);
> > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
> >                         PCI_DEVICE_ID_TIGON3_5715S,
> >                         quirk_msi_intx_disable_bug);
> 
> You must have an alien brain of some sort if reading that is easier than the
> tabular (single-line) format for you.

My terminal isn't at 130 ..

> Please try finding the one entry in there which is different (I changed one
> of them) with a quick glance.  Chances are you'll just skip over it and
> think all of them do the same thing.

msix , the letters didn't line up, the semicolons don't line up either..
Even with tabs all this information is so similar your bound to overlook
small errors like that. Even if you think all this matter, assume
someone has a term at 80 then every thing is wrapper. That would put you
in the same situation. 

Daniel

Daniel

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1635,6 +1635,30 @@  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
 DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_IOAT_TBG9,	quirk_show_intel_qpi_conf_register);
 
 /*
+ * Disable boot interrupts on Intel X58, 55x0 (Tylersburg).
+ * See Intel document #321328-001, section 19.10.2.27.
+ * (Disable PCI INTx Routing to ICH)
+ */
+#define INTEL_X58_55x0_QPIPINTRC_OFFSET	0xe0
+#define INTEL_X58_55x0_QPIPINTRC_BIT	(1<<25)
+static void quirk_disable_intel_tylersburg_boot_interrupt(struct pci_dev *dev)
+{
+	u32 pci_config_dword;
+
+	if (noioapicquirk)
+		return;
+
+	pci_read_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET, &pci_config_dword);
+	pci_config_dword |= INTEL_X58_55x0_QPIPINTRC_BIT;
+	pci_write_config_dword(dev, INTEL_X58_55x0_QPIPINTRC_OFFSET, pci_config_dword);
+
+	printk(KERN_INFO "disabled boot interrupt on device 0x%04x:0x%04x\n",
+		dev->vendor, dev->device);
+}
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_QPI_TBG15,	quirk_disable_intel_tylersburg_boot_interrupt);
+DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_QPI_TBG15,	quirk_disable_intel_tylersburg_boot_interrupt);
+
+/*
  * disable boot interrupts on HT-1000
  */
 #define BC_HT1000_FEATURE_REG		0x64
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2504,6 +2504,7 @@ 
 #define PCI_DEVICE_ID_INTEL_ICH9_7	0x2916
 #define PCI_DEVICE_ID_INTEL_ICH9_8	0x2918
 #define PCI_DEVICE_ID_INTEL_82855PM_HB	0x3340
+#define PCI_DEVICE_ID_INTEL_QPI_TBG15	0x3428
 #define PCI_DEVICE_ID_INTEL_IOAT_TBG4	0x3429
 #define PCI_DEVICE_ID_INTEL_IOAT_TBG5	0x342a
 #define PCI_DEVICE_ID_INTEL_IOAT_TBG6	0x342b