public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: "Ni, Ruiyu" <ruiyu.ni@intel.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	 "leif.lindholm@linaro.org" <leif.lindholm@linaro.org>
Subject: Re: [PATCH] OptionRomPkg: add firmware loader driver for Renesas PD72020x
Date: Wed, 19 Apr 2017 08:17:54 +0100	[thread overview]
Message-ID: <CAKv+Gu-CBY7B=5wQbAxaVvtiODC_VU_g2EoXfUfzvqd2g4oXcw@mail.gmail.com> (raw)
In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5B93532E@SHSMSX104.ccr.corp.intel.com>

On 19 April 2017 at 03:51, Ni, Ruiyu <ruiyu.ni@intel.com> wrote:
> Ard,
> My understanding is the new driver downloads firmware into the XHCI controller in Supported().
> The generic XHCI driver can be started successfully only after the firmware is downloaded.
>
> But what if the XHCI driver Supported()/Start() is called before your new driver's Supported()?
> I see a dependency but your code doesn't guarantee the dependency.
>

We are using the 'Version' field in the DriverBinding protocol to
ensure this. From the spec:

"""
The version number of the UEFI driver that produced the
EFI_DRIVER_BINDING_PROTOCOL. This field is used by
the EFI boot service ConnectController() to determine
the order that driver's Supported() service will be used when
a controller needs to be started. EFI Driver Binding Protocol
instances with higher Version values will be used before ones
with lower Version values. The Version values of 0x0-
0x0f and 0xfffffff0-0xffffffff are reserved for
platform/OEM specific drivers. The Version values of 0x10-
0xffffffef are reserved for IHV-developed drivers
"""

Since the lack of incorporated firmware for an onboard Renesas
PD72020x is arguably a platform issue, this driver uses a 'Version'
value in the platform range to ensure that it gets dispatched before
the generic XHCI driver.



>> -----Original Message-----
>> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
>> Ard Biesheuvel
>> Sent: Wednesday, April 19, 2017 1:54 AM
>> To: edk2-devel@lists.01.org; leif.lindholm@linaro.org; Ni, Ruiyu
>> <ruiyu.ni@intel.com>
>> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Subject: [edk2] [PATCH] OptionRomPkg: add firmware loader driver for
>> Renesas PD72020x
>>
>> Some versions of the Renesas PD72020x XHCI controller can be integrated
>> into platforms without any non-volatile storage for the controller's firmware,
>> in which case it is the job of the system firmware to upload a firmware image
>> before attempting to attach the generic XHCI driver to it.
>>
>> So implement a driver that does just this: it will upload the bundled firmware
>> image (accessible via its FFS GUID) in the Supported() method of the driver
>> binding protocol, and subsequently decline to bind to the device, which
>> allows the real XHCI driver to attach to it instead.
>>
>> The firmware itself is not part of this patch: it is up to the integrator to
>> incorporate it into a firmware volume under the associated GUID
>> (gRenesasFirmwarePD720202ImageId)
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> ---
>>  OptionRomPkg/OptionRomPkg.dec                                    |   3 +
>>  OptionRomPkg/OptionRomPkg.dsc                                    |   5 +
>>  OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.c   |
>> 372 ++++++++++++++++++++
>>  OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.inf
>> |  43 +++
>>  4 files changed, 423 insertions(+)
>>
>> diff --git a/OptionRomPkg/OptionRomPkg.dec
>> b/OptionRomPkg/OptionRomPkg.dec index ea4d57b996ae..dc98ff58e374
>> 100644
>> --- a/OptionRomPkg/OptionRomPkg.dec
>> +++ b/OptionRomPkg/OptionRomPkg.dec
>> @@ -36,6 +36,9 @@ [LibraryClasses]
>>  [Guids]
>>    gOptionRomPkgTokenSpaceGuid = { 0x1e43298f, 0x3478, 0x41a7, { 0xb5,
>> 0x77, 0x86, 0x6, 0x46, 0x35, 0xc7, 0x28 } }
>>
>> +  ## GUID for RenesasFirmwarePD720202 firmware image
>> + gRenesasFirmwarePD720202ImageId = {0xA059EBC4, 0xD73D, 0x4279,
>> + {0x81,0xBF,0xE4,0xA8,0x93,0x08,0xB9,0x23}}
>> +
>>  [PcdsFeatureFlag]
>>
>> gOptionRomPkgTokenSpaceGuid.PcdSupportScsiPassThru|TRUE|BOOLEAN|
>> 0x00010001
>>
>> gOptionRomPkgTokenSpaceGuid.PcdSupportExtScsiPassThru|TRUE|BOOLEA
>> N|0x00010002
>> diff --git a/OptionRomPkg/OptionRomPkg.dsc
>> b/OptionRomPkg/OptionRomPkg.dsc index 33655567109b..07c26117251d
>> 100644
>> --- a/OptionRomPkg/OptionRomPkg.dsc
>> +++ b/OptionRomPkg/OptionRomPkg.dsc
>> @@ -115,5 +115,10 @@ [Components]
>>    OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.inf
>>    OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf
>>
>> +
>> OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.inf {
>> +    <LibraryClasses>
>> +      DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
>> +  }
>> +
>>  [Components.IA32, Components.X64, Components.IPF]
>>    OptionRomPkg/Application/BltLibSample/BltLibSample.inf
>> diff --git
>> a/OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.c
>> b/OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.c
>> new file mode 100644
>> index 000000000000..c7d3f1820840
>> --- /dev/null
>> +++
>> b/OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.c
>> @@ -0,0 +1,372 @@
>> +/**  @file
>> +  Implementation of driver entry point and driver binding protocol.
>> +
>> +Copyright (c) 2016 - 2017, Linaro Limited. All rights reserved.
>> +
>> +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.
>> +
>> +**/
>> +
>> +#include <PiDxe.h>
>> +
>> +#include <Library/DebugLib.h>
>> +#include <Library/DxeServicesLib.h>
>> +#include <Library/UefiBootServicesTableLib.h>
>> +#include <Library/UefiLib.h>
>> +
>> +#include <IndustryStandard/Pci22.h>
>> +
>> +#include <Protocol/PciIo.h>
>> +
>> +#define PCI_VENDOR_ID_RENESAS               0x1912
>> +#define PCI_DEVICE_ID_PD720201              0x14
>> +#define PCI_DEVICE_ID_PD720202              0x15
>> +
>> +#define PCI_FW_CTL_STAT_REG                 0xF4
>> +#define PCI_FW_CTL_DATA_REG                 0xF5
>> +#define PCI_EXT_ROM_CTL_REG                 0xF6
>> +#define PCI_FW_DATA0                        0xF8
>> +#define PCI_FW_DATA1                        0xFC
>> +
>> +#define PCI_FW_CTL_STAT_REG_FW_DL_ENABLE    (1U << 0)
>> +#define PCI_FW_CTL_STAT_REG_RESULT_CODE     (7U << 4)
>> +#define PCI_FW_CTL_STAT_REG_RESULT_INVALID  (0)
>> +#define PCI_FW_CTL_STAT_REG_RESULT_OK       (1U << 4)
>> +#define PCI_FW_CTL_STAT_REG_SET_DATA0       (1U << 0)
>> +#define PCI_FW_CTL_STAT_REG_SET_DATA1       (1U << 1)
>> +
>> +#define PCI_EXT_ROM_CTL_REG_ROM_EXISTS      (1U << 15)
>> +
>> +STATIC CONST UINT32   *mFirmwareImage;
>> +STATIC UINTN          mFirmwareImageSize;
>> +
>> +STATIC
>> +UINT8
>> +ReadCtlStatVal (
>> +  IN EFI_PCI_IO_PROTOCOL     *PciIo,
>> +  IN UINTN                   Offset
>> +  )
>> +{
>> +  UINT8       CtlStatVal;
>> +  EFI_STATUS  Status;
>> +
>> +  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, Offset, 1,
>> + &CtlStatVal);  ASSERT_EFI_ERROR (Status);
>> +
>> +  return CtlStatVal;
>> +}
>> +
>> +STATIC
>> +VOID
>> +WriteCtlStatVal (
>> +  IN EFI_PCI_IO_PROTOCOL     *PciIo,
>> +  IN UINTN                   Offset,
>> +  IN UINT8                   CtlStatVal
>> +  )
>> +{
>> +  EFI_STATUS  Status;
>> +
>> +  Status = PciIo->Pci.Write (PciIo, EfiPciIoWidthUint8, Offset, 1,
>> +&CtlStatVal);
>> +  ASSERT_EFI_ERROR (Status);
>> +}
>> +
>> +STATIC
>> +VOID
>> +WriteDataVal (
>> +  IN EFI_PCI_IO_PROTOCOL     *PciIo,
>> +  IN UINTN                   Offset,
>> +  IN UINT32                  DataVal
>> +  )
>> +{
>> +  EFI_STATUS  Status;
>> +
>> +  Status = PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, Offset, 1,
>> +&DataVal);
>> +  ASSERT_EFI_ERROR (Status);
>> +}
>> +
>> +STATIC
>> +BOOLEAN
>> +WaitReadCtlStatVal (
>> +  IN EFI_PCI_IO_PROTOCOL     *PciIo,
>> +  IN UINTN                   Offset,
>> +  IN UINT8                   Mask,
>> +  IN UINT8                   Val
>> +  )
>> +{
>> +  UINTN Timeout;
>> +
>> +  for (Timeout = 0; (ReadCtlStatVal (PciIo, Offset) & Mask) != Val; Timeout++)
>> {
>> +    if (Timeout > 1000) {
>> +      DEBUG ((EFI_D_ERROR,
>> +        "%a: Timeout waiting for reg [+0x%x] & 0x%x to become 0x%x\n",
>> +        __FUNCTION__, Offset, Mask, Val));
>> +      return FALSE;
>> +    }
>> +    gBS->Stall (10);
>> +  }
>> +  return TRUE;
>> +}
>> +
>> +STATIC
>> +VOID
>> +DownloadPD720202Firmware (
>> +  IN EFI_PCI_IO_PROTOCOL     *PciIo
>> +  )
>> +{
>> +  UINTN   Idx;
>> +
>> +  Idx = 0;
>> +
>> +  // 1. Set "FW Download Enable" to '1b'.
>> +  WriteCtlStatVal (PciIo, PCI_FW_CTL_STAT_REG,
>> +    PCI_FW_CTL_STAT_REG_FW_DL_ENABLE);
>> +
>> +  // 2. Read "Set DATA0" and confirm it is '0b'.
>> +  if (!WaitReadCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> +         PCI_FW_CTL_STAT_REG_SET_DATA0, 0)) {
>> +    return;
>> +  }
>> +
>> +  // 3. Write FW data to "DATA0".
>> +  WriteDataVal (PciIo, PCI_FW_DATA0, mFirmwareImage[Idx++]);
>> +
>> +  // 4. Read "Set DATA1" and confirm it is '0b'.
>> +  if (!WaitReadCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> +         PCI_FW_CTL_STAT_REG_SET_DATA1, 0)) {
>> +    return;
>> +  }
>> +
>> +  // 5. Write FW data to "DATA1".
>> +  WriteDataVal (PciIo, PCI_FW_DATA1, mFirmwareImage[Idx++]);
>> +
>> +  // 6. Set "Set DATA0" & "Set DATA1" to '1b'.
>> +  WriteCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> +    PCI_FW_CTL_STAT_REG_SET_DATA0 |
>> PCI_FW_CTL_STAT_REG_SET_DATA1);
>> +
>> +  while (Idx < mFirmwareImageSize / sizeof(UINT32)) {
>> +
>> +    // 7. Read "Set DATA0" and confirm it is '0b'.
>> +    if (!WaitReadCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> +           PCI_FW_CTL_STAT_REG_SET_DATA0, 0)) {
>> +      return;
>> +    }
>> +
>> +    // 8. Write FW data to"DATA0". Set "Set DATA0" to '1b'.
>> +    WriteDataVal (PciIo, PCI_FW_DATA0, mFirmwareImage[Idx++]);
>> +    WriteCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> + PCI_FW_CTL_STAT_REG_SET_DATA0);
>> +
>> +    // 9. Read "Set DATA1" and confirm it is '0b'.
>> +    if (!WaitReadCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> +           PCI_FW_CTL_STAT_REG_SET_DATA1, 0)) {
>> +      return;
>> +    }
>> +
>> +    // 10. Write FW data to"DATA1". Set "Set DATA1" to '1b'.
>> +    WriteDataVal (PciIo, PCI_FW_DATA1, mFirmwareImage[Idx++]);
>> +    WriteCtlStatVal (PciIo, PCI_FW_CTL_DATA_REG,
>> + PCI_FW_CTL_STAT_REG_SET_DATA1);
>> +
>> +    // 11. Return to step 7 and repeat the sequence from step 7 to step 10.
>> +  }
>> +
>> +  // 12. After writing the last data of FW, the System Software must set "FW
>> Download Enable" to '0b'.
>> +  WriteCtlStatVal (PciIo, PCI_FW_CTL_STAT_REG, 0);
>> +
>> +  // 13. Read "Result Code" and confirm it is '001b'.
>> +  if (WaitReadCtlStatVal (PciIo, PCI_FW_CTL_STAT_REG,
>> +        PCI_FW_CTL_STAT_REG_RESULT_CODE,
>> PCI_FW_CTL_STAT_REG_RESULT_OK)) {
>> +    DEBUG ((EFI_D_INFO, "%a: Renesas PD720202 firmware download
>> successful\n",
>> +      __FUNCTION__));
>> +  } else {
>> +    DEBUG ((EFI_D_ERROR, "%a: Renesas PD720202 firmware download
>> FAILED\n",
>> +      __FUNCTION__));
>> +  }
>> +}
>> +
>> +/**
>> +  Test to see if this driver supports ControllerHandle. This service
>> +  is called by the EFI boot service ConnectController(). In
>> +  order to make drivers as small as possible, there are a few calling
>> +  restrictions for this service. ConnectController() must
>> +  follow these calling restrictions. If any other agent wishes to call
>> +  Supported() it must also follow these calling restrictions.
>> +
>> +   @param  This                   Protocol instance pointer.
>> +   @param  ControllerHandle       Handle of device to test.
>> +   @param  RemainingDevicePath    Optional parameter use to pick a specific
>> child
>> +                                                         device to start.
>> +
>> +   @retval EFI_SUCCESS            This driver supports this device.
>> +   @retval EFI_ALREADY_STARTED    This driver is already running on this
>> device.
>> +   @retval other                  This driver does not support this device.
>> +
>> +**/
>> +STATIC
>> +EFI_STATUS
>> +EFIAPI
>> +RenesasPD720202DriverSupported (
>> +    IN EFI_DRIVER_BINDING_PROTOCOL    *This,
>> +    IN EFI_HANDLE                     Controller,
>> +    IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
>> +    )
>> +{
>> +  EFI_STATUS              Status;
>> +  EFI_PCI_IO_PROTOCOL     *PciIo;
>> +  UINT32                  PciID;
>> +  UINT8                   CtlStatVal;
>> +
>> +  //
>> +  // Check for the PCI IO Protocol
>> +  //
>> +  Status = gBS->OpenProtocol (Controller, &gEfiPciIoProtocolGuid,
>> +                  (VOID **)&PciIo, This->DriverBindingHandle, Controller,
>> +                  EFI_OPEN_PROTOCOL_BY_DRIVER);
>> +
>> +  if (EFI_ERROR (Status)) {
>> +    return Status;
>> +  }
>> +
>> +  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32,
>> PCI_VENDOR_ID_OFFSET,
>> +                        1, &PciID);
>> +  if (EFI_ERROR (Status)) {
>> +    DEBUG ((EFI_D_ERROR,
>> +      "%a: Pci->Pci.Read() of vendor/device id failed (Status == %r)\n",
>> +      __FUNCTION__, Status));
>> +    goto CloseProtocol;
>> +  }
>> +
>> +  if ((PciID & 0xffff) != PCI_VENDOR_ID_RENESAS ||
>> +      ((PciID >> 16) != PCI_DEVICE_ID_PD720201 &&
>> +       (PciID >> 16) != PCI_DEVICE_ID_PD720202)) {
>> +    DEBUG ((EFI_D_INFO, "%a: ignoring unsupported PCI device
>> 0x%04x:0x%04x\n",
>> +      __FUNCTION__, PciID & 0xffff, PciID >> 16));
>> +    goto CloseProtocol;
>> +  }
>> +
>> +  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8,
>> PCI_FW_CTL_STAT_REG,
>> +                        1, &CtlStatVal);  if (!EFI_ERROR (Status) &&
>> +      (CtlStatVal & PCI_FW_CTL_STAT_REG_RESULT_CODE) ==
>> PCI_FW_CTL_STAT_REG_RESULT_INVALID) {
>> +    //
>> +    // Firmware download required
>> +    //
>> +    DEBUG ((EFI_D_INFO, "%a: downloading firmware\n", __FUNCTION__));
>> +    DownloadPD720202Firmware (PciIo);
>> +  }
>> +
>> +CloseProtocol:
>> +  gBS->CloseProtocol (Controller, &gEfiPciIoProtocolGuid,
>> +         This->DriverBindingHandle, Controller);
>> +
>> +  //
>> +  // Always return unsupported: we are not interested in driving the
>> +device,
>> +  // only in having the opportunity to install the firmware before the
>> +real
>> +  // driver attaches to it.
>> +  //
>> +  return EFI_UNSUPPORTED;
>> +}
>> +
>> +/**
>> +  Start this driver on Controller. Not used.
>> +
>> +  @param [in] This                    Protocol instance pointer.
>> +  @param [in] Controller              Handle of device to work with.
>> +  @param [in] RemainingDevicePath     Not used, always produce all possible
>> children.
>> +
>> +  @retval EFI_SUCCESS                 This driver is added to Controller.
>> +  @retval other                       This driver does not support this device.
>> +
>> +**/
>> +STATIC
>> +EFI_STATUS
>> +EFIAPI
>> +RenesasPD720202DriverStart (
>> +    IN EFI_DRIVER_BINDING_PROTOCOL  *This,
>> +    IN EFI_HANDLE                   Controller,
>> +    IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
>> +    )
>> +{
>> +  //
>> +  // We are not interested in driving the device, we only poke the
>> +firmware
>> +  // in the .Supported() callback.
>> +  //
>> +  ASSERT (FALSE);
>> +  return EFI_INVALID_PARAMETER;
>> +}
>> +
>> +/**
>> +  Stop this driver on Controller. Not used.
>> +
>> +  @param [in] This                    Protocol instance pointer.
>> +  @param [in] Controller              Handle of device to stop driver on.
>> +  @param [in] NumberOfChildren        How many children need to be
>> stopped.
>> +  @param [in] ChildHandleBuffer       Not used.
>> +
>> +  @retval EFI_SUCCESS                 This driver is removed Controller.
>> +  @retval EFI_DEVICE_ERROR            The device could not be stopped due to
>> a device error.
>> +  @retval other                       This driver was not removed from this device.
>> +
>> +**/
>> +STATIC
>> +EFI_STATUS
>> +EFIAPI
>> +RenesasPD720202DriverStop (
>> +    IN  EFI_DRIVER_BINDING_PROTOCOL *This,
>> +    IN  EFI_HANDLE                  Controller,
>> +    IN  UINTN                       NumberOfChildren,
>> +    IN  EFI_HANDLE                  *ChildHandleBuffer
>> +    )
>> +{
>> +  ASSERT (FALSE);
>> +  return EFI_SUCCESS;
>> +}
>> +
>> +//
>> +// UEFI Driver Model entry point
>> +//
>> +STATIC EFI_DRIVER_BINDING_PROTOCOL RenesasPD720202DriverBinding =
>> {
>> +  RenesasPD720202DriverSupported,
>> +  RenesasPD720202DriverStart,
>> +  RenesasPD720202DriverStop,
>> +
>> +  // Version values of 0xfffffff0-0xffffffff are reserved for
>> +platform/OEM
>> +  // specific drivers. Protocol instances with higher 'Version'
>> +properties
>> +  // will be used before lower 'Version' ones. XhciDxe uses version
>> +0x30,
>> +  // so this driver will be called in preference, and XhciDxe will be
>> +invoked
>> +  // after RenesasPD720202DriverSupported returns EFI_UNSUPPORTED.
>> +  0xfffffff0,
>> +  NULL,
>> +  NULL
>> +};
>> +
>> +EFI_STATUS
>> +EFIAPI
>> +InitializeRenesasPD720202Driver (
>> +    IN EFI_HANDLE       ImageHandle,
>> +    IN EFI_SYSTEM_TABLE *SystemTable
>> +    )
>> +{
>> +  EFI_STATUS    Status;
>> +
>> +  //
>> +  // First, try to locate the firmware image. If it is missing, there
>> + is no  // point in proceeding.
>> +  //
>> +  Status = GetSectionFromAnyFv (&gRenesasFirmwarePD720202ImageId,
>> +    EFI_SECTION_RAW, 0, (VOID **) (VOID **)&mFirmwareImage,
>> +    &mFirmwareImageSize);
>> +  if (EFI_ERROR (Status)) {
>> +    DEBUG ((EFI_D_ERROR, "%a: could not locate PD720202 firmware
>> image\n",
>> +      __FUNCTION__));
>> +    ASSERT_EFI_ERROR (Status);
>> +    return Status;
>> +  }
>> +
>> +  return EfiLibInstallDriverBinding (ImageHandle, SystemTable,
>> +        &RenesasPD720202DriverBinding, NULL); }
>> diff --git
>> a/OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.in
>> f
>> b/OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.in
>> f
>> new file mode 100644
>> index 000000000000..7115ec1ba7e8
>> --- /dev/null
>> +++
>> b/OptionRomPkg/RenesasFirmwarePD720202/RenesasFirmwarePD720202.in
>> f
>> @@ -0,0 +1,43 @@
>> +##  @file
>> +# Component description file for Reneses PD720202 firmware download
>> +driver # # Copyright (c) 2016 - 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 #
>> +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
>> +  BASE_NAME                      = RenesasFirmwarePD720202
>> +  FILE_GUID                      = 5979ebfe-d53c-4150-a972-568231583969
>> +  MODULE_TYPE                    = UEFI_DRIVER
>> +  VERSION_STRING                 = 1.0
>> +  ENTRY_POINT                    = InitializeRenesasPD720202Driver
>> +
>> +[Sources]
>> +  RenesasFirmwarePD720202.c
>> +
>> +[Packages]
>> +  MdeModulePkg/MdeModulePkg.dec
>> +  MdePkg/MdePkg.dec
>> +  OptionRomPkg/OptionRomPkg.dec
>> +
>> +[LibraryClasses]
>> +  DebugLib
>> +  DxeServicesLib
>> +  UefiBootServicesTableLib
>> +  UefiLib
>> +  UefiDriverEntryPoint
>> +
>> +[Protocols]
>> +  gEfiPciIoProtocolGuid
>> +
>> +[Guids]
>> +  gRenesasFirmwarePD720202ImageId
>> --
>> 2.9.3
>>
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.01.org
>> https://lists.01.org/mailman/listinfo/edk2-devel


      reply	other threads:[~2017-04-19  7:17 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-18 17:53 [PATCH] OptionRomPkg: add firmware loader driver for Renesas PD72020x Ard Biesheuvel
2017-04-19  2:51 ` Ni, Ruiyu
2017-04-19  7:17   ` Ard Biesheuvel [this message]

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='CAKv+Gu-CBY7B=5wQbAxaVvtiODC_VU_g2EoXfUfzvqd2g4oXcw@mail.gmail.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