On Sun, Jun 17, 2018 at 10:11:59PM +0200, Marcin Wojtas wrote: > Introduce new callback that can provide information > about MDIO controllers to the Mdio driver. > > Extend ArmadaBoardDescLib with new structure MV_BOARD_MDIO_DESC, > for holding board specific data. > > 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/Include/Library/ArmadaBoardDescLib.h | 8 +++++ > Silicon/Marvell/Include/Protocol/BoardDesc.h | 8 +++++ > Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c | 36 > ++++++++++++++++++++ > 3 files changed, 52 insertions(+) > > diff --git a/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > b/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > index 32bd915..b11fa9d 100644 > --- a/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > +++ b/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > @@ -25,6 +25,14 @@ typedef struct { > } MV_BOARD_COMPHY_DESC; > > // > +// MDIO devices per-board description > +// > +typedef struct { > + MV_SOC_MDIO_DESC *SoC; > + UINTN MdioDevCount; > +} MV_BOARD_MDIO_DESC; > + > +// > // NonDiscoverableDevices per-board description > // > > diff --git a/Silicon/Marvell/Include/Protocol/BoardDesc.h > b/Silicon/Marvell/Include/Protocol/BoardDesc.h > index b6dac75..55297f5 100644 > --- a/Silicon/Marvell/Include/Protocol/BoardDesc.h > +++ b/Silicon/Marvell/Include/Protocol/BoardDesc.h > @@ -50,6 +50,13 @@ EFI_STATUS > > typedef > EFI_STATUS > +(EFIAPI *MV_BOARD_DESC_MDIO_GET) ( > + IN MARVELL_BOARD_DESC_PROTOCOL *This, > + IN OUT MV_BOARD_MDIO_DESC **MdioDesc > + ); > + > +typedef > +EFI_STATUS > (EFIAPI *MV_BOARD_DESC_AHCI_GET) ( > IN MARVELL_BOARD_DESC_PROTOCOL *This, > IN OUT MV_BOARD_AHCI_DESC **AhciDesc > @@ -92,6 +99,7 @@ VOID > struct _MARVELL_BOARD_DESC_PROTOCOL { > MV_BOARD_DESC_AHCI_GET BoardDescAhciGet; > MV_BOARD_DESC_COMPHY_GET BoardDescComPhyGet; > + MV_BOARD_DESC_MDIO_GET BoardDescMdioGet; > MV_BOARD_DESC_PP2_GET BoardDescPp2Get; > MV_BOARD_DESC_SDMMC_GET BoardDescSdMmcGet; > MV_BOARD_DESC_UTMI_GET BoardDescUtmiGet; > diff --git a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > index 6bbe40b..5dfc559 100644 > --- a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > +++ b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > @@ -100,6 +100,41 @@ MvBoardDescComPhyGet ( > > STATIC > EFI_STATUS > +MvBoardDescMdioGet ( > + IN MARVELL_BOARD_DESC_PROTOCOL *This, > + IN OUT MV_BOARD_MDIO_DESC **MdioDesc > + ) > +{ > + MV_BOARD_MDIO_DESC *BoardDesc; > + MV_SOC_MDIO_DESC *SoCDesc; > + UINTN MdioCount, Index; > + EFI_STATUS Status; > + > + /* Get SoC data about all available MDIO controllers */ > + Status = ArmadaSoCDescMdioGet (&SoCDesc, &MdioCount); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + /* Allocate and fill board description */ > + BoardDesc = AllocateZeroPool (MdioCount * sizeof (MV_BOARD_MDIO_DESC)); > + if (BoardDesc == NULL) { > + DEBUG ((DEBUG_ERROR, "%a: Cannot allocate memory\n", __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + > + for (Index = 0; Index < MdioCount; Index++) { > + BoardDesc[Index].SoC = &SoCDesc[Index]; > + } > + > + BoardDesc->MdioDevCount = MdioCount; > + *MdioDesc = BoardDesc; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > MvBoardDescAhciGet ( > IN MARVELL_BOARD_DESC_PROTOCOL *This, > IN OUT MV_BOARD_AHCI_DESC **AhciDesc > @@ -456,6 +491,7 @@ MvBoardDescInitProtocol ( > { > BoardDescProtocol->BoardDescAhciGet = MvBoardDescAhciGet; > BoardDescProtocol->BoardDescComPhyGet = MvBoardDescComPhyGet; > + BoardDescProtocol->BoardDescMdioGet = MvBoardDescMdioGet; > BoardDescProtocol->BoardDescPp2Get = MvBoardDescPp2Get; > BoardDescProtocol->BoardDescSdMmcGet = MvBoardDescSdMmcGet; > BoardDescProtocol->BoardDescUtmiGet = MvBoardDescUtmiGet; > -- > 2.7.4 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel