
On 8/7/20 4:43 PM, Sean Anderson wrote:
This patch enables configs necessary for using SPI. It also adds some documentation.
Signed-off-by: Sean Anderson seanga2@gmail.com
Changes in v2:
- Add Gigadevice SPI chips to dependencies
board/sipeed/maix/Kconfig | 11 ++++ configs/sipeed_maix_bitm_defconfig | 8 +++ doc/board/sipeed/maix.rst | 94 +++++++++++++++++++----------- 3 files changed, 80 insertions(+), 33 deletions(-)
diff --git a/board/sipeed/maix/Kconfig b/board/sipeed/maix/Kconfig index 4c42dd2087..48a4e9dc1a 100644 --- a/board/sipeed/maix/Kconfig +++ b/board/sipeed/maix/Kconfig @@ -53,4 +53,15 @@ config BOARD_SPECIFIC_OPTIONS imply CMD_GPIO imply LED imply LED_GPIO
- imply SPI
- imply DESIGNWARE_SPI
- imply SPI_FLASH_GIGADEVICE
- imply SPI_FLASH_WINBOND
- imply DM_MTD
- imply SPI_FLASH_MTD
- imply CMD_MTD
- imply ENV_IS_IN_SPI_FLASH
- imply MMC
- imply MMC_BROKEN_CD
- imply MMC_SPI
endif diff --git a/configs/sipeed_maix_bitm_defconfig b/configs/sipeed_maix_bitm_defconfig index f48f7f06e9..7f644e7a37 100644 --- a/configs/sipeed_maix_bitm_defconfig +++ b/configs/sipeed_maix_bitm_defconfig @@ -1,6 +1,14 @@ CONFIG_RISCV=y +CONFIG_ENV_SIZE=0x2000 +CONFIG_ENV_SECT_SIZE=0x1000 +CONFIG_ENV_OFFSET=0x7C000 +CONFIG_ENV_OFFSET_REDUND=0x7E000 CONFIG_TARGET_SIPEED_MAIX=y CONFIG_ARCH_RV64I=y +CONFIG_USE_BOOTCOMMAND=y +CONFIG_BOOTCOMMAND="sf probe;mtd read kernel 80000000;go 80000000"
If no kernel is present, this will let your system hang.
"go" does not check that whatever you loaded from mtd is a kernel. That is why we have commands like bootm.
+CONFIG_MTDIDS_DEFAULT="nor0=spi3.0" +CONFIG_MTDPARTS_DEFAULT="spi3.0:496k(u-boot),16k(env),5632k(kernel),10240k(data)"
The size of u-boot.bin may exceed 496 KiB depending on the options selected. Mine is currently 543589 bytes. When starting with OpenSBI another 70+ KiB will be needed.
If we overwrite 5632 KiB from the kernel partition, this may overwrite the relocated U-Boot.
When an SD-card is worn out I can replace it. When the SPI flash is worn out I have to replace the device.
We can put the kernel and the environment onto the SD card. I would suggest to use SPI only for OpenSBI and U-Boot. Please, use CONFIG_DISTRO_BOOT.
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y # CONFIG_NET is not set # CONFIG_INPUT is not set diff --git a/doc/board/sipeed/maix.rst b/doc/board/sipeed/maix.rst index 1865e2adfb..fa78bcd51c 100644 --- a/doc/board/sipeed/maix.rst +++ b/doc/board/sipeed/maix.rst @@ -46,42 +46,14 @@ Boot output should look like the following: U-Boot 2020.04-rc2-00087-g2221cc09c1-dirty (Feb 28 2020 - 13:53:09 -0500)
DRAM: 8 MiB
- MMC: spi@53000000:slot@0: 0
Actual output is
MMC: regs=0000000053000000 max-frequency=25000000
In: serial@38000000 Out: serial@38000000 Err: serial@38000000
As we do not check if a kernel is available:
MTD device kernel not found, ret -19 ## Starting application at 0x80000000 ...
And then hanging.
Best regards
Heinrich
- =>
-Loading Images -^^^^^^^^^^^^^^
-To load a kernel, transfer it over serial.
-.. code-block:: none
- => loady 80000000 1500000
- ## Switch baudrate to 1500000 bps and press ENTER ...
- *** baud: 1500000
- *** baud: 1500000 ***
- ## Ready for binary (ymodem) download to 0x80000000 at 1500000 bps...
- C
- *** file: loader.bin
- $ sz -vv loader.bin
- Sending: loader.bin
- Bytes Sent:2478208 BPS:72937
- Sending:
- Ymodem sectors/kbytes sent: 0/ 0k
- Transfer complete
- *** exit status: 0 ***
- ## Total Size = 0x0025d052 = 2478162 Bytes
- ## Switch baudrate to 115200 bps and press ESC ...
- *** baud: 115200
- *** baud: 115200 ***
- =>
- Hit any key to stop autoboot: 0
- SF: Detected w25q128fw with page size 256 Bytes, erase size 4 KiB, total 16 MiB
- Reading 5242880 byte(s) at offset 0x00000000
- ## Starting application at 0x80000000 ...
Running Programs ^^^^^^^^^^^^^^^^ @@ -163,6 +135,62 @@ To run legacy images, use the ``bootm`` command: argv[0] = "<NULL>" Hit any key to exit ...
+Flashing Images +---------------
+To flash a kernel, transfer it over serial, then write it to the kernel +partition.
+.. code-block:: none
- => loady 80000000 1500000
- ## Switch baudrate to 1500000 bps and press ENTER ...
- *** baud: 1500000
- *** baud: 1500000 ***
- ## Ready for binary (ymodem) download to 0x80000000 at 1500000 bps...
- C
- *** file: loader.bin
- $ sz -vv loader.bin
- Sending: loader.bin
- Bytes Sent:2478208 BPS:72937
- Sending:
- Ymodem sectors/kbytes sent: 0/ 0k
- Transfer complete
- *** exit status: 0 ***
- ## Total Size = 0x0025d052 = 2478162 Bytes
- ## Switch baudrate to 115200 bps and press ESC ...
- *** baud: 115200
- *** baud: 115200 ***
- => sf probe
- SF: Detected w25q128fw with page size 256 Bytes, erase size 4 KiB, total 16 MiB
- => mtd write kernel 80000000 0 25d052
- Writing 2478162 byte(s) at offset 0x00000000
+Partition Scheme +^^^^^^^^^^^^^^^^
+There is no partition scheme specified by the manufacturer. The only requirement +imposed by the firmware is that offset 0 will be loaded and ran. The default +partition scheme is
+========= ======== ====== +Partition Offset Size +========= ======== ====== +u-boot 0x000000 496k +env 0x07C000 16k +kernel 0x080000 5M +data 0x580000 10.5M +========= ======== ======
+**NB:** kflash adds a 5-byte header to payloads (and a 32-byte trailer) to all +payloads it flashes. If you use kflash to flash your payload, you will need to +account for this header when specifying what offset in spi flash to load from.
Pin Assignment