summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/alif/Makefile269
-rw-r--r--ports/alif/alif.mk257
-rw-r--r--ports/alif/mcu/ensemble.ld.S43
3 files changed, 343 insertions, 226 deletions
diff --git a/ports/alif/Makefile b/ports/alif/Makefile
index 068e34575..5cc334a7c 100644
--- a/ports/alif/Makefile
+++ b/ports/alif/Makefile
@@ -1,242 +1,96 @@
-################################################################################
-# Initial setup of Makefile environment
-
BOARD ?= ALIF_ENSEMBLE
BOARD_DIR ?= boards/$(BOARD)
BUILD ?= build-$(BOARD)
-
-ifeq ($(wildcard $(BOARD_DIR)/.),)
-$(error Invalid BOARD specified: $(BOARD_DIR))
-endif
-
-include ../../py/mkenv.mk
-include mpconfigport.mk
-include $(BOARD_DIR)/mpconfigboard.mk
-
-# qstr definitions (must come before including py.mk)
-QSTR_DEFS += qstrdefsport.h
-
-# include py core make definitions
-include $(TOP)/py/py.mk
-include $(TOP)/extmod/extmod.mk
-
-################################################################################
-# Project specific settings and compiler/linker flags
-
-CROSS_COMPILE ?= arm-none-eabi-
+MCU_CORE ?= M55_HP
GIT_SUBMODULES += lib/tinyusb lib/alif_ensemble-cmsis-dfp lib/alif-security-toolkit
PORT ?= /dev/ttyACM0
ALIF_TOOLS ?= ../../lib/alif-security-toolkit/toolkit
-ALIF_DFP_REL_TOP ?= lib/alif_ensemble-cmsis-dfp
-ALIF_DFP_REL_HERE ?= $(TOP)/lib/alif_ensemble-cmsis-dfp
-CMSIS_DIR ?= $(TOP)/lib/cmsis/inc
-
-MCU_CORE ?= M55_HP
-ALIF_CONFIG ?= mcu/$(MCU_CORE)_cfg.json
-LD_FILE ?= mcu/ensemble.ld.S
-
-INC += -I.
-INC += -I$(TOP)
-INC += -I$(BUILD)
-INC += -I$(BOARD_DIR)
-INC += -I$(CMSIS_DIR)
-INC += -I$(ALIF_DFP_REL_HERE)/drivers/include/
-INC += -I$(ALIF_DFP_REL_HERE)/se_services/include/
-INC += -I$(ALIF_DFP_REL_HERE)/ospi_xip/source/ospi
-INC += -I$(ALIF_DFP_REL_HERE)/Device/common/config/
-INC += -I$(ALIF_DFP_REL_HERE)/Device/common/include/
-INC += -I$(ALIF_DFP_REL_HERE)/Device/core/$(MCU_CORE)/config/
-INC += -I$(ALIF_DFP_REL_HERE)/Device/core/$(MCU_CORE)/include/
-INC += -I$(ALIF_DFP_REL_HERE)/Device/$(MCU_SERIES)/$(MCU_VARIANT)/
-INC += -I$(TOP)/lib/tinyusb/src
-INC += -Itinyusb_port
-
-GEN_PIN_MKPINS = mcu/make-pins.py
-GEN_PIN_PREFIX = mcu/pins_prefix.c
-GEN_PINS_BOARD_CSV = $(BOARD_DIR)/pins.csv
-GEN_PINS_SRC = $(BUILD)/pins_board.c
-GEN_PINS_HDR = $(HEADER_BUILD)/pins_board.h
-
-CFLAGS_FPU += -mfloat-abi=hard -mfpu=fpv5-d16
-CFLAGS_CORTEX_M55 += -mthumb -mcpu=cortex-m55 -mtune=cortex-m55 $(CFLAGS_FPU)
-
-CFLAGS += $(INC) -Wall -Werror -std=c99 $(CFLAGS_CORTEX_M55) -nostdlib
-CFLAGS += -Wdouble-promotion -Wfloat-conversion
-CFLAGS += -fdata-sections -ffunction-sections
-CFLAGS += -D$(MCU_CORE) -DCORE_$(MCU_CORE) -DALIF_CMSIS_H="\"$(MCU_CORE).h\""
-
-ifeq ($(MICROPY_FLOAT_IMPL),float)
-CFLAGS += -fsingle-precision-constant
-CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT
-else
-CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
-endif
-
-AFLAGS = -mthumb -march=armv8.1-m.main $(CFLAGS_FPU)
-
-LDFLAGS += -nostdlib
-LDFLAGS += -T$(BUILD)/ensemble.ld -Map=$@.map --cref --gc-sections
-LDFLAGS += --wrap=dcd_event_handler
-# Tune for Debugging or Optimization
-ifeq ($(DEBUG), 1)
-CFLAGS += -Og -ggdb3
-# Disable text compression in debug builds
-MICROPY_ROM_TEXT_COMPRESSION = 0
-else
-CFLAGS += -O2 -DNDEBUG
-endif
-
-LIBS += "$(shell $(CC) $(CFLAGS) -print-libgcc-file-name)"
-
-JLINK_CMD = '\
+JLINK_CMD_PREFIX = \
ExitOnError 1\n\
Device $(JLINK_DEV)\n\
SelectInterface SWD\n\
Speed auto\n\
Connect\n\
Reset\n\
-ShowHWStatus\n\
-LoadFile "$(BUILD)/firmware_toc.bin",0x8057f1c0\n\
-LoadFile "$(BUILD)/firmware.bin",0x80000000\n\
-Reset\n\
-Exit'
-
-################################################################################
-# Source files and libraries
+ShowHWStatus\n
-SRC_O += \
- shared/runtime/gchelper_thumb2.o
+JLINK_CMD_SUFFIX = \
+Reset\n\
+Exit
-SRC_C = \
- alif_flash.c \
- fatfs_port.c \
- machine_pin.c \
- main.c \
- modalif.c \
- mphalport.c \
- mpuart.c \
- msc_disk.c \
- ospi_flash.c \
- pendsv.c \
- system_tick.c \
- se_services.c \
- usbd.c \
- $(wildcard $(BOARD_DIR)/*.c)
+ifeq ($(MCU_CORE),M55_HP)
-ifeq ($(MICROPY_FLOAT_IMPL),float)
-LIBM_SRC_C += $(SRC_LIB_LIBM_C)
-LIBM_SRC_C += $(SRC_LIB_LIBM_SQRT_HW_C)
-$(BUILD)/lib/libm/%.o: CFLAGS += -Wno-maybe-uninitialized
-else
-LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_C)
-LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_SQRT_HW_C)
-$(BUILD)/lib/libm_dbl/%.o: CFLAGS += -Wno-maybe-uninitialized
-endif
+ALIF_TOC_CONFIG = mcu/M55_HP_cfg.json
+ALIF_TOC_APPS = $(BUILD)/M55_HP/firmware.bin
+JLINK_CMD = '\
+$(JLINK_CMD_PREFIX)\
+LoadFile "$(BUILD)/M55_HP/firmware.bin",0x80020000\n\
+$(JLINK_CMD_SUFFIX)'
-SHARED_SRC_C += $(addprefix shared/,\
- libc/string0.c \
- netutils/dhcpserver.c \
- netutils/netutils.c \
- netutils/trace.c \
- readline/readline.c \
- runtime/gchelper_native.c \
- runtime/interrupt_char.c \
- runtime/mpirq.c \
- runtime/pyexec.c \
- runtime/softtimer.c \
- runtime/stdout_helpers.c \
- runtime/sys_stdio_mphal.c \
- timeutils/timeutils.c \
- tinyusb/mp_usbd.c \
- tinyusb/mp_usbd_cdc.c \
- tinyusb/mp_usbd_descriptor.c \
- )
+else ifeq ($(MCU_CORE),M55_HE)
-DRIVERS_SRC_C += $(addprefix drivers/,\
- bus/softspi.c \
- bus/softqspi.c \
- memory/spiflash.c \
- dht/dht.c \
- )
+ALIF_TOC_CONFIG = mcu/M55_HE_cfg.json
+ALIF_TOC_APPS = $(BUILD)/M55_HE/firmware.bin
+JLINK_CMD = '\
+$(JLINK_CMD_PREFIX)\
+LoadFile "$(BUILD)/M55_HE/firmware.bin",0x80320000\n\
+$(JLINK_CMD_SUFFIX)'
-TINYUSB_SRC_C += \
- lib/tinyusb/src/tusb.c \
- lib/tinyusb/src/class/cdc/cdc_device.c \
- lib/tinyusb/src/class/msc/msc_device.c \
- lib/tinyusb/src/common/tusb_fifo.c \
- lib/tinyusb/src/device/usbd.c \
- lib/tinyusb/src/device/usbd_control.c \
- tinyusb_port/tusb_alif_dcd.c \
+else ifeq ($(MCU_CORE),M55_DUAL)
-ALIF_SRC_C += $(addprefix $(ALIF_DFP_REL_TOP)/,\
- Device/common/source/clk.c \
- Device/common/source/mpu_M55.c \
- Device/common/source/system_M55.c \
- Device/common/source/system_utils.c \
- Device/core/$(MCU_CORE)/source/startup_$(MCU_CORE).c \
- drivers/source/adc.c \
- drivers/source/mhu_driver.c \
- drivers/source/mhu_receiver.c \
- drivers/source/mhu_sender.c \
- drivers/source/pinconf.c \
- drivers/source/uart.c \
- drivers/source/utimer.c \
- ospi_xip/source/ospi/ospi_drv.c \
- se_services/source/services_host_application.c \
- se_services/source/services_host_boot.c \
- se_services/source/services_host_clocks.c \
- se_services/source/services_host_cryptocell.c \
- se_services/source/services_host_handler.c \
- se_services/source/services_host_system.c \
- )
+ALIF_TOC_CONFIG = mcu/M55_DUAL_cfg.json
+ALIF_TOC_APPS = $(BUILD)/M55_HP/firmware.bin $(BUILD)/M55_HE/firmware.bin
+JLINK_CMD = '\
+$(JLINK_CMD_PREFIX)\
+LoadFile "$(BUILD)/M55_HP/firmware.bin",0x80020000\n\
+LoadFile "$(BUILD)/M55_HE/firmware.bin",0x80320000\n\
+$(JLINK_CMD_SUFFIX)'
-$(BUILD)/tinyusb_port/tusb_alif_dcd.o: CFLAGS += -Wno-unused-variable -DTUSB_ALIF_NO_IRQ_CFG=1
-$(BUILD)/$(ALIF_DFP_REL_TOP)/se_services/source/services_host_boot.o: CFLAGS += -Wno-stringop-truncation
+else
+$(error Invalid MCU core specified))
+endif
-# List of sources for qstr extraction
-SRC_QSTR += $(SRC_C) $(SHARED_SRC_C) $(GEN_PINS_SRC)
+include ../../py/mkenv.mk
+include mpconfigport.mk
+include $(BOARD_DIR)/mpconfigboard.mk
-OBJ += $(PY_O)
-OBJ += $(addprefix $(BUILD)/, $(SRC_O))
-OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(LIBM_SRC_C:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(SHARED_SRC_C:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(TINYUSB_SRC_C:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(ALIF_SRC_C:.c=.o))
-OBJ += $(GEN_PINS_SRC:.c=.o)
+# include py core make definitions
+include $(TOP)/py/py.mk
+include $(TOP)/extmod/extmod.mk
################################################################################
# Main targets
-.DELETE_ON_ERROR:
-
.PHONY: all
-all: $(BUILD)/firmware_toc.bin
+all: $(BUILD)/firmware.toc.bin
+
+# Force make commands to run the targets every time
+# regardless of whether firmware.toc.bin already exists
+# to detect changes in the source files and rebuild.
+.PHONY: $(BUILD)/M55_HE/firmware.bin
+.PHONY: $(BUILD)/M55_HP/firmware.bin
-$(BUILD)/ensemble.ld: $(LD_FILE)
- $(ECHO) "Preprocess linker script $@"
- $(Q)$(CPP) -P -E $(CFLAGS) $^ > $@
+$(BUILD):
+ $(MKDIR) -p $@
-$(BUILD)/firmware.elf: $(OBJ) $(BUILD)/ensemble.ld
- $(ECHO) "Link $@"
- $(Q)$(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
- $(Q)$(SIZE) $@
+$(BUILD)/M55_HP/firmware.bin:
+ make -f alif.mk MCU_CORE=M55_HP
-$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
- $(Q)$(OBJCOPY) -Obinary $^ $(BUILD)/firmware.bin
+$(BUILD)/M55_HE/firmware.bin:
+ make -f alif.mk MCU_CORE=M55_HE
-$(BUILD)/firmware_toc.bin: $(BUILD)/firmware.bin
+$(BUILD)/firmware.toc.bin: $(ALIF_TOC_APPS)
$(Q)python $(ALIF_TOOLS)/app-gen-toc.py \
- --filename $(abspath $(BUILD)/$(ALIF_TOC_CONFIG)) \
+ --filename $(abspath $(ALIF_TOC_CONFIG)) \
+ --config-dir $(BOARD_DIR) \
--output-dir $(BUILD) \
--firmware-dir $(BUILD) \
--output $@
.PHONY: deploy
-deploy: $(BUILD)/firmware_toc.bin
+deploy: $(BUILD)/firmware.toc.bin
$(ECHO) "Writing $< to the board"
$(Q)python $(ALIF_TOOLS)/app-write-mram.py \
--cfg-part $(ALIF_TOOLKIT_CFG_PART) \
@@ -245,7 +99,7 @@ deploy: $(BUILD)/firmware_toc.bin
--images file:$(BUILD)/application_package.ds
.PHONY: deploy-jlink
-deploy-jlink: $(BUILD)/firmware_toc.bin
+deploy-jlink: $(ALIF_TOC_APPS)
$(Q)echo -e $(JLINK_CMD) | $(JLINK_EXE)
.PHONY: maintenance
@@ -260,17 +114,4 @@ update-system-package:
--cfg-part $(ALIF_TOOLKIT_CFG_PART) \
--port $(PORT)
-################################################################################
-# Remaining make rules
-
-# Use a pattern rule here so that make will only call make-pins.py once to make
-# both pins_board.c and pins_board.h
-$(BUILD)/%_board.c $(HEADER_BUILD)/%_board.h: $(BOARD_DIR)/%.csv $(GEN_PIN_MKPINS) $(GEN_PIN_PREFIX) | $(HEADER_BUILD)
- $(ECHO) "GEN $@"
- $(Q)$(PYTHON) $(GEN_PIN_MKPINS) \
- --board-csv $(GEN_PINS_BOARD_CSV) \
- --prefix $(GEN_PIN_PREFIX) \
- --output-source $(GEN_PINS_SRC) \
- --output-header $(GEN_PINS_HDR)
-
include $(TOP)/py/mkrules.mk
diff --git a/ports/alif/alif.mk b/ports/alif/alif.mk
new file mode 100644
index 000000000..ad69499ec
--- /dev/null
+++ b/ports/alif/alif.mk
@@ -0,0 +1,257 @@
+################################################################################
+# Initial setup of Makefile environment
+
+BOARD ?= ALIF_ENSEMBLE
+BOARD_DIR ?= boards/$(BOARD)
+BUILD ?= build-$(BOARD)/$(MCU_CORE)
+
+ifeq ($(wildcard $(BOARD_DIR)/.),)
+$(error Invalid BOARD specified: $(BOARD_DIR))
+endif
+
+include ../../py/mkenv.mk
+include mpconfigport.mk
+include $(BOARD_DIR)/mpconfigboard.mk
+
+# qstr definitions (must come before including py.mk)
+QSTR_DEFS += qstrdefsport.h
+
+# include py core make definitions
+include $(TOP)/py/py.mk
+include $(TOP)/extmod/extmod.mk
+
+################################################################################
+# Project specific settings and compiler/linker flags
+
+CROSS_COMPILE ?= arm-none-eabi-
+ALIF_DFP_REL_TOP ?= lib/alif_ensemble-cmsis-dfp
+ALIF_DFP_REL_HERE ?= $(TOP)/lib/alif_ensemble-cmsis-dfp
+CMSIS_DIR ?= $(TOP)/lib/cmsis/inc
+
+MCU_CORE ?= M55_HP
+ALIF_CONFIG ?= mcu/$(MCU_CORE)_cfg.json
+LD_FILE ?= mcu/ensemble.ld.S
+
+INC += -I.
+INC += -I$(TOP)
+INC += -I$(BUILD)
+INC += -I$(BOARD_DIR)
+INC += -I$(CMSIS_DIR)
+INC += -I$(ALIF_DFP_REL_HERE)/drivers/include/
+INC += -I$(ALIF_DFP_REL_HERE)/se_services/include
+INC += -I$(ALIF_DFP_REL_HERE)/ospi_xip/source/ospi
+INC += -I$(ALIF_DFP_REL_HERE)/Device/common/config/
+INC += -I$(ALIF_DFP_REL_HERE)/Device/common/include/
+INC += -I$(ALIF_DFP_REL_HERE)/Device/core/$(MCU_CORE)/config/
+INC += -I$(ALIF_DFP_REL_HERE)/Device/core/$(MCU_CORE)/include/
+INC += -I$(ALIF_DFP_REL_HERE)/Device/$(MCU_SERIES)/$(MCU_VARIANT)/
+INC += -I$(TOP)/lib/tinyusb/src
+INC += -Itinyusb_port
+
+GEN_PIN_MKPINS = mcu/make-pins.py
+GEN_PIN_PREFIX = mcu/pins_prefix.c
+GEN_PINS_BOARD_CSV = $(BOARD_DIR)/pins.csv
+GEN_PINS_SRC = $(BUILD)/pins_board.c
+GEN_PINS_HDR = $(HEADER_BUILD)/pins_board.h
+
+CFLAGS_FPU += -mfloat-abi=hard -mfpu=fpv5-d16
+
+CFLAGS += $(INC) \
+ -std=c99 \
+ -Wall \
+ -Werror \
+ -Wdouble-promotion \
+ -Wfloat-conversion \
+ -mthumb \
+ -mcpu=cortex-m55 \
+ -mtune=cortex-m55 \
+ $(CFLAGS_FPU) \
+ -march=armv8.1-m.main+fp+mve.fp \
+ -nostdlib \
+ -fdata-sections \
+ -ffunction-sections \
+ -D$(MCU_CORE)=1 \
+ -DCORE_$(MCU_CORE) \
+ -DALIF_CMSIS_H="\"$(MCU_CORE).h\""
+
+ifeq ($(MICROPY_FLOAT_IMPL),float)
+CFLAGS += -fsingle-precision-constant
+CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT
+else
+CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
+endif
+
+# Tune for Debugging or Optimization
+ifeq ($(DEBUG), 1)
+CFLAGS += -Og -ggdb3
+# Disable text compression in debug builds
+MICROPY_ROM_TEXT_COMPRESSION = 0
+else
+CFLAGS += -O2 -DNDEBUG
+endif
+
+CFLAGS += $(CFLAGS_EXTRA)
+
+AFLAGS = -mthumb -march=armv8.1-m.main+fp+mve.fp $(CFLAGS_FPU)
+
+LDFLAGS += -nostdlib \
+ -T$(BUILD)/ensemble.ld \
+ -Map=$@.map \
+ --cref \
+ --gc-sections \
+ --print-memory-usage
+ifeq ($(MCU_CORE),M55_HP)
+LDFLAGS += --wrap=dcd_event_handler
+endif
+
+LIBS += "$(shell $(CC) $(CFLAGS) -print-libgcc-file-name)"
+
+################################################################################
+# Source files and libraries
+
+SRC_O += \
+ shared/runtime/gchelper_thumb2.o
+
+SRC_C = \
+ alif_flash.c \
+ fatfs_port.c \
+ machine_pin.c \
+ main.c \
+ modalif.c \
+ mphalport.c \
+ mpuart.c \
+ msc_disk.c \
+ ospi_flash.c \
+ pendsv.c \
+ system_tick.c \
+ se_services.c \
+ usbd.c \
+ $(wildcard $(BOARD_DIR)/*.c)
+
+ifeq ($(MICROPY_FLOAT_IMPL),float)
+LIBM_SRC_C += $(SRC_LIB_LIBM_C)
+LIBM_SRC_C += $(SRC_LIB_LIBM_SQRT_HW_C)
+$(BUILD)/lib/libm/%.o: CFLAGS += -Wno-maybe-uninitialized
+else
+LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_C)
+LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_SQRT_HW_C)
+$(BUILD)/lib/libm_dbl/%.o: CFLAGS += -Wno-maybe-uninitialized
+endif
+
+SHARED_SRC_C += $(addprefix shared/,\
+ libc/string0.c \
+ netutils/dhcpserver.c \
+ netutils/netutils.c \
+ netutils/trace.c \
+ readline/readline.c \
+ runtime/gchelper_native.c \
+ runtime/interrupt_char.c \
+ runtime/mpirq.c \
+ runtime/pyexec.c \
+ runtime/softtimer.c \
+ runtime/stdout_helpers.c \
+ runtime/sys_stdio_mphal.c \
+ timeutils/timeutils.c \
+ tinyusb/mp_usbd.c \
+ tinyusb/mp_usbd_cdc.c \
+ tinyusb/mp_usbd_descriptor.c \
+ )
+
+DRIVERS_SRC_C += $(addprefix drivers/,\
+ bus/softspi.c \
+ bus/softqspi.c \
+ memory/spiflash.c \
+ dht/dht.c \
+ )
+
+TINYUSB_SRC_C += \
+ lib/tinyusb/src/tusb.c \
+ lib/tinyusb/src/class/cdc/cdc_device.c \
+ lib/tinyusb/src/class/msc/msc_device.c \
+ lib/tinyusb/src/common/tusb_fifo.c \
+ lib/tinyusb/src/device/usbd.c \
+ lib/tinyusb/src/device/usbd_control.c \
+ tinyusb_port/tusb_alif_dcd.c \
+
+ALIF_SRC_C += $(addprefix $(ALIF_DFP_REL_TOP)/,\
+ Device/common/source/clk.c \
+ Device/common/source/mpu_M55.c \
+ Device/common/source/system_M55.c \
+ Device/common/source/system_utils.c \
+ Device/common/source/tcm_partition.c \
+ Device/common/source/tgu_M55.c \
+ Device/core/$(MCU_CORE)/source/startup_$(MCU_CORE).c \
+ drivers/source/adc.c \
+ drivers/source/mhu_driver.c \
+ drivers/source/mhu_receiver.c \
+ drivers/source/mhu_sender.c \
+ drivers/source/pinconf.c \
+ drivers/source/uart.c \
+ drivers/source/utimer.c \
+ ospi_xip/source/ospi/ospi_drv.c \
+ se_services/source/services_host_application.c \
+ se_services/source/services_host_boot.c \
+ se_services/source/services_host_clocks.c \
+ se_services/source/services_host_cryptocell.c \
+ se_services/source/services_host_handler.c \
+ se_services/source/services_host_system.c \
+ se_services/source/services_host_power.c \
+ se_services/source/services_host_maintenance.c \
+ )
+
+$(BUILD)/tinyusb_port/tusb_alif_dcd.o: CFLAGS += -Wno-unused-variable -DTUSB_ALIF_NO_IRQ_CFG=1
+$(BUILD)/$(ALIF_DFP_REL_TOP)/se_services/source/services_host_boot.o: CFLAGS += -Wno-stringop-truncation
+$(BUILD)/$(ALIF_DFP_REL_TOP)/se_services/source/services_host_system.o: CFLAGS += -Wno-maybe-uninitialized
+
+# List of sources for qstr extraction
+SRC_QSTR += $(SRC_C) $(SHARED_SRC_C) $(GEN_PINS_SRC)
+
+OBJ += $(PY_O)
+OBJ += $(addprefix $(BUILD)/, $(SRC_O))
+OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(LIBM_SRC_C:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(SHARED_SRC_C:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(TINYUSB_SRC_C:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(ALIF_SRC_C:.c=.o))
+OBJ += $(GEN_PINS_SRC:.c=.o)
+
+################################################################################
+# Main targets
+
+.PHONY: all erase deploy gdb objdump release
+
+.DELETE_ON_ERROR:
+
+obj: $(OBJ)
+all: $(BUILD)/firmware.bin
+
+$(BUILD):
+ $(MKDIR) -p $@
+
+$(BUILD)/ensemble.ld: $(LD_FILE)
+ $(ECHO) "Preprocess linker script $@"
+ $(Q)$(CPP) -P -E $(CFLAGS) $^ > $@
+
+$(BUILD)/firmware.elf: $(OBJ) $(BUILD)/ensemble.ld
+ $(ECHO) "Link $@"
+ $(Q)$(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
+ $(Q)$(SIZE) $@
+
+$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
+ $(Q)$(OBJCOPY) -Obinary $^ $(BUILD)/firmware.bin
+
+################################################################################
+# Remaining make rules
+
+# Use a pattern rule here so that make will only call make-pins.py once to make
+# both pins_board.c and pins_board.h
+$(BUILD)/%_board.c $(HEADER_BUILD)/%_board.h: $(BOARD_DIR)/%.csv $(GEN_PIN_MKPINS) $(GEN_PIN_PREFIX) | $(HEADER_BUILD)
+ $(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(GEN_PIN_MKPINS) \
+ --board-csv $(GEN_PINS_BOARD_CSV) \
+ --prefix $(GEN_PIN_PREFIX) \
+ --output-source $(GEN_PINS_SRC) \
+ --output-header $(GEN_PINS_HDR)
+
+include $(TOP)/py/mkrules.mk
diff --git a/ports/alif/mcu/ensemble.ld.S b/ports/alif/mcu/ensemble.ld.S
index 198641ba3..8129a749e 100644
--- a/ports/alif/mcu/ensemble.ld.S
+++ b/ports/alif/mcu/ensemble.ld.S
@@ -24,25 +24,44 @@
* THE SOFTWARE.
*/
+#ifdef CORE_M55_HP
+__DTCM_SIZE = 1024K;
+#else
+__DTCM_SIZE = 256K;
+#endif
+
// Entry Point
ENTRY(Reset_Handler)
MEMORY
{
- ROM (rx) : ORIGIN = 0x80000000, LENGTH = 0x0057F000
- ITCM (rwx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
- #ifdef CORE_M55_HP
- DTCM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00100000
- #else
- DTCM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000
- #endif
- SRAM0 (rwx) : ORIGIN = 0x02000000, LENGTH = 0x00400000
- SRAM1 (rwx) : ORIGIN = 0x08000000, LENGTH = 0x00280000
+ MRAM_BL (rx) : ORIGIN = 0x80000000, LENGTH = 128K
+ MRAM_HP (rx) : ORIGIN = 0x80020000, LENGTH = 3072K
+ MRAM_HE (rx) : ORIGIN = 0x80320000, LENGTH = 1400K
+ MRAM_FS (rx) : ORIGIN = 0x8047e000, LENGTH = 1024K
+ MRAM_TOC (rx): ORIGIN = 0x8057e000, LENGTH = 8K
+ ITCM (rwx) : ORIGIN = 0x00000000, LENGTH = 256K
+ DTCM (rwx) : ORIGIN = 0x20000000, LENGTH = __DTCM_SIZE
+ SRAM0 (rwx) : ORIGIN = 0x02000000, LENGTH = 4096K
+ SRAM1 (rwx) : ORIGIN = 0x08000000, LENGTH = 2560K
+ SRAM6_A (rw) : ORIGIN = 0x62000000, LENGTH = 1024K
+ SRAM6_B (rw) : ORIGIN = 0x62400000, LENGTH = 1024K
+ SRAM7 (rw) : ORIGIN = 0x63000000, LENGTH = 512K
+ SRAM8 (rw) : ORIGIN = 0x63200000, LENGTH = 2048K
+ SRAM9_A (rw) : ORIGIN = 0x60000000, LENGTH = 256K
+ SRAM9_B (rw) : ORIGIN = 0x60040000, LENGTH = 512K
}
-__STACK_SIZE = 0x00004000;
-__HEAP_SIZE = 0x00004000;
-__MP_HEAP_SIZE = 0x00040000;
+#ifdef CORE_M55_HP
+REGION_ALIAS("ROM", MRAM_HP);
+__MP_HEAP_SIZE = 256K;
+#else
+REGION_ALIAS("ROM", MRAM_HE);
+__MP_HEAP_SIZE = 128K;
+#endif
+
+__STACK_SIZE = 16K;
+__HEAP_SIZE = 16K;
SECTIONS
{