Message ID | 20200312051107.1454880-3-damien.lemoal@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Kendryte k210 SoC boards support | expand |
On Wed, Mar 11, 2020 at 10:11 PM Damien Le Moal <damien.lemoal@wdc.com> wrote: > > For the NOMMU case, enable a kernel builtin dtb to allow direct kernel > loading without a bootloader. This option also allows booting on boards > not capable of providing a device tree to the bootloader. > > Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> > --- > arch/riscv/Kbuild | 1 + > arch/riscv/Kconfig | 19 +++++++++++++++++++ > arch/riscv/boot/dts/Makefile | 4 ++++ > arch/riscv/kernel/setup.c | 6 ++++++ > arch/riscv/mm/init.c | 4 ++++ > 5 files changed, 34 insertions(+) > > diff --git a/arch/riscv/Kbuild b/arch/riscv/Kbuild > index d1d0aa70fdf1..988804e430e4 100644 > --- a/arch/riscv/Kbuild > +++ b/arch/riscv/Kbuild > @@ -1,3 +1,4 @@ > # SPDX-License-Identifier: GPL-2.0-only > > obj-y += kernel/ mm/ net/ > +obj-$(CONFIG_USE_BUILTIN_DTB) += boot/dts/ > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index 1a3b5a5276be..025f5ba1dd68 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -355,6 +355,25 @@ config CMDLINE_FORCE > > endchoice > > +config USE_BUILTIN_DTB > + bool "Use builtin DTB" > + depends on !MMU > + help > + Link a device tree blob for particular hardware into the kernel, > + suppressing use of the DTB pointer provided by the bootloader. > + This option should only be used with hardware or bootloaders that > + are not capable of providing a DTB to the kernel, or for > + experimental hardware without stable device tree bindings. > + > +config BUILTIN_DTB_SOURCE > + string "Source file for builtin DTB" > + default "" > + depends on USE_BUILTIN_DTB > + help > + Base name (without suffix, relative to arch/riscv/boot/dts) for > + the a DTS file that will be used to produce the DTB linked into > + the kernel. > + > endmenu > > menu "Power management options" > diff --git a/arch/riscv/boot/dts/Makefile b/arch/riscv/boot/dts/Makefile > index dcc3ada78455..0bf2669aa12d 100644 > --- a/arch/riscv/boot/dts/Makefile > +++ b/arch/riscv/boot/dts/Makefile > @@ -1,2 +1,6 @@ > # SPDX-License-Identifier: GPL-2.0 > +ifneq ($(CONFIG_BUILTIN_DTB_SOURCE),"") > +obj-$(CONFIG_USE_BUILTIN_DTB) += $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_SOURCE)).dtb.o > +else > subdir-y += sifive > +endif > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > index 0a6d415b0a5a..3e89be9d888c 100644 > --- a/arch/riscv/kernel/setup.c > +++ b/arch/riscv/kernel/setup.c > @@ -68,7 +68,13 @@ void __init setup_arch(char **cmdline_p) > > setup_bootmem(); > paging_init(); > + > +#if IS_ENABLED(CONFIG_USE_BUILTIN_DTB) > + unflatten_and_copy_device_tree(); > +#else > unflatten_device_tree(); > +#endif > + > clint_init_boot_cpu(); > > #ifdef CONFIG_SWIOTLB > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index fab855963c73..51f1ee0a24a6 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -480,7 +480,11 @@ static void __init setup_vm_final(void) > #else > asmlinkage void __init setup_vm(uintptr_t dtb_pa) > { > +#if IS_ENABLED(CONFIG_USE_BUILTIN_DTB) > + dtb_early_va = __dtb_start; > +#else > dtb_early_va = (void *)dtb_pa; > +#endif > } > > static inline void setup_vm_final(void) > -- > 2.24.1 > > Reviewed-by: Atish Patra <atish.patra@wdc.com>
diff --git a/arch/riscv/Kbuild b/arch/riscv/Kbuild index d1d0aa70fdf1..988804e430e4 100644 --- a/arch/riscv/Kbuild +++ b/arch/riscv/Kbuild @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only obj-y += kernel/ mm/ net/ +obj-$(CONFIG_USE_BUILTIN_DTB) += boot/dts/ diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 1a3b5a5276be..025f5ba1dd68 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -355,6 +355,25 @@ config CMDLINE_FORCE endchoice +config USE_BUILTIN_DTB + bool "Use builtin DTB" + depends on !MMU + help + Link a device tree blob for particular hardware into the kernel, + suppressing use of the DTB pointer provided by the bootloader. + This option should only be used with hardware or bootloaders that + are not capable of providing a DTB to the kernel, or for + experimental hardware without stable device tree bindings. + +config BUILTIN_DTB_SOURCE + string "Source file for builtin DTB" + default "" + depends on USE_BUILTIN_DTB + help + Base name (without suffix, relative to arch/riscv/boot/dts) for + the a DTS file that will be used to produce the DTB linked into + the kernel. + endmenu menu "Power management options" diff --git a/arch/riscv/boot/dts/Makefile b/arch/riscv/boot/dts/Makefile index dcc3ada78455..0bf2669aa12d 100644 --- a/arch/riscv/boot/dts/Makefile +++ b/arch/riscv/boot/dts/Makefile @@ -1,2 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 +ifneq ($(CONFIG_BUILTIN_DTB_SOURCE),"") +obj-$(CONFIG_USE_BUILTIN_DTB) += $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_SOURCE)).dtb.o +else subdir-y += sifive +endif diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c index 0a6d415b0a5a..3e89be9d888c 100644 --- a/arch/riscv/kernel/setup.c +++ b/arch/riscv/kernel/setup.c @@ -68,7 +68,13 @@ void __init setup_arch(char **cmdline_p) setup_bootmem(); paging_init(); + +#if IS_ENABLED(CONFIG_USE_BUILTIN_DTB) + unflatten_and_copy_device_tree(); +#else unflatten_device_tree(); +#endif + clint_init_boot_cpu(); #ifdef CONFIG_SWIOTLB diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index fab855963c73..51f1ee0a24a6 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -480,7 +480,11 @@ static void __init setup_vm_final(void) #else asmlinkage void __init setup_vm(uintptr_t dtb_pa) { +#if IS_ENABLED(CONFIG_USE_BUILTIN_DTB) + dtb_early_va = __dtb_start; +#else dtb_early_va = (void *)dtb_pa; +#endif } static inline void setup_vm_final(void)
For the NOMMU case, enable a kernel builtin dtb to allow direct kernel loading without a bootloader. This option also allows booting on boards not capable of providing a device tree to the bootloader. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> --- arch/riscv/Kbuild | 1 + arch/riscv/Kconfig | 19 +++++++++++++++++++ arch/riscv/boot/dts/Makefile | 4 ++++ arch/riscv/kernel/setup.c | 6 ++++++ arch/riscv/mm/init.c | 4 ++++ 5 files changed, 34 insertions(+)