From 8cfd9c322848ee17d6aa8aff23b7571e6a197b7f Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Wed, 13 Dec 2023 08:21:37 +0800 Subject: [PATCH] Copy board from bl808b to bl808c --- .../risc-v/bl808/boards/ox64/index.rst | 149 ++++++++++++++++ .../platforms/risc-v/bl808/index.rst | 45 +++++ .../risc-v/jh7110/boards/star64/index.rst | 2 +- boards/Kconfig | 11 ++ boards/risc-v/bl808/ox64/Kconfig | 0 .../risc-v/bl808/ox64/configs/nsh/defconfig | 84 +++++++++ boards/risc-v/bl808/ox64/include/board.h | 78 ++++++++ .../bl808/ox64/include/board_memorymap.h | 88 +++++++++ boards/risc-v/bl808/ox64/scripts/Make.defs | 43 +++++ boards/risc-v/bl808/ox64/scripts/ld.script | 150 ++++++++++++++++ boards/risc-v/bl808/ox64/src/.gitignore | 2 + boards/risc-v/bl808/ox64/src/Makefile | 27 +++ boards/risc-v/bl808/ox64/src/bl808_appinit.c | 167 ++++++++++++++++++ .../bl808/ox64/src/etc/init.d/rc.sysinit | 19 ++ boards/risc-v/bl808/ox64/src/etc/init.d/rcS | 19 ++ 15 files changed, 883 insertions(+), 1 deletion(-) create mode 100644 Documentation/platforms/risc-v/bl808/boards/ox64/index.rst create mode 100644 Documentation/platforms/risc-v/bl808/index.rst create mode 100644 boards/risc-v/bl808/ox64/Kconfig create mode 100644 boards/risc-v/bl808/ox64/configs/nsh/defconfig create mode 100644 boards/risc-v/bl808/ox64/include/board.h create mode 100644 boards/risc-v/bl808/ox64/include/board_memorymap.h create mode 100644 boards/risc-v/bl808/ox64/scripts/Make.defs create mode 100644 boards/risc-v/bl808/ox64/scripts/ld.script create mode 100644 boards/risc-v/bl808/ox64/src/.gitignore create mode 100644 boards/risc-v/bl808/ox64/src/Makefile create mode 100644 boards/risc-v/bl808/ox64/src/bl808_appinit.c create mode 100644 boards/risc-v/bl808/ox64/src/etc/init.d/rc.sysinit create mode 100644 boards/risc-v/bl808/ox64/src/etc/init.d/rcS diff --git a/Documentation/platforms/risc-v/bl808/boards/ox64/index.rst b/Documentation/platforms/risc-v/bl808/boards/ox64/index.rst new file mode 100644 index 0000000000000..d293af3e92023 --- /dev/null +++ b/Documentation/platforms/risc-v/bl808/boards/ox64/index.rst @@ -0,0 +1,149 @@ +=========== +PINE64 Ox64 +=========== + +`Ox64 `_ is a RISC-V Single-Board Computer +based on the Bouffalo Lab BL808 RISC-V SoC with C906 64-bit CPU Core and +E907 / E902 32-bit CPU Cores supported by 64 MB of embedded PSRAM memory, +with built-in WiFi, Bluetooth and Zigbee radio interfaces. + +Ox64 comes in a breadboard-friendly form factor. It has a microSD Card slot, +USB 2.0 Type-C port and other peripheral interfaces. + +Features +======== + +- **System on Chip:** Bouffalo Lab BL808 + - **CPU:** + - 64-bit T-Head C906 "D0" (RV64IMAFCV) + - 32-bit T-Head E907 "M0" (RV32IMAFCP) + - 32-bit T-Head E902 "LP" (RV32E[M]C) + - **RAM:** Embedded 64 MB PSRAM +- **Wireless:** 2.4 GHz 1T1R WiFi 802.11 b/g/n, Bluetooth 5.2, Zigbee +- **Ethernet:** 10 / 100 Mbps (optional) +- **Storage:** On-board 128 Mbit (16 MB) XSPI NOR Flash Memory, microSD (SDHC and SDXC) +- **USB:** USB 2.0 OTG +- **Audio:** Microphone and Speaker (optional) +- **Video Input:** Dual-lane MIPI CSI port for Camera Module (USB-C) +- **Expansion Ports:** 26 GPIO pins (including SPI, I2C and UART) + +Serial Console +============== + +A **USB Serial Adapter** that supports 2 Mbps (like `CH340G Serial Adapter `_) +is required to run NuttX on Ox64. + +Connect the USB Serial Adapter to Ox64 Serial Console at: + +========== ======== +USB Serial Ox64 Pin +========== ======== +TX Pin 31 (GPIO 17 / UART3 RX) +RX Pin 32 (GPIO 16 / UART3 TX) +GND Pin 33 (GND) +========== ======== + +On the USB Serial Adapter, set the **Voltage Level** to 3V3. + +Connect Ox64 to our computer with the USB Serial Adapter. +On our computer, start a Serial Terminal and connect to the USB Serial Port +at **2 Mbps**. + +NuttX will appear in the Serial Console when it boots on Ox64. + +RISC-V Toolchain +================ + +Before building NuttX for Ox64, download the **RISC-V Toolchain riscv64-unknown-elf** +from `SiFive RISC-V Tools `_. + +Add the downloaded toolchain ``riscv64-unknown-elf-toolchain-.../bin`` +to the ``PATH`` Environment Variable. + +Check the RISC-V Toolchain: + +.. code:: console + + $ riscv64-unknown-elf-gcc -v + +Building +======== + +To build NuttX for Ox64, :doc:`install the prerequisites ` and +:doc:`clone the git repositories ` for ``nuttx`` and ``apps``. + +Configure the NuttX project and build the project: + +.. code:: console + + $ cd nuttx + $ tools/configure.sh ox64:nsh + $ make + $ riscv64-unknown-elf-objcopy -O binary nuttx nuttx.bin + +This produces the NuttX Kernel ``nuttx.bin``. Next, build the NuttX Apps Filesystem: + +.. code:: console + + $ make export + $ pushd ../apps + $ tools/mkimport.sh -z -x ../nuttx/nuttx-export-*.tar.gz + $ make import + $ popd + $ genromfs -f initrd -d ../apps/bin -V "NuttXBootVol" + +This generates the Initial RAM Disk ``initrd``. + +Package the NuttX Kernel and Initial RAM Disk into a NuttX Image: + +.. code:: console + + $ head -c 65536 /dev/zero >/tmp/nuttx.pad + $ cat nuttx.bin /tmp/nuttx.pad initrd >Image + +The NuttX Image ``Image`` will be copied to a microSD Card in the next step. + +Booting +======= + +To boot NuttX on Ox64, flash +`OpenSBI and U-Boot Bootloader `_ to Ox64. + +NuttX boots on Star64 via a microSD Card. Prepare a +`Linux microSD Card `_ for Ox64. + +Copy the file ``Image`` from the previous section +and overwrite the file on the microSD Card. + +Check that Ox64 is connected to our computer via a USB Serial Adapter at 2 Mbps. + +Insert the microSD Card into Ox64 and power up Ox64 via the Micro USB Port. +NuttX boots on Ox64 and NuttShell (nsh) appears in the Serial Console. + +To see the available commands in NuttShell: + +.. code:: console + + $ help + +Configurations +============== + +nsh +--- + +Basic configuration that runs NuttShell (nsh). +This configuration is focused on low level, command-line driver testing. +Built-in applications are supported, but none are enabled. +Serial Console is enabled on UART3 at 2 Mbps. + +Peripheral Support +================== + +NuttX for Ox64 supports these peripherals: + +======================== ======= ===== +Peripheral Support NOTES +======================== ======= ===== +UART Yes +======================== ======= ===== diff --git a/Documentation/platforms/risc-v/bl808/index.rst b/Documentation/platforms/risc-v/bl808/index.rst new file mode 100644 index 0000000000000..8befaecda3380 --- /dev/null +++ b/Documentation/platforms/risc-v/bl808/index.rst @@ -0,0 +1,45 @@ +================== +Bouffalo Lab BL808 +================== + +`Bouffalo Lab BL808 `_ is a 64-bit / 32-bit RISC-V SoC with 3 RISC-V Cores: + +- **D0 Multimedia Core:** T-Head C906 480 MHz 64-bit RISC-V CPU + - RV64IMAFCV + - Level 1 Instruction and Data Cache (Harvard architecture) + - Sv39 Memory Management Unit + - jTLB (128 entries) + - AXI 4.0 128-bit master interface + - Core Local Interrupt (CLINT) and Platform-Level Interrupt Controller (PLIC) + - 80 External Interrupt Sources + - BHT (8K) and BTB + - RISC-V PMP (8 configurable areas) + +- **M0 Wireless Core:** T-Head E907 320 MHz 32-bit RISC-V CPU + - RV32IMAFCP + - 32-bit / 16-bit Mixed Instruction Set + - RISC-V Machine Mode and User Mode + - 32 x 32-bit Integer General Purpose Registers (GPR) + - 32 x 32-bit / 64-bit Floating-Point GPRs + - AXI 4.0 main device interface and AHB 5.0 peripheral interface + - Instruction and Data Cache + +- **LP Low Power Core:** T-Head E902 150 MHz 32-bit RISC-V CPU + - RV32E[M]C + +- **RAM:** Embedded 64 MB PSRAM +- **Wireless:** 2.4 GHz 1T1R WiFi 802.11 b/g/n, Bluetooth 5.2, Zigbee +- **Ethernet:** 10 / 100 Mbps +- **USB:** USB 2.0 OTG +- **Audio:** Microphone and Speaker +- **Video Input:** Dual-lane MIPI CSI +- **Peripherals:** UART, SPI, I2C, PWM, SDH, EMAC, USB + +Supported Boards +================ + +.. toctree:: + :glob: + :maxdepth: 1 + + boards/*/* diff --git a/Documentation/platforms/risc-v/jh7110/boards/star64/index.rst b/Documentation/platforms/risc-v/jh7110/boards/star64/index.rst index 84d9048094112..8028e8b9d8a4b 100644 --- a/Documentation/platforms/risc-v/jh7110/boards/star64/index.rst +++ b/Documentation/platforms/risc-v/jh7110/boards/star64/index.rst @@ -211,7 +211,7 @@ Serial Console is enabled on UART0 at 115.2 kbps. Peripheral Support ================== -NuttX for PinePhone supports these peripherals: +NuttX for Star64 supports these peripherals: ======================== ======= ===== Peripheral Support NOTES diff --git a/boards/Kconfig b/boards/Kconfig index 1c944deaf96e1..3f9e0afd70f27 100644 --- a/boards/Kconfig +++ b/boards/Kconfig @@ -1947,6 +1947,13 @@ config ARCH_BOARD_JH7110_STAR64 This options selects support for NuttX on PINE64 Star64 based on StarFive JH7110 SoC. +config ARCH_BOARD_BL808_OX64 + bool "PINE64 Ox64" + depends on ARCH_CHIP_BL808 + ---help--- + This options selects support for NuttX on PINE64 Ox64 based + on Bouffalo Lab BL808 SoC. + config ARCH_BOARD_S32K118EVB bool "NXP S32K118EVB" depends on ARCH_CHIP_S32K118 @@ -3260,6 +3267,7 @@ config ARCH_BOARD default "rv32m1-vega" if ARCH_BOARD_RV32M1_VEGA default "rv-virt" if ARCH_BOARD_QEMU_RV_VIRT default "star64" if ARCH_BOARD_JH7110_STAR64 + default "ox64" if ARCH_BOARD_BL808_OX64 default "sabre-6quad" if ARCH_BOARD_SABRE_6QUAD default "qemu-armv7a" if ARCH_BOARD_QEMU_ARMV7A default "qemu-armv8a" if ARCH_BOARD_QEMU_ARMV8A @@ -4151,6 +4159,9 @@ endif if ARCH_BOARD_JH7110_STAR64 source "boards/risc-v/jh7110/star64/Kconfig" endif +if ARCH_BOARD_BL808_OX64 +source "boards/risc-v/bl808/ox64/Kconfig" +endif if ARCH_BOARD_ESP32C3_DEVKIT source "boards/risc-v/esp32c3/esp32c3-devkit/Kconfig" endif diff --git a/boards/risc-v/bl808/ox64/Kconfig b/boards/risc-v/bl808/ox64/Kconfig new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/boards/risc-v/bl808/ox64/configs/nsh/defconfig b/boards/risc-v/bl808/ox64/configs/nsh/defconfig new file mode 100644 index 0000000000000..32aaa1ea5db9d --- /dev/null +++ b/boards/risc-v/bl808/ox64/configs/nsh/defconfig @@ -0,0 +1,84 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DISABLE_OS_API is not set +# CONFIG_NSH_DISABLE_LOSMART is not set +# CONFIG_STANDARD_SERIAL is not set +CONFIG_ARCH="risc-v" +CONFIG_ARCH_ADDRENV=y +CONFIG_ARCH_BOARD="ox64" +CONFIG_ARCH_BOARD_BL808_OX64=y +CONFIG_ARCH_CHIP="bl808" +CONFIG_ARCH_CHIP_BL808=y +CONFIG_ARCH_DATA_NPAGES=128 +CONFIG_ARCH_DATA_VBASE=0x80100000 +CONFIG_ARCH_HEAP_NPAGES=128 +CONFIG_ARCH_HEAP_VBASE=0x80200000 +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_KERNEL_STACKSIZE=3072 +CONFIG_ARCH_PGPOOL_MAPPING=y +CONFIG_ARCH_PGPOOL_PBASE=0x50600000 +CONFIG_ARCH_PGPOOL_SIZE=4194304 +CONFIG_ARCH_PGPOOL_VBASE=0x50600000 +CONFIG_ARCH_RISCV=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARCH_TEXT_NPAGES=128 +CONFIG_ARCH_TEXT_VBASE=0x80000000 +CONFIG_ARCH_USE_MMU=y +CONFIG_ARCH_USE_MPU=y +CONFIG_ARCH_USE_S_MODE=y +CONFIG_BL808_UART3=y +CONFIG_BOARDCTL_ROMDISK=y +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=116524 +CONFIG_BUILD_KERNEL=y +CONFIG_DEBUG_ASSERTIONS=y +CONFIG_DEBUG_ASSERTIONS_EXPRESSION=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEV_ZERO=y +CONFIG_ELF=y +CONFIG_EXAMPLES_HELLO=m +CONFIG_FS_PROCFS=y +CONFIG_FS_ROMFS=y +CONFIG_IDLETHREAD_STACKSIZE=3072 +CONFIG_INIT_FILEPATH="/system/bin/init" +CONFIG_INIT_MOUNT=y +CONFIG_INIT_MOUNT_FLAGS=0x1 +CONFIG_INIT_MOUNT_TARGET="/system/bin" +CONFIG_INIT_STACKSIZE=3072 +CONFIG_INTELHEX_BINARY=y +CONFIG_LIBC_ENVPATH=y +CONFIG_LIBC_EXECFUNCS=y +CONFIG_LIBC_PERROR_STDOUT=y +CONFIG_LIBC_STRERROR=y +CONFIG_MEMSET_64BIT=y +CONFIG_MEMSET_OPTSPEED=y +CONFIG_MM_PGALLOC=y +CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_FILE_APPS=y +CONFIG_NSH_READLINE=y +CONFIG_PATH_INITIAL="/system/bin" +CONFIG_RAM_SIZE=1048576 +CONFIG_RAM_START=0x50200000 +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_WAITPID=y +CONFIG_STACK_COLORATION=y +CONFIG_START_MONTH=12 +CONFIG_START_YEAR=2021 +CONFIG_SYMTAB_ORDEREDBYNAME=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_NSH_PROGNAME="init" +CONFIG_TESTING_GETPRIME=y +CONFIG_UART3_BAUD=2000000 +CONFIG_UART3_SERIAL_CONSOLE=y +CONFIG_USEC_PER_TICK=1000 diff --git a/boards/risc-v/bl808/ox64/include/board.h b/boards/risc-v/bl808/ox64/include/board.h new file mode 100644 index 0000000000000..59546c4c72f01 --- /dev/null +++ b/boards/risc-v/bl808/ox64/include/board.h @@ -0,0 +1,78 @@ +/**************************************************************************** + * boards/risc-v/bl808/ox64/include/board.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __BOARDS_RISCV_BL808_OX64_INCLUDE_BOARD_H +#define __BOARDS_RISCV_BL808_OX64_INCLUDE_BOARD_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define LED_STARTED 0 /* N/A */ +#define LED_HEAPALLOCATE 1 /* N/A */ +#define LED_IRQSENABLED 2 /* N/A */ +#define LED_STACKCREATED 3 /* N/A */ +#define LED_INIRQ 4 /* N/A */ +#define LED_SIGNAL 5 /* N/A */ +#define LED_ASSERTION 6 /* N/A */ +#define LED_PANIC 7 /* N/A */ +#define LED_CPU 8 /* LED */ + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Name: bl808_boardinitialize + ****************************************************************************/ + +void bl808_boardinitialize(void); + +#undef EXTERN +#if defined(__cplusplus) +} +#endif +#endif /* __ASSEMBLY__ */ +#endif /* __BOARDS_RISCV_BL808_OX64_INCLUDE_BOARD_H */ diff --git a/boards/risc-v/bl808/ox64/include/board_memorymap.h b/boards/risc-v/bl808/ox64/include/board_memorymap.h new file mode 100644 index 0000000000000..5221fb7847142 --- /dev/null +++ b/boards/risc-v/bl808/ox64/include/board_memorymap.h @@ -0,0 +1,88 @@ +/**************************************************************************** + * boards/risc-v/bl808/ox64/include/board_memorymap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __BOARDS_RISCV_BL808_OX64_INCLUDE_BOARD_MEMORYMAP_H +#define __BOARDS_RISCV_BL808_OX64_INCLUDE_BOARD_MEMORYMAP_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* DDR start address */ + +#define BL808_DDR_BASE (0x50200000) +#define BL808_DDR_SIZE (0x03e00000) + +/* Kernel code memory (RX) */ + +#define KFLASH_START (uintptr_t)__kflash_start +#define KFLASH_SIZE (uintptr_t)__kflash_size +#define KSRAM_START (uintptr_t)__ksram_start +#define KSRAM_SIZE (uintptr_t)__ksram_size +#define KSRAM_END (uintptr_t)__ksram_end + +/* Kernel RAM (RW) */ + +#define PGPOOL_START (uintptr_t)__pgheap_start +#define PGPOOL_SIZE (uintptr_t)__pgheap_size + +/* Page pool (RWX) */ + +#define PGPOOL_START (uintptr_t)__pgheap_start +#define PGPOOL_SIZE (uintptr_t)__pgheap_size +#define PGPOOL_END (PGPOOL_START + PGPOOL_SIZE) + +/* Ramdisk (RW) */ + +#define RAMDISK_START (uintptr_t)__ramdisk_start +#define RAMDISK_SIZE (uintptr_t)__ramdisk_size + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/* Kernel code memory (RX) */ + +extern uint8_t __kflash_start[]; +extern uint8_t __kflash_size[]; + +/* Kernel RAM (RW) */ + +extern uint8_t __ksram_start[]; +extern uint8_t __ksram_size[]; +extern uint8_t __ksram_end[]; + +/* Page pool (RWX) */ + +extern uint8_t __pgheap_start[]; +extern uint8_t __pgheap_size[]; + +/* Ramdisk (RW) */ + +extern uint8_t __ramdisk_start[]; +extern uint8_t __ramdisk_size[]; + +#endif /* __BOARDS_RISCV_BL808_OX64_INCLUDE_BOARD_MEMORYMAP_H */ diff --git a/boards/risc-v/bl808/ox64/scripts/Make.defs b/boards/risc-v/bl808/ox64/scripts/Make.defs new file mode 100644 index 0000000000000..86759825713cc --- /dev/null +++ b/boards/risc-v/bl808/ox64/scripts/Make.defs @@ -0,0 +1,43 @@ +############################################################################ +# boards/risc-v/bl808/ox64/scripts/Make.defs +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +include $(TOPDIR)/.config +include $(TOPDIR)/tools/Config.mk +include $(TOPDIR)/arch/risc-v/src/common/Toolchain.defs + +LDSCRIPT = ld.script +ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT) +ARCHPICFLAGS = -fpic -msingle-pic-base + +CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe +CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS) +CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe +CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS) +CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) +AFLAGS += $(CFLAGS) -D__ASSEMBLY__ + +# ELF module definitions + +CELFFLAGS = $(CFLAGS) +CXXELFFLAGS = $(CXXFLAGS) + +LDELFFLAGS = --oformat elf64-littleriscv +LDELFFLAGS += -r -e main +LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/libelf/gnu-elf.ld) diff --git a/boards/risc-v/bl808/ox64/scripts/ld.script b/boards/risc-v/bl808/ox64/scripts/ld.script new file mode 100644 index 0000000000000..94f115dd792ee --- /dev/null +++ b/boards/risc-v/bl808/ox64/scripts/ld.script @@ -0,0 +1,150 @@ +/**************************************************************************** + * boards/risc-v/bl808/ox64/scripts/ld.script + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +MEMORY +{ + kflash (rx) : ORIGIN = 0x50200000, LENGTH = 2048K /* w/ cache */ + ksram (rwx) : ORIGIN = 0x50400000, LENGTH = 2048K /* w/ cache */ + pgram (rwx) : ORIGIN = 0x50600000, LENGTH = 4096K /* w/ cache */ + ramdisk (rwx) : ORIGIN = 0x50A00000, LENGTH = 16M /* w/ cache */ +} + +OUTPUT_ARCH("riscv") + +/* Provide the kernel boundaries */ + +__kflash_start = ORIGIN(kflash); +__kflash_size = LENGTH(kflash); +__ksram_start = ORIGIN(ksram); +__ksram_size = LENGTH(ksram); +__ksram_end = ORIGIN(ksram) + LENGTH(ksram); + +/* Page heap */ + +__pgheap_start = ORIGIN(pgram); +__pgheap_size = LENGTH(pgram) + LENGTH(ramdisk); + +/* Application ramdisk */ + +__ramdisk_start = ORIGIN(ramdisk); +__ramdisk_size = LENGTH(ramdisk); +__ramdisk_end = ORIGIN(ramdisk) + LENGTH(ramdisk); + +SECTIONS +{ + . = 0x50200000; + + .text : + { + _stext = . ; + *(.text) + *(.text.*) + *(.gnu.warning) + *(.stub) + *(.glue_7) + *(.glue_7t) + *(.jcr) + + /* C++ support: The .init and .fini sections contain specific logic + * to manage static constructors and destructors. + */ + + *(.gnu.linkonce.t.*) + *(.init) /* Old ABI */ + *(.fini) /* Old ABI */ + _etext = . ; + } + + .rodata : + { + _srodata = . ; + *(.rodata) + *(.rodata1) + *(.rodata.*) + *(.gnu.linkonce.r*) + _erodata = . ; + } + + .tdata : { + _stdata = ABSOLUTE(.); + *(.tdata .tdata.* .gnu.linkonce.td.*); + _etdata = ABSOLUTE(.); + } + + .tbss : { + _stbss = ABSOLUTE(.); + *(.tbss .tbss.* .gnu.linkonce.tb.* .tcommon); + _etbss = ABSOLUTE(.); + } + + _eronly = ABSOLUTE(.); + + .data : + { + _sdata = . ; + *(.data) + *(.data1) + *(.data.*) + *(.gnu.linkonce.d*) + . = ALIGN(4); + _edata = . ; + } + + .bss : + { + _sbss = . ; + *(.bss) + *(.bss.*) + *(.sbss) + *(.sbss.*) + *(.gnu.linkonce.b*) + *(COMMON) + _ebss = . ; + } > ksram + + /* Page tables here, align to 4K boundary */ + + .pgtables (NOLOAD) : ALIGN(0x1000) { + *(.pgtables) + . = ALIGN(4); + } > ksram + + /* Stack top */ + + .stack_top : { + . = ALIGN(32); + _ebss = ABSOLUTE(.); + } > ksram + + /* Stabs debugging sections. */ + + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/boards/risc-v/bl808/ox64/src/.gitignore b/boards/risc-v/bl808/ox64/src/.gitignore new file mode 100644 index 0000000000000..cc92d189b53c2 --- /dev/null +++ b/boards/risc-v/bl808/ox64/src/.gitignore @@ -0,0 +1,2 @@ +etctmp +etctmp.c diff --git a/boards/risc-v/bl808/ox64/src/Makefile b/boards/risc-v/bl808/ox64/src/Makefile new file mode 100644 index 0000000000000..0131625ea2434 --- /dev/null +++ b/boards/risc-v/bl808/ox64/src/Makefile @@ -0,0 +1,27 @@ +############################################################################ +# boards/risc-v/bl808/ox64/src/Makefile +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +include $(TOPDIR)/Make.defs + +RCSRCS = etc/init.d/rc.sysinit etc/init.d/rcS + +CSRCS = bl808_appinit.c + +include $(TOPDIR)/boards/Board.mk diff --git a/boards/risc-v/bl808/ox64/src/bl808_appinit.c b/boards/risc-v/bl808/ox64/src/bl808_appinit.c new file mode 100644 index 0000000000000..d960bc7f4c5ec --- /dev/null +++ b/boards/risc-v/bl808/ox64/src/bl808_appinit.c @@ -0,0 +1,167 @@ +/**************************************************************************** + * boards/risc-v/bl808/ox64/src/bl808_appinit.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Ramdisk Definition */ + +#define SECTORSIZE 512 +#define NSECTORS(b) (((b) + SECTORSIZE - 1) / SECTORSIZE) +#define RAMDISK_DEVICE_MINOR 0 + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: mount_ramdisk + * + * Description: + * Mount a ramdisk defined in the ld.script to /dev/ramX. The ramdisk is + * intended to contain a romfs with applications which can be spawned at + * runtime. + * + * Returned Value: + * OK is returned on success. + * -ERRORNO is returned on failure. + * + ****************************************************************************/ + +static int mount_ramdisk(void) +{ + int ret; + struct boardioc_romdisk_s desc; + + desc.minor = RAMDISK_DEVICE_MINOR; + desc.nsectors = NSECTORS((ssize_t)__ramdisk_size); + desc.sectsize = SECTORSIZE; + desc.image = __ramdisk_start; + + ret = boardctl(BOARDIOC_ROMDISK, (uintptr_t)&desc); + if (ret < 0) + { + syslog(LOG_ERR, "Ramdisk register failed: %s\n", strerror(errno)); + syslog(LOG_ERR, "Ramdisk mountpoint /dev/ram%d\n", + RAMDISK_DEVICE_MINOR); + syslog(LOG_ERR, "Ramdisk length %lu, origin %lx\n", + (ssize_t)__ramdisk_size, (uintptr_t)__ramdisk_start); + } + + return ret; +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_app_initialize + * + * Description: + * Perform architecture specific initialization + * + * Input Parameters: + * arg - The boardctl() argument is passed to the board_app_initialize() + * implementation without modification. The argument has no + * meaning to NuttX; the meaning of the argument is a contract + * between the board-specific initialization logic and the + * matching application logic. The value could be such things as a + * mode enumeration value, a set of DIP switch switch settings, a + * pointer to configuration data read from a file or serial FLASH, + * or whatever you would like to do with it. Every implementation + * should accept zero/NULL as a default configuration. + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure to indicate the nature of the failure. + * + ****************************************************************************/ + +int board_app_initialize(uintptr_t arg) +{ +#ifdef CONFIG_BOARD_LATE_INITIALIZE + /* Board initialization already performed by board_late_initialize() */ + + return OK; +#else + /* Perform board-specific initialization */ + +#ifdef CONFIG_NSH_ARCHINIT + + mount(NULL, "/proc", "procfs", 0, NULL); + +#endif + + return OK; +#endif +} + +/**************************************************************************** + * Name: board_late_initialize + * + * Description: + * If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional + * initialization call will be performed in the boot-up sequence to a + * function called board_late_initialize(). board_late_initialize() will + * be called after up_initialize() and board_early_initialize() and just + * before the initial application is started. This additional + * initialization phase may be used, for example, to initialize board- + * specific device drivers for which board_early_initialize() is not + * suitable. + * + * Waiting for events, use of I2C, SPI, etc are permissible in the context + * of board_late_initialize(). That is because board_late_initialize() + * will run on a temporary, internal kernel thread. + * + ****************************************************************************/ + +void board_late_initialize(void) +{ + /* Mount the RAM Disk */ + + mount_ramdisk(); + + /* Perform board-specific initialization */ + +#ifdef CONFIG_NSH_ARCHINIT + + mount(NULL, "/proc", "procfs", 0, NULL); + +#endif +} diff --git a/boards/risc-v/bl808/ox64/src/etc/init.d/rc.sysinit b/boards/risc-v/bl808/ox64/src/etc/init.d/rc.sysinit new file mode 100644 index 0000000000000..ab47deb7470c1 --- /dev/null +++ b/boards/risc-v/bl808/ox64/src/etc/init.d/rc.sysinit @@ -0,0 +1,19 @@ +/**************************************************************************** + * boards/risc-v/bl808/ox64/src/etc/init.d/rc.sysinit + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ diff --git a/boards/risc-v/bl808/ox64/src/etc/init.d/rcS b/boards/risc-v/bl808/ox64/src/etc/init.d/rcS new file mode 100644 index 0000000000000..6651c257d2c36 --- /dev/null +++ b/boards/risc-v/bl808/ox64/src/etc/init.d/rcS @@ -0,0 +1,19 @@ +/**************************************************************************** + * boards/risc-v/bl808/ox64/src/etc/init.d/rcS + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/