All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Li, Aubrey" <aubrey.li@linux.intel.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>,
	Borislav Petkov <bp@alien8.de>,
	"alan@linux.intel.com" <alan@linux.intel.com>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len.Brown@intel.com, x86@kernel.org,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86: Bypass legacy PIC and PIT on ACPI hardware reduced platform
Date: Thu, 05 Mar 2015 20:42:34 +0800	[thread overview]
Message-ID: <54F84F3A.8080902@linux.intel.com> (raw)
In-Reply-To: <20150305113641.GB23046@gmail.com>

On 2015/3/5 19:36, Ingo Molnar wrote:
> 
> * Li, Aubrey <aubrey.li@linux.intel.com> wrote:
> 
>> On 2015/3/5 4:11, Ingo Molnar wrote:
>>>
>>> * Arjan van de Ven <arjan@linux.intel.com> wrote:
>>>
>>>> On 3/4/2015 1:50 AM, Borislav Petkov wrote:
>>>>> On Wed, Mar 04, 2015 at 12:43:08AM -0800, Arjan van de Ven wrote:
>>>>>>>
>>>>>>> Using 'acpi_gbl_reduced_hardware' flag outside the ACPI code
>>>>>>> is a mistake.
>>>>>>
>>>>>> ideally, the presence of that flag in the firmware table will clear/set more global settings,
>>>>>> for example, having that flag should cause the 8042 input code to not probe for the 8042.
>>>>>>
>>>>>> for interrupts, there really ought to be a "apic first/only" mode, which is then used on
>>>>>> all modern systems (not just hw reduced).
>>>>>
>>>>> Do we need some sort of platform-specific querying interfaces now too,
>>>>> similar to cpu_has()? I.e., platform_has()...
>>>>>
>>>>> 	if (platform_has(X86_PLATFORM_REDUCED_HW))
>>>>> 		do stuff..
>>>>
>>>> more like
>>>>
>>>> platform_has(X86_PLATFORM_PIT)
>>>>
>>>> etc, one for each legacy io item
>>>
>>> Precisely. The main problem is the generic, 'lumps everything 
>>> together' nature of the acpi_gbl_reduced_hardware flag.
>>>
>>> (Like the big kernel lock lumped together all sorts of locking rules 
>>> and semantics.)
>>>
>>> Properly split out, feature-ish or driver-ish interfaces for PIT and 
>>> other legacy details are the proper approach to 'turn them off'.
>>>
>>>  - x86_platform is a function pointer driven, driver-ish interface.
>>>
>>>  - platform_has(X86_PLATFORM_IT) is a flag driven, feature-flag-ish
>>>    interface.
>>>
>>> Both are fine - for something as separate as the PIT (or the PIC) 
>>> it might make more sense to go towards a 'driver' interface 
>>> though, as modern drivers are (and will be) much different from 
>>> the legacy PIT.
>>>
>>> Whichever method is used, low level platforms can just switch them 
>>> on/off in their enumeration/detection routines, while the generic 
>>> code will have them enabled by default.
>>
>> Whichever method is used, we will face a problem how to determine 
>> PIT exists or not.
>>
>> When we enabled Bay Trail-T platform at the beginning, we were 
>> trying to make the code as generic as possible, and it works 
>> properly up to now. So we don't have a SUBARCH like 
>> X86_SUBARCH_INTEL_MID to use the platform specific functions. And 
>> for now I'm not quite sure it's a good idea to create one.
>>
>> If we make it as a flag driven, I don't know there is a flag in 
>> firmware better than ACPI HW reduced flag(Of course it's not good 
>> enough to cover all the cases). Or if we want to use platform info 
>> to turn on/off this flag, we'll have to maintain a platform list, 
>> which may be longer and more complicated than worth doing that.
> 
> Well, it's not nearly so difficult, because you already have a 
> platform flag: acpi_gbl_reduced_hardware.
> 
> What I object against is to infest generic codepaths with unreadable, 
> unrobust crap like:
> 
> +       if (acpi_gbl_reduced_hardware) {
> +               pr_info("Using NULL legacy PIC\n");
> +               legacy_pic = &null_legacy_pic;
> +       } else
> +               legacy_pic->init(0);
> 
> To solve that, add a small (early) init function (say 
> 'x86_reduced_hw_init()') that sets up the right driver
> selections if acpi_gbl_reduced_hardware is set:
> 
>  - in x86_reduced_hw_init() set 'legacy_pic' to 'null_legacy_pic'
> 
>  - clean up 'global_clock_event' handling: instead of a global 
>    variable, move its management into x86_platform_ops::get_clockevent()
>    and set the method to hpet/pit/abp/etc. specific handlers that
>    return the right clockevent device.
> 
>  - in your x86_reduced_hw_init() function add the hpet clockevent
>    device to x86_platform_ops::get_clockevent, overriding the default
>    PIT.
> 

>  - in x86_reduced_hw_init() set pm_power_off.
> 
>  - set 'reboot_type' and remove the acpi_gbl_reduced_hardware hack
>    from efi_reboot_required().
> 
I'll do more investigation above items but I want to leave at least
these two as the quirk today unless I am convinced I can do that because
from my understanding, UEFI runtime services should not be supported in
reduced hw mode.

> etc.
> 
> Just keep the generic init codepaths free of those random selections 
> based on global flags, okay?
>
Agree.

Thanks,
-Aubrey

> Thanks,
> 
> 	Ingo
> 
> 


  reply	other threads:[~2015-03-05 12:42 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-04  3:23 [PATCH] x86: Bypass legacy PIC and PIT on ACPI hardware reduced platform Li, Aubrey
2015-03-04  5:08 ` Ingo Molnar
2015-03-04  5:26   ` Li, Aubrey
2015-03-04  5:31     ` Ingo Molnar
2015-03-04  6:04       ` Li, Aubrey
2015-03-04  7:37         ` Ingo Molnar
2015-03-04  8:43           ` Arjan van de Ven
2015-03-04  9:50             ` Borislav Petkov
2015-03-04 14:16               ` Rafael J. Wysocki
2015-03-04 14:05                 ` Borislav Petkov
2015-03-04 14:38                   ` Rafael J. Wysocki
2015-03-04 20:21                   ` Alan Cox
2015-03-04 21:52                     ` Rafael J. Wysocki
2015-03-05 11:26                       ` Li, Aubrey
2015-03-05 16:05                       ` Alan Cox
2015-03-04 14:36               ` Arjan van de Ven
2015-03-04 20:11                 ` Ingo Molnar
2015-03-05 11:13                   ` Li, Aubrey
2015-03-05 11:36                     ` Ingo Molnar
2015-03-05 12:42                       ` Li, Aubrey [this message]
2015-03-05 16:06                         ` Alan Cox
2015-03-09 23:26                         ` Li, Aubrey
2015-03-10  8:06                           ` Ingo Molnar
2015-03-11  4:14                             ` Li, Aubrey
2015-03-04 20:18               ` Alan Cox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54F84F3A.8080902@linux.intel.com \
    --to=aubrey.li@linux.intel.com \
    --cc=Len.Brown@intel.com \
    --cc=alan@linux.intel.com \
    --cc=arjan@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=hpa@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=rjw@rjwysocki.net \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.