Message ID | 20190221203820.7044-1-paul@crapouillou.net (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | MIPS: ingenic: Add support for appended devicetree | expand |
On Thu, 21 Feb 2019 at 21:39, Paul Cercueil <paul@crapouillou.net> wrote: > > Add support for booting the kernel from an externally-appended > devicetree, if no devicetree was built-in. > > Signed-off-by: Paul Cercueil <paul@crapouillou.net> > --- > arch/mips/Kconfig | 2 +- > arch/mips/jz4740/setup.c | 14 +++++++++++--- > 2 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > index a84c24d894aa..8b7ea9062198 100644 > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > @@ -391,7 +391,7 @@ config MACH_INGENIC > select GPIOLIB > select COMMON_CLK > select GENERIC_IRQ_CHIP > - select BUILTIN_DTB > + select BUILTIN_DTB if MIPS_NO_APPENDED_DTB > select USE_OF > select LIBFDT > > diff --git a/arch/mips/jz4740/setup.c b/arch/mips/jz4740/setup.c > index afb40f8bce96..5c00064937c4 100644 > --- a/arch/mips/jz4740/setup.c > +++ b/arch/mips/jz4740/setup.c > @@ -31,6 +31,7 @@ > > #define JZ4740_EMC_SDRAM_CTRL 0x80 > > +extern const char __appended_dtb; Does this build/link with MIPS_NO_APPENDED_DTB? I would assume it won't be able to resolve the symbol in that case. You can also just use fw_passed_dtb from asm/bootinfo.h, which will be populated automatically from fw_args (if UHI) or __appended_dtb (if present and valid)[1], without having to care where it came from. Regards Jonas [1] https://elixir.bootlin.com/linux/latest/source/arch/mips/kernel/head.S#L96
Hi Jonas, On Thu, 21 Feb 2019 at 21:39, Jonas Gorski <jonas.gorski@gmail.com> wrote: > On Thu, 21 Feb 2019 at 21:39, Paul Cercueil <paul@crapouillou.net> > wrote: >> >> Add support for booting the kernel from an externally-appended >> devicetree, if no devicetree was built-in. >> >> Signed-off-by: Paul Cercueil <paul@crapouillou.net> >> --- >> arch/mips/Kconfig | 2 +- >> arch/mips/jz4740/setup.c | 14 +++++++++++--- >> 2 files changed, 12 insertions(+), 4 deletions(-) >> >> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig >> index a84c24d894aa..8b7ea9062198 100644 >> --- a/arch/mips/Kconfig >> +++ b/arch/mips/Kconfig >> @@ -391,7 +391,7 @@ config MACH_INGENIC >> select GPIOLIB >> select COMMON_CLK >> select GENERIC_IRQ_CHIP >> - select BUILTIN_DTB >> + select BUILTIN_DTB if MIPS_NO_APPENDED_DTB >> select USE_OF >> select LIBFDT >> >> diff --git a/arch/mips/jz4740/setup.c b/arch/mips/jz4740/setup.c >> index afb40f8bce96..5c00064937c4 100644 >> --- a/arch/mips/jz4740/setup.c >> +++ b/arch/mips/jz4740/setup.c >> @@ -31,6 +31,7 @@ >> >> #define JZ4740_EMC_SDRAM_CTRL 0x80 >> >> +extern const char __appended_dtb; > > Does this build/link with MIPS_NO_APPENDED_DTB? I would assume it > won't be able to resolve the symbol in that case. Oops. You're right. > You can also just use fw_passed_dtb from asm/bootinfo.h, which will be > populated automatically from fw_args (if UHI) or __appended_dtb (if > present and valid)[1], without having to care where it came from. Thanks, I will. Regards, -Paul
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index a84c24d894aa..8b7ea9062198 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -391,7 +391,7 @@ config MACH_INGENIC select GPIOLIB select COMMON_CLK select GENERIC_IRQ_CHIP - select BUILTIN_DTB + select BUILTIN_DTB if MIPS_NO_APPENDED_DTB select USE_OF select LIBFDT diff --git a/arch/mips/jz4740/setup.c b/arch/mips/jz4740/setup.c index afb40f8bce96..5c00064937c4 100644 --- a/arch/mips/jz4740/setup.c +++ b/arch/mips/jz4740/setup.c @@ -31,6 +31,7 @@ #define JZ4740_EMC_SDRAM_CTRL 0x80 +extern const char __appended_dtb; static void __init jz4740_detect_mem(void) { @@ -66,15 +67,22 @@ static unsigned long __init get_board_mach_type(const void *fdt) void __init plat_mem_setup(void) { int offset; + void *dtb; jz4740_reset_init(); - __dt_setup_arch(__dtb_start); - offset = fdt_path_offset(__dtb_start, "/memory"); + if (__dtb_start != __dtb_end) + dtb = __dtb_start; + else + dtb = (void *)&__appended_dtb; + + __dt_setup_arch(dtb); + + offset = fdt_path_offset(dtb, "/memory"); if (offset < 0) jz4740_detect_mem(); - mips_machtype = get_board_mach_type(__dtb_start); + mips_machtype = get_board_mach_type(dtb); } void __init device_tree_init(void)
Add support for booting the kernel from an externally-appended devicetree, if no devicetree was built-in. Signed-off-by: Paul Cercueil <paul@crapouillou.net> --- arch/mips/Kconfig | 2 +- arch/mips/jz4740/setup.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-)