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