[PATCH] riscv: Respect the initrd found in the dt, if any.
Palmer Dabbelt
palmer at sifive.com
Thu Mar 8 11:35:42 PST 2018
Thanks for the ping, I must have missed your response. I've added this to our
for-next branch.
On Thu, 08 Mar 2018 11:14:00 PST (-0800), shea at shealevy.com wrote:
> Hi Palmer,
>
> Any further thoughts on this?
>
> Thanks,
> Shea
>
> Shea Levy <shea at shealevy.com> writes:
>
>> It doesn't look like that generic support handles the case where the
>> initrd is compiled into the kernel and not passed in the devicetree,
>> which setup_initrd already did before this
>> patch. __early_init_dt_delcare_initrd is only called when the devicetree
>> properties are found.
>>
>> Palmer Dabbelt <palmer at sifive.com> writes:
>>
>>> On Tue, 20 Feb 2018 04:54:26 PST (-0800), shea at shealevy.com wrote:
>>>> Signed-off-by: Shea Levy <shea at shealevy.com>
>>>> ---
>>>> arch/riscv/kernel/setup.c | 7 ++++++-
>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
>>>> index 41d34008faf6..c4ebc907af34 100644
>>>> --- a/arch/riscv/kernel/setup.c
>>>> +++ b/arch/riscv/kernel/setup.c
>>>> @@ -88,15 +88,20 @@ static void __init setup_initrd(void)
>>>> extern unsigned long __initramfs_size;
>>>> unsigned long size;
>>>>
>>>> + if (initrd_start)
>>>> + goto found;
>>>> +
>>>> if (__initramfs_size > 0) {
>>>> initrd_start = (unsigned long)(&__initramfs_start);
>>>> initrd_end = initrd_start + __initramfs_size;
>>>> }
>>>>
>>>> + initrd_below_start_ok = 1;
>>>> if (initrd_start >= initrd_end) {
>>>> printk(KERN_INFO "initrd not found or empty");
>>>> goto disable;
>>>> }
>>>> +found:
>>>> if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
>>>> printk(KERN_ERR "initrd extends beyond end of memory");
>>>> goto disable;
>>>> @@ -104,13 +109,13 @@ static void __init setup_initrd(void)
>>>>
>>>> size = initrd_end - initrd_start;
>>>> memblock_reserve(__pa(initrd_start), size);
>>>> - initrd_below_start_ok = 1;
>>>>
>>>> printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
>>>> (void *)(initrd_start), size);
>>>> return;
>>>> disable:
>>>> pr_cont(" - disabling initrd\n");
>>>> + initrd_below_start_ok = 0;
>>>> initrd_start = 0;
>>>> initrd_end = 0;
>>>> }
>>>
>>> It looks like there's some amount of generic support in
>>> __early_init_dt_declare_initrd(), can we just use that?
More information about the linux-riscv
mailing list