diff mbox

[2/2] arm64: to allow EFI_RTC can be selected on ARM64

Message ID 1443418478-8240-3-git-send-email-thunder.leizhen@huawei.com
State New
Headers show

Commit Message

Zhen Lei Sept. 28, 2015, 5:34 a.m. UTC
Now, ARM64 is also support EFI startup. We hope use EFI runtime services
to get/set current time and date.

RTC_LIB only controls some configs in drivers/char/Kconfig(included
EFI_RTC), and will be automatically selected when RTC_CLASS opened. So
this patch have no functional change but give an opportunity to select
EFI_RTC when RTC_CLASS closed.

Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
---
 arch/arm64/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--
2.5.0


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Comments

Arnd Bergmann Sept. 28, 2015, 7:35 a.m. UTC | #1
On Monday 28 September 2015 13:34:38 Zhen Lei wrote:
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 07d1811..25cec57 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -85,7 +85,7 @@ config ARM64
>         select PERF_USE_VMALLOC
>         select POWER_RESET
>         select POWER_SUPPLY
> -       select RTC_LIB
> +       select RTC_LIB if !EFI
>         select SPARSE_IRQ
>         select SYSCTL_EXCEPTION_TRACE
>         select HAVE_CONTEXT_TRACKING

Sorry, we can't do that: enabling EFI has to be done in a way that it only
adds features but not disables them.

Your patch breaks RTC on all non-EFI platforms as soon as CONFIG_EFI
is selected by the user.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Ard Biesheuvel Sept. 28, 2015, 7:40 a.m. UTC | #2
On 28 September 2015 at 06:34, Zhen Lei <thunder.leizhen@huawei.com> wrote:
> Now, ARM64 is also support EFI startup. We hope use EFI runtime services
> to get/set current time and date.
>
> RTC_LIB only controls some configs in drivers/char/Kconfig(included
> EFI_RTC), and will be automatically selected when RTC_CLASS opened. So
> this patch have no functional change but give an opportunity to select
> EFI_RTC when RTC_CLASS closed.
>
> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
> ---
>  arch/arm64/Kconfig | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 07d1811..25cec57 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -85,7 +85,7 @@ config ARM64
>         select PERF_USE_VMALLOC
>         select POWER_RESET
>         select POWER_SUPPLY
> -       select RTC_LIB
> +       select RTC_LIB if !EFI
>         select SPARSE_IRQ
>         select SYSCTL_EXCEPTION_TRACE
>         select HAVE_CONTEXT_TRACKING

You can currently enable EFI_RTC just fine on arm64 when EFI is enabled.
Why exactly do you need this patch on top?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Zhen Lei Sept. 28, 2015, 8:29 a.m. UTC | #3
On 2015/9/28 15:35, Arnd Bergmann wrote:
> On Monday 28 September 2015 13:34:38 Zhen Lei wrote:
>> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
>> index 07d1811..25cec57 100644
>> --- a/arch/arm64/Kconfig
>> +++ b/arch/arm64/Kconfig
>> @@ -85,7 +85,7 @@ config ARM64
>>         select PERF_USE_VMALLOC
>>         select POWER_RESET
>>         select POWER_SUPPLY
>> -       select RTC_LIB
>> +       select RTC_LIB if !EFI
>>         select SPARSE_IRQ
>>         select SYSCTL_EXCEPTION_TRACE
>>         select HAVE_CONTEXT_TRACKING
> 
> Sorry, we can't do that: enabling EFI has to be done in a way that it only
> adds features but not disables them.

I run "make ARCH=arm64 menuconfig" and found that RTC_CLASS is selected by default. Actually, RTC_LIB only
controls whether to display some configs when run "make menuconfig". I list all informations below:

---------make ARCH=arm64 menuconfig-----
  [*] Real Time Clock  --->

---------drivers/rtc/Kconfig-------
menuconfig RTC_CLASS
        bool "Real Time Clock"
        default n
        depends on !S390 && !UML
        select RTC_LIB

-----------------------------------
find . -name "*Kconfig*" | xargs grep RTC_LIB
./drivers/rtc/Kconfig:config RTC_LIB
./drivers/rtc/Kconfig:	select RTC_LIB
./drivers/char/Kconfig:if RTC_LIB=n
./drivers/char/Kconfig:endif # RTC_LIB
./arch/x86/Kconfig:	select RTC_LIB
./arch/arm/Kconfig:	select RTC_LIB
./arch/arm64/Kconfig:	select RTC_LIB if !EFI
./arch/sh/Kconfig:	select RTC_LIB
./arch/mips/Kconfig:	select RTC_LIB if !MACH_LOONGSON64

--------------drivers/char/Kconfig--------------
if RTC_LIB=n

config RTC
        tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"

.......

endif # RTC_LIB


> 
> Your patch breaks RTC on all non-EFI platforms as soon as CONFIG_EFI
> is selected by the user.

No, on non-EFI platforms, they can still use RTC as before. As I mentioned above,
RTC_LIB only controls whether to display some configs when run "make menuconfig".
On ARM64, (in this patch) I only allowed EFI_RTC can be showed when RTC_LIB was not selected.

--------------drivers/char/Kconfig--------------
if RTC_LIB=n

config RTC
tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"

.......

config EFI_RTC
        bool "EFI Real Time Clock Services"
        depends on IA64 || ARM64

.......

endif # RTC_LIB

> 
> 	Arnd
> 
> .
>
Arnd Bergmann Sept. 28, 2015, 8:42 a.m. UTC | #4
On Monday 28 September 2015 16:29:57 Leizhen wrote:
> 
> On 2015/9/28 15:35, Arnd Bergmann wrote:
> > On Monday 28 September 2015 13:34:38 Zhen Lei wrote:
> >> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> >> index 07d1811..25cec57 100644
> >> --- a/arch/arm64/Kconfig
> >> +++ b/arch/arm64/Kconfig
> >> @@ -85,7 +85,7 @@ config ARM64
> >>         select PERF_USE_VMALLOC
> >>         select POWER_RESET
> >>         select POWER_SUPPLY
> >> -       select RTC_LIB
> >> +       select RTC_LIB if !EFI
> >>         select SPARSE_IRQ
> >>         select SYSCTL_EXCEPTION_TRACE
> >>         select HAVE_CONTEXT_TRACKING
> > 
> > Sorry, we can't do that: enabling EFI has to be done in a way that it only
> > adds features but not disables them.
> 
> I run "make ARCH=arm64 menuconfig" and found that RTC_CLASS is selected by default. Actually, RTC_LIB only
> controls whether to display some configs when run "make menuconfig". I list all informations below:
> 
> ---------make ARCH=arm64 menuconfig-----
>   [*] Real Time Clock  --->
> 
> ---------drivers/rtc/Kconfig-------
> menuconfig RTC_CLASS
>         bool "Real Time Clock"
>         default n
>         depends on !S390 && !UML
>         select RTC_LIB

Ok, I see. So your patch here has no effect at all and can be dropped, or
we can remove the 'select RTC_LIB' without the EFI dependency.

> -----------------------------------
> find . -name "*Kconfig*" | xargs grep RTC_LIB
> ./drivers/rtc/Kconfig:config RTC_LIB
> ./drivers/rtc/Kconfig:	select RTC_LIB
> ./drivers/char/Kconfig:if RTC_LIB=n
> ./drivers/char/Kconfig:endif # RTC_LIB
> ./arch/x86/Kconfig:	select RTC_LIB
> ./arch/arm/Kconfig:	select RTC_LIB
> ./arch/arm64/Kconfig:	select RTC_LIB if !EFI
> ./arch/sh/Kconfig:	select RTC_LIB
> ./arch/mips/Kconfig:	select RTC_LIB if !MACH_LOONGSON64
> 
> --------------drivers/char/Kconfig--------------
> if RTC_LIB=n
> 
> config RTC
>         tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
> 
> .......
> 
> endif # RTC_LIB
> 
> 
> > 
> > Your patch breaks RTC on all non-EFI platforms as soon as CONFIG_EFI
> > is selected by the user.
> 
> No, on non-EFI platforms, they can still use RTC as before. As I mentioned above,
> RTC_LIB only controls whether to display some configs when run "make menuconfig".
> On ARM64, (in this patch) I only allowed EFI_RTC can be showed when RTC_LIB was
> not selected.
>

but that is the wrong driver that uses the legacy API, we cannot have that
on ARM because it conflicts with the normal RTC_CLASS drivers.

> --------------drivers/char/Kconfig--------------
> if RTC_LIB=n
> 
> config RTC
> tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
> 
> .......
> 
> config EFI_RTC
>         bool "EFI Real Time Clock Services"
>         depends on IA64 || ARM64
> 
> .......
> 
> endif # RTC_LIB

The driver you want is RTC_DRV_EFI, not EFI_RTC.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Zhen Lei Sept. 28, 2015, 9:44 a.m. UTC | #5
On 2015/9/28 16:42, Arnd Bergmann wrote:
> On Monday 28 September 2015 16:29:57 Leizhen wrote:
>>
>> On 2015/9/28 15:35, Arnd Bergmann wrote:
>>> On Monday 28 September 2015 13:34:38 Zhen Lei wrote:
>>>> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
>>>> index 07d1811..25cec57 100644
>>>> --- a/arch/arm64/Kconfig
>>>> +++ b/arch/arm64/Kconfig
>>>> @@ -85,7 +85,7 @@ config ARM64
>>>>         select PERF_USE_VMALLOC
>>>>         select POWER_RESET
>>>>         select POWER_SUPPLY
>>>> -       select RTC_LIB
>>>> +       select RTC_LIB if !EFI
>>>>         select SPARSE_IRQ
>>>>         select SYSCTL_EXCEPTION_TRACE
>>>>         select HAVE_CONTEXT_TRACKING
>>>
>>> Sorry, we can't do that: enabling EFI has to be done in a way that it only
>>> adds features but not disables them.
>>
>> I run "make ARCH=arm64 menuconfig" and found that RTC_CLASS is selected by default. Actually, RTC_LIB only
>> controls whether to display some configs when run "make menuconfig". I list all informations below:
>>
>> ---------make ARCH=arm64 menuconfig-----
>>   [*] Real Time Clock  --->
>>
>> ---------drivers/rtc/Kconfig-------
>> menuconfig RTC_CLASS
>>         bool "Real Time Clock"
>>         default n
>>         depends on !S390 && !UML
>>         select RTC_LIB
> 
> Ok, I see. So your patch here has no effect at all and can be dropped, or
> we can remove the 'select RTC_LIB' without the EFI dependency.

Oh, I described the reason in the reply to Ard Biesheuvel.

https://lkml.org/lkml/2015/9/28/124

> 
>> -----------------------------------
>> find . -name "*Kconfig*" | xargs grep RTC_LIB
>> ./drivers/rtc/Kconfig:config RTC_LIB
>> ./drivers/rtc/Kconfig:	select RTC_LIB
>> ./drivers/char/Kconfig:if RTC_LIB=n
>> ./drivers/char/Kconfig:endif # RTC_LIB
>> ./arch/x86/Kconfig:	select RTC_LIB
>> ./arch/arm/Kconfig:	select RTC_LIB
>> ./arch/arm64/Kconfig:	select RTC_LIB if !EFI
>> ./arch/sh/Kconfig:	select RTC_LIB
>> ./arch/mips/Kconfig:	select RTC_LIB if !MACH_LOONGSON64
>>
>> --------------drivers/char/Kconfig--------------
>> if RTC_LIB=n
>>
>> config RTC
>>         tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
>>
>> .......
>>
>> endif # RTC_LIB
>>
>>
>>>
>>> Your patch breaks RTC on all non-EFI platforms as soon as CONFIG_EFI
>>> is selected by the user.
>>
>> No, on non-EFI platforms, they can still use RTC as before. As I mentioned above,
>> RTC_LIB only controls whether to display some configs when run "make menuconfig".
>> On ARM64, (in this patch) I only allowed EFI_RTC can be showed when RTC_LIB was
>> not selected.
>>
> 
> but that is the wrong driver that uses the legacy API, we cannot have that
> on ARM because it conflicts with the normal RTC_CLASS drivers.

Yes, RTC_CLASS will automatically select RTC_LIB, and will not display EFI_RTC, because
RTC_LIB=y now.

We can select EFI_RTC only when RTC_CLASS is not selected(meanwhile RTC_LIB=n)

> 
>> --------------drivers/char/Kconfig--------------
>> if RTC_LIB=n
>>
>> config RTC
>> tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
>>
>> .......
>>
>> config EFI_RTC
>>         bool "EFI Real Time Clock Services"
>>         depends on IA64 || ARM64
>>
>> .......
>>
>> endif # RTC_LIB
> 
> The driver you want is RTC_DRV_EFI, not EFI_RTC.

OK, I will try it tommorrow.

> 
> 	Arnd
> 
> .
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Arnd Bergmann Sept. 28, 2015, 9:56 a.m. UTC | #6
On Monday 28 September 2015 17:44:40 Leizhen wrote:
> >> No, on non-EFI platforms, they can still use RTC as before. As I mentioned above,
> >> RTC_LIB only controls whether to display some configs when run "make menuconfig".
> >> On ARM64, (in this patch) I only allowed EFI_RTC can be showed when RTC_LIB was
> >> not selected.
> >>
> > 
> > but that is the wrong driver that uses the legacy API, we cannot have that
> > on ARM because it conflicts with the normal RTC_CLASS drivers.
> 
> Yes, RTC_CLASS will automatically select RTC_LIB, and will not display EFI_RTC, because
> RTC_LIB=y now.
> 
> We can select EFI_RTC only when RTC_CLASS is not selected(meanwhile RTC_LIB=n)

I understood that, and my initial point was that we cannot allow
such a situation, all drivers that we might use must be able to coexist
in one kernel.

If you have any applications that are ported from Itanium and that rely on
specific behavior of the ia64 rtc driver, we should either enable those in the
normal rtc-efi driver, or you need to change your application to use the
portable RTC interfaces.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
diff mbox

Patch

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 07d1811..25cec57 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -85,7 +85,7 @@  config ARM64
 	select PERF_USE_VMALLOC
 	select POWER_RESET
 	select POWER_SUPPLY
-	select RTC_LIB
+	select RTC_LIB if !EFI
 	select SPARSE_IRQ
 	select SYSCTL_EXCEPTION_TRACE
 	select HAVE_CONTEXT_TRACKING