Skip to content

Commit

Permalink
spi: axi-spi-engine: restore clkdiv at end of message
Browse files Browse the repository at this point in the history
This modifies the ADI AXI SPI Engine driver to restore the clkdiv
configuration register at the end of a SPI message. Having the clkdiv in
a known state is needed to be able to add a new command in the future
that only performs a delay without any SPI transfers. Furthermore having
that state be the smallest possible divider will allow these delays to
have the highest possible precision.

Changing the initial value of clk_div from -1 to 1 is now possible
because we know the function will always be called with a known clkdiv
config register state. Making this change will also have the effect of
not emitting a clkdiv configuration register instruction in cases where
the maximum sclk rate is used. Having one less instruction to process
reduces delays on the bus which will be beneficial when we implement
offload support to enable reading data from devices at very high rates.

Signed-off-by: David Lechner <[email protected]>
  • Loading branch information
dlech committed Nov 29, 2023
1 parent d874af4 commit dfcf742
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/spi/spi-axi-spi-engine.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ static void spi_engine_compile_message(struct spi_engine *spi_engine,
bool keep_cs = false;
u8 bits_per_word = 0;

clk_div = -1;
clk_div = 1;

spi_engine_program_add_cmd(p, dry,
SPI_ENGINE_CMD_WRITE(SPI_ENGINE_CMD_REG_CONFIG,
Expand Down Expand Up @@ -281,6 +281,14 @@ static void spi_engine_compile_message(struct spi_engine *spi_engine,

if (!keep_cs)
spi_engine_gen_cs(p, dry, spi, false);

/*
* Restore clockdiv to default so that future gen_sleep commands don't
* have to be aware of the current register state.
*/
if (clk_div != 1)
spi_engine_program_add_cmd(p, dry,
SPI_ENGINE_CMD_WRITE(SPI_ENGINE_CMD_REG_CLK_DIV, 0));
}

static void spi_engine_xfer_next(struct spi_message *msg,
Expand Down

0 comments on commit dfcf742

Please sign in to comment.