On Thu, Jan 10, 2019 at 02:44:28AM +0100, Marcin Wojtas wrote:
> This patch introduces new library callback (ArmadaSoCGpioGet ()),
> which dynamically allocates and fills EmbeddedGpio's
> GPIO_CONTROLLER structure with the SoC description of GPIO controllers.
> 
> Because the library header is indirectly used in many modules,
> update all dependencies after including EmbeddedGpio.h.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <m...@semihalf.com>

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

> ---
>  Silicon/Marvell/Armada7k8k/Drivers/PlatInitDxe/PlatInitDxe.inf               
>     |  1 +
>  
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.inf
>  |  1 +
>  Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf                         
>     |  1 +
>  Silicon/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf                            
>     |  1 +
>  Silicon/Marvell/Drivers/Net/MvMdioDxe/MvMdioDxe.inf                          
>     |  1 +
>  Silicon/Marvell/Drivers/SdMmc/XenonDxe/XenonDxe.inf                          
>     |  1 +
>  Silicon/Marvell/Library/ComPhyLib/ComPhyLib.inf                              
>     |  1 +
>  Silicon/Marvell/Library/IcuLib/IcuLib.inf                                    
>     |  1 +
>  Silicon/Marvell/Library/UtmiPhyLib/UtmiPhyLib.inf                            
>     |  1 +
>  
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
>    | 10 +++++
>  Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h                           
>     | 12 ++++++
>  
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
>    | 39 ++++++++++++++++++++
>  12 files changed, 70 insertions(+)
> 
> diff --git a/Silicon/Marvell/Armada7k8k/Drivers/PlatInitDxe/PlatInitDxe.inf 
> b/Silicon/Marvell/Armada7k8k/Drivers/PlatInitDxe/PlatInitDxe.inf
> index 5503463..e707fe9 100644
> --- a/Silicon/Marvell/Armada7k8k/Drivers/PlatInitDxe/PlatInitDxe.inf
> +++ b/Silicon/Marvell/Armada7k8k/Drivers/PlatInitDxe/PlatInitDxe.inf
> @@ -25,6 +25,7 @@
>    PlatInitDxe.c
>  
>  [Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    MdePkg/MdePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git 
> a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.inf
>  
> b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.inf
> index 2b73b73..48a320c 100644
> --- 
> a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.inf
> +++ 
> b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.inf
> @@ -24,6 +24,7 @@
>    Armada7k8kSoCDescLib.c
>  
>  [Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    MdePkg/MdePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf 
> b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf
> index 0b93948..0b641fe 100644
> --- a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf
> +++ b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf
> @@ -42,6 +42,7 @@
>    MvBoardDescDxe.h
>  
>  [Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    MdePkg/MdePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git a/Silicon/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf 
> b/Silicon/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf
> index 0eef350..e5bd370 100755
> --- a/Silicon/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf
> +++ b/Silicon/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf
> @@ -41,6 +41,7 @@
>    MvI2cDxe.c
>  
>  [Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdePkg/MdePkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    ArmPlatformPkg/ArmPlatformPkg.dec
> diff --git a/Silicon/Marvell/Drivers/Net/MvMdioDxe/MvMdioDxe.inf 
> b/Silicon/Marvell/Drivers/Net/MvMdioDxe/MvMdioDxe.inf
> index 739576f..8a877da 100644
> --- a/Silicon/Marvell/Drivers/Net/MvMdioDxe/MvMdioDxe.inf
> +++ b/Silicon/Marvell/Drivers/Net/MvMdioDxe/MvMdioDxe.inf
> @@ -45,6 +45,7 @@
>  [Packages]
>    ArmPkg/ArmPkg.dec
>    ArmPlatformPkg/ArmPlatformPkg.dec
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    MdePkg/MdePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git a/Silicon/Marvell/Drivers/SdMmc/XenonDxe/XenonDxe.inf 
> b/Silicon/Marvell/Drivers/SdMmc/XenonDxe/XenonDxe.inf
> index 00c738a..09c5842 100644
> --- a/Silicon/Marvell/Drivers/SdMmc/XenonDxe/XenonDxe.inf
> +++ b/Silicon/Marvell/Drivers/SdMmc/XenonDxe/XenonDxe.inf
> @@ -35,6 +35,7 @@
>    XenonSdMmcOverride.h
>  
>  [Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdePkg/MdePkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git a/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.inf 
> b/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.inf
> index 36f498b..c360edd 100644
> --- a/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.inf
> +++ b/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.inf
> @@ -41,6 +41,7 @@
>  [Packages]
>    MdePkg/MdePkg.dec
>    MdeModulePkg/MdeModulePkg.dec
> +  EmbeddedPkg/EmbeddedPkg.dec
>    ArmPkg/ArmPkg.dec
>    ArmPlatformPkg/ArmPlatformPkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git a/Silicon/Marvell/Library/IcuLib/IcuLib.inf 
> b/Silicon/Marvell/Library/IcuLib/IcuLib.inf
> index 0010141..ea662be 100644
> --- a/Silicon/Marvell/Library/IcuLib/IcuLib.inf
> +++ b/Silicon/Marvell/Library/IcuLib/IcuLib.inf
> @@ -24,6 +24,7 @@
>    IcuLib.c
>  
>  [Packages]
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    MdePkg/MdePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git a/Silicon/Marvell/Library/UtmiPhyLib/UtmiPhyLib.inf 
> b/Silicon/Marvell/Library/UtmiPhyLib/UtmiPhyLib.inf
> index e2381f4..805a057 100644
> --- a/Silicon/Marvell/Library/UtmiPhyLib/UtmiPhyLib.inf
> +++ b/Silicon/Marvell/Library/UtmiPhyLib/UtmiPhyLib.inf
> @@ -41,6 +41,7 @@
>  [Packages]
>    ArmPkg/ArmPkg.dec
>    ArmPlatformPkg/ArmPlatformPkg.dec
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdeModulePkg/MdeModulePkg.dec
>    MdePkg/MdePkg.dec
>    Silicon/Marvell/Marvell.dec
> diff --git 
> a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
>  
> b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> index c14b985..bfc8639 100644
> --- 
> a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> +++ 
> b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> @@ -22,6 +22,7 @@
>  // Common macros
>  //
>  #define MV_SOC_CP_BASE(Cp)               (0xF2000000 + ((Cp) * 0x2000000))
> +#define MV_SOC_AP806_COUNT               1
>  
>  //
>  // Platform description of AHCI controllers
> @@ -38,6 +39,15 @@
>  #define MV_SOC_COMPHY_MUX_BITS           4
>  
>  //
> +// Platform description of GPIO controllers
> +//
> +#define MV_SOC_AP806_GPIO_BASE           0xF06F5040
> +#define MV_SOC_AP806_GPIO_PIN_COUNT      20
> +#define MV_SOC_GPIO_PER_CP_COUNT         2
> +#define MV_SOC_CP_GPIO_BASE(Gpio)        (0x440100 + ((Gpio) * 0x40))
> +#define MV_SOC_CP_GPIO_PIN_COUNT(Gpio)   ((Gpio) == 0 ? 32 : 31)
> +
> +//
>  // Platform description of I2C controllers
>  //
>  #define MV_SOC_I2C_PER_CP_COUNT          2
> diff --git a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h 
> b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> index cdfb51b..26b075a 100644
> --- a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> +++ b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> @@ -17,6 +17,8 @@
>  #include <Library/MvComPhyLib.h>
>  #include <Library/NonDiscoverableDeviceRegistrationLib.h>
>  
> +#include <Protocol/EmbeddedGpio.h>
> +
>  //
>  // ComPhy SoC description
>  //
> @@ -46,6 +48,16 @@ ArmadaSoCDescCpBaseGet (
>    );
>  
>  //
> +// GPIO devices description template definition
> +//
> +EFI_STATUS
> +EFIAPI
> +ArmadaSoCGpioGet (
> +  IN OUT GPIO_CONTROLLER  **SoCGpioDescription,
> +  IN OUT UINTN             *Count
> +  );
> +
> +//
>  // I2C
>  //
>  typedef struct {
> diff --git 
> a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
>  
> b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> index 6902fda..5b72c20 100644
> --- 
> a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> +++ 
> b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> @@ -74,6 +74,45 @@ ArmadaSoCDescCpBaseGet (
>  
>  EFI_STATUS
>  EFIAPI
> +ArmadaSoCGpioGet (
> +  IN OUT GPIO_CONTROLLER  **SoCGpioDescription,
> +  IN OUT UINTN             *Count
> +  )
> +{
> +  GPIO_CONTROLLER *GpioInstance;
> +  UINTN CpCount, CpIndex, Index;
> +
> +  CpCount = FixedPcdGet8 (PcdMaxCpCount);
> +
> +  *Count = CpCount * MV_SOC_GPIO_PER_CP_COUNT + MV_SOC_AP806_COUNT;
> +  GpioInstance = AllocateZeroPool (*Count * sizeof (GPIO_CONTROLLER));
> +  if (GpioInstance == NULL) {
> +    DEBUG ((DEBUG_ERROR, "%a: Cannot allocate memory\n", __FUNCTION__));
> +    return EFI_OUT_OF_RESOURCES;
> +  }
> +
> +  *SoCGpioDescription = GpioInstance;
> +
> +  /* AP806 GPIO controller */
> +  GpioInstance->RegisterBase = MV_SOC_AP806_GPIO_BASE;
> +  GpioInstance->InternalGpioCount = MV_SOC_AP806_GPIO_PIN_COUNT;
> +  GpioInstance++;
> +
> +  /* CP110 GPIO controllers */
> +  for (CpIndex = 0; CpIndex < CpCount; CpIndex++) {
> +    for (Index = 0; Index < MV_SOC_GPIO_PER_CP_COUNT; Index++) {
> +      GpioInstance->RegisterBase = MV_SOC_CP_BASE (CpIndex) +
> +                                   MV_SOC_CP_GPIO_BASE (Index);
> +      GpioInstance->InternalGpioCount = MV_SOC_CP_GPIO_PIN_COUNT (Index);
> +      GpioInstance++;
> +    }
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +EFI_STATUS
> +EFIAPI
>  ArmadaSoCDescI2cGet (
>    IN OUT MV_SOC_I2C_DESC  **I2cDesc,
>    IN OUT UINTN             *DescCount
> -- 
> 2.7.4
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to