Thanks Ard, 
Your another patch set is addressing my concern 

Regards
Udit

> -----Original Message-----
> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
> Sent: Monday, November 06, 2017 4:41 PM
> To: Udit Kumar <udit.ku...@nxp.com>
> Cc: edk2-devel@lists.01.org; leif.lindh...@linaro.org;
> daniel.thomp...@linaro.org
> Subject: Re: [edk2] [RFC PATCH edk2-platforms 1/3] Silicon/NXP: add RTC
> support library for PCF8563 I2C IP
> 
> On 6 November 2017 at 11:09, Udit Kumar <udit.ku...@nxp.com> wrote:
> > Thanks Ard.
> > This will allow to use PCF8563 on any platform not limiting to targeted
> platform.
> 
> Yes, that was the intention.
> 
> > Few comments are inline.
> >
> 
> Thanks.
> 
> >
> >> -----Original Message-----
> >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf
> >> Of Ard Biesheuvel
> >> Sent: Friday, November 03, 2017 3:47 PM
> >> To: edk2-devel@lists.01.org; leif.lindh...@linaro.org;
> >> daniel.thomp...@linaro.org
> >> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
> >> Subject: [edk2] [RFC PATCH edk2-platforms 1/3] Silicon/NXP: add RTC
> >> support library for PCF8563 I2C IP
> >>
> >> Add a RealTimeClockLib implementation for the NXP PCF8563 as used on
> >> the Socionext Developer Box board. Note that the standard I2C
> >> protocol stack does not support runtime use, so this driver invokes
> >> the I2C master protocol directly. This requires support from the
> >> platform side as well, and so this driver will only attach to a I2C
> >> master that has the gPcf8563RealTimeClockLibI2cMasterProtolGuid
> >> protocol installed on its handle. It is up to the platform to ensure
> >> that the driver producing the I2C master protocol in question is
> >> runtime capable, and is not shared with the I2C protocol stack (i.e.,
> >> it should not have the I2C Bus Configuration Management protocol installed
> as well).
> >>
> >> Contributed-under: TianoCore Contribution Agreement 1.1
> >> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
> >> ---
> >>  Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.c
> |
> >> 385 ++++++++++++++++++++
> >>
> >> Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.d
> >> ec |
> >> 29 ++
> >>
> >> Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.i
> >> nf |
> >> 52 +++
> >>  3 files changed, 466 insertions(+)
> >>
> >> diff --git
> >> a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .c
> >> b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .c
> >> new file mode 100644
> >> index 000000000000..fea65a225d7f
> >> --- /dev/null
> >> +++
> >> b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .c
> >> @@ -0,0 +1,385 @@
> >> +/** @file
> >> +
> >> +  Copyright (c) 2017, Linaro, Ltd. 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
> >> +
> >> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fope
> >> nso
> >> urce.org%2Flicenses%2Fbsd-
> >>
> license.php&data=02%7C01%7Cudit.kumar%40nxp.com%7C6faa68073eef4ed07
> >>
> 25208d522a40d65%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636
> >>
> 453010374642660&sdata=vDhroHNG20VCsMtj7%2FggWcWRG8hwt5fbV1Kv4R
> >> Na98Q%3D&reserved=0
> >> +
> >> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> >> BASIS,
> >> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> >> EXPRESS OR IMPLIED.
> >> +
> >> +**/
> >> +
> >> +#include <PiDxe.h>
> >> +#include <Library/DebugLib.h>
> >> +#include <Library/IoLib.h>
> >> +#include <Library/RealTimeClockLib.h> #include
> >> +<Library/UefiBootServicesTableLib.h>
> >> +#include <Library/UefiLib.h>
> >> +#include <Library/UefiRuntimeLib.h>
> >> +#include <Protocol/I2cMaster.h>
> >> +
> >> +#define SLAVE_ADDRESS             (FixedPcdGet8 (PcdI2cSlaveAddress))
> >> +#define PCF8563_DATA_REG_OFFSET   0x2
> >> +
> >> +#define PCF8563_SECONDS_MASK      0x7f
> >> +#define PCF8563_MINUTES_MASK      0x7f
> >> +#define PCF8563_HOURS_MASK        0x3f
> >> +#define PCF8563_DAYS_MASK         0x3f
> >> +#define PCF8563_WEEKDAYS_MASK     0x07
> >> +#define PCF8563_MONTHS_MASK       0x1f
> >> +#define PCF8563_CENTURY_MASK      0x80
> >> +
> >> +#define EPOCH_BASE                2000
> >> +
> >> +STATIC EFI_HANDLE                 mI2cMasterHandle;
> >> +STATIC VOID                       *mDriverEventRegistration;
> >> +STATIC EFI_I2C_MASTER_PROTOCOL    *mI2cMaster;
> >> +STATIC EFI_EVENT                  mRtcVirtualAddrChangeEvent;
> >> +
> >> +typedef struct {
> >> +  UINTN                           OperationCount;
> >> +  EFI_I2C_OPERATION               SetAddressOp;
> >> +  EFI_I2C_OPERATION               GetSetDateTimeOp;
> >> +} RTC_I2C_REQUEST;
> >> +
> >> +#pragma pack(1)
> >> +typedef struct {
> >> +  UINT8     VL_seconds;
> >> +  UINT8     Minutes;
> >> +  UINT8     Hours;
> >> +  UINT8     Days;
> >> +  UINT8     Weekdays;
> >> +  UINT8     Century_months;
> >> +  UINT8     Years;
> >> +} RTC_DATETIME;
> >> +#pragma pack()
> >> +
> >> +/**
> >> +  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.
> >> +
> >> +**/
> >> +EFI_STATUS
> >> +EFIAPI
> >> +LibGetTime (
> >> +  OUT EFI_TIME                *Time,
> >> +  OUT EFI_TIME_CAPABILITIES   *Capabilities
> >> +  )
> >> +{
> >> +  RTC_I2C_REQUEST             Op;
> >> +  RTC_DATETIME                DateTime;
> >> +  EFI_STATUS                  Status;
> >> +  UINT8                       Reg;
> >> +
> >> +  if (Time == NULL) {
> >> +    return EFI_INVALID_PARAMETER;
> >> +  }
> >> +
> >> +  if (mI2cMaster == NULL) {
> >> +    return EFI_DEVICE_ERROR;
> >> +  }
> >> +
> >> +  Reg = PCF8563_DATA_REG_OFFSET;
> >> +
> >> +  Op.OperationCount = 2;
> >> +
> >> +  Op.SetAddressOp.Flags = 0;
> >> +  Op.SetAddressOp.LengthInBytes = 1;  Op.SetAddressOp.Buffer = &Reg;
> >> +
> >> +  Op.GetSetDateTimeOp.Flags = I2C_FLAG_READ;
> >> + Op.GetSetDateTimeOp.LengthInBytes = sizeof (RTC_DATETIME);
> >> + Op.GetSetDateTimeOp.Buffer = (VOID *)&DateTime;
> >> +
> >> +  Status = mI2cMaster->StartRequest (mI2cMaster, SLAVE_ADDRESS,
> >> +                         (VOID *)&Op, NULL, NULL);  if (EFI_ERROR
> >> + (Status)) {
> >> +    return EFI_DEVICE_ERROR;
> >> +  }
> >> +
> >> +  Time->Second  = BcdToDecimal8 (DateTime.VL_seconds &
> >> PCF8563_SECONDS_MASK);
> >> +  Time->Minute  = BcdToDecimal8 (DateTime.Minutes &
> >> PCF8563_MINUTES_MASK);
> >> +  Time->Hour    = BcdToDecimal8 (DateTime.Hours &
> PCF8563_HOURS_MASK);
> >> +  Time->Day     = BcdToDecimal8 (DateTime.Days & PCF8563_DAYS_MASK);
> >> +  Time->Month   = BcdToDecimal8 (DateTime.Century_months &
> >> PCF8563_MONTHS_MASK);
> >> +  Time->Year    = BcdToDecimal8 (DateTime.Years) + EPOCH_BASE;
> >> +
> >> +  if (DateTime.Century_months & PCF8563_CENTURY_MASK) {
> >> +    Time->Year += 100;
> >> +  }
> >> +
> >> +  Time->Daylight  = EFI_TIME_ADJUST_DAYLIGHT;  Time->TimeZone  = 0;
> >> + /* UTC */
> >
> > Need to take care of time-zone as well.
> >
> 
> No, this does not belong in this library, I have posted patches to add 
> timezone
> handling and input validation to the core driver.
> 
> >> +
> >> +  if (Capabilities != NULL) {
> >> +    Capabilities->Resolution = 1;
> >> +    Capabilities->Accuracy = 0;
> >> +    Capabilities->SetsToZero = TRUE;
> >> +  }
> >> +  return EFI_SUCCESS;
> >> +}
> >> +
> >> +
> >> +/**
> >> +  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
> >> +  )
> >> +{
> >> +  RTC_I2C_REQUEST             Op;
> >> +  RTC_DATETIME                DateTime;
> >> +  EFI_STATUS                  Status;
> >> +  UINT8                       Reg;
> >> +
> >> +  if (mI2cMaster == NULL) {
> >> +    return EFI_DEVICE_ERROR;
> >> +  }
> >
> > Please see, if check can be added for time validity
> >
> 
> Same here.
> 
> >> +
> >> +  DateTime.VL_seconds     = DecimalToBcd8 (Time->Second);
> >> +  DateTime.Minutes        = DecimalToBcd8 (Time->Minute);
> >> +  DateTime.Hours          = DecimalToBcd8 (Time->Hour);
> >> +  DateTime.Days           = DecimalToBcd8 (Time->Day);
> >> +  DateTime.Century_months = DecimalToBcd8 (Time->Month);
> >> +  DateTime.Years          = DecimalToBcd8 (Time->Year % 100);
> >> +  if (Time->Year >= EPOCH_BASE + 100) {
> >> +    DateTime.Century_months |= PCF8563_CENTURY_MASK;  }
> >> +
> >> +  Reg = PCF8563_DATA_REG_OFFSET;
> >> +
> >> +  Op.OperationCount = 2;
> >> +
> >> +  Op.SetAddressOp.Flags = 0;
> >> +  Op.SetAddressOp.LengthInBytes = 1;  Op.SetAddressOp.Buffer = &Reg;
> >> +
> >> +  Op.GetSetDateTimeOp.Flags = 0;
> >> +  Op.GetSetDateTimeOp.LengthInBytes = sizeof (RTC_DATETIME);
> >> + Op.GetSetDateTimeOp.Buffer = (VOID *)&DateTime;
> >> +
> >> +  Status = mI2cMaster->StartRequest (mI2cMaster, SLAVE_ADDRESS,
> >> +                         (VOID *)&Op, NULL, NULL);
> >> +  if (EFI_ERROR (Status)) {
> >> +    return EFI_DEVICE_ERROR;
> >> +  }
> >> +  return EFI_SUCCESS;
> >> +}
> >> +
> >> +
> >> +/**
> >> +  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
> >> +  )
> >> +{
> >> +  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
> >> +  )
> >> +{
> >> +  return EFI_UNSUPPORTED;
> >> +}
> >> +
> >> +STATIC
> >> +VOID
> >> +DriverRegistrationEvent (
> >> +  IN  EFI_EVENT       Event,
> >> +  IN  VOID            *Context
> >> +  )
> >> +{
> >> +  EFI_HANDLE                Handle[2];
> >> +  UINTN                     BufferSize;
> >> +  EFI_STATUS                Status;
> >> +  EFI_I2C_MASTER_PROTOCOL   *I2cMaster;
> >> +  UINTN                     BusFrequency;
> >> +
> >> +  //
> >> +  // Try to connect the newly registered driver to our handle.
> >> +  //
> >> +  do {
> >> +    BufferSize = sizeof (EFI_HANDLE);
> >> +    Status = gBS->LocateHandle (ByRegisterNotify,
> >> +                                &gEfiDriverBindingProtocolGuid,
> >> +                                mDriverEventRegistration,
> >> +                                &BufferSize,
> >> +                                Handle);
> >> +    if (EFI_ERROR (Status)) {
> >> +      if (Status != EFI_NOT_FOUND) {
> >> +        DEBUG ((DEBUG_WARN, "%a: gBS->LocateHandle () returned %r\n",
> >> +          __FUNCTION__, Status));
> >> +      }
> >> +      break;
> >> +    }
> >> +
> >> +    //
> >> +    // Check if we can connect our handle to this driver.
> >> +    //
> >> +    Handle[1] = NULL;
> >> +    Status = gBS->ConnectController (mI2cMasterHandle, Handle, NULL,
> FALSE);
> >> +    if (EFI_ERROR (Status)) {
> >> +      continue;
> >> +    }
> >> +
> >> +    DEBUG ((DEBUG_INFO, "%a: found I2C master!\n", __FUNCTION__));
> >> +
> >> +    gBS->CloseEvent (Event);
> >> +
> >> +    Status = gBS->OpenProtocol (mI2cMasterHandle,
> >> &gEfiI2cMasterProtocolGuid,
> >> +                    (VOID **)&I2cMaster, gImageHandle, NULL,
> >> +                    EFI_OPEN_PROTOCOL_EXCLUSIVE);
> >> +    ASSERT_EFI_ERROR (Status);
> >> +
> >> +    Status = I2cMaster->Reset (I2cMaster);
> >> +    if (EFI_ERROR (Status)) {
> >> +      DEBUG ((DEBUG_ERROR, "%a: I2CMaster->Reset () failed - %r\n",
> >> +        __FUNCTION__, Status));
> >> +      break;
> >> +    }
> >> +
> >> +    BusFrequency = FixedPcdGet16 (PcdI2cBusFrequency);
> >> +    Status = I2cMaster->SetBusFrequency (I2cMaster, &BusFrequency);
> >> +    if (EFI_ERROR (Status)) {
> >> +      DEBUG ((DEBUG_ERROR, "%a: I2CMaster->SetBusFrequency () failed
> >> + -
> >> %r\n",
> >> +        __FUNCTION__, Status));
> >> +      break;
> >> +    }
> >> +
> >> +    mI2cMaster = I2cMaster;
> >> +    break;
> >> +  } while (TRUE);
> >> +}
> >> +
> >> +/**
> >> +  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
> >> +  )
> >> +{
> >> +  EfiConvertPointer (0x0, (VOID **)&mI2cMaster); }
> >> +
> >> +/**
> >> +  Library entry point
> >> +
> >> +  @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;
> >> +  UINTN               BufferSize;
> >> +
> >> +  //
> >> +  // Find the handle that marks the controller  // that will provide
> >> + the I2C master protocol.
> >> +  //
> >> +  BufferSize = sizeof (EFI_HANDLE);
> >> +  Status = gBS->LocateHandle (ByProtocol,
> >> +                  &gPcf8563RealTimeClockLibI2cMasterProtolGuid, NULL,
> >> +                  &BufferSize, &mI2cMasterHandle);  ASSERT_EFI_ERROR
> >> + (Status);
> >> +
> >> +  //
> >> +  // Register a protocol registration notification callback on the
> >> + driver  // binding protocol so we can attempt to connect our I2C
> >> + master to it  // as soon as it appears.
> >> +  //
> >> +  EfiCreateProtocolNotifyEvent (
> >> +    &gEfiDriverBindingProtocolGuid,
> >> +    TPL_CALLBACK,
> >> +    DriverRegistrationEvent,
> >> +    NULL,
> >> +    &mDriverEventRegistration);
> >> +
> >> +  //
> >> +  // Register for the virtual address change event  //  Status =
> >> + gBS->CreateEventEx (EVT_NOTIFY_SIGNAL, TPL_NOTIFY,
> >> +                  LibRtcVirtualNotifyEvent, NULL,
> >> +                  &gEfiEventVirtualAddressChangeGuid,
> >> +                  &mRtcVirtualAddrChangeEvent);  ASSERT_EFI_ERROR
> >> + (Status);
> >> +
> >> +  return EFI_SUCCESS;
> >> +}
> >> diff --git
> >> a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .dec
> >> b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .dec
> >> new file mode 100644
> >> index 000000000000..bc8fc60c0602
> >> --- /dev/null
> >> +++
> >> b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .dec
> >> @@ -0,0 +1,29 @@
> >> +#/** @file
> >> +#
> >> +#  Copyright (c) 2017, Linaro, Ltd. 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
> >> +#
> >> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fope
> >> nso
> >> urce.org%2Flicenses%2Fbsd-
> >>
> license.php&data=02%7C01%7Cudit.kumar%40nxp.com%7C6faa68073eef4ed07
> >>
> 25208d522a40d65%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636
> >>
> 453010374642660&sdata=vDhroHNG20VCsMtj7%2FggWcWRG8hwt5fbV1Kv4R
> >> Na98Q%3D&reserved=0
> >> +#  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]
> >> +  DEC_SPECIFICATION              = 0x0001001A
> >> +  PACKAGE_NAME                   = Pcf8563RealTimeClockLib
> >> +  PACKAGE_GUID                   = 44d63668-c86b-446a-b303-f3a5176702aa
> >> +  PACKAGE_VERSION                = 0.1
> >> +
> >> +[Guids]
> >> +  gPcf8563RealTimeClockLibTokenSpaceGuid = { 0xaaf5b169, 0x93a0,
> >> +0x4d60, {
> >> 0xba, 0xe4, 0x06, 0x07, 0x92, 0x8e, 0x63, 0xdd }}
> >> +
> >> +[Protocols]
> >> +  gPcf8563RealTimeClockLibI2cMasterProtolGuid = { 0xa6af18ae,
> >> +0x3bd5,
> >> 0x4af9, { 0xbb, 0x6a, 0xdb, 0x85, 0x07, 0x62, 0x81, 0x38 }}
> >> +
> >> +[PcdsFixedAtBuild]
> >> +
> >>
> gPcf8563RealTimeClockLibTokenSpaceGuid.PcdI2cSlaveAddress|0x51|UINT8|
> >> 0
> >> x00000001
> >> +
> >>
> gPcf8563RealTimeClockLibTokenSpaceGuid.PcdI2cBusFrequency|400|UINT16|
> >> 0
> >> x00000002
> >> diff --git
> >> a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .inf
> >> b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .inf
> >> new file mode 100644
> >> index 000000000000..e1e001162144
> >> --- /dev/null
> >> +++
> >> b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib
> >> .inf
> >> @@ -0,0 +1,52 @@
> >> +#/** @file
> >> +#
> >> +#  Copyright (c) 2017, Linaro, Ltd. 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
> >> +#
> >> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fope
> >> nso
> >> urce.org%2Flicenses%2Fbsd-
> >>
> license.php&data=02%7C01%7Cudit.kumar%40nxp.com%7C6faa68073eef4ed07
> >>
> 25208d522a40d65%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636
> >>
> 453010374642660&sdata=vDhroHNG20VCsMtj7%2FggWcWRG8hwt5fbV1Kv4R
> >> Na98Q%3D&reserved=0
> >> +#  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                    = 0x0001001A
> >> +  BASE_NAME                      = Pcf8563RealTimeClockLib
> >> +  FILE_GUID                      = 1e3d33f3-a671-4116-bd81-6b435296c1e0
> >> +  MODULE_TYPE                    = DXE_DRIVER
> >> +  VERSION_STRING                 = 1.0
> >> +  LIBRARY_CLASS                  = RealTimeClockLib
> >> +
> >> +[Sources.common]
> >> +  Pcf8563RealTimeClockLib.c
> >> +
> >> +[Packages]
> >> +  MdePkg/MdePkg.dec
> >> +  EmbeddedPkg/EmbeddedPkg.dec
> >> +
> >> +Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.
> >> +dec
> >> +
> >> +[LibraryClasses]
> >> +  BaseMemoryLib
> >> +  DebugLib
> >> +  IoLib
> >> +  UefiBootServicesTableLib
> >> +  UefiLib
> >> +  UefiRuntimeLib
> >> +
> >> +[Guids]
> >> +  gEfiEventVirtualAddressChangeGuid
> >> +
> >> +[Protocols]
> >> +  gEfiDriverBindingProtocolGuid                   ## CONSUMES
> >> +  gEfiI2cMasterProtocolGuid                       ## CONSUMES
> >> +  gPcf8563RealTimeClockLibI2cMasterProtolGuid     ## CONSUMES
> >> +
> >> +[FixedPcd]
> >> +  gPcf8563RealTimeClockLibTokenSpaceGuid.PcdI2cSlaveAddress
> >> +  gPcf8563RealTimeClockLibTokenSpaceGuid.PcdI2cBusFrequency
> >> +
> >> +[Depex]
> >> +  gPcf8563RealTimeClockLibI2cMasterProtolGuid
> >> --
> >> 2.11.0
> >>
> >> _______________________________________________
> >> edk2-devel mailing list
> >> edk2-devel@lists.01.org
> >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fli
> >> sts.01
> >> .org%2Fmailman%2Flistinfo%2Fedk2-
> >>
> devel&data=02%7C01%7Cudit.kumar%40nxp.com%7C6faa68073eef4ed072520
> >>
> 8d522a40d65%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6364530
> >>
> 10374642660&sdata=vr4qAgDuDX0M7MGeuS%2FKAY%2B%2FqhVmz0%2FMrEx
> >> K42tQIbM%3D&reserved=0
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to