Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Daniel Thompson
On Thu, Jul 12, 2018 at 11:41:08AM +0100, Grant Likely wrote:
> Add details on what to do if the platform is unable to set persistent
> variables in runtime services. The idea here is that the GetVariable()
> and SetVariable() APIs should continue to work, and the OS can obtain
> all the variable settings, but if it cannot be written then the
> NON_VOLATILE attribute is cleared so the OS knows that persistence is
> not available.

I'm really struggling to wrap my head around this one.

How does incorrectly describing a non-volatile but non-modifiable 
variable as volatile help the OS do the right thing?

The OS will discover the variable is non-modifiable when it tried to
set it. Won't the current proposal mislead standards compliant use of
GetVariable()? For example does it it makes standards compliant code
*more* likely to call SetVariable() in order to fix up a variable that
it thinks was incorrectly set with the NON_VOLATILE attribute.


Daniel.


> 
> Cc: Dong Wei 
> Cc: Alexander Graf 
> Cc: Peter Robinson 
> Signed-off-by: Grant Likely 
> ---
> 
> Alex/Peter: Does this approach work for you? I tried to come up with
> something that is faithful to the spec, gives the OS information that
> non-volatile variables aren't available, but still have the ability to
> query the boot environment.
> 
> Dong: Is this an appropriate way to use {Get,Set}Variable()?
> 
> Cheers,
> g.
> 
> ---
>  source/chapter2-uefi.rst | 18 +-
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/source/chapter2-uefi.rst b/source/chapter2-uefi.rst
> index 7b6843e..57594bc 100644
> --- a/source/chapter2-uefi.rst
> +++ b/source/chapter2-uefi.rst
> @@ -197,13 +197,13 @@ command:
> Operating Systems calls to reset the system will go via Runtime Services
> and not directly to PSCI.
>  
> -Set Variable
> -
> -
> -Non-volatile UEFI variables must persist across reset, and emulated variables
> -in RAM are not permitted.
> -The UEFI Runtime Services must be able to update the variables directly 
> without
> -the aid of the Operating System.
> +Runtime Variable Access
> +---
>  
> -.. note:: This normally requires dedicated storage for UEFI variables that is
> -   not directly accessible from the Operating System.
> +Non-volatile UEFI variables must persist across reset.
> +If the platform is incapable of updating non-volatile variables from Runtime
> +Services then it must clear the EFI_VARIABLE_NON_VOLATILE attribute from all
> +non-volatile variables when ExitBootServices() is called.
> +Similarly, if non-volatile variables cannot be set from Runtime Services, 
> then
> +SetVariable() must return EFI_INVALID_PARAMETER if the
> +EFI_VARIABLE_NON_VOLATILE attribute is set.
> -- 
> 2.13.0
> 
> ___
> Arm.ebbr-discuss mailing list
> arm.ebbr-disc...@arm.com
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Ard Biesheuvel
On 12 July 2018 at 15:12, Mark Brown  wrote:
> On Thu, Jul 12, 2018 at 01:50:45PM +0100, Daniel Thompson wrote:
>
>> The OS will discover the variable is non-modifiable when it tried to
>> set it. Won't the current proposal mislead standards compliant use of
>> GetVariable()? For example does it it makes standards compliant code
>> *more* likely to call SetVariable() in order to fix up a variable that
>> it thinks was incorrectly set with the NON_VOLATILE attribute.
>
> Do any existing implementations change variables from non-volatile to
> volatile?
>

The UEFI spec is explicit about which variables are volatile and which
are not. Simply relaxing non-volatile to volatile in the general case
doesn't seem like a useful approach to me.
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


RE: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Udit Kumar
My 2 cents 

