On Tue, Oct 17, 2017 at 6:04 AM, Jagan Teki <jagannadh.t...@gmail.com> wrote: > On Fri, Oct 13, 2017 at 6:35 AM, Chris Packham <judge.pack...@gmail.com> > wrote: >> Erratum NO. FE-9144572: The device SPI interface supports frequencies of >> up to 50 MHz. However, due to this erratum, when the device core clock >> is 250 MHz and the SPI interfaces is configured for 50MHz SPI clock and >> CPOL=CPHA=1 there might occur data corruption on reads from the SPI >> device. >> >> Implement the workaround by setting the TMISO_SAMPLE value to 0x2 >> in the timing1 register. >> >> Signed-off-by: Chris Packham <judge.pack...@gmail.com> >> --- >> >> arch/arm/include/asm/arch-mvebu/spi.h | 6 ++++ >> drivers/spi/kirkwood_spi.c | 62 >> +++++++++++++++++++++++++++++++++-- >> 2 files changed, 65 insertions(+), 3 deletions(-) >> >> diff --git a/arch/arm/include/asm/arch-mvebu/spi.h >> b/arch/arm/include/asm/arch-mvebu/spi.h >> index 3545aed17347..1de510ea6da9 100644 >> --- a/arch/arm/include/asm/arch-mvebu/spi.h >> +++ b/arch/arm/include/asm/arch-mvebu/spi.h >> @@ -57,6 +57,12 @@ struct kwspi_registers { >> #define KWSPI_TXLSBF (1 << 13) >> #define KWSPI_RXLSBF (1 << 14) >> >> +/* Timing Parameters 1 Register */ >> +#define KW_SPI_TMISO_SAMPLE_OFFSET 6 >> +#define KW_SPI_TMISO_SAMPLE_MASK (0x3 << KW_SPI_TMISO_SAMPLE_OFFSET) >> +#define KW_SPI_TMISO_SAMPLE_1 (1 << KW_SPI_TMISO_SAMPLE_OFFSET) >> +#define KW_SPI_TMISO_SAMPLE_2 (2 << KW_SPI_TMISO_SAMPLE_OFFSET) >> + >> #define KWSPI_IRQUNMASK 1 /* unmask SPI interrupt */ >> #define KWSPI_IRQMASK 0 /* mask SPI interrupt */ >> #define KWSPI_SMEMRDIRQ 1 /* SerMem data xfer ready irq */ >> diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c >> index 0c6bd295cde9..7992556d49eb 100644 >> --- a/drivers/spi/kirkwood_spi.c >> +++ b/drivers/spi/kirkwood_spi.c >> @@ -243,6 +243,16 @@ int spi_xfer(struct spi_slave *slave, unsigned int >> bitlen, >> >> /* Here now the DM part */ >> >> +enum mvebu_spi_type { >> + ORION_SPI, > > This is never used, since there is a separate driver in orion - any > plan to merge them as single driver? otherwise it's no need. >
I actually do have access to some Kirkwood hardware. But a distinct lack of round tuits to port it to master/DM/etc. For now I'll drop the type. It can be added back if/when a user emerges. >> + ARMADA_SPI, >> +}; >> + >> +struct mvebu_spi_dev { >> + enum mvebu_spi_type typ; >> + bool is_errata_50mhz_ac; >> +}; >> + >> struct mvebu_spi_platdata { >> struct kwspi_registers *spireg; >> }; >> @@ -269,10 +279,30 @@ static int mvebu_spi_set_speed(struct udevice *bus, >> uint hz) >> return 0; >> } >> >> +static void >> +mvebu_spi_50mhz_ac_timing_erratum(struct udevice *bus, uint mode) >> +{ >> + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); >> + struct kwspi_registers *reg = plat->spireg; >> + u32 data = readl(®->timing1); >> + > > Better to have description of errata. > Will add in v2. > thanks! > -- > Jagan Teki > Free Software Engineer | www.openedev.com > U-Boot, Linux | Upstream Maintainer > Hyderabad, India. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot