diff mbox series

[edk2,edk2-platforms,v3,04/27] Silicon/SynQuacer: implement a platform DXE driver

Message ID 20171031105218.30208-5-ard.biesheuvel@linaro.org
State Superseded
Headers show
Series add support for Socionext Synquacer | expand

Commit Message

Ard Biesheuvel Oct. 31, 2017, 10:51 a.m. UTC
This implements a driver that will take care of platform specific
initialization, such as declaring non-discoverable devices. For
the moment, this is limited to declaring the presence of the NETSEC
controller.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c   | 106 ++++++++++++++++++++
 Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf |  52 ++++++++++
 Silicon/Socionext/SynQuacer/SynQuacer.dec                       |   3 +
 3 files changed, 161 insertions(+)

-- 
2.11.0

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

Comments

Leif Lindholm Nov. 1, 2017, 4:46 a.m. UTC | #1
On Tue, Oct 31, 2017 at 10:51:55AM +0000, Ard Biesheuvel wrote:
> This implements a driver that will take care of platform specific

> initialization, such as declaring non-discoverable devices. For

> the moment, this is limited to declaring the presence of the NETSEC

> controller.

> 

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>


Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>


> ---

>  Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c   | 106 ++++++++++++++++++++

>  Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf |  52 ++++++++++

>  Silicon/Socionext/SynQuacer/SynQuacer.dec                       |   3 +

>  3 files changed, 161 insertions(+)

> 

> diff --git a/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c

> new file mode 100644

> index 000000000000..86e81bc3593c

> --- /dev/null

> +++ b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c

> @@ -0,0 +1,106 @@

> +/** @file

> +  SynQuacer DXE platform driver.

> +

> +  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

> +  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/BaseMemoryLib.h>

> +#include <Library/DebugLib.h>

> +#include <Library/MemoryAllocationLib.h>

> +#include <Library/UefiBootServicesTableLib.h>

> +#include <Platform/MemoryMap.h>

> +#include <Protocol/NonDiscoverableDevice.h>

> +

> +STATIC EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR mNetsecDesc[] = {

> +  {

> +    ACPI_ADDRESS_SPACE_DESCRIPTOR,                    // Desc

> +    sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3,   // Len

> +    ACPI_ADDRESS_SPACE_TYPE_MEM,                      // ResType

> +    0,                                                // GenFlag

> +    0,                                                // SpecificFlag

> +    32,                                               // AddrSpaceGranularity

> +    SYNQUACER_NETSEC_BASE,                            // AddrRangeMin

> +    SYNQUACER_NETSEC_BASE +

> +    SYNQUACER_NETSEC_BASE_SZ - 1,                     // AddrRangeMax

> +    0,                                                // AddrTranslationOffset

> +    SYNQUACER_NETSEC_BASE_SZ,                         // AddrLen

> +  }, {

> +    ACPI_ADDRESS_SPACE_DESCRIPTOR,                    // Desc

> +    sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3,   // Len

> +    ACPI_ADDRESS_SPACE_TYPE_MEM,                      // ResType

> +    0,                                                // GenFlag

> +    0,                                                // SpecificFlag

> +    32,                                               // AddrSpaceGranularity

> +    FixedPcdGet32 (PcdNetsecEepromBase),              // AddrRangeMin

> +    FixedPcdGet32 (PcdNetsecEepromBase) +

> +    SYNQUACER_EEPROM_BASE_SZ - 1,                     // AddrRangeMax

> +    0,                                                // AddrTranslationOffset

> +    SYNQUACER_EEPROM_BASE_SZ,                         // AddrLen

> +  }, {

> +    ACPI_ADDRESS_SPACE_DESCRIPTOR,                    // Desc

> +    sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3,   // Len

> +    ACPI_ADDRESS_SPACE_TYPE_MEM,                      // ResType

> +    0,                                                // GenFlag

> +    0,                                                // SpecificFlag

> +    32,                                               // AddrSpaceGranularity

> +    FixedPcdGet32 (PcdNetsecPhyAddress),              // AddrRangeMin

> +    FixedPcdGet32 (PcdNetsecPhyAddress),              // AddrRangeMax

> +    0,                                                // AddrTranslationOffset

> +    1,                                                // AddrLen

> +  }, {

> +    ACPI_END_TAG_DESCRIPTOR                           // Desc

> +  }

> +};

> +

> +STATIC

> +EFI_STATUS

> +RegisterNetsec (

> +  VOID

> +  )

> +{

> +  NON_DISCOVERABLE_DEVICE             *Device;

> +  EFI_STATUS                          Status;

> +  EFI_HANDLE                          Handle;

> +

> +  Device = (NON_DISCOVERABLE_DEVICE *)AllocateZeroPool (sizeof (*Device));

> +  if (Device == NULL) {

> +    return EFI_OUT_OF_RESOURCES;

> +  }

> +

> +  Device->Type = &gNetsecNonDiscoverableDeviceGuid;

> +  Device->DmaType = NonDiscoverableDeviceDmaTypeNonCoherent;

> +  Device->Resources = mNetsecDesc;

> +

> +  Handle = NULL;

> +  Status = gBS->InstallMultipleProtocolInterfaces (&Handle,

> +                  &gEdkiiNonDiscoverableDeviceProtocolGuid, Device,

> +                  NULL);

> +  if (EFI_ERROR (Status)) {

> +    goto FreeDevice;

> +  }

> +  return EFI_SUCCESS;

> +

> +FreeDevice:

> +  FreePool (Device);

> +

> +  return Status;

> +}

> +

> +EFI_STATUS

> +EFIAPI

> +PlatformDxeEntryPoint (

> +  IN EFI_HANDLE         ImageHandle,

> +  IN EFI_SYSTEM_TABLE   *SystemTable

> +  )

> +{

> +  return RegisterNetsec ();

> +}

> diff --git a/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf

> new file mode 100644

> index 000000000000..59a3d1fb47f4

> --- /dev/null

> +++ b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf

> @@ -0,0 +1,52 @@

> +## @file

> +#

> +#  Component description file for the SynQuacer DXE platform driver.

> +#

> +#  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

> +#  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                    = 0x0001001A

> +  BASE_NAME                      = PlatformDxe

> +  FILE_GUID                      = ac422cc1-d916-489a-b165-536fdfc633c2

> +  MODULE_TYPE                    = DXE_DRIVER

> +  VERSION_STRING                 = 1.0

> +  ENTRY_POINT                    = PlatformDxeEntryPoint

> +

> +[Sources]

> +  PlatformDxe.c

> +

> +[Packages]

> +  MdeModulePkg/MdeModulePkg.dec

> +  MdePkg/MdePkg.dec

> +  Silicon/Socionext/SynQuacer/Drivers/Net/NetsecDxe/NetsecDxe.dec

> +  Silicon/Socionext/SynQuacer/SynQuacer.dec

> +

> +[LibraryClasses]

> +  BaseMemoryLib

> +  DebugLib

> +  MemoryAllocationLib

> +  UefiBootServicesTableLib

> +  UefiDriverEntryPoint

> +

> +[Guids]

> +  gNetsecNonDiscoverableDeviceGuid

> +

> +[Protocols]

> +  gEdkiiNonDiscoverableDeviceProtocolGuid     ## PRODUCES

> +

> +[FixedPcd]

> +  gSynQuacerTokenSpaceGuid.PcdNetsecEepromBase

> +  gSynQuacerTokenSpaceGuid.PcdNetsecPhyAddress

> +

> +[Depex]

> +  TRUE

> diff --git a/Silicon/Socionext/SynQuacer/SynQuacer.dec b/Silicon/Socionext/SynQuacer/SynQuacer.dec

> index 446be69473fb..80c53b1a7a2d 100644

> --- a/Silicon/Socionext/SynQuacer/SynQuacer.dec

> +++ b/Silicon/Socionext/SynQuacer/SynQuacer.dec

> @@ -30,3 +30,6 @@ [PcdsFixedAtBuild]

>  

>    gSynQuacerTokenSpaceGuid.PcdSecondaryFvBase|0|UINT64|0x00000002

>    gSynQuacerTokenSpaceGuid.PcdSecondaryFvSize|0|UINT64|0x00000003

> +

> +  gSynQuacerTokenSpaceGuid.PcdNetsecEepromBase|0|UINT32|0x00000004

> +  gSynQuacerTokenSpaceGuid.PcdNetsecPhyAddress|0|UINT8|0x00000005

> -- 

> 2.11.0

> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox series

Patch

diff --git a/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c
new file mode 100644
index 000000000000..86e81bc3593c
--- /dev/null
+++ b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.c
@@ -0,0 +1,106 @@ 
+/** @file
+  SynQuacer DXE platform driver.
+
+  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
+  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/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Platform/MemoryMap.h>
+#include <Protocol/NonDiscoverableDevice.h>
+
+STATIC EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR mNetsecDesc[] = {
+  {
+    ACPI_ADDRESS_SPACE_DESCRIPTOR,                    // Desc
+    sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3,   // Len
+    ACPI_ADDRESS_SPACE_TYPE_MEM,                      // ResType
+    0,                                                // GenFlag
+    0,                                                // SpecificFlag
+    32,                                               // AddrSpaceGranularity
+    SYNQUACER_NETSEC_BASE,                            // AddrRangeMin
+    SYNQUACER_NETSEC_BASE +
+    SYNQUACER_NETSEC_BASE_SZ - 1,                     // AddrRangeMax
+    0,                                                // AddrTranslationOffset
+    SYNQUACER_NETSEC_BASE_SZ,                         // AddrLen
+  }, {
+    ACPI_ADDRESS_SPACE_DESCRIPTOR,                    // Desc
+    sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3,   // Len
+    ACPI_ADDRESS_SPACE_TYPE_MEM,                      // ResType
+    0,                                                // GenFlag
+    0,                                                // SpecificFlag
+    32,                                               // AddrSpaceGranularity
+    FixedPcdGet32 (PcdNetsecEepromBase),              // AddrRangeMin
+    FixedPcdGet32 (PcdNetsecEepromBase) +
+    SYNQUACER_EEPROM_BASE_SZ - 1,                     // AddrRangeMax
+    0,                                                // AddrTranslationOffset
+    SYNQUACER_EEPROM_BASE_SZ,                         // AddrLen
+  }, {
+    ACPI_ADDRESS_SPACE_DESCRIPTOR,                    // Desc
+    sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3,   // Len
+    ACPI_ADDRESS_SPACE_TYPE_MEM,                      // ResType
+    0,                                                // GenFlag
+    0,                                                // SpecificFlag
+    32,                                               // AddrSpaceGranularity
+    FixedPcdGet32 (PcdNetsecPhyAddress),              // AddrRangeMin
+    FixedPcdGet32 (PcdNetsecPhyAddress),              // AddrRangeMax
+    0,                                                // AddrTranslationOffset
+    1,                                                // AddrLen
+  }, {
+    ACPI_END_TAG_DESCRIPTOR                           // Desc
+  }
+};
+
+STATIC
+EFI_STATUS
+RegisterNetsec (
+  VOID
+  )
+{
+  NON_DISCOVERABLE_DEVICE             *Device;
+  EFI_STATUS                          Status;
+  EFI_HANDLE                          Handle;
+
+  Device = (NON_DISCOVERABLE_DEVICE *)AllocateZeroPool (sizeof (*Device));
+  if (Device == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  Device->Type = &gNetsecNonDiscoverableDeviceGuid;
+  Device->DmaType = NonDiscoverableDeviceDmaTypeNonCoherent;
+  Device->Resources = mNetsecDesc;
+
+  Handle = NULL;
+  Status = gBS->InstallMultipleProtocolInterfaces (&Handle,
+                  &gEdkiiNonDiscoverableDeviceProtocolGuid, Device,
+                  NULL);
+  if (EFI_ERROR (Status)) {
+    goto FreeDevice;
+  }
+  return EFI_SUCCESS;
+
+FreeDevice:
+  FreePool (Device);
+
+  return Status;
+}
+
+EFI_STATUS
+EFIAPI
+PlatformDxeEntryPoint (
+  IN EFI_HANDLE         ImageHandle,
+  IN EFI_SYSTEM_TABLE   *SystemTable
+  )
+{
+  return RegisterNetsec ();
+}
diff --git a/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf
new file mode 100644
index 000000000000..59a3d1fb47f4
--- /dev/null
+++ b/Silicon/Socionext/SynQuacer/Drivers/PlatformDxe/PlatformDxe.inf
@@ -0,0 +1,52 @@ 
+## @file
+#
+#  Component description file for the SynQuacer DXE platform driver.
+#
+#  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
+#  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                    = 0x0001001A
+  BASE_NAME                      = PlatformDxe
+  FILE_GUID                      = ac422cc1-d916-489a-b165-536fdfc633c2
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = PlatformDxeEntryPoint
+
+[Sources]
+  PlatformDxe.c
+
+[Packages]
+  MdeModulePkg/MdeModulePkg.dec
+  MdePkg/MdePkg.dec
+  Silicon/Socionext/SynQuacer/Drivers/Net/NetsecDxe/NetsecDxe.dec
+  Silicon/Socionext/SynQuacer/SynQuacer.dec
+
+[LibraryClasses]
+  BaseMemoryLib
+  DebugLib
+  MemoryAllocationLib
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+
+[Guids]
+  gNetsecNonDiscoverableDeviceGuid
+
+[Protocols]
+  gEdkiiNonDiscoverableDeviceProtocolGuid     ## PRODUCES
+
+[FixedPcd]
+  gSynQuacerTokenSpaceGuid.PcdNetsecEepromBase
+  gSynQuacerTokenSpaceGuid.PcdNetsecPhyAddress
+
+[Depex]
+  TRUE
diff --git a/Silicon/Socionext/SynQuacer/SynQuacer.dec b/Silicon/Socionext/SynQuacer/SynQuacer.dec
index 446be69473fb..80c53b1a7a2d 100644
--- a/Silicon/Socionext/SynQuacer/SynQuacer.dec
+++ b/Silicon/Socionext/SynQuacer/SynQuacer.dec
@@ -30,3 +30,6 @@  [PcdsFixedAtBuild]
 
   gSynQuacerTokenSpaceGuid.PcdSecondaryFvBase|0|UINT64|0x00000002
   gSynQuacerTokenSpaceGuid.PcdSecondaryFvSize|0|UINT64|0x00000003
+
+  gSynQuacerTokenSpaceGuid.PcdNetsecEepromBase|0|UINT32|0x00000004
+  gSynQuacerTokenSpaceGuid.PcdNetsecPhyAddress|0|UINT8|0x00000005