Re: [edk2] [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC

2017-08-10 Thread Leif Lindholm
On Wed, Aug 09, 2017 at 10:12:37PM +0800, Jun Nie wrote:
> Runtime service is not supported yet.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jun Nie 
> ---
>  .../Zx6718RealTimeClockLib/Zx296718RealTimeClock.c | 376 
> +
>  .../Zx6718RealTimeClockLib/Zx296718RealTimeClock.h | 102 ++
>  .../Zx296718RealTimeClock.inf  |  42 +++
>  3 files changed, 520 insertions(+)
>  create mode 100644 
> Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
>  create mode 100644 
> Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h
>  create mode 100644 
> Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.inf
> 
> diff --git 
> a/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c 
> b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
> new file mode 100644
> index 000..af6e5bd
> --- /dev/null
> +++ b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
> @@ -0,0 +1,376 @@
> +/** @file
> +  Implement EFI RealTimeClock runtime services via RTC Lib.
> +
> +  Currently this driver does not support runtime virtual calling.
> +
> +  Copyright (C) 2017 Sanechips Technology Co., Ltd.
> +  Copyright (c) 2017, Linaro Limited.
> +
> +  This program and the accompanying materials
> +  are licensed and made available under the terms and conditions of the BSD 
> License
> +  which accompanies this distribution.  The full text of the license may be 
> found at
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
> IMPLIED.
> +
> +  Based on the files under 
> ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf
> +
> +**/
> +
> +#include 
> +#include 

P before U.

> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +// Use EfiAtRuntime to check stage
> +#include 

L (UefiRuntimeLib) before S (UefiRuntimeServices...).
No need for a comment explaining why we include headers.

> +#include 
> +#include "Zx296718RealTimeClock.h"
> +
> +STATIC UINTN   RtcBase;

mRtcBase.

> +STATIC BOOLEAN RTCInitialized = FALSE;

mRTCInitialized.

> +
> +BOOLEAN
> +EFIAPI
> +IsTimeValid(
> +  IN EFI_TIME *Time
> +  )
> +{
> +  // Check the input parameters are within the range specified by UEFI
> +  if ((Time->Year  < 2000) ||
> + (Time->Year   > 2099) ||
> + (Time->Month  < 1   ) ||
> + (Time->Month  > 12  ) ||
> + (Time->Day< 1   ) ||
> + (Time->Day> 31  ) ||
> + (Time->Hour   > 23  ) ||
> + (Time->Minute > 59  ) ||
> + (Time->Second > 59  ) ||
> + (Time->Nanosecond > 9) ||
> + (!((Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) || ((Time->TimeZone >= 
> -1440) && (Time->TimeZone <= 1440 ||
> + (Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | EFI_TIME_IN_DAYLIGHT)))
> +  ) {
> +return FALSE;
> +  }
> +
> +  return TRUE;
> +}

This appears a direct copy of the version in
EmbeddedPkg/Library/TimeBaseLib. Can you add that TimeBaseLib library
dependency to decrease duplication?
(This may not have existed as a standalone library at the time you
started this port.)

> +
> +VOID

A lot of the functions in this file could do with a STATIC prefix,
since they are only used internally.

> +Wait4Busy (

Semantically, this name is incorrect.
The function is waiting _while_ the state is RTC_BUSY, so seems to me
it should be called WaitBusy.

> +  VOID
> +  )
> +{
> +  UINT32 Val, Retry = 1000;
> +  do {
> +MicroSecondDelay (200);

Why 200?

> +Val = MmioRead32 (RtcBase + RTCSTS);

MmioRead32 does not imply any barrier semantics.
If this component will only ever be supported on ARM platforms, you
could insert an ArmDataMemoryBarrier (). Otherwise, MemoryFence ().

> +  } while(Val & RTC_BUSY && Retry--);

Space before (.

> +
> +  if (!Retry)
> +DEBUG((DEBUG_ERROR, "%a Rtc busy retry timeout\n", __func__));

Space after DEBUG.

> +}
> +
> +VOID
> +RTCWriteReg (
> +  IN UINT32 Reg,
> +  IN UINT32 Val
> +  )
> +{
> +  Wait4Busy ();
> +  MmioWrite32 (RtcBase + RTCCFGID, CONFIG_PARMETER);
> +  Wait4Busy ();
> +  MmioWrite32 (RtcBase + Reg, Val);
> +}
> +
> +UINT32
> +RTCReadReg (
> +  IN UINT32 Reg
> +  )
> +{
> +  Wait4Busy ();
> +  return MmioRead32 (RtcBase + Reg);
> +}
> +
> +VOID
> +InitializeRTC (
> +  VOID
> +  )
> +{
> +  UINTN Val = (UINTN)FixedPcdGet64 (PcdZxRtcClockFreq);
> +
> +  RTCWriteReg (RTCCLKCNT, Val - 1);
> +  Val = RTCReadReg (RTCPOWERINIT1);
> +  if (RTC_POWER_INI1_PARA != Val) {
> +RTCWriteReg (RTCCTL, 0);
> +MicroSecondDelay (INIT_DELAY);
> +Val = RTCReadReg (RTCCTL);
> +Val |= RTC_CTRL_BIT6_1;
> +RTCWriteReg (RTCCTL, Val);
> +Val = RTCReadReg (RTCCTL);
> +Val &= RTC_CTRL_MODULE24 | RTC_CTRL_STOP;
> +  

Re: [edk2] [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC

2017-08-10 Thread Leif Lindholm
Just another thought.

On Wed, Aug 09, 2017 at 10:12:37PM +0800, Jun Nie wrote:
> diff --git 
> a/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h 
> b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h
> new file mode 100644
> index 000..3b5a4d4
> --- /dev/null
> +++ b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h
> @@ -0,0 +1,102 @@
> +/** @file
> +*
> +*  Copyright (C) 2017 Sanechips Technology Co., Ltd.
> +*  Copyright (c) 2017, Linaro Ltd.
> +*
> +*  This program and the accompanying materials
> +*  are licensed and made available under the terms and conditions of the BSD 
> License
> +*  which accompanies this distribution.  The full text of the license may be 
> found at
> +*  http://opensource.org/licenses/bsd-license.php
> +*
> +*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
> IMPLIED.
> +*
> +*  Based on the files under 
> ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf
> +**/
> +
> +
> +#ifndef __DS3231_REAL_TIME_CLOCK_H__
> +#define __DS3231_REAL_TIME_CLOCK_H__
> +
> +#define RTC_POWER_INI1_PARA (0xCDBC)
> +#define RTC_POWER_INI2_PARA (0xCFCC)
> +#define CONFIG_PARMETER (0xC1CD)
> +
> +#define ZX_RTC_CMP_VALUE(0x3FFF)
> +#define WAIT_FOR_COUNT  (2000)
> +#define INIT_DELAY  (100)
> +
> +
> +/* RTC Control register description */
> +#define RTC_CTRL_STOP   (~(0x1 << 0))
> +#define RTC_CTRL_RUN(0x1 << 0)
> +#define RTC_CTRL_ROUND30S   (0x1 << 1)
> +#define RTC_CTRL_AUTO_COMPENSATION  (0x1 << 2)
> +#define RTC_CTRL_MODULE12   (0x1 << 3)
> +#define RTC_CTRL_MODULE24   (~(0x1 << 3))
> +#define RTC_CTRL_SET_32_COUNTER (0x1 << 5)
> +#define RTC_CTRL_SOFT_RESET (0x1 << 6)
> +#define RTC_CTRL_CLK_32K_OUTEN  (0x1 << 8)
> +
> +#define RTC_CTRL_BIT6_0 ( ~(0x1 << 6))
> +#define RTC_CTRL_BIT6_1 (0x1 << 6)
> +
> +
> +
> +/* RTC Interrupt register description */
> +#define RTC_EVERY_MASK  (0x3 << 0)
> +#define RTC_EVERY_SEC   0x00/* second periodic 
> intrrupt */
> +#define RTC_EVERY_MIN   0x01/* minute periodic 
> interrupt */
> +#define RTC_EVERY_HR0x02/* hour periodic 
> interrupt */
> +#define RTC_EVERY_DAY   0x03/* day periodic 
> interrupt */
> +#define RTC_IT_TIMER(0x1 << 2)  /* Enable periodic 
> interrupt */
> +#define RTC_IT_ALARM(0x1 << 3)  /* Enable alarm 
> clock interrupt */
> +#define RTC_IT_MASK (0x3 << 2)
> +
> +/* RTC Status register description */
> +#define RTC_BUSY(0x1 << 0)  /* Read-only, 
> indicate refresh*/
> +#define RTC_RUN (0x1 << 1)  /* Read-only, RTC is 
> running */
> +#define RTC_ALARM   (0x1 << 6)  /* Read/Write, Alarm 
> interrupt has been generated */
> +#define RTC_TIMER   (0x1 << 7)  /* Read/Write, Timer 
> interrupt has been generated */
> +#define RTC_POWER_UP(0x1 << 8)  /* Read/Write, Reset 
> */
> +
> +#define TM_YEAR_START   1900
> +
> +#define TM_MONTH_OFFSET 1
> +
> +#define TM_WDAY_SUNDAY  0
> +#define ZX_RTC_SUNDAY   7
> +
> +#define BCD2BIN(val)(((val) & 0x0f) + ((val) >> 4) * 10)
> +#define BIN2BCD(val)val) / 10) << 4) + (val) % 10)

Are these not equivalent to DecimalToBcd8/BcdToDecimal8 in BaseLib?
If so, could we drop these and use the BasLib versions in the code?

> +
> +#define BCD4_2_BIN(x)   (( (x) & 0x0F) +\
> +x) & 0x0F0) >>   4) * 10)  +\
> +x) & 0xF00) >>   8) * 100) +\
> +x) & 0xF000) >> 12) * 1000))
> +
> +
> +#define BIN_2_BCD4(x)   (((x % 10) & 0x0F)   |  \
> +(((x /10 ) % 10)  <<  4) |  \
> +(((x /100) % 10)  <<  8) |  \
> +(((x /1000) % 10) << 12))
> +

