public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ard Biesheuvel" <ard.biesheuvel@arm.com>
To: Laszlo Ersek <lersek@redhat.com>,
	edk2-devel-groups-io <devel@edk2.groups.io>
Cc: "Leif Lindholm" <leif@nuviainc.com>,
	"Marcin Wojtas" <mw@semihalf.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: Re: [edk2-platforms PATCH] Silicon/Marvell/RealTimeClockLib: make EpochSeconds, WakeupSeconds UINTN
Date: Mon, 21 Dec 2020 13:16:30 +0100	[thread overview]
Message-ID: <39b45fed-d3d9-5563-81be-bcf339f01085@arm.com> (raw)
In-Reply-To: <20201221112433.5525-1-lersek@redhat.com>

On 12/21/20 12:24 PM, Laszlo Ersek wrote:
> We're going to change EfiTimeToEpoch() in edk2's TimeBaseLib to propagate
> its internal UINTN calculation to the caller without an internal UINT32
> truncation.
> 
> Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib drives 32-bit-only
> hardware, so catch any number of seconds since the epoch, from
> EfiTimeToEpoch(), that doesn't fit in 32 bits.
> 
> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
> Cc: Leif Lindholm <leif@nuviainc.com>
> Cc: Marcin Wojtas <mw@semihalf.com>
> Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Laszlo Ersek <lersek@redhat.com>

Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>

Feel free to push this directly (no CI+label dance required)


> ---
> 
> Notes:
>     Build-tested only, with
>     
>       build \
>         -a AARCH64 \
>         -b NOOPT \
>         -p Platform/SolidRun/Armada80x0McBin/Armada80x0McBin.dsc \
>         -t GCC5 \
>         -m EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
> 
>  Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c b/Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c
> index 1974e0144cd8..a811fd368eca 100644
> --- a/Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c
> +++ b/Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c
> @@ -100,33 +100,36 @@ EFIAPI
>  LibSetTime (
>    IN EFI_TIME                *Time
>    )
>  {
>    EFI_STATUS  Status = EFI_SUCCESS;
> -  UINT32      EpochSeconds;
> +  UINTN       EpochSeconds;
>  
>    // Check the input parameters are within the range specified by UEFI
>    if (!IsTimeValid (Time)) {
>      return EFI_INVALID_PARAMETER;
>    }
>  
>    // Convert time to raw seconds
>    EpochSeconds = EfiTimeToEpoch (Time);
> +  if (EpochSeconds > MAX_UINT32) {
> +    return EFI_INVALID_PARAMETER;
> +  }
>  
>    // Issue delayed write to time register
> -  RtcDelayedWrite (RTC_TIME_REG, EpochSeconds);
> +  RtcDelayedWrite (RTC_TIME_REG, (UINT32)EpochSeconds);
>  
>    return Status;
>  }
>  
>  /**
>    Returns the current wakeup alarm clock setting.
>  
>    @param  Enabled               Indicates if the alarm is currently enabled or disabled.
>    @param  Pending               Indicates if the alarm signal is pending and requires acknowledgement.
>    @param  Time                  The current alarm setting.
>  
>    @retval EFI_SUCCESS           The alarm settings were returned.
>    @retval EFI_INVALID_PARAMETER Any parameter is NULL.
>    @retval EFI_DEVICE_ERROR      The wakeup time could not be retrieved due to a hardware error.
>  
>  **/
> @@ -172,32 +175,35 @@ EFIAPI
>  LibSetWakeupTime (
>    IN BOOLEAN      Enabled,
>    OUT EFI_TIME    *Time
>    )
>  {
> -  UINT32      WakeupSeconds;
> +  UINTN       WakeupSeconds;
>  
>    // Convert time to raw seconds
>    WakeupSeconds = EfiTimeToEpoch (Time);
> +  if (WakeupSeconds > MAX_UINT32) {
> +    return EFI_INVALID_PARAMETER;
> +  }
>  
>    // Issue delayed write to alarm register
> -  RtcDelayedWrite (RTC_ALARM_2_REG, WakeupSeconds);
> +  RtcDelayedWrite (RTC_ALARM_2_REG, (UINT32)WakeupSeconds);
>  
>    if (Enabled) {
>      MmioWrite32 (mArmadaRtcBase + RTC_IRQ_2_CONFIG_REG, RTC_IRQ_ALARM_EN);
>    } else {
>      MmioWrite32 (mArmadaRtcBase + RTC_IRQ_2_CONFIG_REG, 0);
>    }
>  
>    return EFI_SUCCESS;
>  }
>  
>  /**
>    This is the declaration of an EFI image entry point. This can be the entry point to an application
>    written to this specification, an EFI boot service driver, or an EFI runtime driver.
>  
>    @param  ImageHandle           Handle that identifies the loaded image.
>    @param  SystemTable           System Table for this image.
>  
>    @retval EFI_SUCCESS           The operation completed successfully.
>  
>  **/
> 


  reply	other threads:[~2020-12-21 12:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-21 11:24 [edk2-platforms PATCH] Silicon/Marvell/RealTimeClockLib: make EpochSeconds, WakeupSeconds UINTN Laszlo Ersek
2020-12-21 12:16 ` Ard Biesheuvel [this message]
2020-12-21 13:21   ` [edk2-devel] " Laszlo Ersek

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-list 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=39b45fed-d3d9-5563-81be-bcf339f01085@arm.com \
    --to=devel@edk2.groups.io \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox