Browse Source
added the khadas edge2 board and its soc rk3588s Signed-off-by: Esteban Aguililla Klein <esteban.aguililla.klein.pro@outlook.com>pull/85614/head
16 changed files with 351 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
config BOARD_KHADAS_EDGE2 |
||||||
|
select SOC_RK3588S |
@ -0,0 +1,6 @@ |
|||||||
|
board: |
||||||
|
name: khadas_edge2 |
||||||
|
full_name: Edge2 |
||||||
|
vendor: khadas |
||||||
|
socs: |
||||||
|
- name: rk3588s |
@ -0,0 +1,97 @@ |
|||||||
|
.. zephyr:board:: khadas_edge2 |
||||||
|
|
||||||
|
Overview |
||||||
|
******** |
||||||
|
|
||||||
|
See `Product page`_ |
||||||
|
|
||||||
|
.. _Product page: https://www.khadas.com/edge2 |
||||||
|
|
||||||
|
Hardware |
||||||
|
******** |
||||||
|
|
||||||
|
See `Hardware details`_ |
||||||
|
|
||||||
|
.. _Hardware details: https://docs.khadas.com/products/sbc/edge2/hardware/start |
||||||
|
|
||||||
|
Supported Features |
||||||
|
================== |
||||||
|
|
||||||
|
The ``khadas_edge2`` board target supports the following |
||||||
|
hardware features: |
||||||
|
|
||||||
|
+-----------+------------+--------------------------------------+ |
||||||
|
| Interface | Controller | Driver/Component | |
||||||
|
+===========+============+======================================+ |
||||||
|
| GIC-600 | on-chip | GICv3 interrupt controller | |
||||||
|
+-----------+------------+--------------------------------------+ |
||||||
|
| ARM TIMER | on-chip | System Clock | |
||||||
|
+-----------+------------+--------------------------------------+ |
||||||
|
| UART | on-chip | Synopsys DesignWare 8250 serial port | |
||||||
|
+-----------+------------+--------------------------------------+ |
||||||
|
|
||||||
|
Other hardware features have not been enabled yet for this board. |
||||||
|
|
||||||
|
The default configuration can be found in (NON-SMP) |
||||||
|
:zephyr_file:`boards/khadas/edge2/khadas_edge2_defconfig` |
||||||
|
|
||||||
|
There are multiple serial ports on the board: Zephyr is using |
||||||
|
uart2 as serial console. |
||||||
|
|
||||||
|
Programming and Debugging |
||||||
|
************************* |
||||||
|
|
||||||
|
Use the following configuration to run basic Zephyr applications and |
||||||
|
kernel tests on Khadas Edge2 board. For example, with the :zephyr:code-sample:`hello_world`: |
||||||
|
|
||||||
|
1. Non-SMP mode |
||||||
|
|
||||||
|
.. zephyr-app-commands:: |
||||||
|
:zephyr-app: samples/hello_world |
||||||
|
:host-os: unix |
||||||
|
:board: khadas_edge2 |
||||||
|
:goals: build |
||||||
|
|
||||||
|
This will build an image with the hello world sample app. |
||||||
|
|
||||||
|
Build the zephyr image: |
||||||
|
|
||||||
|
.. code-block:: console |
||||||
|
|
||||||
|
mkimage -C none -A arm64 -O linux -a 0x10000000 -e 0x10000000 -d build/zephyr/zephyr.bin build/zephyr/zephyr.img |
||||||
|
|
||||||
|
Burn the image on the board (we choose to use Rockchip burning tool `rkdeveloptool <https://github.com/rockchip-linux/rkdeveloptool.git>`_, you will need a `SPL <http://dl.khadas.com/products/edge2/firmware/boot/>`_ which is provided by khadas: |
||||||
|
|
||||||
|
.. code-block:: console |
||||||
|
|
||||||
|
rkdeveloptool db rk3588_spl_loader_*; rkdeveloptool wl 0x100000 zephyr.img; rkdeveloptool rd |
||||||
|
|
||||||
|
The sector 0x100000 was chosen arbitrarily (far away from U-Boot image) |
||||||
|
|
||||||
|
Use U-Boot to load and run Zephyr: |
||||||
|
|
||||||
|
.. code-block:: console |
||||||
|
|
||||||
|
mmc read ${pxefile_addr_r} 0x100000 0x1000; bootm start ${pxefile_addr_r}; bootm loados; bootm go |
||||||
|
|
||||||
|
0x1000 is the size (in number of sectors) or your image. Increase it if needed. |
||||||
|
|
||||||
|
It will display the following console output: |
||||||
|
|
||||||
|
.. code-block:: console |
||||||
|
|
||||||
|
*** Booting Zephyr OS build XXXXXXXXXXXX *** |
||||||
|
Hello World! khadas_edge2 |
||||||
|
|
||||||
|
Flashing |
||||||
|
======== |
||||||
|
|
||||||
|
Zephyr image can be loaded in DDR memory at address 0x10000000 from SD Card, |
||||||
|
EMMC, QSPI Flash or downloaded from network in uboot. |
||||||
|
|
||||||
|
References |
||||||
|
========== |
||||||
|
|
||||||
|
`Edge2 Documentation`_ |
||||||
|
|
||||||
|
.. _Edge2 Documentation: https://docs.khadas.com/products/sbc/edge2/start |
After Width: | Height: | Size: 45 KiB |
@ -0,0 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2024 Université Gustave Eiffel |
||||||
|
* SPDX-License-Identifier: Apache-2.0 |
||||||
|
*/ |
||||||
|
|
||||||
|
/dts-v1/; |
||||||
|
|
||||||
|
#include <rockchip/rk3588s.dtsi> |
||||||
|
|
||||||
|
/ { |
||||||
|
model = "Khadas Edge2"; |
||||||
|
compatible = "khadas,edge2"; |
||||||
|
|
||||||
|
chosen { |
||||||
|
zephyr,sram = &sram0; |
||||||
|
zephyr,console = &uart2; |
||||||
|
zephyr,shell-uart = &uart2; |
||||||
|
}; |
||||||
|
|
||||||
|
cpus { |
||||||
|
/delete-node/ cpu@1; |
||||||
|
/delete-node/ cpu@2; |
||||||
|
/delete-node/ cpu@3; |
||||||
|
/delete-node/ cpu@4; |
||||||
|
/delete-node/ cpu@5; |
||||||
|
/delete-node/ cpu@6; |
||||||
|
/delete-node/ cpu@7; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
&uart2 { |
||||||
|
status = "okay"; |
||||||
|
}; |
@ -0,0 +1,9 @@ |
|||||||
|
identifier: khadas_edge2 |
||||||
|
name: Khadas Edge2 (single core, non SMP) |
||||||
|
type: mcu |
||||||
|
arch: arm64 |
||||||
|
toolchain: |
||||||
|
- zephyr |
||||||
|
- cross-compile |
||||||
|
ram: 8192 |
||||||
|
vendor: khadas |
@ -0,0 +1,17 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
# Platform Configuration |
||||||
|
CONFIG_ARM64_VA_BITS_40=y |
||||||
|
CONFIG_ARM64_PA_BITS_40=y |
||||||
|
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=24000000 |
||||||
|
CONFIG_CACHE_MANAGEMENT=y |
||||||
|
CONFIG_ARMV8_A_NS=y |
||||||
|
|
||||||
|
# Serial Drivers |
||||||
|
CONFIG_SERIAL=y |
||||||
|
CONFIG_UART_INTERRUPT_DRIVEN=y |
||||||
|
|
||||||
|
# Enable Console |
||||||
|
CONFIG_CONSOLE=y |
||||||
|
CONFIG_UART_CONSOLE=y |
@ -0,0 +1,103 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2024 Université Gustave Eiffel |
||||||
|
* SPDX-License-Identifier: Apache-2.0 |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <arm64/armv8-a.dtsi> |
||||||
|
#include <zephyr/dt-bindings/interrupt-controller/arm-gic.h> |
||||||
|
#include <mem.h> |
||||||
|
|
||||||
|
/ { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <1>; |
||||||
|
|
||||||
|
cpus { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <0>; |
||||||
|
|
||||||
|
cpu@0 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a55"; |
||||||
|
reg = <0x0>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@1 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a55"; |
||||||
|
reg = <0x100>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@2 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a55"; |
||||||
|
reg = <0x200>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@3 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a55"; |
||||||
|
reg = <0x300>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@4 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a76"; |
||||||
|
reg = <0x400>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@5 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a76"; |
||||||
|
reg = <0x500>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@6 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a76"; |
||||||
|
reg = <0x600>; |
||||||
|
}; |
||||||
|
|
||||||
|
cpu@7 { |
||||||
|
device_type = "cpu"; |
||||||
|
compatible = "arm,cortex-a76"; |
||||||
|
reg = <0x700>; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
gic: interrupt-controller@fe600000 { |
||||||
|
#address-cells = <1>; |
||||||
|
compatible = "arm,gic-v3", "arm,gic"; |
||||||
|
reg = <0xfe600000 0x10000>, /* GICD */ |
||||||
|
<0xfe680000 0x100000>; /* GICR */ |
||||||
|
interrupt-controller; |
||||||
|
#interrupt-cells = <4>; |
||||||
|
status = "okay"; |
||||||
|
}; |
||||||
|
|
||||||
|
sram0: memory@10000000 { |
||||||
|
reg = <0x10000000 DT_SIZE_M(128)>; |
||||||
|
}; |
||||||
|
|
||||||
|
timer { |
||||||
|
compatible = "arm,armv8-timer"; |
||||||
|
interrupt-parent = <&gic>; |
||||||
|
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL |
||||||
|
IRQ_DEFAULT_PRIORITY>, |
||||||
|
<GIC_PPI 14 IRQ_TYPE_LEVEL |
||||||
|
IRQ_DEFAULT_PRIORITY>, |
||||||
|
<GIC_PPI 11 IRQ_TYPE_LEVEL |
||||||
|
IRQ_DEFAULT_PRIORITY>, |
||||||
|
<GIC_PPI 10 IRQ_TYPE_LEVEL |
||||||
|
IRQ_DEFAULT_PRIORITY>; |
||||||
|
}; |
||||||
|
|
||||||
|
uart2: serial@feb50000 { |
||||||
|
compatible = "rockchip,rk3588s-uart", "ns16550"; |
||||||
|
reg = <0xfeb50000 0x1000>; |
||||||
|
interrupt-parent = <&gic>; |
||||||
|
interrupts = <GIC_SPI 333 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>; |
||||||
|
status = "disabled"; |
||||||
|
reg-shift = <2>; |
||||||
|
clock-frequency = <350000000>; |
||||||
|
}; |
||||||
|
}; |
@ -0,0 +1,6 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
zephyr_sources_ifdef(CONFIG_ARM_MMU mmu_regions.c) |
||||||
|
|
||||||
|
set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm64/scripts/linker.ld CACHE INTERNAL "") |
@ -0,0 +1,10 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
config SOC_RK3588S |
||||||
|
select ARM64 |
||||||
|
select CPU_CORTEX_A55 |
||||||
|
select ARM_ARCH_TIMER if SYS_CLOCK_EXISTS |
||||||
|
|
||||||
|
config SOC_PART_NUMBER |
||||||
|
default "RK3588S" if SOC_RK3588S |
@ -0,0 +1,8 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
if SOC_RK3588S |
||||||
|
|
||||||
|
rsource "Kconfig.defconfig.rk3588s" |
||||||
|
|
||||||
|
endif # SOC_RK3588S |
@ -0,0 +1,19 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
if SOC_RK3588S |
||||||
|
|
||||||
|
config NUM_IRQS |
||||||
|
default 544 |
||||||
|
|
||||||
|
config FLASH_SIZE |
||||||
|
default 0 |
||||||
|
|
||||||
|
config FLASH_BASE_ADDRESS |
||||||
|
default 0 |
||||||
|
|
||||||
|
config UART_NS16550_ACCESS_WORD_ONLY |
||||||
|
default y |
||||||
|
depends on UART_NS16550 |
||||||
|
|
||||||
|
endif |
@ -0,0 +1,9 @@ |
|||||||
|
# Copyright 2024 Université Gustave Eiffel |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
config SOC_RK3588S |
||||||
|
bool |
||||||
|
select SOC_SERIES_RK35 |
||||||
|
|
||||||
|
config SOC |
||||||
|
default "rk3588s" if SOC_RK3588S |
@ -0,0 +1,26 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2024 Université Gustave Eiffel |
||||||
|
* SPDX-License-Identifier: Apache-2.0 |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <zephyr/devicetree.h> |
||||||
|
#include <zephyr/sys/util.h> |
||||||
|
#include <zephyr/arch/arm64/arm_mmu.h> |
||||||
|
|
||||||
|
static const struct arm_mmu_region mmu_regions[] = { |
||||||
|
|
||||||
|
MMU_REGION_FLAT_ENTRY("GIC", |
||||||
|
DT_REG_ADDR_BY_IDX(DT_INST(0, arm_gic), 0), |
||||||
|
DT_REG_SIZE_BY_IDX(DT_INST(0, arm_gic), 0), |
||||||
|
MT_DEVICE_nGnRnE | MT_P_RW_U_NA | MT_DEFAULT_SECURE_STATE), |
||||||
|
|
||||||
|
MMU_REGION_FLAT_ENTRY("GIC", |
||||||
|
DT_REG_ADDR_BY_IDX(DT_INST(0, arm_gic), 1), |
||||||
|
DT_REG_SIZE_BY_IDX(DT_INST(0, arm_gic), 1), |
||||||
|
MT_DEVICE_nGnRnE | MT_P_RW_U_NA | MT_DEFAULT_SECURE_STATE), |
||||||
|
}; |
||||||
|
|
||||||
|
const struct arm_mmu_config mmu_config = { |
||||||
|
.num_regions = ARRAY_SIZE(mmu_regions), |
||||||
|
.mmu_regions = mmu_regions, |
||||||
|
}; |
Loading…
Reference in new issue