> -Original Message-
> From: arm.ebbr-discuss-boun...@arm.com [mailto:arm.ebbr-discuss-
> boun...@arm.com] On Behalf Of Grant Likely
> Sent: Thursday, July 12, 2018 4:11 PM
> To: boot-architecture@lists.linaro.org; arm.ebbr-disc...@arm.com
> Cc: n...@arm.com
> Subject: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working 
> at
> runtime
> 
> Add details on what to do if the platform is unable to set persistent 
> variables in
> runtime services. The idea here is that the GetVariable() and SetVariable() 
> APIs
> should continue to work, and the OS can obtain all the variable settings, but 
> if it
> cannot be written then the NON_VOLATILE attribute is cleared so the OS knows
> that persistence is not available.
> 
> Cc: Dong Wei 
> Cc: Alexander Graf 
> Cc: Peter Robinson 
> Signed-off-by: Grant Likely 
> ---
> 
> Alex/Peter: Does this approach work for you? I tried to come up with something
> that is faithful to the spec, gives the OS information that non-volatile 
> variables
> aren't available, but still have the ability to query the boot environment.
> 
> Dong: Is this an appropriate way to use {Get,Set}Variable()?
> 
> Cheers,
> g.
> 
> ---
>  source/chapter2-uefi.rst | 18 +-
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/source/chapter2-uefi.rst b/source/chapter2-uefi.rst index
> 7b6843e..57594bc 100644
> --- a/source/chapter2-uefi.rst
> +++ b/source/chapter2-uefi.rst
> @@ -197,13 +197,13 @@ command:
> Operating Systems calls to reset the system will go via Runtime Services
> and not directly to PSCI.
> 
> -Set Variable
> -
> -
> -Non-volatile UEFI variables must persist across reset, and emulated 
> variables -
> in RAM are not permitted.
> -The UEFI Runtime Services must be able to update the variables directly 
> without
> -the aid of the Operating System.
> +Runtime Variable Access
> +---
> 
> -.. note:: This normally requires dedicated storage for UEFI variables that is
> -   not directly accessible from the Operating System.
> +Non-volatile UEFI variables must persist across reset.
> +If the platform is incapable of updating non-volatile variables from
> +Runtime Services then it must clear the EFI_VARIABLE_NON_VOLATILE
> +attribute from all non-volatile variables when ExitBootServices() is called.

This is really good statement for specification.
I believe this will solve the problem of shared storage too. 

> +Similarly, if non-volatile variables cannot be set from Runtime
> +Services, then
> +SetVariable() must return EFI_INVALID_PARAMETER if the
> +EFI_VARIABLE_NON_VOLATILE attribute is set.

You meant EFI_VARIABLE_NON_VOLATILE is reset ? 

Also I am not sure, if UEFI specs says return error EFI_INVALID_PARAMETER 
if variable is volatile 
 
Can we add statement for GetVariable too,  
UEFI Specs says 
" Variables that have runtime access but that are not nonvolatile are read-only 
data variables once ExitBootServices() is performed."

So this means, firmware (edk2 or u-boot) needs to take care of this. 
Simply caching variables in RAM could solve the purpose as SetVariable is not 
allowed. 




> --
> 2.13.0
> 
> ___
> Arm.ebbr-discuss mailing list
> arm.ebbr-disc...@arm.com
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


RE: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Udit Kumar
Hi Ard

> > Do any existing implementations change variables from non-volatile to
> > volatile?
> >
> 
> The UEFI spec is explicit about which variables are volatile and which are 
> not.
> Simply relaxing non-volatile to volatile in the general case doesn't seem 
> like a
> useful approach to me.

I believe at boot-time, UEFI specs will be followed for volatile and 
non-volatile variables. 
Having this in statement EBBR, will help those platform, which cannot expose 
non-volatile variables at runtime.

Regards
Udit 
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Grant Likely

On 12/07/2018 14:12, Mark Brown wrote:

On Thu, Jul 12, 2018 at 01:50:45PM +0100, Daniel Thompson wrote:

On Thu, Jul 12, 2018 at 11:41:08AM +0100, Grant Likely wrote:

Add details on what to do if the platform is unable to set persistent
variables in runtime services. The idea here is that the GetVariable()
and SetVariable() APIs should continue to work, and the OS can obtain
all the variable settings, but if it cannot be written then the
NON_VOLATILE attribute is cleared so the OS knows that persistence is
not available.


I'm really struggling to wrap my head around this one.

How does incorrectly describing a non-volatile but non-modifiable
variable as volatile help the OS do the right thing?


I took a read through section 8.2 of the UEFI spec (Variable services) 
before drafting the proposal.


UEFI doesn't define a "read-only" attribute for variables. It has a 
non-volatile attribute that says a variable change will be persistant. 
My thought here was that clearing the non-volatile flag will indicate 
that making a change to that variable will not be saved, and so won't 
change the boot order.


If an OS tries to modify a variable without using the exact same 
attributes, then SetVariable() will fail. e.g., If the OS tries to set 
EFI_VARIABLE_NON_VOLATILE on a veriable without that attribute, then it 
will fail with EFI_INVALID_PARAMETER (See description of SetVariable()).


