* Re: qla_wxyz pci_set_mwi question
[not found] ` <20070412193713.GB14510@andrew-vasquezs-computer.local>
@ 2007-04-12 20:04 ` Matthew Wilcox
2007-04-13 2:34 ` Benjamin Herrenschmidt
2007-05-03 17:44 ` Andrew Vasquez
0 siblings, 2 replies; 5+ messages in thread
From: Matthew Wilcox @ 2007-04-12 20:04 UTC (permalink / raw)
To: Andrew Vasquez
Cc: Randy Dunlap, scsi, gregkh, David Somayajulu, linuxppc-dev,
linux-driver, PCI
On Thu, Apr 12, 2007 at 12:37:13PM -0700, Andrew Vasquez wrote:
> On Thu, 12 Apr 2007, Matthew Wilcox wrote:
> > Why should it fail? If there's a platform which can't support a
> > cacheline size that the qla2xyz card can handle, it should be able to
> > happily fall back to doing plain writes instead of MWIs. IMO, it should
> > just call pci_set_mwi() and ignore the result.
>
> I believe there were some erratas on some ISP2xxx chips where MWI
> needed to be set for proper operation. I'll go back, verify and
> update the patch accordingly.
Hmm. The thing is that pci_set_mwi() returns success on machines where
MWI is disabled (currently only PPC64). Perhaps it needs to fail
instead.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: qla_wxyz pci_set_mwi question
2007-04-12 20:04 ` qla_wxyz pci_set_mwi question Matthew Wilcox
@ 2007-04-13 2:34 ` Benjamin Herrenschmidt
2007-04-13 2:40 ` Randy Dunlap
2007-05-03 17:44 ` Andrew Vasquez
1 sibling, 1 reply; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2007-04-13 2:34 UTC (permalink / raw)
To: Matthew Wilcox
Cc: Randy Dunlap, scsi, gregkh, David Somayajulu, linuxppc-dev,
Andrew Vasquez, linux-driver, PCI
On Thu, 2007-04-12 at 14:04 -0600, Matthew Wilcox wrote:
> On Thu, Apr 12, 2007 at 12:37:13PM -0700, Andrew Vasquez wrote:
> > On Thu, 12 Apr 2007, Matthew Wilcox wrote:
> > > Why should it fail? If there's a platform which can't support a
> > > cacheline size that the qla2xyz card can handle, it should be able to
> > > happily fall back to doing plain writes instead of MWIs. IMO, it should
> > > just call pci_set_mwi() and ignore the result.
> >
> > I believe there were some erratas on some ISP2xxx chips where MWI
> > needed to be set for proper operation. I'll go back, verify and
> > update the patch accordingly.
>
> Hmm. The thing is that pci_set_mwi() returns success on machines where
> MWI is disabled (currently only PPC64). Perhaps it needs to fail
> instead.
MWI isn't diabled on ppc64... or did I miss something ?
Ben.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: qla_wxyz pci_set_mwi question
2007-04-13 2:34 ` Benjamin Herrenschmidt
@ 2007-04-13 2:40 ` Randy Dunlap
2007-04-13 2:43 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 5+ messages in thread
From: Randy Dunlap @ 2007-04-13 2:40 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: scsi, Matthew Wilcox, gregkh, David Somayajulu, linuxppc-dev,
Andrew Vasquez, linux-driver, PCI
Benjamin Herrenschmidt wrote:
> On Thu, 2007-04-12 at 14:04 -0600, Matthew Wilcox wrote:
>> On Thu, Apr 12, 2007 at 12:37:13PM -0700, Andrew Vasquez wrote:
>>> On Thu, 12 Apr 2007, Matthew Wilcox wrote:
>>>> Why should it fail? If there's a platform which can't support a
>>>> cacheline size that the qla2xyz card can handle, it should be able to
>>>> happily fall back to doing plain writes instead of MWIs. IMO, it should
>>>> just call pci_set_mwi() and ignore the result.
>>> I believe there were some erratas on some ISP2xxx chips where MWI
>>> needed to be set for proper operation. I'll go back, verify and
>>> update the patch accordingly.
>> Hmm. The thing is that pci_set_mwi() returns success on machines where
>> MWI is disabled (currently only PPC64). Perhaps it needs to fail
>> instead.
>
> MWI isn't diabled on ppc64... or did I miss something ?
>
> Ben.
>
Willy was referring to this from include/asm-powerpc/pci.h:
#ifdef CONFIG_PPC64
/*
* We want to avoid touching the cacheline size or MWI bit.
* pSeries firmware sets the cacheline size (which is not the cpu cacheline
* size in all cases) and hardware treats MWI the same as memory write.
*/
#define PCI_DISABLE_MWI
which makes pci_set_mwi() do nothing other than return 0;
--
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: qla_wxyz pci_set_mwi question
2007-04-13 2:40 ` Randy Dunlap
@ 2007-04-13 2:43 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2007-04-13 2:43 UTC (permalink / raw)
To: Randy Dunlap
Cc: scsi, Matthew Wilcox, gregkh, David Somayajulu, linuxppc-dev,
Andrew Vasquez, linux-driver, PCI
> Willy was referring to this from include/asm-powerpc/pci.h:
>
> #ifdef CONFIG_PPC64
>
> /*
> * We want to avoid touching the cacheline size or MWI bit.
> * pSeries firmware sets the cacheline size (which is not the cpu cacheline
> * size in all cases) and hardware treats MWI the same as memory write.
> */
> #define PCI_DISABLE_MWI
>
>
> which makes pci_set_mwi() do nothing other than return 0;
Interesting... I think I missed that we had that bit for some time :-)
Well, I suppose that on pSeries and probably pmac too, the firmware will
set the MWI bit for us anyway, but that's a bit dodgy to apply that to
all ppc64... they aren't all pSeries.
I'll have to look into that again one of these days.
Cheers,
Ben.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: qla_wxyz pci_set_mwi question
2007-04-12 20:04 ` qla_wxyz pci_set_mwi question Matthew Wilcox
2007-04-13 2:34 ` Benjamin Herrenschmidt
@ 2007-05-03 17:44 ` Andrew Vasquez
1 sibling, 0 replies; 5+ messages in thread
From: Andrew Vasquez @ 2007-05-03 17:44 UTC (permalink / raw)
To: Matthew Wilcox
Cc: Randy Dunlap, scsi, gregkh, David Somayajulu, linuxppc-dev,
linux-driver, PCI
On Thu, 12 Apr 2007, Matthew Wilcox wrote:
> On Thu, Apr 12, 2007 at 12:37:13PM -0700, Andrew Vasquez wrote:
> > On Thu, 12 Apr 2007, Matthew Wilcox wrote:
> > > Why should it fail? If there's a platform which can't support a
> > > cacheline size that the qla2xyz card can handle, it should be able to
> > > happily fall back to doing plain writes instead of MWIs. IMO, it should
> > > just call pci_set_mwi() and ignore the result.
> >
> > I believe there were some erratas on some ISP2xxx chips where MWI
> > needed to be set for proper operation. I'll go back, verify and
> > update the patch accordingly.
>
> Hmm. The thing is that pci_set_mwi() returns success on machines where
> MWI is disabled (currently only PPC64). Perhaps it needs to fail
> instead.
Sorry for the latency on getting this one resolved... So is Randy's
proposal for pci_try_set_mwi():
http://article.gmane.org/gmane.linux.kernel/516349
going to be added in 2.6.22? If so, I'd like to propose the following
to qla2xxx which handles the 2300 errata.
--
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 6ad1588..8b83e1c 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -130,18 +130,16 @@ qla2x00_initialize_adapter(scsi_qla_host_t *ha)
int
qla2100_pci_config(scsi_qla_host_t *ha)
{
- uint16_t w, mwi;
+ uint16_t w;
uint32_t d;
unsigned long flags;
struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
pci_set_master(ha->pdev);
- mwi = 0;
- if (pci_set_mwi(ha->pdev))
- mwi = PCI_COMMAND_INVALIDATE;
+ pci_try_set_mwi(ha->pdev);
pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
- w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
+ w |= (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
pci_write_config_word(ha->pdev, PCI_COMMAND, w);
/* Reset expansion ROM address decode enable */
@@ -166,22 +164,21 @@ qla2100_pci_config(scsi_qla_host_t *ha)
int
qla2300_pci_config(scsi_qla_host_t *ha)
{
- uint16_t w, mwi;
+ uint16_t w;
uint32_t d;
unsigned long flags = 0;
uint32_t cnt;
struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
pci_set_master(ha->pdev);
- mwi = 0;
- if (pci_set_mwi(ha->pdev))
- mwi = PCI_COMMAND_INVALIDATE;
+ pci_try_set_mwi(ha->pdev);
pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
- w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
+ w |= (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
if (IS_QLA2322(ha) || IS_QLA6322(ha))
w &= ~PCI_COMMAND_INTX_DISABLE;
+ pci_write_config_word(ha->pdev, PCI_COMMAND, w);
/*
* If this is a 2300 card and not 2312, reset the
@@ -210,7 +207,7 @@ qla2300_pci_config(scsi_qla_host_t *ha)
ha->fb_rev = RD_FB_CMD_REG(ha, reg);
if (ha->fb_rev == FPM_2300)
- w &= ~PCI_COMMAND_INVALIDATE;
+ pci_clear_mwi(ha->pdev);
/* Deselect FPM registers. */
WRT_REG_WORD(®->ctrl_status, 0x0);
@@ -227,7 +224,6 @@ qla2300_pci_config(scsi_qla_host_t *ha)
spin_unlock_irqrestore(&ha->hardware_lock, flags);
}
- pci_write_config_word(ha->pdev, PCI_COMMAND, w);
pci_write_config_byte(ha->pdev, PCI_LATENCY_TIMER, 0x80);
@@ -253,19 +249,17 @@ qla2300_pci_config(scsi_qla_host_t *ha)
int
qla24xx_pci_config(scsi_qla_host_t *ha)
{
- uint16_t w, mwi;
+ uint16_t w;
uint32_t d;
unsigned long flags = 0;
struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
int pcix_cmd_reg, pcie_dctl_reg;
pci_set_master(ha->pdev);
- mwi = 0;
- if (pci_set_mwi(ha->pdev))
- mwi = PCI_COMMAND_INVALIDATE;
+ pci_try_set_mwi(ha->pdev);
pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
- w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
+ w |= (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
w &= ~PCI_COMMAND_INTX_DISABLE;
pci_write_config_word(ha->pdev, PCI_COMMAND, w);
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-05-03 17:57 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20070411221507.69c97257.randy.dunlap@oracle.com>
[not found] ` <20070412172038.GG10124@andrew-vasquezs-computer.local>
[not found] ` <20070412185347.GL26692@parisc-linux.org>
[not found] ` <20070412193713.GB14510@andrew-vasquezs-computer.local>
2007-04-12 20:04 ` qla_wxyz pci_set_mwi question Matthew Wilcox
2007-04-13 2:34 ` Benjamin Herrenschmidt
2007-04-13 2:40 ` Randy Dunlap
2007-04-13 2:43 ` Benjamin Herrenschmidt
2007-05-03 17:44 ` Andrew Vasquez
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).