On 2/4/21 11:39 PM, Sean Anderson wrote:
This adds support for memory-mapped ("DIRMAP") reads (called XIP by the
datasheet). In theory, these have better performance than regular reads. In
practice, the CPU is already fast enough to max out the performance of this
peripheral.

The real end-goal is to be able to boot a XIP kernel. This SoC has just barely
enough SRAM to boot Linux, and using a XIP kernel would decrease the memory
pressure to something tolerable. It would also probably absolutely *tank* the
performance, since not only is SPI flash ~8x slower than regular memory, there
is no cache to mitigate that latency. So it remains to be seen whether this is
worth it at all.

This series is RFC because it currently reads all 1s on one board I have. On the
other board I have, it reads and writes fine. I will try and investigate this,
but I expect any changes to occur in "spi: dw: Add support for DIRMAP".

Forgot to mention, but this series depends on [1]. A git branch with
this complete series is available at [2].

[1] https://patchwork.ozlabs.org/project/uboot/list/?series=228123
[2] https://github.com/Forty-Bot/u-boot/tree/maix_xip


Sean Anderson (13):
   linux err: Synchronize with Linux 5.10
   spi-mem: Add dirmap API from Linux
   mtd: spi-nor: use spi-mem dirmap API
   core: ofnode: Fix inconsistent returns of *_read_u32_array
   mux: Inline mux functions when CONFIG_MUX is disabled
   mux: Define a stub for mux_get_by_index if CONFIG_MUX is disabled
   mux: mmio: Only complain about idle-states if it is malformed
   spi: dw: Define XIP registers
   spi: dw: Add XIP and XIP_CONCURRENT caps
   spi: dw: Use a mux to access registers
   spi: dw: Add support for DIRMAP
   riscv: k210: Increase SPI3 bus clock to CPU speed
   riscv: k210: Add bindings for SPI XIP

  arch/riscv/dts/k210.dtsi       |  25 ++-
  drivers/core/ofnode.c          |  15 +-
  drivers/mtd/spi/sf_probe.c     |  79 ++++++++
  drivers/mtd/spi/spi-nor-core.c |  45 +++--
  drivers/mux/mmio.c             |   5 +-
  drivers/spi/Kconfig            |  10 +
  drivers/spi/designware_spi.c   | 337 +++++++++++++++++++++++++++++++--
  drivers/spi/spi-mem.c          | 270 ++++++++++++++++++++++++++
  include/linux/err.h            |  21 +-
  include/linux/mtd/spi-nor.h    |   6 +
  include/mux.h                  |  25 ++-
  include/spi-mem.h              |  99 ++++++++++
  12 files changed, 889 insertions(+), 48 deletions(-)


Reply via email to