Hi Sunny,

Good catch for both these issues. Thanks for fixing them.

With this:

On 2021.07.23 10:04, Sunny Wang wrote:
This patch fixes two issues below:
1. SCT SetTime_Func failures.
    - https://github.com/pftf/RPi4/issues/164
2. Using shell time and date commands to set time can't work.

The problem is that gRT->SetTime always returns EFI_INVALID_PARAMETER
error status.

The root cause is that LibSetTime() sets RtcEpochSeconds variable with
inconsistent attributes. One is without EFI_VARIABLE_NON_VOLATILE,
the other one is with EFI_VARIABLE_NON_VOLATILE. That caused that the
variable driver returns EFI_INVALID_PARAMETER. Per UEFI spec, if a
preexisting variable is rewritten with different attributes,
SetVariable() shall not modify the variable and shall return
EFI_INVALID_PARAMETER.

Therefore, the solution is to add EFI_VARIABLE_NON_VOLATILE attribute
to the first EfiSetVariable() call to make two calls consistent.

By the way, this patch also fix a minor issue with a debug message.

Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com>
Cc: Sami Mujawar <sami.muja...@arm.com>
Cc: Jeremy Linton <jeremy.lin...@arm.com>
Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org>
Cc: Pete Batard <p...@akeo.ie>
Cc: Leif Lindholm <l...@nuviainc.com>

Signed-off-by: Sunny Wang <sunny.w...@arm.com>
---
  .../VirtualRealTimeClockLib/VirtualRealTimeClockLib.c       | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c 
b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
index de6fbb40e6..c10c91bc75 100644
--- a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
+++ b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
@@ -4,7 +4,7 @@
   *
   *  Coypright (c) 2019, Pete Batard <p...@akeo.ie>
   *  Copyright (c) 2018, Andrei Warkentin <andrey.warken...@gmail.com>
- *  Copyright (c) 2011-2014, ARM Ltd. All rights reserved.
+ *  Copyright (c) 2011-2021, ARM Ltd. All rights reserved.
   *  Copyright (c) 2008-2010, Apple Inc. All rights reserved.
   *  Copyright (c) Microsoft Corporation. All rights reserved.
   *
@@ -96,7 +96,7 @@ LibGetTime (
      EfiSetVariable (
        (CHAR16 *)mEpochVariableName,
        &gEfiCallerIdGuid,
-      EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+      EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | 
EFI_VARIABLE_RUNTIME_ACCESS,
        sizeof (EpochSeconds),
        &EpochSeconds
        );
@@ -324,7 +324,7 @@ LibSetTime (
      DEBUG ((
        DEBUG_ERROR,
        "LibSetTime: Failed to save %s variable to non-volatile storage, Status = 
%r\n",
-      mDaylightVariableName,
+      mEpochVariableName,
        Status
        ));
      return Status;


Reviewed-by: Pete Batard <p...@akeo.ie>
Tested-by: Pete Batard <p...@akeo.ie>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#78139): https://edk2.groups.io/g/devel/message/78139
Mute This Topic: https://groups.io/mt/84397263/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to