From: Jun Nie <jun.nie@linaro.org>
To: Leif Lindholm <leif.lindholm@linaro.org>
Cc: haojian.zhuang@linaro.org, ard.biesheuvel@linaro.org,
linaro-uefi@lists.linaro.org, shawn.guo@linaro.org,
jason.liu@linaro.org, edk2-devel@lists.01.org
Subject: Re: [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC
Date: Thu, 17 Aug 2017 23:43:37 +0800 [thread overview]
Message-ID: <09ad9459-9cbe-ea49-53f0-e7ce1ba74302@linaro.org> (raw)
In-Reply-To: <20170810140314.jqqtcspfizqhhntf@bivouac.eciton.net>
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 <jun.nie@linaro.org>
>> ---
>> .../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 0000000..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 <Uefi.h>
>> +#include <PiDxe.h>
>
> P before U.
>
>> +#include <Library/BaseLib.h>
>> +#include <Library/BaseMemoryLib.h>
>> +#include <Library/DebugLib.h>
>> +#include <Library/IoLib.h>
>> +#include <Library/MemoryAllocationLib.h>
>> +#include <Library/PcdLib.h>
>> +#include <Library/TimerLib.h>
>> +#include <Library/UefiBootServicesTableLib.h>
>> +#include <Library/UefiLib.h>
>> +#include <Library/UefiRuntimeServicesTableLib.h>
>> +// Use EfiAtRuntime to check stage
>> +#include <Library/UefiRuntimeLib.h>
>
> L (UefiRuntimeLib) before S (UefiRuntimeServices...).
> No need for a comment explaining why we include headers.
>
>> +#include <Protocol/RealTimeClock.h>
>> +#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 > 999999999) ||
>> + (!((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_MASK;
>> + RTCWriteReg (RTCINT, Val);
>> + Val = RTCReadReg (RTCSTS);
>> + Val |= (RTC_POWER_UP | RTC_ALARM | RTC_TIMER);
>> + RTCWriteReg (RTCSTS, Val);
>> + //Wait4Busy ();
>
> No disabled code, please.
>
>> + // TODO: write 0x6 to AON int clear
>
> TODO is fine for early pass of review to get some overall feedback,
> but this needs to be resolved before anything is merged.
>
>> + RTCWriteReg (RTCPOWERINIT1, RTC_POWER_INI1_PARA);
>> + RTCWriteReg (RTCPOWERINIT2, RTC_POWER_INI2_PARA);
>> + Val = RTC_CTRL_MODULE24 | RTC_CTRL_RUN | RTC_CTRL_CLK_32K_OUTEN
>> + | RTC_CTRL_BIT6_1;
>
> Could there be a more human readable alias for RTC_CTRL_BIT6_1
> (describing what setting that bit actually does)?
sure.
>
>> + RTCWriteReg (RTCCTL, Val);
>> +
>> + RTCInitialized = TRUE;
>> +}
>> +
>> +/**
>> + Returns the current time and date information, and the time-keeping capabilities
>> + of the hardware platform.
>> +
>> + @param Time A pointer to storage to receive a snapshot of the current time.
>> + @param Capabilities An optional pointer to a buffer to receive the real time clock
>> + device's capabilities.
>> +
>> + @retval EFI_SUCCESS The operation completed successfully.
>> + @retval EFI_INVALID_PARAMETER Time is NULL.
>> + @retval EFI_DEVICE_ERROR The time could not be retrieved due to hardware error.
>> + @retval EFI_SECURITY_VIOLATION The time could not be retrieved due to an authentication failure.
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +LibGetTime (
>> + OUT EFI_TIME *Time,
>> + OUT EFI_TIME_CAPABILITIES *Capabilities
>> + )
>> +{
>> + EFI_STATUS Status = EFI_SUCCESS;
>> +
>> + // Ensure Time is a valid pointer
>> + if (NULL == Time) {
>
> No jeopardy comparisons please.
> if (Time == NULL)
>
>> + return EFI_INVALID_PARAMETER;
>> + }
>> +
>> + // Initialize the hardware if not already done
>> + if (!RTCInitialized) {
>> + InitializeRTC ();
>> + }
>> +
>> +#if 0
>> + /* fake time */
>> + Time->Year = 2015;
>> + Time->Month = 1;
>> + Time->Day = 1;
>> + Time->Hour = 0;
>> + Time->Minute = 0;
>> + Time->Second = 0;
>> + Time->Nanosecond = 0;
>> +#endif
>
> No disabled code blocks, please.
>
>> +
>> + RTCWriteReg (RTCGETTIME, 0);
>> + Time->Year = BCD4_2_BIN (RTCReadReg (RTCYEAR));
>> + Time->Year += TM_YEAR_START;
>> +
>> + Time->Month = BCD4_2_BIN (RTCReadReg (RTCMONT));
>> + Time->Day = BCD4_2_BIN (RTCReadReg (RTCDAY));
>> + Time->Hour = BCD4_2_BIN (RTCReadReg (RTCHOUR));
>> + Time->Minute = BCD4_2_BIN (RTCReadReg (RTCMIN));
>> + Time->Second = BCD4_2_BIN (RTCReadReg (RTCSEC));
>> + Time->Nanosecond = 0;
>> + Time->Daylight = 0;
>> + Time->TimeZone = EFI_UNSPECIFIED_TIMEZONE;
>> +
>> + if(!IsTimeValid (Time)) {
>> + Status = EFI_UNSUPPORTED;
>> + }
>> +
>> + return Status;
>> +
>> +}
>> +
>> +
>> +/**
>> + Sets the current local time and date information.
>> +
>> + @param Time A pointer to the current time.
>> +
>> + @retval EFI_SUCCESS The operation completed successfully.
>> + @retval EFI_INVALID_PARAMETER A time field is out of range.
>> + @retval EFI_DEVICE_ERROR The time could not be set due due to hardware error.
>> +
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +LibSetTime (
>> + IN EFI_TIME *Time
>> + )
>> +{
>> + EFI_STATUS Status = EFI_SUCCESS;
>> +
>> + // Check the input parameters are within the range specified by UEFI
>> + if(!IsTimeValid (Time)){
>> + return EFI_INVALID_PARAMETER;
>> + }
>> +
>> + // Initialize the hardware if not already done
>> + if (!RTCInitialized) {
>> + InitializeRTC ();
>> + }
>> +
>> + RTCWriteReg (RTCSEC, BIN2BCD (Time->Second));
>> + RTCWriteReg (RTCMIN, BIN2BCD (Time->Minute));
>> + RTCWriteReg (RTCHOUR, BIN2BCD (Time->Hour));
>> + RTCWriteReg (RTCDAY, BIN2BCD (Time->Day));
>> + RTCWriteReg (RTCMONT, BIN2BCD (Time->Month));
>> + RTCWriteReg (RTCYEAR, BIN2BCD (Time->Year - TM_YEAR_START));
>> + 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.
>> +
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +LibGetWakeupTime (
>> + OUT BOOLEAN *Enabled,
>> + OUT BOOLEAN *Pending,
>> + OUT EFI_TIME *Time
>> + )
>> +{
>> + // Not a required feature
>> + return EFI_UNSUPPORTED;
>> +}
>> +
>> +
>> +/**
>> + Sets the system wakeup alarm clock time.
>> +
>> + @param Enabled Enable or disable the wakeup alarm.
>> + @param Time If Enable is TRUE, the time to set the wakeup alarm for.
>> +
>> + @retval EFI_SUCCESS If Enable is TRUE, then the wakeup alarm was enabled. If
>> + Enable is FALSE, then the wakeup alarm was disabled.
>> + @retval EFI_INVALID_PARAMETER A time field is out of range.
>> + @retval EFI_DEVICE_ERROR The wakeup time could not be set due to a hardware error.
>> + @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform.
>> +
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +LibSetWakeupTime (
>> + IN BOOLEAN Enabled,
>> + OUT EFI_TIME *Time
>> + )
>> +{
>> + // Not a required feature
>> + return EFI_UNSUPPORTED;
>> +}
>> +
>> +
>> +
>> +/**
>> + 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.
>> +
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +LibRtcInitialize (
>> + IN EFI_HANDLE ImageHandle,
>> + IN EFI_SYSTEM_TABLE *SystemTable
>> + )
>> +{
>> + EFI_STATUS Status;
>> + EFI_HANDLE Handle;
>> +
>> +
>
> Why blank lines?
>
>> + EFI_TIME EfiTime;
>> +
>> + // Setup the setters and getters
>> + gRT->GetTime = LibGetTime;
>> + gRT->SetTime = LibSetTime;
>> + gRT->GetWakeupTime = LibGetWakeupTime;
>> + gRT->SetWakeupTime = LibSetWakeupTime;
>> +
>> +
>
> Just one blank line is fine.
>
>> + RtcBase = (UINTN)FixedPcdGet64 (PcdZxRtcClockBase);
>> +
>> + (VOID)gRT->GetTime (&EfiTime, NULL);
>> + if ((EfiTime.Year < 2015) || (EfiTime.Year > 2099)){
>> + EfiTime.Year = 2015;
>> + EfiTime.Month = 1;
>> + EfiTime.Day = 1;
>> + EfiTime.Hour = 0;
>> + EfiTime.Minute = 0;
>> + EfiTime.Second = 0;
>> + EfiTime.Nanosecond = 0;
>> + Status = gRT->SetTime (&EfiTime);
>> + if (EFI_ERROR (Status))
>> + {
>> + DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Status : %r\n", __FUNCTION__,
>> + __LINE__, Status));
>> + }
>> + }
>> +
>> + // Install the protocol
>> + Handle = NULL;
>> + Status = gBS->InstallMultipleProtocolInterfaces (
>> + &Handle,
>> + &gEfiRealTimeClockArchProtocolGuid, NULL,
>> + NULL
>> + );
>> +
>> + return Status;
>> +}
>> +
>> +
>> +/**
>> + Fixup internal data so that EFI can be call in virtual mode.
>> + Call the passed in Child Notify event and convert any pointers in
>> + lib to virtual mode.
>> +
>> + @param[in] Event The Event that is being processed
>> + @param[in] Context Event Context
>> +**/
>> +VOID
>> +EFIAPI
>> +LibRtcVirtualNotifyEvent (
>> + IN EFI_EVENT Event,
>> + IN VOID *Context
>> + )
>> +{
>> + //
>> + // Only needed if you are going to support the OS calling RTC functions in virtual mode.
>> + // You will need to call EfiConvertPointer (). To convert any stored physical addresses
>> + // to virtual address. After the OS transitions to calling in virtual mode, all future
>> + // runtime calls will be made in virtual mode.
>> + //
>> + return;
>> +}
>> diff --git a/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.h
>> new file mode 100644
>> index 0000000..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_HR 0x02 /* 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)
>> +
>> +#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))
>> +
>> +/* RTC register offset */
>> +#define RTCVER 0
>> +#define RTCSEC 4
>> +#define RTCMIN 8
>> +#define RTCHOUR 0xc
>> +#define RTCDAY 0x10
>> +#define RTCMONT 0x14
>> +#define RTCYEAR 0x18
>> +#define RTCWEEK 0x1c
>> +#define RTCCTL 0x38
>> +#define RTCSTS 0x3c
>> +#define RTCINT 0x40
>> +#define RTCCFGID 0x48
>> +#define RTCPOWERINIT1 0x4c
>> +#define RTCPOWERINIT2 0x50
>> +#define RTCGETTIME 0x54
>> +#define RTCCLKCNT 0x58
>> +
>> +#endif
>> diff --git a/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.inf b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.inf
>> new file mode 100644
>> index 0000000..0a6852b
>> --- /dev/null
>> +++ b/Silicon/Sanchip/Library/Zx6718RealTimeClockLib/Zx296718RealTimeClock.inf
>> @@ -0,0 +1,42 @@
>> +#/** @file
>> +#
>> +# Copyright (c) 2017, Linaro Limited. All rights reserved.<BR>
>> +#
>> +# 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.
>> +#
>> +#
>> +#**/
>> +
>> +[Defines]
>> + INF_VERSION = 0x00010005
>
> 0x00010019.
> (Or 1.25.)
>
>> + BASE_NAME = Zx296718RealTimeClockLib
>> + FILE_GUID = 4e1aaa26-597c-4f01-a8fc-fdf1adc1400f
>> + MODULE_TYPE = BASE
>> + VERSION_STRING = 1.0
>> + LIBRARY_CLASS = RealTimeClockLib
>> +
>> +[Sources.common]
>> + Zx296718RealTimeClock.c
>> +
>> +[Packages]
>> + MdePkg/MdePkg.dec
>> + EmbeddedPkg/EmbeddedPkg.dec
>> + Silicon/Sanchip/SanchipPkg.dec
>
> Please sort alphabetically.
>
>> +
>> +[LibraryClasses]
>> + IoLib
>> + UefiLib
>> + DebugLib
>> + PcdLib
>> + TimerLib
>> +# Use EFiAtRuntime to check stage
>> + UefiRuntimeLib
>
> Please sort alphabetically >
>> +
>> +[FixedPcd]
>> + gSanchipTokenSpaceGuid.PcdZxRtcClockBase
>> + gSanchipTokenSpaceGuid.PcdZxRtcClockFreq
>> --
>> 1.9.1
>>
All other coding style and inf version comments will be addressed.
next prev parent reply other threads:[~2017-08-17 15:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1502287959-16806-1-git-send-email-jun.nie@linaro.org>
2017-08-10 13:04 ` [PATCH 1/4] Platforms: Add Sanchip Zx296718 basic library Leif Lindholm
2017-08-10 14:16 ` Laszlo Ersek
[not found] ` <e3573cc7-875f-6b44-12dd-b76ec8c9272a@linaro.org>
2017-08-17 15:51 ` Leif Lindholm
[not found] ` <1502287959-16806-2-git-send-email-jun.nie@linaro.org>
2017-08-10 14:03 ` [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC Leif Lindholm
2017-08-17 15:43 ` Jun Nie [this message]
2017-08-17 15:55 ` Leif Lindholm
2017-08-10 15:15 ` Leif Lindholm
[not found] ` <1502287959-16806-3-git-send-email-jun.nie@linaro.org>
2017-08-10 14:41 ` [PATCH 3/4] Platforms/zx: Add boot manager lib and entries Leif Lindholm
2017-08-17 15:45 ` Jun Nie
2017-08-17 18:53 ` Leif Lindholm
[not found] ` <1502287959-16806-4-git-send-email-jun.nie@linaro.org>
2017-08-10 15:00 ` [PATCH 4/4] Platforms/zx: Add platform build system files Leif Lindholm
2017-08-17 15:46 ` Jun Nie
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=09ad9459-9cbe-ea49-53f0-e7ce1ba74302@linaro.org \
--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