aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan <892930505@qq.com>2020-11-01 08:14:48 +0800
committerGitHub <noreply@github.com>2020-10-31 17:14:48 -0700
commita4d4298ca10527a51fad86c53a93c48e6f510092 (patch)
tree7f2c843dd521181cbf3ae8ffa5ba660997c0b3f3
parentdef2f01eee49aa639c6e393d161687998cd64c4e (diff)
downloadpk-a4d4298ca10527a51fad86c53a93c48e6f510092.zip
pk-a4d4298ca10527a51fad86c53a93c48e6f510092.tar.gz
pk-a4d4298ca10527a51fad86c53a93c48e6f510092.tar.bz2
Disable device tree filter when load a dts from file (#219)
* add device tree in elf, using --with-dts to add the absolute path of device tree * Disable device tree filter * Remove *.dtb dependence, when the --with-dts option is not used
-rw-r--r--Makefile.in4
-rw-r--r--bbl/bbl.c2
-rw-r--r--bbl/bbl.lds1
-rwxr-xr-xconfigure29
-rw-r--r--machine/machine.ac5
-rw-r--r--machine/machine.mk.in7
-rw-r--r--machine/mentry.S13
7 files changed, 60 insertions, 1 deletions
diff --git a/Makefile.in b/Makefile.in
index 5c2687d..05e3a4d 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 (@CUSTOM_DTS@,no)
+CFLAGS := $(CFLAGS) -DCUSTOM_DTS=\"custom_dts\"
+endif
+CUSTOM_DTS := @CUSTOM_DTS@
COMPILE := $(CC) -MMD -MP $(CFLAGS) \
$(sprojs_include)
# Linker
diff --git a/bbl/bbl.c b/bbl/bbl.c
index 3b92fc1..fdb1672 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 CUSTOM_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..2e88eb9 100755
--- a/configure
+++ b/configure
@@ -590,6 +590,7 @@ ac_subst_vars='LTLIBOBJS
LIBOBJS
subprojects_enabled
subprojects
+CUSTOM_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 Specify a customize dts
Some influential environment variables:
CC C compiler command
@@ -4469,6 +4484,18 @@ $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; CUSTOM_DTS=$with_dts
+
+else
+ CUSTOM_DTS=no
+
+
+fi
+
+
+
diff --git a/machine/machine.ac b/machine/machine.ac
index a787113..011f0ca 100644
--- a/machine/machine.ac
+++ b/machine/machine.ac
@@ -4,3 +4,8 @@ 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], [Specify a customize dts]),
+ [AC_SUBST([CUSTOM_DTS], $with_dts, [customize dts])],
+ [AC_SUBST([CUSTOM_DTS], [no], [customize dts])]
+)
diff --git a/machine/machine.mk.in b/machine/machine.mk.in
index dcecb7a..ee0fc36 100644
--- a/machine/machine.mk.in
+++ b/machine/machine.mk.in
@@ -37,3 +37,10 @@ machine_c_srcs = \
machine_asm_srcs = \
mentry.S \
fp_asm.S \
+
+ifneq (@CUSTOM_DTS@,no)
+mentry.o: custom.dtb
+
+custom.dtb: $(CUSTOM_DTS)
+ dtc -O dtb $^ -o $@
+endif \ No newline at end of file
diff --git a/machine/mentry.S b/machine/mentry.S
index 9ec9916..f9285a4 100644
--- a/machine/mentry.S
+++ b/machine/mentry.S
@@ -281,6 +281,10 @@ do_reset:
#endif
# Boot on the first hart
+#ifdef CUSTOM_DTS
+ csrr a0, mhartid
+ la a1, dtb_start
+#endif
j init_first_hart
.LmultiHartInit:
@@ -313,6 +317,15 @@ do_reset:
wfi
j .LmultiHart
+#ifdef CUSTOM_DTS
+.section .dtb
+.align 3
+.global dtb_start, dtb_end
+dtb_start:
+.incbin "custom.dtb"
+dtb_end:
+#endif
+
.bss
.align RISCV_PGSHIFT
stacks: