On Fri, Oct 06, 2017 at 09:51:15AM +0200, Marcin Wojtas wrote:
> This patch introduces I2c description, using the new structures
> and template in MvHwDescLib. This change enables more flexible
> addition of multiple I2c controllers and also allows for
> removal of string PCD parsing. Update Armada 70x0 DB description
> and PortingGuide accordingly.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <[email protected]>
> ---
>  Platform/Marvell/Armada/Armada70x0.dsc             |  2 +-
>  Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.c   | 42 +++++++++++---------
>  Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf |  3 +-
>  Platform/Marvell/Include/Library/MvHwDescLib.h     | 25 ++++++++++++
>  Platform/Marvell/Marvell.dec                       |  2 +-
>  Silicon/Marvell/Documentation/PortingGuide.txt     |  4 +-
>  6 files changed, 54 insertions(+), 24 deletions(-)
> 
> diff --git a/Platform/Marvell/Armada/Armada70x0.dsc 
> b/Platform/Marvell/Armada/Armada70x0.dsc
> index 7b03744..d9d126d 100644
> --- a/Platform/Marvell/Armada/Armada70x0.dsc
> +++ b/Platform/Marvell/Armada/Armada70x0.dsc
> @@ -78,7 +78,7 @@
>    # I2C
>    gMarvellTokenSpaceGuid.PcdI2cSlaveAddresses|{ 0x50, 0x57, 0x60 }
>    gMarvellTokenSpaceGuid.PcdI2cSlaveBuses|{ 0x0, 0x0, 0x0 }
> -  gMarvellTokenSpaceGuid.PcdI2cBaseAddresses|L"0xF2701000;0xF2701100"
> +  gMarvellTokenSpaceGuid.PcdI2cControllers|{ 0x1, 0x1 }

Similarly to the previous patch, the above is a bit opaque.
I guess in this case, this is simply a boolean array saying whether a
specific controller is enabled or not?
If my interpretation is correct, could the Pcd be renamed
PcdI2cControllersEnabled?

/
    Leif