With my proposed text, if the OS tries to set a new variable with the 
EFI_VARIABLE_NON_VOLATILE attribute set, then SetVariable() will also 
fail. (At runtime only; boot time SetVariable() should work as defined).


An OS can determine in two ways if variable writes are allowed.
1) If the BOOT* varilables don't have the NON_VOLATILE attribute.
2) A EFI_INVALID_PARAMETER return code when attempting to create an 
non-volatile variable, or set the NON_VOLATILE attribute.



The OS will discover the variable is non-modifiable when it tried to
set it. Won't the current proposal mislead standards compliant use of
GetVariable()? For example does it it makes standards compliant code
*more* likely to call SetVariable() in order to fix up a variable that
it thinks was incorrectly set with the NON_VOLATILE attribute.


If it tried to, the call to SetVariable() will fail.



Do any existing implementations change variables from non-volatile to
volatile?


I don't know. That's part of why this is an RFC. I'm looking for the 
most spec-compatible way to deal with platforms that cannot set 
non-volatile variables at runtime. The UEFI spec is written with the 
assumption that non-volatile variables can be written at runtime. EBBR 
encompases platforms that cannot (yet?) do that, so we're in new territory.


There are other approaches that could be taken too.
- Alex said a while back that if UEFI doesn't provide any variables at 
runtime, then it assumes non-volatile variables aren't available and 
will treat the ESP as if it were removable media.
  - The problem with this approach is it is a very blunt hammer. It 
eliminates all possible users of variables at runtime.


- We could add an EBBR_FLAGS variable or something similar to indicate 
EBBR style quirks, like non-volatile variables cannot be written at runtime.


Let's talk about this in the weekly meeting later today.

g.

___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Grant Likely

On 12/07/2018 15:50, Mark Brown wrote:

On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:


Do any existing implementations change variables from non-volatile to
volatile?



The UEFI spec is explicit about which variables are volatile and which are not.
Simply relaxing non-volatile to volatile in the general case doesn't seem like a
useful approach to me.



I believe at boot-time, UEFI specs will be followed for volatile and 
non-volatile variables.
Having this in statement EBBR, will help those platform, which cannot expose 
non-volatile variables at runtime.


If nothing currently does it the chances that anything will actually
cope well seem minimal.  Like Daniel said it seems more likely to break
things - if the variables are defined as being non-volatile then the OS
is unlikely to be checking at runtime if that's the case or not unless
it's explicitly written to work with EBBR.  If an error is generated
because a non-volatile variable can't be set then that should at least
fall into whatever error handling code is there to cover normal rutime
failures which has some chance of doing something sensible.


There is a hard break at least between when variables are used in boot 
services, and when they are used at runtime. For Linux, only the UEFI 
stub will read the variables at boot time (if at all) before calling 
exitBootServices(). By the time the kernel starts, runtime services are 
the only way to access variables. There is no caching of variables from 
the stub to the kernel as far as I can tell.


As far as the kernel and userspace are concerned, all the variables will 
have only ever been volatile.


g.






___
Arm.ebbr-discuss mailing list
arm.ebbr-disc...@arm.com



___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


RE: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Udit Kumar
Hi Mark 

> -Original Message-
> From: Mark Brown [mailto:broo...@kernel.org]
> Sent: Thursday, July 12, 2018 8:20 PM
> To: Udit Kumar 
> Cc: Ard Biesheuvel ; Architecture Mailman List
> ; nd ; arm.ebbr-discuss
> 
> Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not 
> working
> at runtime
> 
> On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:
> 
> > > > Do any existing implementations change variables from non-volatile
> > > > to volatile?
> 
> > > The UEFI spec is explicit about which variables are volatile and which 
> > > are not.
> > > Simply relaxing non-volatile to volatile in the general case doesn't
> > > seem like a useful approach to me.
> 
> > I believe at boot-time, UEFI specs will be followed for volatile and 
> > non-volatile
> variables.
> > Having this in statement EBBR, will help those platform, which cannot expose
> non-volatile variables at runtime.
> 
> If nothing currently does it the chances that anything will actually cope well
> seem minimal.  Like Daniel said it seems more likely to break things - if the
> variables are defined as being non-volatile then the OS is unlikely to be 
> checking
> at runtime if that's the case or not unless it's explicitly written to work 
> with
> EBBR.  If an error is generated because a non-volatile variable can't be set 
> then
> that should at least fall into whatever error handling code is there to cover
> normal rutime failures which has some chance of doing something sensible.

Right,  
There will be some breaks or say diversion from UEFI specs. 
If we need to follow UEFI specs 'Table 10. Global Variables' on such platform
where we cannot write to NV storage at runtime, then in either case 
1/ passing OS as no-efi-runtime or
2/ Returning errors/not saving to NV storage 
is violation of UEFI spec.

Which divergence is acceptable ?

Regards
Udit
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Graeme Gregory
On Thu, 12 Jul 2018 at 16:30, Udit Kumar  wrote:
>
> Hi Mark
>
> > -Original Message-
> > From: Mark Brown [mailto:broo...@kernel.org]
> > Sent: Thursday, July 12, 2018 8:20 PM
> > To: Udit Kumar 
> > Cc: Ard Biesheuvel ; Architecture Mailman List
> > ; nd ; arm.ebbr-discuss
> > 
> > Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not 
> > working
> > at runtime
> >
> > On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:
> >
> > > > > Do any existing implementations change variables from non-volatile
> > > > > to volatile?
> >
> > > > The UEFI spec is explicit about which variables are volatile and which 
> > > > are not.
> > > > Simply relaxing non-volatile to volatile in the general case doesn't
> > > > seem like a useful approach to me.
> >
> > > I believe at boot-time, UEFI specs will be followed for volatile and 
> > > non-volatile
> > variables.
> > > Having this in statement EBBR, will help those platform, which cannot 
> > > expose
> > non-volatile variables at runtime.
> >
> > If nothing currently does it the chances that anything will actually cope 
> > well
> > seem minimal.  Like Daniel said it seems more likely to break things - if 
> > the
> > variables are defined as being non-volatile then the OS is unlikely to be 
> > checking
> > at runtime if that's the case or not unless it's explicitly written to work 
> > with
> > EBBR.  If an error is generated because a non-volatile variable can't be 
> > set then
> > that should at least fall into whatever error handling code is there to 
> > cover
> > normal rutime failures which has some chance of doing something sensible.
>
> Right,
> There will be some breaks or say diversion from UEFI specs.
> If we need to follow UEFI specs 'Table 10. Global Variables' on such platform
> where we cannot write to NV storage at runtime, then in either case
> 1/ passing OS as no-efi-runtime or
> 2/ Returning errors/not saving to NV storage
> is violation of UEFI spec.
>
> Which divergence is acceptable ?
>
Neither, fix the specs with proper updates to support your use-case.

Or fix your platform to obey the specs you have chosen.

Don't write a spec to bend another spec that way leads to chaos.

Graeme
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Rob Herring
On Thu, Jul 12, 2018 at 9:37 AM Graeme Gregory
 wrote:
>
> On Thu, 12 Jul 2018 at 16:30, Udit Kumar  wrote:
> >
> > Hi Mark
> >
> > > -Original Message-
> > > From: Mark Brown [mailto:broo...@kernel.org]
> > > Sent: Thursday, July 12, 2018 8:20 PM
> > > To: Udit Kumar 
> > > Cc: Ard Biesheuvel ; Architecture Mailman List
> > > ; nd ; arm.ebbr-discuss
> > > 
> > > Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not 
> > > working
> > > at runtime
> > >
> > > On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:
> > >
> > > > > > Do any existing implementations change variables from non-volatile
> > > > > > to volatile?
> > >
> > > > > The UEFI spec is explicit about which variables are volatile and 
> > > > > which are not.
> > > > > Simply relaxing non-volatile to volatile in the general case doesn't
> > > > > seem like a useful approach to me.
> > >
> > > > I believe at boot-time, UEFI specs will be followed for volatile and 
> > > > non-volatile
> > > variables.
> > > > Having this in statement EBBR, will help those platform, which cannot 
> > > > expose
> > > non-volatile variables at runtime.
> > >
> > > If nothing currently does it the chances that anything will actually cope 
> > > well
> > > seem minimal.  Like Daniel said it seems more likely to break things - if 
> > > the
> > > variables are defined as being non-volatile then the OS is unlikely to be 
> > > checking
> > > at runtime if that's the case or not unless it's explicitly written to 
> > > work with
> > > EBBR.  If an error is generated because a non-volatile variable can't be 
> > > set then
> > > that should at least fall into whatever error handling code is there to 
> > > cover
> > > normal rutime failures which has some chance of doing something sensible.
> >
> > Right,
> > There will be some breaks or say diversion from UEFI specs.
> > If we need to follow UEFI specs 'Table 10. Global Variables' on such 
> > platform
> > where we cannot write to NV storage at runtime, then in either case
> > 1/ passing OS as no-efi-runtime or
> > 2/ Returning errors/not saving to NV storage
> > is violation of UEFI spec.
> >
> > Which divergence is acceptable ?
> >
> Neither, fix the specs with proper updates to support your use-case.
>
> Or fix your platform to obey the specs you have chosen.

How do you add firmware storage to existing platforms?

> Don't write a spec to bend another spec that way leads to chaos.

Well, EBBR is such a spec. The chaos is already there and EBBR
attempts to apply some amount of order to the chaos.

Rob
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Graeme Gregory
On Thu, 12 Jul 2018 at 16:50, Rob Herring  wrote:
>
> On Thu, Jul 12, 2018 at 9:37 AM Graeme Gregory
>  wrote:
> >
> > On Thu, 12 Jul 2018 at 16:30, Udit Kumar  wrote:
> > >
> > > Hi Mark
> > >
> > > > -Original Message-
> > > > From: Mark Brown [mailto:broo...@kernel.org]
> > > > Sent: Thursday, July 12, 2018 8:20 PM
> > > > To: Udit Kumar 
> > > > Cc: Ard Biesheuvel ; Architecture Mailman 
> > > > List
> > > > ; nd ; 
> > > > arm.ebbr-discuss
> > > > 
> > > > Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() 
> > > > not working
> > > > at runtime
> > > >
> > > > On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:
> > > >
> > > > > > > Do any existing implementations change variables from non-volatile
> > > > > > > to volatile?
> > > >
> > > > > > The UEFI spec is explicit about which variables are volatile and 
> > > > > > which are not.
> > > > > > Simply relaxing non-volatile to volatile in the general case doesn't
> > > > > > seem like a useful approach to me.
> > > >
> > > > > I believe at boot-time, UEFI specs will be followed for volatile and 
> > > > > non-volatile
> > > > variables.
> > > > > Having this in statement EBBR, will help those platform, which cannot 
> > > > > expose
> > > > non-volatile variables at runtime.
> > > >
> > > > If nothing currently does it the chances that anything will actually 
> > > > cope well
> > > > seem minimal.  Like Daniel said it seems more likely to break things - 
> > > > if the
> > > > variables are defined as being non-volatile then the OS is unlikely to 
> > > > be checking
> > > > at runtime if that's the case or not unless it's explicitly written to 
> > > > work with
> > > > EBBR.  If an error is generated because a non-volatile variable can't 
> > > > be set then
> > > > that should at least fall into whatever error handling code is there to 
> > > > cover
> > > > normal rutime failures which has some chance of doing something 
> > > > sensible.
> > >
> > > Right,
> > > There will be some breaks or say diversion from UEFI specs.
> > > If we need to follow UEFI specs 'Table 10. Global Variables' on such 
> > > platform
> > > where we cannot write to NV storage at runtime, then in either case
> > > 1/ passing OS as no-efi-runtime or
> > > 2/ Returning errors/not saving to NV storage
> > > is violation of UEFI spec.
> > >
> > > Which divergence is acceptable ?
> > >
> > Neither, fix the specs with proper updates to support your use-case.
> >
> > Or fix your platform to obey the specs you have chosen.
>
> How do you add firmware storage to existing platforms?
>
Why can't UEFI spec be updated to handle such reduced functionality
platforms if this is important?

Its not like appropriate people are unknown to Linaro.

Graeme
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Grant Likely

On 12/07/2018 16:56, Graeme Gregory wrote:

On Thu, 12 Jul 2018 at 16:50, Rob Herring  wrote:


On Thu, Jul 12, 2018 at 9:37 AM Graeme Gregory
 wrote:


On Thu, 12 Jul 2018 at 16:30, Udit Kumar  wrote:


Hi Mark


-Original Message-
From: Mark Brown [mailto:broo...@kernel.org]
Sent: Thursday, July 12, 2018 8:20 PM
To: Udit Kumar 
Cc: Ard Biesheuvel ; Architecture Mailman List
; nd ; arm.ebbr-discuss

Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not 
working
at runtime

On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:


Do any existing implementations change variables from non-volatile
to volatile?



The UEFI spec is explicit about which variables are volatile and which are not.
Simply relaxing non-volatile to volatile in the general case doesn't
seem like a useful approach to me.



