Skip to content

Commit

Permalink
soc: rockchip: added the rk35 series and moved relevant soc
Browse files Browse the repository at this point in the history
added the rk35 series and moved the rk3568 under it

Signed-off-by: Esteban Aguililla Klein <esteban.aguililla.klein.pro@outlook.com>
  • Loading branch information
EstAK committed Jan 12, 2025
1 parent b3cbcb6 commit 30dcce9
Show file tree
Hide file tree
Showing 16 changed files with 339 additions and 0 deletions.
5 changes: 5 additions & 0 deletions boards/khadas/edge2/Kconfig.khadas_edge2
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Copyright 2024 Université Gustave Eiffel
# SPDX-License-Identifier: Apache-2.0

config BOARD_KHADAS_EDGE2
select SOC_RK3588S
6 changes: 6 additions & 0 deletions boards/khadas/edge2/board.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
board:
name: khadas_edge2
full_name: Edge2
vendor: khadas
socs:
- name: rk3588s
92 changes: 92 additions & 0 deletions boards/khadas/edge2/doc/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
.. zephyr:board:: khadas_edge2
Overview
********

See <https://www.khadas.com/edge2>


Hardware
********

See <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
==========

`Documentation: <https://docs.khadas.com/linux/edge/>`_
Binary file added boards/khadas/edge2/doc/khadas_edge2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions boards/khadas/edge2/khadas_edge2.dts
Original file line number Diff line number Diff line change
@@ -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";
};
9 changes: 9 additions & 0 deletions boards/khadas/edge2/khadas_edge2.yaml
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions boards/khadas/edge2/khadas_edge2_defconfig
Original file line number Diff line number Diff line change
@@ -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
96 changes: 96 additions & 0 deletions dts/arm64/rockchip/rk3588s.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* 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>;
};
};
2 changes: 2 additions & 0 deletions soc/rockchip/rk35/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@

if(CONFIG_SOC_RK3568)
add_subdirectory(rk3568)
elseif(CONFIG_SOC_RK3588S)
add_subdirectory(rk3588s)
endif()
6 changes: 6 additions & 0 deletions soc/rockchip/rk35/rk3588s/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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 "")
10 changes: 10 additions & 0 deletions soc/rockchip/rk35/rk3588s/Kconfig
Original file line number Diff line number Diff line change
@@ -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
8 changes: 8 additions & 0 deletions soc/rockchip/rk35/rk3588s/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions soc/rockchip/rk35/rk3588s/Kconfig.defconfig.rk3588s
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions soc/rockchip/rk35/rk3588s/Kconfig.soc
Original file line number Diff line number Diff line change
@@ -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
26 changes: 26 additions & 0 deletions soc/rockchip/rk35/rk3588s/mmu_regions.c
Original file line number Diff line number Diff line change
@@ -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,
};
1 change: 1 addition & 0 deletions soc/rockchip/soc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ family:
- name: rk3399
- name: rk35
socs:
- name: rk3588s
- name: rk3568

0 comments on commit 30dcce9

Please sign in to comment.