>    gMarvellTokenSpaceGuid.PcdEepromI2cAddresses|{ 0x50, 0x57 }
>    gMarvellTokenSpaceGuid.PcdEepromI2cBuses|{ 0x0, 0x0 }
>    gMarvellTokenSpaceGuid.PcdI2cClockFrequency|250000000
> diff --git a/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.c 
> b/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.c
> index fa79ebc..ff8006e 100755
> --- a/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.c
> +++ b/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.c
> @@ -42,12 +42,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
> DAMAGE.
>  #include <Library/DebugLib.h>
>  #include <Library/PcdLib.h>
>  #include <Library/UefiLib.h>
> -#include <Library/ParsePcdLib.h>
>  #include <Library/MemoryAllocationLib.h>
> +#include <Library/MvHwDescLib.h>
>  #include <Library/UefiBootServicesTableLib.h>
>  
>  #include "MvI2cDxe.h"
>  
> +DECLARE_A7K8K_I2C_TEMPLATE;
> +
>  STATIC MV_I2C_BAUD_RATE baud_rate;
>  
>  STATIC MV_I2C_DEVICE_PATH MvI2cDevicePathProtocol = {
> @@ -172,35 +174,39 @@ MvI2cInitialise (
>    IN EFI_SYSTEM_TABLE  *SystemTable
>    )
>  {
> +  MVHW_I2C_DESC *Desc = &mA7k8kI2cDescTemplate;
> +  UINT8 *I2cDeviceTable, Index;
>    EFI_STATUS Status;
> -  UINT32 BusCount;
> -  EFI_PHYSICAL_ADDRESS I2cBaseAddresses[PcdGet32 (PcdI2cBusCount)];
> -  INTN i;
>  
> -  BusCount = PcdGet32 (PcdI2cBusCount);
> -  if (BusCount == 0)
> -    return EFI_SUCCESS;
> +  /* Obtain table with enabled I2c devices */
> +  I2cDeviceTable = (UINT8 *)PcdGetPtr (PcdI2cControllers);
> +  if (I2cDeviceTable == NULL) {
> +    DEBUG ((DEBUG_ERROR, "Missing PcdI2cControllers\n"));
> +    return EFI_INVALID_PARAMETER;
> +  }
>  
> -  Status = ParsePcdString (
> -      (CHAR16 *) PcdGetPtr (PcdI2cBaseAddresses),
> -      BusCount,
> -      I2cBaseAddresses,
> -      NULL
> -      );
> -  if (EFI_ERROR(Status))
> -    return Status;
> +  if (PcdGetSize (PcdI2cControllers) > MVHW_MAX_I2C_DEVS) {
> +    DEBUG ((DEBUG_ERROR, "Wrong PcdI2cControllers format\n"));
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  /* Initialize enabled chips */
> +  for (Index = 0; Index < PcdGetSize (PcdI2cControllers); Index++) {
> +    if (!MVHW_DEV_ENABLED (I2c, Index)) {
> +      DEBUG ((DEBUG_ERROR, "Skip I2c chip %d\n", Index));
> +      continue;
> +    }
>  
> -  for (i = 0; i < BusCount; i++) {
>      Status = MvI2cInitialiseController(
>          ImageHandle,
>          SystemTable,
> -        I2cBaseAddresses[i]
> +        Desc->I2cBaseAddresses[Index]
>          );
>      if (EFI_ERROR(Status))
>        return Status;
>    }
>  
> -  return Status;
> +  return EFI_SUCCESS;
>  }
>  
>  STATIC
> diff --git a/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf 
> b/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf
> index 16374ef..c453b4f 100755
> --- a/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf
> +++ b/Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf
> @@ -55,7 +55,6 @@
>    UefiLib
>    UefiDriverEntryPoint
>    UefiBootServicesTableLib
> -  ParsePcdLib
>  
>  [Protocols]
>    gEfiI2cMasterProtocolGuid
> @@ -66,7 +65,7 @@
>  [Pcd]
>    gMarvellTokenSpaceGuid.PcdI2cSlaveAddresses
>    gMarvellTokenSpaceGuid.PcdI2cSlaveBuses
> -  gMarvellTokenSpaceGuid.PcdI2cBaseAddresses
> +  gMarvellTokenSpaceGuid.PcdI2cControllers
>    gMarvellTokenSpaceGuid.PcdI2cClockFrequency
>    gMarvellTokenSpaceGuid.PcdI2cBaudRate
>    gMarvellTokenSpaceGuid.PcdI2cBusCount
> diff --git a/Platform/Marvell/Include/Library/MvHwDescLib.h 
> b/Platform/Marvell/Include/Library/MvHwDescLib.h
> index 6a86865..e029b50 100644
> --- a/Platform/Marvell/Include/Library/MvHwDescLib.h
> +++ b/Platform/Marvell/Include/Library/MvHwDescLib.h
> @@ -60,6 +60,16 @@ typedef struct {
>  } MVHW_COMPHY_DESC;
>  
>  //
> +// I2C devices description template definition
> +//
> +#define MVHW_MAX_I2C_DEVS         4
> +
> +typedef struct {
> +  UINT8 I2cDevCount;
> +  UINTN I2cBaseAddresses[MVHW_MAX_I2C_DEVS];
> +} MVHW_I2C_DESC;
> +
> +//
>  // NonDiscoverable devices description template definition
>  //
>  #define MVHW_MAX_XHCI_DEVS         4
> @@ -130,6 +140,21 @@ MVHW_COMPHY_DESC mA7k8kComPhyDescTemplate = {\
>  }
>  
>  //
> +// Platform description of I2C devices
> +//
> +#define MVHW_CP0_I2C0_BASE       0xF2701000
> +#define MVHW_CP0_I2C1_BASE       0xF2701100
> +#define MVHW_CP1_I2C0_BASE       0xF4701000
> +#define MVHW_CP1_I2C1_BASE       0xF4701100
> +
> +#define DECLARE_A7K8K_I2C_TEMPLATE \
> +STATIC \
> +MVHW_I2C_DESC mA7k8kI2cDescTemplate = {\
> +  4,\
> +  { MVHW_CP0_I2C0_BASE, MVHW_CP0_I2C1_BASE, MVHW_CP1_I2C0_BASE, 
> MVHW_CP1_I2C1_BASE }\
> +}
> +
> +//
>  // Platform description of NonDiscoverable devices
>  //
>  #define MVHW_CP0_XHCI0_BASE        0xF2500000
> diff --git a/Platform/Marvell/Marvell.dec b/Platform/Marvell/Marvell.dec
> index fc00f1a..25a4258 100644
> --- a/Platform/Marvell/Marvell.dec
> +++ b/Platform/Marvell/Marvell.dec
> @@ -113,7 +113,7 @@
>    gMarvellTokenSpaceGuid.PcdI2cSlaveBuses|{ 0x0 }|VOID*|0x3000184
>    gMarvellTokenSpaceGuid.PcdEepromI2cAddresses|{ 0x0 }|VOID*|0x3000050
>    gMarvellTokenSpaceGuid.PcdEepromI2cBuses|{ 0x0 }|VOID*|0x3000185
> -  gMarvellTokenSpaceGuid.PcdI2cBaseAddresses|{ 0x0 }|VOID*|0x3000047
> +  gMarvellTokenSpaceGuid.PcdI2cControllers|{ 0x0 }|VOID*|0x3000047
>    gMarvellTokenSpaceGuid.PcdI2cClockFrequency|0|UINT32|0x3000048
>    gMarvellTokenSpaceGuid.PcdI2cBaudRate|0|UINT32|0x3000049
>    gMarvellTokenSpaceGuid.PcdI2cBusCount|0|UINT32|0x3000183
> diff --git a/Silicon/Marvell/Documentation/PortingGuide.txt 
> b/Silicon/Marvell/Documentation/PortingGuide.txt
> index 47a667d..1a30c46 100644
> --- a/Silicon/Marvell/Documentation/PortingGuide.txt
> +++ b/Silicon/Marvell/Documentation/PortingGuide.txt
> @@ -188,8 +188,8 @@ In order to enable driver on a new platform, following 
> steps need to be taken:
>               (buses to which accoring slaves are attached)
>       - gMarvellTokenSpaceGuid.PcdI2cBusCount|2
>               (number of SoC's I2C buses)
> -     - gMarvellTokenSpaceGuid.PcdI2cBaseAddresses|L"0xF2701000;0xF2701100"
> -             (base addresses of I2C controller buses)
> +     - gMarvellTokenSpaceGuid.PcdI2cControllers|{ 0x1, 0x1 }
> +             (array with used controllers)
>       - gMarvellTokenSpaceGuid.PcdI2cClockFrequency|200000000
>               (I2C host controller clock frequency)
>       - gMarvellTokenSpaceGuid.PcdI2cBaudRate|100000
> -- 
> 1.8.3.1
> 
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to