Re: [PATCH v2 2/2] MIPS: store the appended dtb address in a variable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 17.07.2016 15:03, Daniel Gimpelevich wrote:
> On Sun, 2016-07-17 at 14:52 +0200, Jonas Gorski wrote:
>> On 17 July 2016 at 14:28, Daniel Gimpelevich
>> <daniel@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>>> On Mon, 2016-06-20 at 11:27 +0200, Jonas Gorski wrote:
>>>> Instead of rewriting the arguments to match the UHI spec, store the
>>>> address of a appended or UHI supplied dtb in fw_supplied_dtb.
>>>>
>>>> That way the original bootloader arugments are kept intact while still
>>>> making the use of an appended dtb invisible for mach code.
>>>>
>>>> Mach code can still find out if it is an appended dtb by comparing
>>>> fw_arg1 with fw_supplied_dtb.
>>>>
>>>> Signed-off-by: Jonas Gorski <jogo@xxxxxxxxxxx>
>>>> ---
>>>> v1 -> v2:
>>>>  * no changes
>>>>
>>>>  arch/mips/ath79/setup.c          |  4 ++--
>>>>  arch/mips/bmips/setup.c          |  4 ++--
>>>>  arch/mips/include/asm/bootinfo.h |  4 ++++
>>>>  arch/mips/kernel/head.S          | 21 ++++++++++++++-------
>>>>  arch/mips/kernel/setup.c         |  4 ++++
>>>>  arch/mips/lantiq/prom.c          |  4 ++--
>>>>  arch/mips/pic32/pic32mzda/init.c |  4 ++--
>>>>  7 files changed, 30 insertions(+), 15 deletions(-)
>>> [snip]
>>>> -       else if (fw_arg0 == -2) /* UHI interface */
>>>> -               dtb = (void *)fw_arg1;
>>>> +       else if (fw_passed_dtb) /* UHI interface */
>>>> +               dtb = (void *)fw_passed_dtb;
>>>
>>> I just now realized that this is also incorrect, on each platform. The
>>> check for fw_passed_dtb should be in addition (prior) to checking for
>>> UHI via fw_arg0 == -2, not instead of it.
>>
>> No it isn't, the code in head.S already does this, so there is no need
>> to check fw_arg0 again, unless you need to know if this was an
>> appended dtb or a UHI passed one. The whole point of using
>> fw_passed_dtb is that you *don't* need to check individually for UHI
>> and appended dtb.
>>
>>
>> Jonas
> 
> Not quite. The idea behind the old code was to mimic UHI bootloaders so
> that the kernel would not distinguish between them and a passed DTB.
> With fw_passed_dtb separate, the case of a real UHI bootloader is
> unhandled unless fw_arg0 is checked separately after it. It cannot
> presently be known for certain which platforms will have UHI available,
> and it does not hurt the kernel to conform to an overall MIPS spec even
> when unused, so removing the check for fw_arg0 even in the presence of a
> check for fw_passed_dtb at this point is feature removal, which there is
> no need to do.

Did you even read the code or what I wrote?

> On Sun, 2016-07-17 at 14:52 +0200, Jonas Gorski wrote:
>> No it isn't, the code in head.S already does this
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

in simplified pseudo c-code:

if (IS_ENABLED(APPENDED_DTB) && *__appended_dtb == FDT_MAGIC)
	fw_passed_dtb = __appended_dtb;
else if (fw_arg0 == -2) <- UHI interface
	fw_passed_dtb = fw_arg1;
else
	fw_passed_dtb = 0;

So if the the bootloader uses UHI, then fw_passed_dtb *will* be populated.
There is no need to check for it again from arch code.


Jonas




[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux