Re: Applied "spi: pxa2xx: Deal with the leftover garbage in TXFIFO" to the spi tree

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

 



On Tue, Mar 19, 2019 at 3:23 PM Lubomir Rintel <lkundrak@xxxxx> wrote:
>
> On Tue, 2019-03-19 at 11:34 +0200, Andy Shevchenko wrote:
> > On Tue, Nov 13, 2018 at 8:37 PM Mark Brown <broonie@xxxxxxxxxx> wrote:
> >
> > > There doesn't seem to be a way to empty TXFIFO on MMP2. The datasheet is
> > > super-secret and the method described in Armada 16x manual won't work:
> > >
> > >   "The TXFIFO and RXFIFO are cleared to 0b0 when the SSPx port is reset or
> > >   disabled (by writing a 0b0 to the <Synchronous Serial Port Enable> field
> > >   in the SSP Control Register 0)."
> > >
> > >   # devmem 0xd4037008           # read SSSR
> > >   0x0000F204
> > >   # devmem 0xd4037000 32 0x07   # SSE off in SSCR0
> > >   # devmem 0xd4037000 32 0x87   # SSE on
> > >   # devmem 0xd4037008
> > >   0x0000F204
> > >          ^ TXFIFO level is still 2. Sigh.
> > >
> > > The OLPC 1.75 boot firmware leaves two bytes in the TXFIFO. Those are
> > > basically throwaway bytes used in response to the messages from the EC.
> > > The OLPC kernel copes with this by power-cycling the hardware. Perhaps
> > > the firmware should do this instead.
> > >
> > > Other than that, there's not much we can do other than complain loudly
> > > until the garbage gets drained and discard the actual data... For the
> > > OLPC EC this will work just fine and pushing more data to TXFIFO would
> > > break further transactions.
> > > @@ -1078,6 +1078,20 @@ static int pxa2xx_spi_transfer_one(struct spi_controller *master,
> >
> > Hmm...  Shouldn't be enough to do this in ->setup() or even in
> > ->probe() / ->resume()?
>
> I can't see how, though. As far as I can tell there's no way to just
> dump bytes from the TXFIFO. In slave mode they just stay there until
> the master initiates a transfer. The only solution I can think of is to
> avoid pushing more data there until we're in sync.

On ->probe() always start as a master in case of this hardware, drain
FIFO, switch to slave.
Would that work?

-- 
With Best Regards,
Andy Shevchenko



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux