RE: [PATCH v4 1/1] MIPS: BCM47XX: Enable MIPS32 74K Core ExternalSync for BCM47XX PCIe erratum

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hauke-san,

Thanks for your reviewing and comments.

> You do it now unconditionally on all MIPS SoCs using bcma.
> 
> There are multiple different silicons from the Broadcom BCM47xx and
> BCM53xx line with a MIPS 74K core, see
> https://wikidevi.com/wiki/Broadcom I haven't tested if this fix is ok
> for all of them, but I think so.

  I see and yes I think so from the CFE implementation.

> Acked-by: Hauke Mehrtens <hauke@xxxxxxxxxx>

  Just sent the v5 version patch to change your name tag as Acked-by.

Regards,
Ikegami

> -----Original Message-----
> From: Hauke Mehrtens [mailto:hauke@xxxxxxxxxx]
> Sent: Saturday, June 02, 2018 6:54 PM
> To: IKEGAMI Tokunori; James Hogan
> Cc: PACKHAM Chris; Rafał Miłecki; linux-mips@xxxxxxxxxxxxxx
> Subject: Re: [PATCH v4 1/1] MIPS: BCM47XX: Enable MIPS32 74K Core
> ExternalSync for BCM47XX PCIe erratum
> 
> On 06/01/2018 12:19 AM, Tokunori Ikegami wrote:
> > The erratum and workaround are described by BCM5300X-ES300-RDS.pdf as
> below.
> >
> >   R10: PCIe Transactions Periodically Fail
> >
> >     Description: The BCM5300X PCIe does not maintain transaction
> ordering.
> >                  This may cause PCIe transaction failure.
> >     Fix Comment: Add a dummy PCIe configuration read after a PCIe
> >                  configuration write to ensure PCIe configuration
> access
> >                  ordering. Set ES bit of CP0 configu7 register to enable
> >                  sync function so that the sync instruction is
> functional.
> >     Resolution:  hndpci.c: extpci_write_config()
> >                  hndmips.c: si_mips_init()
> >                  mipsinc.h CONF7_ES
> >
> > This is fixed by the CFE MIPS bcmsi chipset driver also for BCM47XX.
> > Also the dummy PCIe configuration read is already implemented in the Linux
> > BCMA driver.
> > Enable ExternalSync in Config7 when CONFIG_BCMA_DRIVER_PCI_HOSTMODE=y
> > too so that the sync instruction is externalised.
> 
> You do it now unconditionally on all MIPS SoCs using bcma.
> 
> There are multiple different silicons from the Broadcom BCM47xx and
> BCM53xx line with a MIPS 74K core, see
> https://wikidevi.com/wiki/Broadcom I haven't tested if this fix is ok
> for all of them, but I think so.
> 
> > Signed-off-by: Tokunori Ikegami <ikegami@xxxxxxxxxxxxxxxxxxxx>
> > Reviewed-by: Paul Burton <paul.burton@xxxxxxxx>
> > Cc: Chris Packham <chris.packham@xxxxxxxxxxxxxxxxxxx>
> > Cc: Hauke Mehrtens <hauke@xxxxxxxxxx>
> > Cc: Rafał Miłecki <zajec5@xxxxxxxxx>
> > Cc: linux-mips@xxxxxxxxxxxxxx
> 
> Acked-by: Hauke Mehrtens <hauke@xxxxxxxxxx>
> 
> > ---
> > Changes since v3:
> > - Add Reviewed-by: Paul Burton tag.
> > - Remove pr_info().
> >
> > Changes since v2:
> > - Move the change into platform-specific code bcm47xx_cpu_fixes()
> function from in generic code.
> >
> > Changes since v1 resent:
> > - None.
> >
> > Changes since v1 original:
> > - Change to use set_c0_config7 instead of write_c0_config7.
> >
> >  arch/mips/bcm47xx/setup.c        | 6 ++++++
> >  arch/mips/include/asm/mipsregs.h | 3 +++
> >  2 files changed, 9 insertions(+)
> >
> > diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
> > index 6054d49e608e..8c9cbf13d32a 100644
> > --- a/arch/mips/bcm47xx/setup.c
> > +++ b/arch/mips/bcm47xx/setup.c
> > @@ -212,6 +212,12 @@ static int __init bcm47xx_cpu_fixes(void)
> >  		 */
> >  		if (bcm47xx_bus.bcma.bus.chipinfo.id ==
> BCMA_CHIP_ID_BCM4706)
> >  			cpu_wait = NULL;
> > +
> > +		/*
> > +		 * BCM47XX Erratum "R10: PCIe Transactions Periodically
> Fail"
> > +		 * Enable ExternalSync for sync instruction to take effect
> > +		 */
> > +		set_c0_config7(MIPS_CONF7_ES);
> >  		break;
> >  #endif
> >  	}
> > diff --git a/arch/mips/include/asm/mipsregs.h
> b/arch/mips/include/asm/mipsregs.h
> > index 858752dac337..0f94acf60144 100644
> > --- a/arch/mips/include/asm/mipsregs.h
> > +++ b/arch/mips/include/asm/mipsregs.h
> > @@ -680,6 +680,8 @@
> >  #define MIPS_CONF7_WII		(_ULCAST_(1) << 31)
> >
> >  #define MIPS_CONF7_RPS		(_ULCAST_(1) << 2)
> > +/* ExternalSync */
> > +#define MIPS_CONF7_ES		(_ULCAST_(1) << 8)
> >
> >  #define MIPS_CONF7_IAR		(_ULCAST_(1) << 10)
> >  #define MIPS_CONF7_AR		(_ULCAST_(1) << 16)
> > @@ -2759,6 +2761,7 @@ __BUILD_SET_C0(status)
> >  __BUILD_SET_C0(cause)
> >  __BUILD_SET_C0(config)
> >  __BUILD_SET_C0(config5)
> > +__BUILD_SET_C0(config7)
> >  __BUILD_SET_C0(intcontrol)
> >  __BUILD_SET_C0(intctl)
> >  __BUILD_SET_C0(srsmap)
> >





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux