aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan <892930505@qq.com>2020-10-30 05:27:39 +0800
committerGitHub <noreply@github.com>2020-10-29 14:27:39 -0700
commita161e6f3ef31004e47a5b94b85c2e84b764f8637 (patch)
tree1a28b326a3caffd63091e079e4f00f0680c2ce0e
parentf7df78365f9aca4102a6d7136ea58b91f51c13cb (diff)
downloadpk-a161e6f3ef31004e47a5b94b85c2e84b764f8637.zip
pk-a161e6f3ef31004e47a5b94b85c2e84b764f8637.tar.gz
pk-a161e6f3ef31004e47a5b94b85c2e84b764f8637.tar.bz2
Disable device tree filter when load a dts from file (#217)
* add device tree in elf, using --with-dts to add the absolute path of device tree * Disable device tree filter
-rw-r--r--Makefile.in4
-rw-r--r--bbl/bbl.c2
-rw-r--r--bbl/bbl.lds1
-rwxr-xr-xconfigure26
-rw-r--r--machine/machine.ac4
-rw-r--r--machine/machine.mk.in5
-rw-r--r--machine/mentry.S13
7 files changed, 54 insertions, 1 deletions
diff --git a/Makefile.in b/Makefile.in
index 5c2687d..3e3872b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -116,6 +116,10 @@ ifneq (@BBL_PAYLOAD@,no)
CFLAGS := $(CFLAGS) -DBBL_PAYLOAD=\"bbl_payload\"
endif
BBL_PAYLOAD := @BBL_PAYLOAD@
+ifneq (@MACHINE_DTS@,no)
+CFLAGS := $(CFLAGS) -DMACHINE_DTS=\"machine_dts\"
+endif
+MACHINE_DTS := @MACHINE_DTS@
COMPILE := $(CC) -MMD -MP $(CFLAGS) \
$(sprojs_include)
# Linker
diff --git a/bbl/bbl.c b/bbl/bbl.c
index 3b92fc1..8e29801 100644
--- a/bbl/bbl.c
+++ b/bbl/bbl.c
@@ -41,11 +41,13 @@ static void filter_dtb(uintptr_t source)
uint32_t size = fdt_size(source);
memcpy((void*)dest, (void*)source, size);
+#ifndef MACHINE_DTS
// Remove information from the chained FDT
filter_harts(dest, &disabled_hart_mask);
filter_plic(dest);
filter_compat(dest, "riscv,clint0");
filter_compat(dest, "riscv,debug-013");
+#endif
}
static void protect_memory(void)
diff --git a/bbl/bbl.lds b/bbl/bbl.lds
index 624f691..9d51f1d 100644
--- a/bbl/bbl.lds
+++ b/bbl/bbl.lds
@@ -67,6 +67,7 @@ SECTIONS
*(.srodata*)
*(.gnu.linkonce.d.*)
*(.comment)
+ *(.dtb)
}
/* End of initialized data segment */
diff --git a/configure b/configure
index 9d2c146..c51e865 100755
--- a/configure
+++ b/configure
@@ -590,6 +590,7 @@ ac_subst_vars='LTLIBOBJS
LIBOBJS
subprojects_enabled
subprojects
+MACHINE_DTS
BBL_LOGO_FILE
BBL_PAYLOAD
BBL_ENABLE_LOGO
@@ -648,6 +649,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -683,6 +685,7 @@ with_payload
with_logo
enable_boot_machine
enable_fp_emulation
+with_dts
'
ac_precious_vars='build_alias
host_alias
@@ -737,6 +740,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -989,6 +993,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1126,7 +1139,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1279,6 +1292,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1331,6 +1345,7 @@ Optional Packages:
--with-mem-start Set physical memory start address
--with-payload Set ELF payload for bbl
--with-logo Specify a better logo
+ --with-dts Support a machine dts
Some influential environment variables:
CC C compiler command
@@ -4469,6 +4484,15 @@ $as_echo "#define PK_ENABLE_FP_EMULATION /**/" >>confdefs.h
fi
+# Check whether --with-dts was given.
+if test "${with_dts+set}" = set; then :
+ withval=$with_dts; MACHINE_DTS=$with_dts
+
+
+fi
+
+
+
diff --git a/machine/machine.ac b/machine/machine.ac
index a787113..e3033b2 100644
--- a/machine/machine.ac
+++ b/machine/machine.ac
@@ -4,3 +4,7 @@ AC_ARG_ENABLE([fp-emulation], AS_HELP_STRING([--disable-fp-emulation], [Disable
AS_IF([test "x$enable_fp_emulation" != "xno"], [
AC_DEFINE([PK_ENABLE_FP_EMULATION],,[Define if floating-point emulation is enabled])
])
+
+AC_ARG_WITH([dts], AS_HELP_STRING([--with-dts], [Support a machine dts]),
+ [AC_SUBST([MACHINE_DTS], $with_dts, [machine dts])]
+)
diff --git a/machine/machine.mk.in b/machine/machine.mk.in
index dcecb7a..c7075fb 100644
--- a/machine/machine.mk.in
+++ b/machine/machine.mk.in
@@ -37,3 +37,8 @@ machine_c_srcs = \
machine_asm_srcs = \
mentry.S \
fp_asm.S \
+
+mentry.o: machine.dtb
+
+machine.dtb: $(MACHINE_DTS)
+ dtc -O dtb $^ -o $@ \ No newline at end of file
diff --git a/machine/mentry.S b/machine/mentry.S
index 9ec9916..e619812 100644
--- a/machine/mentry.S
+++ b/machine/mentry.S
@@ -281,6 +281,10 @@ do_reset:
#endif
# Boot on the first hart
+#ifdef MACHINE_DTS
+ csrr a0, mhartid
+ la a1, dtb_start
+#endif
j init_first_hart
.LmultiHartInit:
@@ -313,6 +317,15 @@ do_reset:
wfi
j .LmultiHart
+#ifdef MACHINE_DTS
+.section .dtb
+.align 3
+.global dtb_start, dtb_end
+dtb_start:
+.incbin "machine.dtb"
+dtb_end:
+#endif
+
.bss
.align RISCV_PGSHIFT
stacks: