mbox series

[v9,00/21] riscv: Add Sipeed Maix support

Message ID 20200503023550.326791-1-seanga2@gmail.com
Headers show
Series riscv: Add Sipeed Maix support | expand

Message

Sean Anderson May 3, 2020, 2:35 a.m. UTC
This patch series adds support for Sipeed Maix boards and the Kendryte
K210 CPU. Currently, only the Maix Bit V2.0 is supported, however other
models are similar.

The travis build [1] is incomplete as of this writing, but I've manually
ran the jobs which failed last time [2], and they passed. As an aside, the
travis output is seriously lacking. *Any* warning will cause the build to
fail, and *no* output (such as *what warning caused the failure*) is
present in the output.

[1] https://travis-ci.org/github/Forty-Bot/u-boot/builds/682474410
[2] https://travis-ci.org/github/Forty-Bot/u-boot/builds/678437924

Known Bugs/Limitations:
- Accessing the AI ram hangs, limiting available ram to 6M
- Trying to boot an image with bootm fails with
  ERROR: Failed to allocate 0x7d60 bytes below 0x80000000.

To flash u-boot to a maix bit, run
kflash -tp /dev/<your tty here> -B bit_mic u-boot-dtb.bin

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
In:    serial@38000000
Out:   serial@38000000
Err:   serial@38000000
=>

Changes for v10:
- Fix warnings when casting fdt_addr_t
- Fix warnings about const functions

Changes for v9:
- Fix error in Andes PLIC
- Update MAINTAINERS
- Mark dts blocks in documentation as "none" highlighting

Changes for v8:
- Removed dependency on the patch "clk: Add functions to register CCF clock
  structs". Hopefully this will make reviewing easier.

Changes for v7:
- Split documentation from other board support
- Split IPI clear from other IPI cleanup
- Rebased onto a clean upstream. Hopefully this fixes any patching
  problems.

Changes for v6:
- Remove spi, pinmux, gpio, led, and wdt support --- to be added in separate
  patches
- Rebase onto master
- Clear IPIs before enabling them
- Reorganize code so checkpatch errors less

Changes for v5:
- Rebase onto master
- Add pinconf support
- Add gpio support
- Store environment in spi flash
- Group patches by prefix
- Add additional documentation
- Add SMP support
- Add WDT support

Changes for v4:
- Linted several patches
- Updated the copyright year for several files
- Added tests for syscon-reset, simple-pm-bus, and the pll calc_rate function
- Added/updated documentation
- Fixed SPI for the nor flash
- Fixed PLLs not enabling/setting rate properly
- RISCV_PRIV_1_9_1 now (un)defines all diferring CSRs, and also disables VM
- More devicetree changes

Changes for v3:
- Remove patch to set RV64I as default
- Remove patch for a separate sysctl driver
- Split off cpu frequency patch into its own series
- Reorder support/devicetree patches to come last
- Add patch for reset driver
- Add simple-pm-bus for busses with their own clocks
- Add additional documentation
- Reword mcounteren patch to refer to the RISC-V priv spec 1.9.1
- Many devicetree changes
- Switch to "make savedefconfig" to generate the config

Changes for v2:
- Many bugfixes for the device tree
- Modify the config to build without errors
- Add support for keeping internal PLL frequencies in-range
- Fix several rebase-induced artifacts

Sean Anderson (21):
  clk: Always use the supplied struct clk
  clk: Check that ops of composite clock components exist before calling
  clk: Unconditionally recursively en-/dis-able clocks
  clk: Fix clk_get_by_* handling of index
  clk: Add K210 pll support
  clk: Add a bypass clock for K210
  clk: Add K210 clock support
  dm: Add support for simple-pm-bus
  dm: Fix error handling for dev_read_addr_ptr
  reset: Add generic reset driver
  lib: Always set errno in hcreate_r
  riscv: Add headers for asm/global_data.h
  riscv: Clear pending interrupts before enabling IPIs
  riscv: Clean up IPI initialization code
  riscv: Add option to support RISC-V privileged spec 1.9
  riscv: Allow use of reset drivers
  riscv: Try to get cpu frequency from a "clocks" node if it exists
  riscv: Enable cpu clock if it is present
  riscv: Add device tree for K210 and Sipeed Maix BitM
  doc: riscv: Add documentation for Sipeed Maix Bit
  riscv: Add Sipeed Maix support

 MAINTAINERS                                   |   7 +
 arch/riscv/Kconfig                            |  14 +
 arch/riscv/cpu/cpu.c                          |  15 +
 arch/riscv/cpu/start.S                        |   2 +
 arch/riscv/dts/Makefile                       |   1 +
 arch/riscv/dts/k210-maix-bit.dts              |  47 ++
 arch/riscv/dts/k210.dtsi                      | 594 ++++++++++++++++
 arch/riscv/include/asm/csr.h                  |  40 ++
 arch/riscv/include/asm/global_data.h          |   2 +
 arch/riscv/include/asm/smp.h                  |  43 ++
 arch/riscv/lib/andes_plic.c                   |  34 +-
 arch/riscv/lib/reset.c                        |   2 +
 arch/riscv/lib/sbi_ipi.c                      |   5 +
 arch/riscv/lib/sifive_clint.c                 |  33 +-
 arch/riscv/lib/smp.c                          |  56 +-
 arch/sandbox/dts/test.dts                     |  21 +
 arch/sandbox/include/asm/clk.h                |   1 +
 board/sipeed/maix/Kconfig                     |  47 ++
 board/sipeed/maix/MAINTAINERS                 |  11 +
 board/sipeed/maix/Makefile                    |   5 +
 board/sipeed/maix/maix.c                      |  41 ++
 configs/sandbox_defconfig                     |   3 +
 configs/sipeed_maix_bitm_defconfig            |   8 +
 doc/board/index.rst                           |   1 +
 doc/board/sipeed/index.rst                    |   9 +
 doc/board/sipeed/maix.rst                     | 298 ++++++++
 .../bus/simple-pm-bus.txt                     |  44 ++
 .../mfd/kendryte,k210-sysctl.txt              |  33 +
 .../reset/syscon-reset.txt                    |  36 +
 doc/imx/clk/ccf.txt                           |  63 +-
 drivers/clk/Kconfig                           |   1 +
 drivers/clk/Makefile                          |   1 +
 drivers/clk/clk-composite.c                   |  64 +-
 drivers/clk/clk-divider.c                     |   6 +-
 drivers/clk/clk-fixed-factor.c                |   3 +-
 drivers/clk/clk-gate.c                        |   6 +-
 drivers/clk/clk-mux.c                         |  12 +-
 drivers/clk/clk-uclass.c                      |  68 +-
 drivers/clk/imx/clk-gate2.c                   |   4 +-
 drivers/clk/imx/clk-imx8mp.c                  |   2 +-
 drivers/clk/kendryte/Kconfig                  |  12 +
 drivers/clk/kendryte/Makefile                 |   1 +
 drivers/clk/kendryte/bypass.c                 | 270 +++++++
 drivers/clk/kendryte/clk.c                    | 663 ++++++++++++++++++
 drivers/clk/kendryte/pll.c                    | 601 ++++++++++++++++
 drivers/core/Kconfig                          |   7 +
 drivers/core/Makefile                         |   1 +
 drivers/core/read.c                           |   2 +-
 drivers/core/simple-pm-bus.c                  |  56 ++
 drivers/cpu/riscv_cpu.c                       |  39 +-
 drivers/pinctrl/broadcom/pinctrl-bcm283x.c    |   2 +-
 drivers/pinctrl/mediatek/pinctrl-mtk-common.c |   2 +-
 drivers/reset/Kconfig                         |   5 +
 drivers/reset/Makefile                        |   1 +
 drivers/reset/reset-syscon.c                  |  80 +++
 include/configs/sipeed-maix.h                 |  24 +
 include/dm/read.h                             |   4 +-
 include/dt-bindings/clock/k210-sysctl.h       |  59 ++
 include/dt-bindings/mfd/k210-sysctl.h         |  38 +
 include/dt-bindings/reset/k210-sysctl.h       |  38 +
 include/kendryte/bypass.h                     |  31 +
 include/kendryte/clk.h                        |  35 +
 include/kendryte/pll.h                        |  57 ++
 include/test/export.h                         |  16 +
 lib/hashtable.c                               |   8 +-
 test/dm/Makefile                              |   3 +
 test/dm/k210_pll.c                            |  96 +++
 test/dm/simple-pm-bus.c                       |  45 ++
 test/dm/syscon-reset.c                        |  58 ++
 69 files changed, 3732 insertions(+), 205 deletions(-)
 create mode 100644 arch/riscv/dts/k210-maix-bit.dts
 create mode 100644 arch/riscv/dts/k210.dtsi
 create mode 100644 board/sipeed/maix/Kconfig
 create mode 100644 board/sipeed/maix/MAINTAINERS
 create mode 100644 board/sipeed/maix/Makefile
 create mode 100644 board/sipeed/maix/maix.c
 create mode 100644 configs/sipeed_maix_bitm_defconfig
 create mode 100644 doc/board/sipeed/index.rst
 create mode 100644 doc/board/sipeed/maix.rst
 create mode 100644 doc/device-tree-bindings/bus/simple-pm-bus.txt
 create mode 100644 doc/device-tree-bindings/mfd/kendryte,k210-sysctl.txt
 create mode 100644 doc/device-tree-bindings/reset/syscon-reset.txt
 create mode 100644 drivers/clk/kendryte/Kconfig
 create mode 100644 drivers/clk/kendryte/Makefile
 create mode 100644 drivers/clk/kendryte/bypass.c
 create mode 100644 drivers/clk/kendryte/clk.c
 create mode 100644 drivers/clk/kendryte/pll.c
 create mode 100644 drivers/core/simple-pm-bus.c
 create mode 100644 drivers/reset/reset-syscon.c
 create mode 100644 include/configs/sipeed-maix.h
 create mode 100644 include/dt-bindings/clock/k210-sysctl.h
 create mode 100644 include/dt-bindings/mfd/k210-sysctl.h
 create mode 100644 include/dt-bindings/reset/k210-sysctl.h
 create mode 100644 include/kendryte/bypass.h
 create mode 100644 include/kendryte/clk.h
 create mode 100644 include/kendryte/pll.h
 create mode 100644 include/test/export.h
 create mode 100644 test/dm/k210_pll.c
 create mode 100644 test/dm/simple-pm-bus.c
 create mode 100644 test/dm/syscon-reset.c

Comments

Sean Anderson May 3, 2020, 2:46 a.m. UTC | #1
...and I forgot to bump the version.

Sorry, will resend with the proper v10 revision.

On 5/2/20 10:35 PM, Sean Anderson wrote:
> This patch series adds support for Sipeed Maix boards and the Kendryte
> K210 CPU. Currently, only the Maix Bit V2.0 is supported, however other
> models are similar.
> 
> The travis build [1] is incomplete as of this writing, but I've manually
> ran the jobs which failed last time [2], and they passed. As an aside, the
> travis output is seriously lacking. *Any* warning will cause the build to
> fail, and *no* output (such as *what warning caused the failure*) is
> present in the output.
> 
> [1] https://travis-ci.org/github/Forty-Bot/u-boot/builds/682474410
> [2] https://travis-ci.org/github/Forty-Bot/u-boot/builds/678437924
> 
> Known Bugs/Limitations:
> - Accessing the AI ram hangs, limiting available ram to 6M
> - Trying to boot an image with bootm fails with
>   ERROR: Failed to allocate 0x7d60 bytes below 0x80000000.
> 
> To flash u-boot to a maix bit, run
> kflash -tp /dev/<your tty here> -B bit_mic u-boot-dtb.bin
> 
> 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
> In:    serial@38000000
> Out:   serial@38000000
> Err:   serial@38000000
> =>
> 
> Changes for v10:
> - Fix warnings when casting fdt_addr_t
> - Fix warnings about const functions
> 
> Changes for v9:
> - Fix error in Andes PLIC
> - Update MAINTAINERS
> - Mark dts blocks in documentation as "none" highlighting
> 
> Changes for v8:
> - Removed dependency on the patch "clk: Add functions to register CCF clock
>   structs". Hopefully this will make reviewing easier.
> 
> Changes for v7:
> - Split documentation from other board support
> - Split IPI clear from other IPI cleanup
> - Rebased onto a clean upstream. Hopefully this fixes any patching
>   problems.
> 
> Changes for v6:
> - Remove spi, pinmux, gpio, led, and wdt support --- to be added in separate
>   patches
> - Rebase onto master
> - Clear IPIs before enabling them
> - Reorganize code so checkpatch errors less
> 
> Changes for v5:
> - Rebase onto master
> - Add pinconf support
> - Add gpio support
> - Store environment in spi flash
> - Group patches by prefix
> - Add additional documentation
> - Add SMP support
> - Add WDT support
> 
> Changes for v4:
> - Linted several patches
> - Updated the copyright year for several files
> - Added tests for syscon-reset, simple-pm-bus, and the pll calc_rate function
> - Added/updated documentation
> - Fixed SPI for the nor flash
> - Fixed PLLs not enabling/setting rate properly
> - RISCV_PRIV_1_9_1 now (un)defines all diferring CSRs, and also disables VM
> - More devicetree changes
> 
> Changes for v3:
> - Remove patch to set RV64I as default
> - Remove patch for a separate sysctl driver
> - Split off cpu frequency patch into its own series
> - Reorder support/devicetree patches to come last
> - Add patch for reset driver
> - Add simple-pm-bus for busses with their own clocks
> - Add additional documentation
> - Reword mcounteren patch to refer to the RISC-V priv spec 1.9.1
> - Many devicetree changes
> - Switch to "make savedefconfig" to generate the config
> 
> Changes for v2:
> - Many bugfixes for the device tree
> - Modify the config to build without errors
> - Add support for keeping internal PLL frequencies in-range
> - Fix several rebase-induced artifacts
> 
> Sean Anderson (21):
>   clk: Always use the supplied struct clk
>   clk: Check that ops of composite clock components exist before calling
>   clk: Unconditionally recursively en-/dis-able clocks
>   clk: Fix clk_get_by_* handling of index
>   clk: Add K210 pll support
>   clk: Add a bypass clock for K210
>   clk: Add K210 clock support
>   dm: Add support for simple-pm-bus
>   dm: Fix error handling for dev_read_addr_ptr
>   reset: Add generic reset driver
>   lib: Always set errno in hcreate_r
>   riscv: Add headers for asm/global_data.h
>   riscv: Clear pending interrupts before enabling IPIs
>   riscv: Clean up IPI initialization code
>   riscv: Add option to support RISC-V privileged spec 1.9
>   riscv: Allow use of reset drivers
>   riscv: Try to get cpu frequency from a "clocks" node if it exists
>   riscv: Enable cpu clock if it is present
>   riscv: Add device tree for K210 and Sipeed Maix BitM
>   doc: riscv: Add documentation for Sipeed Maix Bit
>   riscv: Add Sipeed Maix support
> 
>  MAINTAINERS                                   |   7 +
>  arch/riscv/Kconfig                            |  14 +
>  arch/riscv/cpu/cpu.c                          |  15 +
>  arch/riscv/cpu/start.S                        |   2 +
>  arch/riscv/dts/Makefile                       |   1 +
>  arch/riscv/dts/k210-maix-bit.dts              |  47 ++
>  arch/riscv/dts/k210.dtsi                      | 594 ++++++++++++++++
>  arch/riscv/include/asm/csr.h                  |  40 ++
>  arch/riscv/include/asm/global_data.h          |   2 +
>  arch/riscv/include/asm/smp.h                  |  43 ++
>  arch/riscv/lib/andes_plic.c                   |  34 +-
>  arch/riscv/lib/reset.c                        |   2 +
>  arch/riscv/lib/sbi_ipi.c                      |   5 +
>  arch/riscv/lib/sifive_clint.c                 |  33 +-
>  arch/riscv/lib/smp.c                          |  56 +-
>  arch/sandbox/dts/test.dts                     |  21 +
>  arch/sandbox/include/asm/clk.h                |   1 +
>  board/sipeed/maix/Kconfig                     |  47 ++
>  board/sipeed/maix/MAINTAINERS                 |  11 +
>  board/sipeed/maix/Makefile                    |   5 +
>  board/sipeed/maix/maix.c                      |  41 ++
>  configs/sandbox_defconfig                     |   3 +
>  configs/sipeed_maix_bitm_defconfig            |   8 +
>  doc/board/index.rst                           |   1 +
>  doc/board/sipeed/index.rst                    |   9 +
>  doc/board/sipeed/maix.rst                     | 298 ++++++++
>  .../bus/simple-pm-bus.txt                     |  44 ++
>  .../mfd/kendryte,k210-sysctl.txt              |  33 +
>  .../reset/syscon-reset.txt                    |  36 +
>  doc/imx/clk/ccf.txt                           |  63 +-
>  drivers/clk/Kconfig                           |   1 +
>  drivers/clk/Makefile                          |   1 +
>  drivers/clk/clk-composite.c                   |  64 +-
>  drivers/clk/clk-divider.c                     |   6 +-
>  drivers/clk/clk-fixed-factor.c                |   3 +-
>  drivers/clk/clk-gate.c                        |   6 +-
>  drivers/clk/clk-mux.c                         |  12 +-
>  drivers/clk/clk-uclass.c                      |  68 +-
>  drivers/clk/imx/clk-gate2.c                   |   4 +-
>  drivers/clk/imx/clk-imx8mp.c                  |   2 +-
>  drivers/clk/kendryte/Kconfig                  |  12 +
>  drivers/clk/kendryte/Makefile                 |   1 +
>  drivers/clk/kendryte/bypass.c                 | 270 +++++++
>  drivers/clk/kendryte/clk.c                    | 663 ++++++++++++++++++
>  drivers/clk/kendryte/pll.c                    | 601 ++++++++++++++++
>  drivers/core/Kconfig                          |   7 +
>  drivers/core/Makefile                         |   1 +
>  drivers/core/read.c                           |   2 +-
>  drivers/core/simple-pm-bus.c                  |  56 ++
>  drivers/cpu/riscv_cpu.c                       |  39 +-
>  drivers/pinctrl/broadcom/pinctrl-bcm283x.c    |   2 +-
>  drivers/pinctrl/mediatek/pinctrl-mtk-common.c |   2 +-
>  drivers/reset/Kconfig                         |   5 +
>  drivers/reset/Makefile                        |   1 +
>  drivers/reset/reset-syscon.c                  |  80 +++
>  include/configs/sipeed-maix.h                 |  24 +
>  include/dm/read.h                             |   4 +-
>  include/dt-bindings/clock/k210-sysctl.h       |  59 ++
>  include/dt-bindings/mfd/k210-sysctl.h         |  38 +
>  include/dt-bindings/reset/k210-sysctl.h       |  38 +
>  include/kendryte/bypass.h                     |  31 +
>  include/kendryte/clk.h                        |  35 +
>  include/kendryte/pll.h                        |  57 ++
>  include/test/export.h                         |  16 +
>  lib/hashtable.c                               |   8 +-
>  test/dm/Makefile                              |   3 +
>  test/dm/k210_pll.c                            |  96 +++
>  test/dm/simple-pm-bus.c                       |  45 ++
>  test/dm/syscon-reset.c                        |  58 ++
>  69 files changed, 3732 insertions(+), 205 deletions(-)
>  create mode 100644 arch/riscv/dts/k210-maix-bit.dts
>  create mode 100644 arch/riscv/dts/k210.dtsi
>  create mode 100644 board/sipeed/maix/Kconfig
>  create mode 100644 board/sipeed/maix/MAINTAINERS
>  create mode 100644 board/sipeed/maix/Makefile
>  create mode 100644 board/sipeed/maix/maix.c
>  create mode 100644 configs/sipeed_maix_bitm_defconfig
>  create mode 100644 doc/board/sipeed/index.rst
>  create mode 100644 doc/board/sipeed/maix.rst
>  create mode 100644 doc/device-tree-bindings/bus/simple-pm-bus.txt
>  create mode 100644 doc/device-tree-bindings/mfd/kendryte,k210-sysctl.txt
>  create mode 100644 doc/device-tree-bindings/reset/syscon-reset.txt
>  create mode 100644 drivers/clk/kendryte/Kconfig
>  create mode 100644 drivers/clk/kendryte/Makefile
>  create mode 100644 drivers/clk/kendryte/bypass.c
>  create mode 100644 drivers/clk/kendryte/clk.c
>  create mode 100644 drivers/clk/kendryte/pll.c
>  create mode 100644 drivers/core/simple-pm-bus.c
>  create mode 100644 drivers/reset/reset-syscon.c
>  create mode 100644 include/configs/sipeed-maix.h
>  create mode 100644 include/dt-bindings/clock/k210-sysctl.h
>  create mode 100644 include/dt-bindings/mfd/k210-sysctl.h
>  create mode 100644 include/dt-bindings/reset/k210-sysctl.h
>  create mode 100644 include/kendryte/bypass.h
>  create mode 100644 include/kendryte/clk.h
>  create mode 100644 include/kendryte/pll.h
>  create mode 100644 include/test/export.h
>  create mode 100644 test/dm/k210_pll.c
>  create mode 100644 test/dm/simple-pm-bus.c
>  create mode 100644 test/dm/syscon-reset.c
>