I believe at boot-time, UEFI specs will be followed for volatile and 
non-volatile

variables.

Having this in statement EBBR, will help those platform, which cannot expose

non-volatile variables at runtime.

If nothing currently does it the chances that anything will actually cope well
seem minimal.  Like Daniel said it seems more likely to break things - if the
variables are defined as being non-volatile then the OS is unlikely to be 
checking
at runtime if that's the case or not unless it's explicitly written to work with
EBBR.  If an error is generated because a non-volatile variable can't be set 
then
that should at least fall into whatever error handling code is there to cover
normal rutime failures which has some chance of doing something sensible.


Right,
There will be some breaks or say diversion from UEFI specs.
If we need to follow UEFI specs 'Table 10. Global Variables' on such platform
where we cannot write to NV storage at runtime, then in either case
1/ passing OS as no-efi-runtime or
2/ Returning errors/not saving to NV storage
is violation of UEFI spec.

Which divergence is acceptable ?


Neither, fix the specs with proper updates to support your use-case.

Or fix your platform to obey the specs you have chosen.


How do you add firmware storage to existing platforms?


Why can't UEFI spec be updated to handle such reduced functionality
platforms if this is important?

Its not like appropriate people are unknown to Linaro.


That is exactly what we discussed in the meeting today. Right now UEFI 
2.7 doesn't cover the use case we care about. Resolution was to put a 
note into EBBR v0.6 stating that this is a problem and asking for 
feedback on preferred solution. The end result will either be a 
clarification in UEFI, or a note in EBBR. We will coordinate with the 
USWG on this issue.


g.
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture


RE: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not working at runtime

2018-07-12 Thread Dong Wei
Agree, that's what we will do.

- DW
-
-Original Message-
From: arm.ebbr-discuss-boun...@arm.com  On 
Behalf Of Graeme Gregory
Sent: Thursday, July 12, 2018 8:37 AM
To: udit.ku...@nxp.com
Cc: nd ; boot-architecture@lists.linaro.org; Mark Brown 
; arm.ebbr-discuss 
Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for SetVariable() not 
working at runtime

On Thu, 12 Jul 2018 at 16:30, Udit Kumar  wrote:
>
> Hi Mark
>
> > -Original Message-
> > From: Mark Brown [mailto:broo...@kernel.org]
> > Sent: Thursday, July 12, 2018 8:20 PM
> > To: Udit Kumar 
> > Cc: Ard Biesheuvel ; Architecture Mailman
> > List ; nd ;
> > arm.ebbr-discuss 
> > Subject: Re: [Arm.ebbr-discuss] [RFC] uefi: Account for
> > SetVariable() not working at runtime
> >
> > On Thu, Jul 12, 2018 at 02:19:49PM +, Udit Kumar wrote:
> >
> > > > > Do any existing implementations change variables from
> > > > > non-volatile to volatile?
> >
> > > > The UEFI spec is explicit about which variables are volatile and which 
> > > > are not.
> > > > Simply relaxing non-volatile to volatile in the general case
> > > > doesn't seem like a useful approach to me.
> >
> > > I believe at boot-time, UEFI specs will be followed for volatile
> > > and non-volatile
> > variables.
> > > Having this in statement EBBR, will help those platform, which
> > > cannot expose
> > non-volatile variables at runtime.
> >
> > If nothing currently does it the chances that anything will actually
> > cope well seem minimal.  Like Daniel said it seems more likely to
> > break things - if the variables are defined as being non-volatile
> > then the OS is unlikely to be checking at runtime if that's the case
> > or not unless it's explicitly written to work with EBBR.  If an
> > error is generated because a non-volatile variable can't be set then
> > that should at least fall into whatever error handling code is there to 
> > cover normal rutime failures which has some chance of doing something 
> > sensible.
>
> Right,
> There will be some breaks or say diversion from UEFI specs.
> If we need to follow UEFI specs 'Table 10. Global Variables' on such
> platform where we cannot write to NV storage at runtime, then in
> either case 1/ passing OS as no-efi-runtime or 2/ Returning errors/not
> saving to NV storage is violation of UEFI spec.
>
> Which divergence is acceptable ?
>
Neither, fix the specs with proper updates to support your use-case.

Or fix your platform to obey the specs you have chosen.

Don't write a spec to bend another spec that way leads to chaos.

Graeme
___
Arm.ebbr-discuss mailing list
arm.ebbr-disc...@arm.com
IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
___
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture