Skip to content

Commit

Permalink
Added support for MaaXBoard
Browse files Browse the repository at this point in the history
Signed-off-by: Josh Felmeden <[email protected]>
Signed-off-by: Ivan Velickovic <[email protected]>
  • Loading branch information
josh-felm authored and Ivan-Velickovic committed Jan 27, 2024
1 parent a589859 commit d1d722d
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 0 deletions.
13 changes: 13 additions & 0 deletions build_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,19 @@ class ConfigInfo:
"hello": Path("example/zcu102/hello")
}
),
BoardInfo(
name="maaxboard",
gcc_cpu="cortex-a53",
loader_link_address=0x40480000,
kernel_options={
"KernelPlatform": "maaxboard",
"KernelIsMCS": True,
"KernelArmExportPCNTUser": True,
},
examples={
"hello": Path("example/maaxboard/hello")
}
),
# BoardInfo(
# name="imx8mm",
# gcc_cpu="cortex-a53",
Expand Down
8 changes: 8 additions & 0 deletions docs/manual.md
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,14 @@ The `id` should be passed to the `microkit_notify` and `microkit_ppcall` functio

This chapter describes the board support packages that are available in the SDK.

## MaaXBoard

The MaaXBoard is a low-cost ARM SBC based on the NXP i.MX8MQ system-on-chip.

Microkit produces a raw binary file, so when using U-Boot you must execute the image using:

=> go 0x40480000

## TQMa8XQP 1GB

The TQMa8XQP is a system-on-module designed by TQ-Systems GmbH.
Expand Down
55 changes: 55 additions & 0 deletions example/maaxboard/hello/Makefile
Original file line number Diff line number Diff line change
@@ -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)
18 changes: 18 additions & 0 deletions example/maaxboard/hello/hello.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright 2021, Breakaway Consulting Pty. Ltd.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <stdint.h>
#include <microkit.h>

void
init(void)
{
microkit_dbg_puts("hello, world\n");
}

void
notified(microkit_channel ch)
{
}
11 changes: 11 additions & 0 deletions example/maaxboard/hello/hello.system
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2021, Breakaway Consulting Pty. Ltd.
SPDX-License-Identifier: BSD-2-Clause
-->
<system>
<protection_domain name="hello" priority="254">
<program_image path="hello.elf" />
</protection_domain>
</system>
19 changes: 19 additions & 0 deletions loader/src/loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,25 @@ putc(uint8_t ch)
{
*((volatile uint32_t *)(0x00FF000030)) = ch;
}
#elif defined(BOARD_maaxboard)
#define UART_BASE 0x30860000
#define STAT 0x98
#define TRANSMIT 0x40
#define STAT_TDRE (1 << 14)

static void
putc(uint8_t ch)
{
if (ch == '\n') {
// ensure FIFO has space
while (!(*UART_REG(STAT) & STAT_TDRE)) { }
*UART_REG(TRANSMIT) = '\r';
}

// ensure FIFO has space
while (!(*UART_REG(STAT) & STAT_TDRE)) { }
*UART_REG(TRANSMIT) = ch;
}
#else
#error Board not defined
#endif
Expand Down

0 comments on commit d1d722d

Please sign in to comment.