Subject: [PATCH v7 04/17] ARM64 / ACPI: Introduce early_param for "acpi" and pass acpi=force to enable ACPI

From: [email-masked] (Jon Masters)
Date: Mon, 19 Jan 2015 11:59:47 -0500

On 01/19/2015 10:13 AM, Grant Likely wrote:
> On Mon, 19 Jan 2015 13:51:45 +0000
> , Catalin Marinas <[email-masked]>
>  wrote:
>> On Mon, Jan 19, 2015 at 11:55:32AM +0000, Ard Biesheuvel wrote:
>>> On 19 January 2015 at 11:42, Catalin Marinas <[email-masked]> wrote:
>>>> On Wed, Jan 14, 2015 at 03:04:52PM +0000, Hanjun Guo wrote:
>>>>> From: Al Stone <[email-masked]>
>>>>>
>>>>> Introduce one early parameters "off" and "force" for "acpi", acpi=off
>>>>> will be the default behavior for ARM64, so introduce acpi=force to
>>>>> enable ACPI on ARM64.
>>>>>
>>>>> Disable ACPI before early parameters parsed, and enable it to pass
>>>>> "acpi=force" if people want use ACPI on ARM64. This ensures DT be
>>>>> the prefer one if ACPI table and DT both are provided at this moment.
>>>> [...]
>>>>> --- a/arch/arm64/kernel/setup.c
>>>>> +++ b/arch/arm64/kernel/setup.c
>>>>> @@ -62,6 +62,7 @@
>>>>>  #include <asm/memblock.h>
>>>>>  #include <asm/psci.h>
>>>>>  #include <asm/efi.h>
>>>>> +#include <asm/acpi.h>
>>>>>
>>>>>  unsigned int processor_id;
>>>>>  EXPORT_SYMBOL(processor_id);
>>>>> @@ -388,6 +389,8 @@ void __init setup_arch(char **cmdline_p)
>>>>>       early_fixmap_init();
>>>>>       early_ioremap_init();
>>>>>
>>>>> +     disable_acpi();
>>>>> +
>>>>>       parse_early_param();
>>>>>
>>>>>       /*
>>>>
>>>> Did we get to any conclusion here? DT being the preferred one is fine
>>>> when both DT and ACPI are present but do we still want the kernel to
>>>> ignore ACPI altogether if DT is not present? It's a bit harder to detect
>>>> the presence of DT at this point since the EFI_STUB added one already. I
>>>> guess we could move the "acpi=force" argument passing to EFI_STUB if no
>>>> DT is present at boot.
>>>
>>> Since the EFI stub populates the /chosen node in DT, I would prefer
>>> for it to add a property there to indicate whether it created the DT
>>> from scratch rather than adding ACPI specific stuff in there (even if
>>> it is just a string to concatenate)
>>
>> This works for me. So we could pass "acpi=force" in EFI stub if it
>> created the DT from scratch *and* ACPI tables are present (can it detect
>> the latter? And maybe it could print something if none are available).
>> If that works, the actual kernel can assume that ACPI needs to be
>> explicitly enabled via acpi=force, irrespective of how much information
>> it has in DT.
> 
> Ditto for me. I think this is a fine solution. And, yes, the stub can
> easily detect the presence of ACPI by looking in the UEFI config table.

I get the point behind doing this, but could we not have it pass in a
different parameter than =force? Perhaps something new? I'd like to
separate out the case that it was enabled automatically vs explicitly
forced on by a user wanting to use ACPI on a system with both tables.

Jon.