From 4cc0f1f97443662cd16dfde916c6f691c40b6282 Mon Sep 17 00:00:00 2001 From: Ivan Velickovic Date: Wed, 4 Sep 2024 10:25:11 +1000 Subject: [PATCH] Add support for i.MX8MP-EVK Signed-off-by: Ivan Velickovic --- build_sdk.py | 16 ++++++ docs/manual.md | 6 ++ example/imx8mp_evk/hello/Makefile | 55 +++++++++++++++++++ example/imx8mp_evk/hello/hello.c | 16 ++++++ example/imx8mp_evk/hello/hello.system | 11 ++++ example/imx8mp_evk/imx8mq_evk/hello/Makefile | 55 +++++++++++++++++++ example/imx8mp_evk/imx8mq_evk/hello/hello.c | 16 ++++++ .../imx8mp_evk/imx8mq_evk/hello/hello.system | 11 ++++ loader/src/loader.c | 2 +- 9 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 example/imx8mp_evk/hello/Makefile create mode 100644 example/imx8mp_evk/hello/hello.c create mode 100644 example/imx8mp_evk/hello/hello.system create mode 100644 example/imx8mp_evk/imx8mq_evk/hello/Makefile create mode 100644 example/imx8mp_evk/imx8mq_evk/hello/hello.c create mode 100644 example/imx8mp_evk/imx8mq_evk/hello/hello.system diff --git a/build_sdk.py b/build_sdk.py index 2619b067..35e8ebe0 100644 --- a/build_sdk.py +++ b/build_sdk.py @@ -141,6 +141,22 @@ class ConfigInfo: "passive_server": Path("example/imx8mm_evk/passive_server") } ), + BoardInfo( + name="imx8mp_evk", + arch=KernelArch.AARCH64, + gcc_cpu="cortex-a53", + loader_link_address=0x41000000, + kernel_options={ + "KernelPlatform": "imx8mp-evk", + "KernelIsMCS": True, + "KernelArmExportPCNTUser": True, + "KernelArmHypervisorSupport": True, + "KernelArmVtimerUpdateVOffset": False, + }, + examples={ + "hello": Path("example/imx8mp_evk/hello") + } + ), BoardInfo( name="imx8mq_evk", arch=KernelArch.AARCH64, diff --git a/docs/manual.md b/docs/manual.md index 65c1ec14..52673c44 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -742,6 +742,12 @@ This chapter describes the board support packages that are available in the SDK. ## i.MX8MM-EVK +Microkit produces a raw binary file, so when using U-Boot you must execute the image using: + + => go 0x41000000 + +## i.MX8MP-EVK + Microkit produces a raw binary file, so when using U-Boot you must execute the image using: => go 0x41000000 diff --git a/example/imx8mp_evk/hello/Makefile b/example/imx8mp_evk/hello/Makefile new file mode 100644 index 00000000..b78ab030 --- /dev/null +++ b/example/imx8mp_evk/hello/Makefile @@ -0,0 +1,55 @@ +# +# Copyright 2021, Breakaway Consulting Pty. Ltd. +# +# SPDX-License-Identifier: BSD-2-Clause +# +ifeq ($(strip $(BUILD_DIR)),) +$(error BUILD_DIR must be specified) +endif + +ifeq ($(strip $(MICROKIT_SDK)),) +$(error MICROKIT_SDK must be specified) +endif + +ifeq ($(strip $(MICROKIT_BOARD)),) +$(error MICROKIT_BOARD must be specified) +endif + +ifeq ($(strip $(MICROKIT_CONFIG)),) +$(error MICROKIT_CONFIG must be specified) +endif + +TOOLCHAIN := aarch64-none-elf + +CPU := cortex-a53 + +CC := $(TOOLCHAIN)-gcc +LD := $(TOOLCHAIN)-ld +AS := $(TOOLCHAIN)-as +MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit + +HELLO_OBJS := hello.o + +BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG) + +IMAGES := hello.elf +CFLAGS := -mcpu=$(CPU) -mstrict-align -nostdlib -ffreestanding -g3 -O3 -Wall -Wno-unused-function -Werror -I$(BOARD_DIR)/include +LDFLAGS := -L$(BOARD_DIR)/lib +LIBS := -lmicrokit -Tmicrokit.ld + +IMAGE_FILE = $(BUILD_DIR)/loader.img +REPORT_FILE = $(BUILD_DIR)/report.txt + +all: $(IMAGE_FILE) + +$(BUILD_DIR)/%.o: %.c Makefile + $(CC) -c $(CFLAGS) $< -o $@ + +$(BUILD_DIR)/%.o: %.s Makefile + $(AS) -g3 -mcpu=$(CPU) $< -o $@ + +$(BUILD_DIR)/hello.elf: $(addprefix $(BUILD_DIR)/, $(HELLO_OBJS)) + $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ + +$(IMAGE_FILE) $(REPORT_FILE): $(addprefix $(BUILD_DIR)/, $(IMAGES)) hello.system + $(MICROKIT_TOOL) hello.system --search-path $(BUILD_DIR) --board $(MICROKIT_BOARD) --config $(MICROKIT_CONFIG) -o $(IMAGE_FILE) -r $(REPORT_FILE) diff --git a/example/imx8mp_evk/hello/hello.c b/example/imx8mp_evk/hello/hello.c new file mode 100644 index 00000000..493c9574 --- /dev/null +++ b/example/imx8mp_evk/hello/hello.c @@ -0,0 +1,16 @@ +/* + * Copyright 2021, Breakaway Consulting Pty. Ltd. + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include +#include + +void init(void) +{ + microkit_dbg_puts("hello, world\n"); +} + +void notified(microkit_channel ch) +{ +} diff --git a/example/imx8mp_evk/hello/hello.system b/example/imx8mp_evk/hello/hello.system new file mode 100644 index 00000000..146da4ba --- /dev/null +++ b/example/imx8mp_evk/hello/hello.system @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/example/imx8mp_evk/imx8mq_evk/hello/Makefile b/example/imx8mp_evk/imx8mq_evk/hello/Makefile new file mode 100644 index 00000000..b78ab030 --- /dev/null +++ b/example/imx8mp_evk/imx8mq_evk/hello/Makefile @@ -0,0 +1,55 @@ +# +# Copyright 2021, Breakaway Consulting Pty. Ltd. +# +# SPDX-License-Identifier: BSD-2-Clause +# +ifeq ($(strip $(BUILD_DIR)),) +$(error BUILD_DIR must be specified) +endif + +ifeq ($(strip $(MICROKIT_SDK)),) +$(error MICROKIT_SDK must be specified) +endif + +ifeq ($(strip $(MICROKIT_BOARD)),) +$(error MICROKIT_BOARD must be specified) +endif + +ifeq ($(strip $(MICROKIT_CONFIG)),) +$(error MICROKIT_CONFIG must be specified) +endif + +TOOLCHAIN := aarch64-none-elf + +CPU := cortex-a53 + +CC := $(TOOLCHAIN)-gcc +LD := $(TOOLCHAIN)-ld +AS := $(TOOLCHAIN)-as +MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit + +HELLO_OBJS := hello.o + +BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG) + +IMAGES := hello.elf +CFLAGS := -mcpu=$(CPU) -mstrict-align -nostdlib -ffreestanding -g3 -O3 -Wall -Wno-unused-function -Werror -I$(BOARD_DIR)/include +LDFLAGS := -L$(BOARD_DIR)/lib +LIBS := -lmicrokit -Tmicrokit.ld + +IMAGE_FILE = $(BUILD_DIR)/loader.img +REPORT_FILE = $(BUILD_DIR)/report.txt + +all: $(IMAGE_FILE) + +$(BUILD_DIR)/%.o: %.c Makefile + $(CC) -c $(CFLAGS) $< -o $@ + +$(BUILD_DIR)/%.o: %.s Makefile + $(AS) -g3 -mcpu=$(CPU) $< -o $@ + +$(BUILD_DIR)/hello.elf: $(addprefix $(BUILD_DIR)/, $(HELLO_OBJS)) + $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ + +$(IMAGE_FILE) $(REPORT_FILE): $(addprefix $(BUILD_DIR)/, $(IMAGES)) hello.system + $(MICROKIT_TOOL) hello.system --search-path $(BUILD_DIR) --board $(MICROKIT_BOARD) --config $(MICROKIT_CONFIG) -o $(IMAGE_FILE) -r $(REPORT_FILE) diff --git a/example/imx8mp_evk/imx8mq_evk/hello/hello.c b/example/imx8mp_evk/imx8mq_evk/hello/hello.c new file mode 100644 index 00000000..493c9574 --- /dev/null +++ b/example/imx8mp_evk/imx8mq_evk/hello/hello.c @@ -0,0 +1,16 @@ +/* + * Copyright 2021, Breakaway Consulting Pty. Ltd. + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include +#include + +void init(void) +{ + microkit_dbg_puts("hello, world\n"); +} + +void notified(microkit_channel ch) +{ +} diff --git a/example/imx8mp_evk/imx8mq_evk/hello/hello.system b/example/imx8mp_evk/imx8mq_evk/hello/hello.system new file mode 100644 index 00000000..146da4ba --- /dev/null +++ b/example/imx8mp_evk/imx8mq_evk/hello/hello.system @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/loader/src/loader.c b/loader/src/loader.c index 8706d2ea..7aeccc62 100644 --- a/loader/src/loader.c +++ b/loader/src/loader.c @@ -131,7 +131,7 @@ static void putc(uint8_t ch) while (!(*UART_REG(STAT) & STAT_TDRE)) { } *UART_REG(TRANSMIT) = ch; } -#elif defined(BOARD_imx8mm_evk) +#elif defined(BOARD_imx8mm_evk) || defined(BOARD_imx8mp_evk) #define UART_BASE 0x30890000 #define STAT 0x98 #define TRANSMIT 0x40