summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules3
-rw-r--r--Makefile57
-rw-r--r--README.md22
-rw-r--r--bsp/coreip-e31-arty/design.dts4
-rw-r--r--bsp/coreip-e31-arty/mee.h11
-rw-r--r--bsp/coreip-e31/design.dts4
-rw-r--r--bsp/coreip-e31/mee.h11
-rw-r--r--bsp/coreip-s51-arty/design.dts4
-rw-r--r--bsp/coreip-s51-arty/mee.h11
-rw-r--r--bsp/coreip-s51/design.dts4
-rw-r--r--bsp/coreip-s51/mee.h11
-rw-r--r--scripts/standalone.mk2
m---------software/example-pmp0
m---------software/hello0
14 files changed, 107 insertions, 37 deletions
diff --git a/.gitmodules b/.gitmodules
index b92428d..ec643f0 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -25,3 +25,6 @@
[submodule "software/return-pass"]
path = software/return-pass
url = https://github.com/sifive/example-return-pass.git
+[submodule "software/example-pmp"]
+ path = software/example-pmp
+ url = https://github.com/sifive/example-pmp.git
diff --git a/Makefile b/Makefile
index 18f3345..994d3d7 100644
--- a/Makefile
+++ b/Makefile
@@ -15,9 +15,14 @@ endif
# Allowed values are 'legacy' and 'mee'
BSP ?= legacy
+# Use BOARD as a synonym for TARGET
+ifneq ($(BOARD),)
+TARGET ?= $(BOARD)
+endif
+
ifeq ($(BSP),legacy)
BSP_SUBDIR ?= env
-BOARD ?= freedom-e300-hifive1
+TARGET ?= freedom-e300-hifive1
PROGRAM ?= demo_gpio
LINK_TARGET ?= flash
GDB_PORT ?= 3333
@@ -26,11 +31,11 @@ else # MEE
BSP = mee
BSP_SUBDIR ?=
PROGRAM ?= hello
-BOARD ?= sifive-hifive1
+TARGET ?= sifive-hifive1
endif # $(BSP)
-BOARD_ROOT ?= $(abspath .)
+TARGET_ROOT ?= $(abspath .)
PROGRAM_ROOT ?= $(abspath .)
SRC_DIR = $(PROGRAM_ROOT)/software/$(PROGRAM)
@@ -44,12 +49,12 @@ PROGRAM_HEX = $(SRC_DIR)/$(PROGRAM).hex
# Finds the directory in which this BSP is located, ensuring that there is
# exactly one.
-BSP_DIR := $(wildcard $(BOARD_ROOT)/bsp/$(BSP_SUBDIR)/$(BOARD))
+BSP_DIR := $(wildcard $(TARGET_ROOT)/bsp/$(BSP_SUBDIR)/$(TARGET))
ifeq ($(words $(BSP_DIR)),0)
-$(error Unable to find BSP for $(BOARD), expected to find either "bsp/$(BOARD)" or "bsp-addons/$(BOARD)")
+$(error Unable to find BSP for $(TARGET), expected to find either "bsp/$(TARGET)" or "bsp-addons/$(TARGET)")
endif
ifneq ($(words $(BSP_DIR)),1)
-$(error Found multiple BSPs for $(BOARD): "$(BSP_DIR)")
+$(error Found multiple BSPs for $(TARGET): "$(BSP_DIR)")
endif
#############################################################
@@ -74,26 +79,26 @@ help:
@echo " SiFive Freedom E Software Development Kit "
@echo " Makefile targets:"
@echo ""
- @echo " software BSP=mee [PROGRAM=$(PROGRAM) BOARD=$(BOARD)]:"
+ @echo " software BSP=mee [PROGRAM=$(PROGRAM) TARGET=$(TARGET)]:"
@echo " Build a software program to load with the"
@echo " debugger."
@echo ""
- @echo " mee BSP=mee [BOARD=$(BOARD)]"
- @echo " Build the MEE library for BOARD"
+ @echo " mee BSP=mee [TARGET=$(TARGET)]"
+ @echo " Build the MEE library for TARGET"
@echo ""
- @echo " clean BSP=mee [PROGRAM=$(PROGRAM) BOARD=$(BOARD)]:"
+ @echo " clean BSP=mee [PROGRAM=$(PROGRAM) TARGET=$(TARGET)]:"
@echo " Clean compiled objects for a specified "
@echo " software program."
@echo ""
- @echo " upload BSP=mee [PROGRAM=$(PROGRAM) BOARD=$(BOARD)]:"
+ @echo " upload BSP=mee [PROGRAM=$(PROGRAM) TARGET=$(TARGET)]:"
@echo " Launch OpenOCD to flash your program to the"
@echo " on-board Flash."
@echo ""
- @echo " debug BSP=mee [PROGRAM=$(PROGRAM) BOARD=$(BOARD)]:"
+ @echo " debug BSP=mee [PROGRAM=$(PROGRAM) TARGET=$(TARGET)]:"
@echo " Launch OpenOCD and attach GDB to the running program."
@echo ""
@echo " standalone BSP=mee STANDALONE_DEST=/path/to/desired/location"
- @echo " [PROGRAM=$(PROGRAM) BOARD=$(BOARD)]:"
+ @echo " [PROGRAM=$(PROGRAM) TARGET=$(TARGET)]:"
@echo " Export a program for a single target into a standalone"
@echo " project directory at STANDALONE_DEST."
@echo ""
@@ -113,20 +118,20 @@ clean:
ifeq ($(BSP),mee)
# MEE boards are any folders that aren't the Legacy BSP or update-targets.sh
-EXCLUDE_BOARD_DIRS = drivers env include libwrap update-targets.sh
-list-boards:
- @echo bsp-list: $(sort $(filter-out $(EXCLUDE_BOARD_DIRS),$(notdir $(wildcard bsp/*))))
+EXCLUDE_TARGET_DIRS = drivers env include libwrap update-targets.sh
+list-targets:
+ @echo bsp-list: $(sort $(filter-out $(EXCLUDE_TARGET_DIRS),$(notdir $(wildcard bsp/*))))
# MEE programs are any submodules in the software folder
list-programs:
@echo program-list: $(shell grep -o '= software/.*$$' .gitmodules | sed 's/.*\///')
-list-options: list-programs list-boards
+list-options: list-programs list-targets
endif
#############################################################
-# Compiles an instance of the MEE targeted at $(BOARD)
+# Compiles an instance of the MEE targeted at $(TARGET)
#############################################################
ifeq ($(BSP),mee)
MEE_SOURCE_PATH ?= freedom-mee
@@ -146,7 +151,7 @@ $(BSP_DIR)/build/Makefile:
--prefix=$(abspath $(BSP_DIR)/install) \
--disable-maintainer-mode \
--with-preconfigured \
- --with-machine-name=$(BOARD) \
+ --with-machine-name=$(TARGET) \
--with-machine-header=$(abspath $(MEE_HEADER)) \
--with-machine-ldscript=$(abspath $(MEE_LDSCRIPT)) \
--with-builtin-libgloss
@@ -158,7 +163,7 @@ $(BSP_DIR)/install/stamp: $(BSP_DIR)/build/Makefile
$(BSP_DIR)/install/lib/libriscv%.a: $(BSP_DIR)/install/stamp ;@:
-$(BSP_DIR)/install/lib/libmee.a: $(BSP_DIR)/install/lib/libriscv__mmachine__$(BOARD).a
+$(BSP_DIR)/install/lib/libmee.a: $(BSP_DIR)/install/lib/libriscv__mmachine__$(TARGET).a
cp $< $@
$(BSP_DIR)/install/lib/libmee-gloss.a: $(BSP_DIR)/install/lib/libriscv__menv__mee.a
@@ -253,11 +258,11 @@ PROGRAM_DIR=$(dir $(PROGRAM_ELF))
.PHONY: software_clean
clean: software_clean
software_clean:
- $(MAKE) -C $(PROGRAM_DIR) CC=$(RISCV_GCC) RISCV_ARCH=$(RISCV_ARCH) RISCV_ABI=$(RISCV_ABI) AR=$(RISCV_AR) BSP_BASE=$(abspath bsp) BOARD=$(BOARD) LINK_TARGET=$(LINK_TARGET) clean
+ $(MAKE) -C $(PROGRAM_DIR) CC=$(RISCV_GCC) RISCV_ARCH=$(RISCV_ARCH) RISCV_ABI=$(RISCV_ABI) AR=$(RISCV_AR) BSP_BASE=$(abspath bsp) TARGET=$(TARGET) LINK_TARGET=$(LINK_TARGET) clean
.PHONY: software
software: software_clean
- $(MAKE) -C $(PROGRAM_DIR) CC=$(RISCV_GCC) RISCV_ARCH=$(RISCV_ARCH) RISCV_ABI=$(RISCV_ABI) AR=$(RISCV_AR) BSP_BASE=$(abspath bsp) BOARD=$(BOARD) LINK_TARGET=$(LINK_TARGET)
+ $(MAKE) -C $(PROGRAM_DIR) CC=$(RISCV_GCC) RISCV_ARCH=$(RISCV_ARCH) RISCV_ABI=$(RISCV_ABI) AR=$(RISCV_AR) BSP_BASE=$(abspath bsp) TARGET=$(TARGET) LINK_TARGET=$(LINK_TARGET)
dasm: software $(RISCV_OBJDUMP)
$(RISCV_OBJDUMP) -D $(PROGRAM_ELF)
@@ -277,14 +282,14 @@ endif
ifeq ($(BSP),mee)
upload: $(PROGRAM_ELF)
- scripts/upload --elf $(PROGRAM_ELF) --openocd $(RISCV_OPENOCD) --gdb $(RISCV_GDB) --openocd-config bsp/$(BOARD)/openocd.cfg
+ scripts/upload --elf $(PROGRAM_ELF) --openocd $(RISCV_OPENOCD) --gdb $(RISCV_GDB) --openocd-config bsp/$(TARGET)/openocd.cfg
debug: $(PROGRAM_ELF)
- scripts/debug --elf $(PROGRAM_ELF) --openocd $(RISCV_OPENOCD) --gdb $(RISCV_GDB) --openocd-config bsp/$(BOARD)/openocd.cfg
+ scripts/debug --elf $(PROGRAM_ELF) --openocd $(RISCV_OPENOCD) --gdb $(RISCV_GDB) --openocd-config bsp/$(TARGET)/openocd.cfg
else # BSP != mee
-OPENOCDCFG ?= bsp/env/$(BOARD)/openocd.cfg
+OPENOCDCFG ?= bsp/env/$(TARGET)/openocd.cfg
OPENOCDARGS += -f $(OPENOCDCFG)
GDB_UPLOAD_ARGS ?= --batch
@@ -301,7 +306,7 @@ GDB_UPLOAD_CMDS += -ex "quit"
upload:
$(RISCV_OPENOCD) $(OPENOCDARGS) & \
$(RISCV_GDB) $(PROGRAM_DIR)/$(PROGRAM) $(GDB_UPLOAD_ARGS) $(GDB_UPLOAD_CMDS) && \
- echo "Successfully uploaded '$(PROGRAM)' to $(BOARD)."
+ echo "Successfully uploaded '$(PROGRAM)' to $(TARGET)."
#############################################################
# This Section is for launching the debugger
diff --git a/README.md b/README.md
index 4a3e7c6..7cce370 100644
--- a/README.md
+++ b/README.md
@@ -75,6 +75,8 @@ of Freedom E SDK.
- Demonstrates how to register a handler for and trigger a timer interrupt
- local-interrupt
- Demonstrates how to register a handler for and trigger a local interrupt
+ - example-pmp
+ - Demonstrates how to configure a Physical Memory Protection (PMP) region
#### (Deprecated) Legacy Freedom E SDK Library ####
@@ -194,7 +196,7 @@ example commands.
To compile a bare-metal RISC-V program:
```
-make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] software
+make BSP=mee [PROGRAM=hello] [TARGET=sifive-hifive1] software
```
The square brackets in the above command indicate optional parameters for the
@@ -204,7 +206,7 @@ If, for example, you wished to build the `timer-interrupt` example for the S51
Arty FPGA Evaluation target, you would instead run the command
```
-make BSP=mee PROGRAM=timer-interrupt BOARD=coreip-s51-arty software
+make BSP=mee PROGRAM=timer-interrupt TARGET=coreip-s51-arty software
```
#### Building a Legacy Example ####
@@ -214,38 +216,38 @@ The legacy examples can still be built by omitting `BSP=mee` or by substituting
HiFive 1, run:
```
-make PROGRAM=demo_gpio BOARD=freedom-e300-hifive1 software
+make PROGRAM=demo_gpio TARGET=freedom-e300-hifive1 software
```
#### Uploading to the Target Board ####
```
-make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] upload
+make BSP=mee [PROGRAM=hello] [TARGET=sifive-hifive1] upload
```
#### Debugging a Target Program ####
```
-make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] debug
+make BSP=mee [PROGRAM=hello] [TARGET=sifive-hifive1] debug
```
#### Cleaning a Target Program Build Directory ####
```
-make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] clean
+make BSP=mee [PROGRAM=hello] [TARGET=sifive-hifive1] clean
```
#### Create a Standalone Project ####
You can export a program to a standalone project directory using the `standalone`
-target. The resulting project will be locked to a specific target `BOARD`. Note
+target. The resulting project will be locked to a specific `TARGET`. Note
that this functionality is only supported for Freedom Metal programs, not the
Legacy Freedom E SDK.
`STANDALONE_DEST` is a required argument to provide the desired project location.
```
-make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] STANDALONE_DEST=/path/to/desired/location standalone
+make BSP=mee [PROGRAM=hello] [TARGET=sifive-hifive1] STANDALONE_DEST=/path/to/desired/location standalone
```
Run `make help` for more commands.
@@ -261,8 +263,8 @@ this section to describe the updated build steps.
After setting up the software and debug toolchains, you can build and
execute everyone's favorite benchmark as follows:
-- Compile the benchmark with the command `make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone`. Note that a slightly different linker file is used for Dhrystone which stores read only data in DTIM instead of external flash.
-- Run on the HiFive1 board with the command `make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone`.
+- Compile the benchmark with the command `make software TARGET=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone`. Note that a slightly different linker file is used for Dhrystone which stores read only data in DTIM instead of external flash.
+- Run on the HiFive1 board with the command `make upload TARGET=freedom-e300-hifive1 PROGRAM=dhrystone`.
This will take a few minutes. Sample output is provided below.
- Compute DMIPS by dividing the Dhrystones per Second result by 1757, which
was the VAX 11/780's performance. In the example below, 729927 / 1757 =
diff --git a/bsp/coreip-e31-arty/design.dts b/bsp/coreip-e31-arty/design.dts
index 3e12f77..96698e9 100644
--- a/bsp/coreip-e31-arty/design.dts
+++ b/bsp/coreip-e31-arty/design.dts
@@ -45,6 +45,10 @@
compatible = "fixed-clock";
clock-frequency = <32500000>;
};
+ pmp: pmp@0 {
+ compatible = "riscv,pmp";
+ regions = <8>;
+ };
L1: clint@2000000 {
compatible = "riscv,clint0";
interrupts-extended = <&L3 3 &L3 7>;
diff --git a/bsp/coreip-e31-arty/mee.h b/bsp/coreip-e31-arty/mee.h
index 87d8b7a..80c7822 100644
--- a/bsp/coreip-e31-arty/mee.h
+++ b/bsp/coreip-e31-arty/mee.h
@@ -27,6 +27,7 @@
#include <mee/drivers/fixed-clock.h>
#include <mee/drivers/sifive,gpio0.h>
#include <mee/drivers/sifive,uart0.h>
+#include <mee/pmp.h>
#include <mee/drivers/sifive,local-external-interrupts0.h>
#include <mee/drivers/sifive,global-external-interrupts0.h>
#include <mee/drivers/sifive,gpio-leds.h>
@@ -69,6 +70,9 @@ struct __mee_driver_sifive_gpio0 __mee_dt_gpio_20002000;
asm (".weak __mee_dt_serial_20000000");
struct __mee_driver_sifive_uart0 __mee_dt_serial_20000000;
+asm (".weak __mee_dt_pmp_0");
+struct mee_pmp __mee_dt_pmp_0;
+
/* From led@0red */
asm (".weak __mee_dt_led_0red");
struct __mee_driver_sifive_gpio_led __mee_dt_led_0red;
@@ -401,6 +405,13 @@ struct __mee_driver_sifive_gpio_switch __mee_dt_switch_3 = {
.label = "SW3",
};
+/* From pmp@0 */
+struct mee_pmp __mee_dt_pmp_0 = {
+ .num_regions = 8UL,
+};
+
+#define __MEE_DT_PMP_HANDLE (&__mee_dt_pmp_0)
+
/* From teststatus@4000 */
struct __mee_driver_sifive_test0 __mee_dt_teststatus_4000 = {
.vtable = &__mee_driver_vtable_sifive_test0,
diff --git a/bsp/coreip-e31/design.dts b/bsp/coreip-e31/design.dts
index 3411ccf..f7e9868 100644
--- a/bsp/coreip-e31/design.dts
+++ b/bsp/coreip-e31/design.dts
@@ -33,6 +33,10 @@
#size-cells = <1>;
compatible = "SiFive,FE310G-soc", "fe310-soc", "sifive-soc", "simple-bus";
ranges;
+ pmp: pmp@0 {
+ compatible = "riscv,pmp";
+ regions = <8>;
+ };
L12: ahb-periph-port@20000000 {
#address-cells = <1>;
#size-cells = <1>;
diff --git a/bsp/coreip-e31/mee.h b/bsp/coreip-e31/mee.h
index a520854..068af63 100644
--- a/bsp/coreip-e31/mee.h
+++ b/bsp/coreip-e31/mee.h
@@ -18,6 +18,7 @@
#include <mee/drivers/riscv,cpu.h>
#include <mee/drivers/riscv,clint0.h>
#include <mee/drivers/riscv,plic0.h>
+#include <mee/pmp.h>
#include <mee/drivers/sifive,local-external-interrupts0.h>
#include <mee/drivers/sifive,global-external-interrupts0.h>
#include <mee/drivers/sifive,test0.h>
@@ -45,6 +46,9 @@ struct __mee_driver_sifive_local_external_interrupts0 __mee_dt_local_external_in
asm (".weak __mee_dt_global_external_interrupts");
struct __mee_driver_sifive_global_external_interrupts0 __mee_dt_global_external_interrupts;
+asm (".weak __mee_dt_pmp_0");
+struct mee_pmp __mee_dt_pmp_0;
+
/* From teststatus@4000 */
asm (".weak __mee_dt_teststatus_4000");
struct __mee_driver_sifive_test0 __mee_dt_teststatus_4000;
@@ -286,6 +290,13 @@ struct __mee_driver_sifive_global_external_interrupts0 __mee_dt_global_external_
#define __MEE_DT_GLOBAL_EXTERNAL_INTERRUPTS_HANDLE (&__mee_dt_global_external_interrupts.irc)
+/* From pmp@0 */
+struct mee_pmp __mee_dt_pmp_0 = {
+ .num_regions = 8UL,
+};
+
+#define __MEE_DT_PMP_HANDLE (&__mee_dt_pmp_0)
+
/* From teststatus@4000 */
struct __mee_driver_sifive_test0 __mee_dt_teststatus_4000 = {
.vtable = &__mee_driver_vtable_sifive_test0,
diff --git a/bsp/coreip-s51-arty/design.dts b/bsp/coreip-s51-arty/design.dts
index 71b9ea6..ea349bb 100644
--- a/bsp/coreip-s51-arty/design.dts
+++ b/bsp/coreip-s51-arty/design.dts
@@ -45,6 +45,10 @@
compatible = "fixed-clock";
clock-frequency = <32500000>;
};
+ pmp: pmp@0 {
+ compatible = "riscv,pmp";
+ regions = <8>;
+ };
L1: clint@2000000 {
compatible = "riscv,clint0";
interrupts-extended = <&L3 3 &L3 7>;
diff --git a/bsp/coreip-s51-arty/mee.h b/bsp/coreip-s51-arty/mee.h
index 0e9cc9c..d8a3ebb 100644
--- a/bsp/coreip-s51-arty/mee.h
+++ b/bsp/coreip-s51-arty/mee.h
@@ -27,6 +27,7 @@
#include <mee/drivers/fixed-clock.h>
#include <mee/drivers/sifive,gpio0.h>
#include <mee/drivers/sifive,uart0.h>
+#include <mee/pmp.h>
#include <mee/drivers/sifive,local-external-interrupts0.h>
#include <mee/drivers/sifive,global-external-interrupts0.h>
#include <mee/drivers/sifive,gpio-leds.h>
@@ -69,6 +70,9 @@ struct __mee_driver_sifive_gpio0 __mee_dt_gpio_20002000;
asm (".weak __mee_dt_serial_20000000");
struct __mee_driver_sifive_uart0 __mee_dt_serial_20000000;
+asm (".weak __mee_dt_pmp_0");
+struct mee_pmp __mee_dt_pmp_0;
+
/* From led@0red */
asm (".weak __mee_dt_led_0red");
struct __mee_driver_sifive_gpio_led __mee_dt_led_0red;
@@ -401,6 +405,13 @@ struct __mee_driver_sifive_gpio_switch __mee_dt_switch_3 = {
.label = "SW3",
};
+/* From pmp@0 */
+struct mee_pmp __mee_dt_pmp_0 = {
+ .num_regions = 8UL,
+};
+
+#define __MEE_DT_PMP_HANDLE (&__mee_dt_pmp_0)
+
/* From teststatus@4000 */
struct __mee_driver_sifive_test0 __mee_dt_teststatus_4000 = {
.vtable = &__mee_driver_vtable_sifive_test0,
diff --git a/bsp/coreip-s51/design.dts b/bsp/coreip-s51/design.dts
index 000ff94..a1cb9fc 100644
--- a/bsp/coreip-s51/design.dts
+++ b/bsp/coreip-s51/design.dts
@@ -33,6 +33,10 @@
#size-cells = <2>;
compatible = "SiFive,FE510G-soc", "fe510-soc", "sifive-soc", "simple-bus";
ranges;
+ pmp: pmp@0 {
+ compatible = "riscv,pmp";
+ regions = <8>;
+ };
L12: axi4-periph-port@20000000 {
#address-cells = <2>;
#size-cells = <2>;
diff --git a/bsp/coreip-s51/mee.h b/bsp/coreip-s51/mee.h
index e73d681..a6d3add 100644
--- a/bsp/coreip-s51/mee.h
+++ b/bsp/coreip-s51/mee.h
@@ -18,6 +18,7 @@
#include <mee/drivers/riscv,cpu.h>
#include <mee/drivers/riscv,clint0.h>
#include <mee/drivers/riscv,plic0.h>
+#include <mee/pmp.h>
#include <mee/drivers/sifive,local-external-interrupts0.h>
#include <mee/drivers/sifive,global-external-interrupts0.h>
#include <mee/drivers/sifive,test0.h>
@@ -45,6 +46,9 @@ struct __mee_driver_sifive_local_external_interrupts0 __mee_dt_local_external_in
asm (".weak __mee_dt_global_external_interrupts");
struct __mee_driver_sifive_global_external_interrupts0 __mee_dt_global_external_interrupts;
+asm (".weak __mee_dt_pmp_0");
+struct mee_pmp __mee_dt_pmp_0;
+
/* From teststatus@4000 */
asm (".weak __mee_dt_teststatus_4000");
struct __mee_driver_sifive_test0 __mee_dt_teststatus_4000;
@@ -414,6 +418,13 @@ struct __mee_driver_sifive_global_external_interrupts0 __mee_dt_global_external_
#define __MEE_DT_GLOBAL_EXTERNAL_INTERRUPTS_HANDLE (&__mee_dt_global_external_interrupts.irc)
+/* From pmp@0 */
+struct mee_pmp __mee_dt_pmp_0 = {
+ .num_regions = 8UL,
+};
+
+#define __MEE_DT_PMP_HANDLE (&__mee_dt_pmp_0)
+
/* From teststatus@4000 */
struct __mee_driver_sifive_test0 __mee_dt_teststatus_4000 = {
.vtable = &__mee_driver_vtable_sifive_test0,
diff --git a/scripts/standalone.mk b/scripts/standalone.mk
index 244bb7c..a73093f 100644
--- a/scripts/standalone.mk
+++ b/scripts/standalone.mk
@@ -13,7 +13,7 @@ SRC_DIR ?= $(abspath src)
# There must be a settings makefile fragment in the BSP's board directory.
ifeq ($(wildcard $(BSP_DIR)/settings.mk),)
-$(error Unable to find BSP for $(BOARD), expected to find $(BSP_DIR)/settings.mk)
+$(error Unable to find BSP for $(TARGET), expected to find $(BSP_DIR)/settings.mk)
endif
# Include the BSP settings
diff --git a/software/example-pmp b/software/example-pmp
new file mode 160000
+Subproject 1f19359da8ef994230193f3a1ca3bba051a1ec4
diff --git a/software/hello b/software/hello
-Subproject 6c63a15e2fb2d63713a4af91a50f6b087c6db1f
+Subproject a9212fbe78293ae408259b98d05628e38c9071f