Tests:MSIOF-SPI-CS-GPIO

This document describes testing MSIOF SPI using GPIO chipselects on the Renesas Koelsch board.

= Hardware Test Environment =

All testing has been done on the Renesas Koelsch development board, using three Microchip 25LC040 (or compatible) SPI EEPROMs.

If you use another AT25-compatible SPI flash, you have to update the properties in "arch/arm/boot/dts/r8a7791-koelsch-exio-a-msiof1-25lc040-x3.dtso".

Note that 25LC040 SPI EEPROMs cannot be accessed when using native MSIOF chip selects, as native chip selects are always deasserted in between transfers that are part of the same message. This is a limitation of the MSIOF hardware block, which must be worked around by using GPIO chip selects.

Wiring to Koelsch
Power wiring between CN26 on Koelsch and the breadboard:
 * Connect pin 5 ("GND") to GND,
 * Connect pin 7 ("D3.3V") to VCC.

Signal wiring between MSIOF1 on EXIO Connector A on Koelsch and the breadboard:
 * Connect pin 46 ("MSIOF1 SCK") to SCK,
 * Connect pin 54 ("MSIOF1 TX/MOSI") to MOSI,
 * Connect pin 56 ("MSIOF1 RX/MISO") to MISO,
 * Connect pin 48 ("GP0_23") to CS0#,
 * Connect pin 50 ("GP0_24") to CS1#,
 * Connect pin 52 ("GP0_25") to CS2#.

To ease wiring, you can use Samtec-Breakout-Adapters.

= Software Test Environment =

Kernel Source Tree
Please use the following Git repository:
 * Repository: git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git
 * Branch: "topic/msiof-cs-gpios-integration" (This is a merge of "topic/renesas-overlays", "topic/25lc040-dt-v2", and "topic/msiof-multi-slave", meant for testing).

Kernel Configuration
CONFIG_EEPROM_AT25=y CONFIG_OF_OVERLAY=y CONFIG_OF_CONFIGFS=y CONFIG_DYNAMIC_DEBUG=y
 * Build and install a kernel using "shmobile_defconfig", with the following additional options enabled:

scp arch/arm/boot/dts/r8a7791-koelsch-exio-a-msiof1-25lc040-x3.dtbo koelsch:/lib/firmware/
 * Make sure to copy the DT overlay to the target board:

Test Utilities

 * , from R-Car/DT-Overlays.

= Test Procedure =

overlay add 25lc040-x3
 * Load the DT overlay:

Expected output in the kernel log: spi_sh_msiof e6e10000.spi: DMA available at25 spi2.2: 512 Byte at25 eeprom, pagesize 16 at25 spi2.1: 512 Byte at25 eeprom, pagesize 16 at25 spi2.0: 512 Byte at25 eeprom, pagesize 16


 * Write labels to EEPROMs:
 * 1) for i in /sys/bus/spi/drivers/at25/spi*; do printf "FLASH${i##*.}\n\0" > $i/eeprom; done

/sys/bus/spi/drivers/at25/spi2.0/eeprom:FLASH0 /sys/bus/spi/drivers/at25/spi2.1/eeprom:FLASH1 /sys/bus/spi/drivers/at25/spi2.2/eeprom:FLASH2
 * Read back labels from EEPROMs:
 * 1) grep -a FLASH /sys/bus/spi/drivers/at25/spi2.*/eeprom


 * Without including the "topic/msiof-multi-slave" branch, either the EEPROMs will always read back zeroes, or they will simply not be detected, depending on reset state or boot loader setup.

In case the EEPROMs were not detected, and SPI EEPROM debugging was enabled: echo 'file at25.c +p' > /sys/kernel/debug/dynamic_debug/control the kernel log would have shown: at25 spi2.0: rdsr --> 255 (ff)