And would these not be DecimalToBcd16/BcdToDecimal16? Should we add
those to BaseLib?

/
Leif
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC

2017-08-17 Thread Jun Nie

On 2017年08月10日 22:03, Leif Lindholm wrote:

On Wed, Aug 09, 2017 at 10:12:37PM +0800, Jun Nie wrote:

Runtime service is not supported yet.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jun Nie 
---
  .../Zx6718RealTimeClockLib/Zx296718RealTimeClock.c | 376 +
  .../Zx6718RealTimeClockLib/Zx296718RealTimeClock.h | 102 ++
  .../Zx296718RealTimeClock.inf  |  42 +++
  3 files changed, 520 insertions(+)
  create mode 100644 
Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
  create mode 100644 
Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h
  create mode 100644 
Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.inf

diff --git 
a/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c 
b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
new file mode 100644
index 000..af6e5bd
--- /dev/null
+++ b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
@@ -0,0 +1,376 @@
+/** @file
+  Implement EFI RealTimeClock runtime services via RTC Lib.
+
+  Currently this driver does not support runtime virtual calling.
+
+  Copyright (C) 2017 Sanechips Technology Co., Ltd.
+  Copyright (c) 2017, Linaro Limited.
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 
License
+  which accompanies this distribution.  The full text of the license may be 
found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+  Based on the files under 
ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf
+
+**/
+
+#include 
+#include 


P before U.


+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+// Use EfiAtRuntime to check stage
+#include 


L (UefiRuntimeLib) before S (UefiRuntimeServices...).
No need for a comment explaining why we include headers.


+#include 
+#include "Zx296718RealTimeClock.h"
+
+STATIC UINTN   RtcBase;


mRtcBase.


+STATIC BOOLEAN RTCInitialized = FALSE;


mRTCInitialized.


+
+BOOLEAN
+EFIAPI
+IsTimeValid(
+  IN EFI_TIME *Time
+  )
+{
+  // Check the input parameters are within the range specified by UEFI
+  if ((Time->Year  < 2000) ||
+ (Time->Year   > 2099) ||
+ (Time->Month  < 1   ) ||
+ (Time->Month  > 12  ) ||
+ (Time->Day< 1   ) ||
+ (Time->Day> 31  ) ||
+ (Time->Hour   > 23  ) ||
+ (Time->Minute > 59  ) ||
+ (Time->Second > 59  ) ||
+ (Time->Nanosecond > 9) ||
+ (!((Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) || ((Time->TimeZone >= -1440) 
&& (Time->TimeZone <= 1440 ||
+ (Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | EFI_TIME_IN_DAYLIGHT)))
+  ) {
+return FALSE;
+  }
+
+  return TRUE;
+}


This appears a direct copy of the version in
EmbeddedPkg/Library/TimeBaseLib. Can you add that TimeBaseLib library
dependency to decrease duplication?
(This may not have existed as a standalone library at the time you
started this port.)


+
+VOID


A lot of the functions in this file could do with a STATIC prefix,
since they are only used internally.


+Wait4Busy (


Semantically, this name is incorrect.
The function is waiting _while_ the state is RTC_BUSY, so seems to me
it should be called WaitBusy.


+  VOID
+  )
+{
+  UINT32 Val, Retry = 1000;
+  do {
+MicroSecondDelay (200);


Why 200?


It is just a suggested delay time according to RTC clock frequency. You 
want a RTC_WAIT_DELAY macro here for better understanding, right?



+Val = MmioRead32 (RtcBase + RTCSTS);


MmioRead32 does not imply any barrier semantics.
If this component will only ever be supported on ARM platforms, you
could insert an ArmDataMemoryBarrier (). Otherwise, MemoryFence ().


+  } while(Val & RTC_BUSY && Retry--);


Space before (.


+
+  if (!Retry)
+DEBUG((DEBUG_ERROR, "%a Rtc busy retry timeout\n", __func__));


Space after DEBUG.


+}
+
+VOID
+RTCWriteReg (
+  IN UINT32 Reg,
+  IN UINT32 Val
+  )
+{
+  Wait4Busy ();
+  MmioWrite32 (RtcBase + RTCCFGID, CONFIG_PARMETER);
+  Wait4Busy ();
+  MmioWrite32 (RtcBase + Reg, Val);
+}
+
+UINT32
+RTCReadReg (
+  IN UINT32 Reg
+  )
+{
+  Wait4Busy ();
+  return MmioRead32 (RtcBase + Reg);
+}
+
+VOID
+InitializeRTC (
+  VOID
+  )
+{
+  UINTN Val = (UINTN)FixedPcdGet64 (PcdZxRtcClockFreq);
+
+  RTCWriteReg (RTCCLKCNT, Val - 1);
+  Val = RTCReadReg (RTCPOWERINIT1);
+  if (RTC_POWER_INI1_PARA != Val) {
+RTCWriteReg (RTCCTL, 0);
+MicroSecondDelay (INIT_DELAY);
+Val = RTCReadReg (RTCCTL);
+Val |= RTC_CTRL_BIT6_1;
+RTCWriteReg (RTCCTL, Val);
+Val = RTCReadReg (RTCCTL);
+Val &= RTC_CTRL_MODULE24 | RTC_CTRL_STOP;
+RTCWriteReg (RTCCTL, Val);
+  }
+  Val = RTCReadReg (RTCINT);
+  Val &= ~RTC_IT_MAS

Re: [edk2] [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC

2017-08-17 Thread Leif Lindholm
On Thu, Aug 17, 2017 at 11:43:37PM +0800, Jun Nie wrote:
> On 2017年08月10日 22:03, Leif Lindholm wrote:
> > On Wed, Aug 09, 2017 at 10:12:37PM +0800, Jun Nie wrote:
> > > Runtime service is not supported yet.
> > > 
> > > Contributed-under: TianoCore Contribution Agreement 1.0
> > > Signed-off-by: Jun Nie 
> > > ---
> > >   .../Zx6718RealTimeClockLib/Zx296718RealTimeClock.c | 376 
> > > +
> > >   .../Zx6718RealTimeClockLib/Zx296718RealTimeClock.h | 102 ++
> > >   .../Zx296718RealTimeClock.inf  |  42 +++
> > >   3 files changed, 520 insertions(+)
> > >   create mode 100644 
> > > Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
> > >   create mode 100644 
> > > Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h
> > >   create mode 100644 
> > > Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.inf
> > > 
> > > diff --git 
> > > a/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c 
> > > b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
> > > new file mode 100644
> > > index 000..af6e5bd
> > > --- /dev/null
> > > +++ 
> > > b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.c
> > > @@ -0,0 +1,376 @@
> > > +/** @file
> > > +  Implement EFI RealTimeClock runtime services via RTC Lib.
> > > +
> > > +  Currently this driver does not support runtime virtual calling.
> > > +
> > > +  Copyright (C) 2017 Sanechips Technology Co., Ltd.
> > > +  Copyright (c) 2017, Linaro Limited.
> > > +
> > > +  This program and the accompanying materials
> > > +  are licensed and made available under the terms and conditions of the 
> > > BSD License
> > > +  which accompanies this distribution.  The full text of the license may 
> > > be found at
> > > +  http://opensource.org/licenses/bsd-license.php
> > > +
> > > +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> > > +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
> > > IMPLIED.
> > > +
> > > +  Based on the files under 
> > > ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf
> > > +
> > > +**/
> > > +
> > > +#include 
> > > +#include 
> > 
> > P before U.
> > 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +// Use EfiAtRuntime to check stage
> > > +#include 
> > 
> > L (UefiRuntimeLib) before S (UefiRuntimeServices...).
> > No need for a comment explaining why we include headers.
> > 
> > > +#include 
> > > +#include "Zx296718RealTimeClock.h"
> > > +
> > > +STATIC UINTN   RtcBase;
> > 
> > mRtcBase.
> > 
> > > +STATIC BOOLEAN RTCInitialized = FALSE;
> > 
> > mRTCInitialized.
> > 
> > > +
> > > +BOOLEAN
> > > +EFIAPI
> > > +IsTimeValid(
> > > +  IN EFI_TIME *Time
> > > +  )
> > > +{
> > > +  // Check the input parameters are within the range specified by UEFI
> > > +  if ((Time->Year  < 2000) ||
> > > + (Time->Year   > 2099) ||
> > > + (Time->Month  < 1   ) ||
> > > + (Time->Month  > 12  ) ||
> > > + (Time->Day< 1   ) ||
> > > + (Time->Day> 31  ) ||
> > > + (Time->Hour   > 23  ) ||
> > > + (Time->Minute > 59  ) ||
> > > + (Time->Second > 59  ) ||
> > > + (Time->Nanosecond > 9) ||
> > > + (!((Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) || ((Time->TimeZone 
> > > >= -1440) && (Time->TimeZone <= 1440 ||
> > > + (Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | 
> > > EFI_TIME_IN_DAYLIGHT)))
> > > +  ) {
> > > +return FALSE;
> > > +  }
> > > +
> > > +  return TRUE;
> > > +}
> > 
> > This appears a direct copy of the version in
> > EmbeddedPkg/Library/TimeBaseLib. Can you add that TimeBaseLib library
> > dependency to decrease duplication?
> > (This may not have existed as a standalone library at the time you
> > started this port.)
> > 
> > > +
> > > +VOID
> > 
> > A lot of the functions in this file could do with a STATIC prefix,
> > since they are only used internally.
> > 
> > > +Wait4Busy (
> > 
> > Semantically, this name is incorrect.
> > The function is waiting _while_ the state is RTC_BUSY, so seems to me
> > it should be called WaitBusy.
> > 
> > > +  VOID
> > > +  )
> > > +{
> > > +  UINT32 Val, Retry = 1000;
> > > +  do {
> > > +MicroSecondDelay (200);
> > 
> > Why 200?
> 
> It is just a suggested delay time according to RTC clock frequency. You want
> a RTC_WAIT_DELAY macro here for better understanding, right?

That would be more clear, yes.
It is also good if next to that definition there is some description
of how the value was detemined. (I.e., are we waiting for a particular
number of cycles, or is this simply a determined to be "good enough".)

/
Leif
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel