From: Stephen Hemminger <shemminger@osdl.org>
To: Roland Dreier <rdreier@cisco.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>,
linux-pci@atrey.karlin.mff.cuni.cz, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/6] e1000: use pcix_set_mmrbc
Date: Fri, 8 Dec 2006 14:43:32 -0800 [thread overview]
Message-ID: <20061208144332.33497a98@freekitty> (raw)
In-Reply-To: <adalkli6p0e.fsf@cisco.com>
On Fri, 08 Dec 2006 13:45:05 -0800
Roland Dreier <rdreier@cisco.com> wrote:
> > - if (hw->bus_type == e1000_bus_type_pcix) {
> > - e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd_word);
> > - e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI,
> > - &pcix_stat_hi_word);
> > - cmd_mmrbc = (pcix_cmd_word & PCIX_COMMAND_MMRBC_MASK) >>
> > - PCIX_COMMAND_MMRBC_SHIFT;
> > - stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >>
> > - PCIX_STATUS_HI_MMRBC_SHIFT;
> > - if (stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K)
> > - stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K;
> > - if (cmd_mmrbc > stat_mmrbc) {
> > - pcix_cmd_word &= ~PCIX_COMMAND_MMRBC_MASK;
> > - pcix_cmd_word |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT;
> > - e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER,
> > - &pcix_cmd_word);
> > - }
> > - }
> > + if (hw->bus_type == e1000_bus_type_pcix)
> > + e1000_pcix_set_mmrbc(hw, 2048);
>
> This changes the behavior of the driver. The existing driver only
> sets MMRBC if it's bigger than min(2048, value in the status register).
> You're setting MMRBC to 2048 even if it starts out at a smaller value.
>
> - R.
Hmm.. looks like all that code should really be moved off to PCI bus
quirk/setup. None of it is E1000 specific. Something like this (untested):
---
drivers/pci/quirks.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
--- pci-x.orig/drivers/pci/quirks.c
+++ pci-x/drivers/pci/quirks.c
@@ -1719,6 +1719,36 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NV
#endif /* CONFIG_PCI_MSI */
EXPORT_SYMBOL(pcie_mch_quirk);
+
+/* Check that BIOS has not set PCI-X MMRBC to value bigger than board allows */
+static void __devinit quirk_pcix_mmrbc(struct pci_dev *dev)
+{
+ int cap;
+ u32 stat;
+ u16 cmd, m, c;
+
+ cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
+ if (cap <= 0)
+ return;
+
+ if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat) ||
+ pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
+ return;
+
+ m = (stat & PCI_X_STATUS_MAX_READ) >> 21; /* max possible MRRBC*/
+ c = (cmd & PCI_X_CMD_MAX_READ) >> 2; /* current MMRBC */
+ if (c > m) {
+ printk(KERN_INFO "PCIX: %s resetting MMRBC to %d\n",
+ pci_name(dev), 512 << m);
+
+ cmd &= ~PCI_X_CMD_MAX_READ;
+ cmd |= m << 2;
+ pci_write_config_dword(dev, cap + PCI_X_CMD, cmd);
+ }
+}
+DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_pcix_mmrbc);
+
+
#ifdef CONFIG_HOTPLUG
EXPORT_SYMBOL(pci_fixup_device);
#endif
--
Stephen Hemminger <shemminger@osdl.org>
next prev parent reply other threads:[~2006-12-08 22:43 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-08 18:22 [PATCH 0/6] PCI-X/PCI-Express read control interfaces Stephen Hemminger
2006-12-08 18:22 ` [PATCH 1/6] PCI-X Max Read Byte Count interface Stephen Hemminger
2006-12-08 22:56 ` [PATCH 1/6] PCI-X Max Read Byte Count interface (v2) Stephen Hemminger
2006-12-08 18:22 ` [PATCH 2/6] e1000: use pcix_set_mmrbc Stephen Hemminger
2006-12-08 21:45 ` Roland Dreier
2006-12-08 22:43 ` Stephen Hemminger [this message]
2006-12-08 22:58 ` Auke Kok
2006-12-08 23:38 ` Jeff Kirsher
2006-12-08 18:22 ` [PATCH 3/6] PCI Express get/set read request size Stephen Hemminger
2006-12-08 18:22 ` [PATCH 4/6] MTHCA driver (infiniband) use new pci interfaces Stephen Hemminger
2006-12-08 21:46 ` Roland Dreier
2006-12-11 3:55 ` Benjamin Herrenschmidt
2006-12-11 5:56 ` Grant Grundler
2006-12-12 1:38 ` Roland Dreier
2006-12-12 1:59 ` Benjamin Herrenschmidt
2006-12-08 18:22 ` [PATCH 5/6] QLA2 use pci read tuning interface Stephen Hemminger
2006-12-08 18:22 ` [PATCH 6/6] PCI-X relaxed ordering interface Stephen Hemminger
2006-12-11 3:48 ` [PATCH 0/6] PCI-X/PCI-Express read control interfaces Benjamin Herrenschmidt
2006-12-14 0:17 ` Stephen Hemminger
2006-12-14 0:34 ` Benjamin Herrenschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061208144332.33497a98@freekitty \
--to=shemminger@osdl.org \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@atrey.karlin.mff.cuni.cz \
--cc=rdreier@cisco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox