From: Leif Lindholm <leif.lindholm@linaro.org>
To: Marcin Wojtas <mw@semihalf.com>
Cc: edk2-devel@lists.01.org, ard.biesheuvel@linaro.org,
nadavh@marvell.com, neta@marvell.com, kostap@marvell.com,
jinghua@marvell.com, jsd@semihalf.com
Subject: Re: [platforms: PATCH 1/5] Marvell/Library: ComPhyLib: Remove PCD string parsing
Date: Fri, 6 Oct 2017 16:52:15 +0100 [thread overview]
Message-ID: <20171006155215.g63kakcrvhx7ocra@bivouac.eciton.net> (raw)
In-Reply-To: <1507276278-3608-2-git-send-email-mw@semihalf.com>
On Fri, Oct 06, 2017 at 09:51:14AM +0200, Marcin Wojtas wrote:
> Simplify obtaining lane data, using arrays with direct enum values,
> rather than strings. This is another step to completely remove
> ParsePcdLib.
>
> This patch replaces string-based description of ComPhy lanes
> on Armada 70x0 DB with the enum values of type and speed.
> PortingGuide is updated accordingly.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> ---
> Platform/Marvell/Armada/Armada70x0.dsc | 11 +++-
> Platform/Marvell/Library/ComPhyLib/ComPhyLib.c | 65 ++++----------------
> Platform/Marvell/Library/ComPhyLib/ComPhyLib.h | 25 +++-----
> Platform/Marvell/Library/ComPhyLib/ComPhyLib.inf | 1 -
> Silicon/Marvell/Documentation/PortingGuide.txt | 62 ++++++++++++++-----
> 5 files changed, 77 insertions(+), 87 deletions(-)
>
> diff --git a/Platform/Marvell/Armada/Armada70x0.dsc b/Platform/Marvell/Armada/Armada70x0.dsc
> index 467dfa3..7b03744 100644
> --- a/Platform/Marvell/Armada/Armada70x0.dsc
> +++ b/Platform/Marvell/Armada/Armada70x0.dsc
> @@ -100,8 +100,15 @@
>
> #ComPhy
> gMarvellTokenSpaceGuid.PcdComPhyDevices|{ 0x1 }
> - gMarvellTokenSpaceGuid.PcdChip0ComPhyTypes|L"SGMII1;USB3_HOST0;SFI;SATA1;USB3_HOST1;PCIE2"
> - gMarvellTokenSpaceGuid.PcdChip0ComPhySpeeds|L"1250;5000;10310;5000;5000;5000"
> + # ComPhy0
> + # 0: SGMII1 1.25 Gbps
> + # 1: USB3_HOST0 5 Gbps
> + # 2: SFI 10.31 Gbps
> + # 3: SATA1 5 Gbps
> + # 4: USB3_HOST1 5 Gbps
> + # 5: PCIE2 5 Gbps
> + gMarvellTokenSpaceGuid.PcdChip0ComPhyTypes|{ 0xA, 0xE, 0x17, 0x6, 0xF, 0x3 }
> + gMarvellTokenSpaceGuid.PcdChip0ComPhySpeeds|{ 0x1, 0x6, 0xA, 0x6, 0x6, 0x6 }
So, I'm really pleased with this patchset, but these two lines above
are its weak spot.
I am not sure about the best way to deal with this, but some way of
getting human readable strings above would be ideal (even if it blows
the line length out of the water).
Could you create a dsc.inc (or .inc.dsc as suggested somewhere
recently) that holds only a [Defines] section declaring things like
COMPHY_SGMII1 = 0xA
COMPHY_1_25G = 0x1
And so on. (Basically all the ones defined in the document below.)
?
/
Leif
> #UtmiPhy
> gMarvellTokenSpaceGuid.PcdUtmiPhyCount|2
> diff --git a/Platform/Marvell/Library/ComPhyLib/ComPhyLib.c b/Platform/Marvell/Library/ComPhyLib/ComPhyLib.c
> index 3eb5d9f..bf21dca 100644
> --- a/Platform/Marvell/Library/ComPhyLib/ComPhyLib.c
> +++ b/Platform/Marvell/Library/ComPhyLib/ComPhyLib.c
> @@ -113,47 +113,6 @@ RegSetSilent16(
> MmioWrite16 (Addr, RegData);
> }
>
> -/* This function returns enum with SerDesType */
> -UINT32
> -ParseSerdesTypeString (
> - CHAR16* String
> - )
> -{
> - UINT32 i;
> -
> - if (String == NULL)
> - return COMPHY_TYPE_INVALID;
> -
> - for (i = 0; i < COMPHY_TYPE_MAX; i++) {
> - if (StrCmp (String, TypeStringTable[i]) == 0) {
> - return i;
> - }
> - }
> -
> - /* PCD string doesn't match any supported SerDes Type */
> - return COMPHY_TYPE_INVALID;
> -}
> -
> -/* This function converts SerDes speed in MHz to enum with SerDesSpeed */
> -UINT32
> -ParseSerdesSpeed (
> - UINT32 Value
> - )
> -{
> - UINT32 i;
> - UINT32 ValueTable [] = {0, 1250, 1500, 2500, 3000, 3125,
> - 5000, 5156, 6000, 6250, 10310};
> -
> - for (i = 0; i < COMPHY_SPEED_MAX; i++) {
> - if (Value == ValueTable[i]) {
> - return i;
> - }
> - }
> -
> - /* PCD SerDes speed value doesn't match any supported SerDes speed */
> - return COMPHY_SPEED_INVALID;
> -}
> -
> CHAR16 *
> GetTypeString (
> UINT32 Type
> @@ -182,7 +141,8 @@ GetSpeedString (
>
> VOID
> ComPhyPrint (
> - IN CHIP_COMPHY_CONFIG *PtrChipCfg
> + IN CHIP_COMPHY_CONFIG *PtrChipCfg,
> + IN UINT8 Index
> )
> {
> UINT32 Lane;
> @@ -191,7 +151,7 @@ ComPhyPrint (
> for (Lane = 0; Lane < PtrChipCfg->LanesCount; Lane++) {
> SpeedStr = GetSpeedString(PtrChipCfg->MapData[Lane].Speed);
> TypeStr = GetTypeString(PtrChipCfg->MapData[Lane].Type);
> - DEBUG((DEBUG_ERROR, "Comphy-%d: %-13s %-10s\n", Lane, TypeStr, SpeedStr));
> + DEBUG ((DEBUG_ERROR, "Comphy%d-%d: %-13s %-10s\n", Index, Lane, TypeStr, SpeedStr));
> }
>
> DEBUG((DEBUG_ERROR, "\n"));
> @@ -238,16 +198,16 @@ InitComPhyConfig (
> */
> switch (Id) {
> case 0:
> - GetComPhyPcd (ChipConfig, LaneData, 0);
> + GetComPhyPcd (LaneData, 0);
> break;
> case 1:
> - GetComPhyPcd (ChipConfig, LaneData, 1);
> + GetComPhyPcd (LaneData, 1);
> break;
> case 2:
> - GetComPhyPcd (ChipConfig, LaneData, 2);
> + GetComPhyPcd (LaneData, 2);
> break;
> case 3:
> - GetComPhyPcd (ChipConfig, LaneData, 3);
> + GetComPhyPcd (LaneData, 3);
> break;
> }
> }
> @@ -288,12 +248,9 @@ MvComPhyInit (
> /* Get the count of the SerDes of the specific chip */
> MaxComphyCount = PtrChipCfg->LanesCount;
> for (Lane = 0; Lane < MaxComphyCount; Lane++) {
> - /* Parse PCD with string indicating SerDes Type */
> - PtrChipCfg->MapData[Lane].Type =
> - ParseSerdesTypeString (LaneData[Index].TypeStr[Lane]);
> - PtrChipCfg->MapData[Lane].Speed =
> - ParseSerdesSpeed (LaneData[Index].SpeedValue[Lane]);
> - PtrChipCfg->MapData[Lane].Invert = (UINT32)LaneData[Index].InvFlag[Lane];
> + PtrChipCfg->MapData[Lane].Type = LaneData[Index].Type[Lane];
> + PtrChipCfg->MapData[Lane].Speed = LaneData[Index].SpeedValue[Lane];
> + PtrChipCfg->MapData[Lane].Invert = LaneData[Index].InvFlag[Lane];
>
> if ((PtrChipCfg->MapData[Lane].Speed == COMPHY_SPEED_INVALID) ||
> (PtrChipCfg->MapData[Lane].Speed == COMPHY_SPEED_ERROR) ||
> @@ -311,7 +268,7 @@ MvComPhyInit (
> return Status;
> }
>
> - ComPhyPrint (PtrChipCfg);
> + ComPhyPrint (PtrChipCfg, Index);
>
> /* PHY power UP sequence */
> PtrChipCfg->Init (PtrChipCfg);
> diff --git a/Platform/Marvell/Library/ComPhyLib/ComPhyLib.h b/Platform/Marvell/Library/ComPhyLib/ComPhyLib.h
> index 3898978..5899a4a 100644
> --- a/Platform/Marvell/Library/ComPhyLib/ComPhyLib.h
> +++ b/Platform/Marvell/Library/ComPhyLib/ComPhyLib.h
> @@ -43,7 +43,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> #include <Library/MvComPhyLib.h>
> #include <Library/IoLib.h>
> #include <Library/TimerLib.h>
> -#include <Library/ParsePcdLib.h>
>
> #define MAX_LANE_OPTIONS 10
>
> @@ -52,14 +51,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> #define GET_LANE_SPEED(id) PcdGetPtr(PcdChip##id##ComPhySpeeds)
> #define GET_LANE_INV(id) PcdGetPtr(PcdChip##id##ComPhyInvFlags)
>
> -#define FillLaneMap(chip_struct, lane_struct, id) { \
> - ParsePcdString((CHAR16 *) GET_LANE_TYPE(id), chip_struct[id].LanesCount, NULL, lane_struct[id].TypeStr); \
> - ParsePcdString((CHAR16 *) GET_LANE_SPEED(id), chip_struct[id].LanesCount, lane_struct[id].SpeedValue, NULL); \
> - ParsePcdString((CHAR16 *) GET_LANE_INV(id), chip_struct[id].LanesCount, lane_struct[id].InvFlag, NULL); \
> -}
> -
> -#define GetComPhyPcd(chip_struct, lane_struct, id) { \
> - FillLaneMap(chip_struct, lane_struct, id); \
> +#define GetComPhyPcd(lane_struct, id) { \
> + lane_struct[id].Type = (UINT8 *)GET_LANE_TYPE(id); \
> + lane_struct[id].SpeedValue = (UINT8 *)GET_LANE_SPEED(id); \
> + lane_struct[id].InvFlag = (UINT8 *)GET_LANE_SPEED(id); \
> }
>
> /***** ComPhy *****/
> @@ -573,15 +568,15 @@ typedef struct {
> } COMPHY_MUX_DATA;
>
> typedef struct {
> - UINT32 Type;
> - UINT32 Speed;
> - UINT32 Invert;
> + UINT8 Type;
> + UINT8 Speed;
> + UINT8 Invert;
> } COMPHY_MAP;
>
> typedef struct {
> - CHAR16 *TypeStr[MAX_LANE_OPTIONS];
> - UINTN SpeedValue[MAX_LANE_OPTIONS];
> - UINTN InvFlag[MAX_LANE_OPTIONS];
> + UINT8 *Type;
> + UINT8 *SpeedValue;
> + UINT8 *InvFlag;
> } PCD_LANE_MAP;
>
> typedef
> diff --git a/Platform/Marvell/Library/ComPhyLib/ComPhyLib.inf b/Platform/Marvell/Library/ComPhyLib/ComPhyLib.inf
> index e0f4634..c223fe5 100644
> --- a/Platform/Marvell/Library/ComPhyLib/ComPhyLib.inf
> +++ b/Platform/Marvell/Library/ComPhyLib/ComPhyLib.inf
> @@ -51,7 +51,6 @@
> MemoryAllocationLib
> PcdLib
> IoLib
> - ParsePcdLib
>
> [Sources.common]
> ComPhyLib.c
> diff --git a/Silicon/Marvell/Documentation/PortingGuide.txt b/Silicon/Marvell/Documentation/PortingGuide.txt
> index 83ebe9d..47a667d 100644
> --- a/Silicon/Marvell/Documentation/PortingGuide.txt
> +++ b/Silicon/Marvell/Documentation/PortingGuide.txt
> @@ -57,27 +57,59 @@ Every ComPhy PCD has <Num> part where <Num> stands for chip ID (order is not
> important, but configuration will be set for first PcdComPhyChipCount chips).
>
> Every chip has 3 ComPhy PCDs and three of them comprise per-board lanes
> -settings for this chip. Their format is unicode string, containing settings
> -for up to 10 lanes. Setting for each one is separated with semicolon.
> -These PCDs together describe outputs of PHY integrated in simple cihp.
> -Below is example for the first chip (Chip0).
> +settings for this chip. Their format is array of up to 10 values reflecting
> +defined numbers for SPEED/TYPE/INVERT, whose description can be found in:
>
> - - gMarvellTokenSpaceGuid.PcdChip0ComPhyTypes
> - (Unicode string indicating PHY types. Currently supported are:
> + OpenPlatformPkg/Platforms/Marvell/Library/ComPhyLib/ComPhyLib.h
>
> - { L"unconnected", L"PCIE0", L"PCIE1", L"PCIE2", L"PCIE3",
> - L"SATA0", L"SATA1", L"SATA2", L"SATA3", L"SGMII0",
> - L"SGMII1", L"SGMII2", L"SGMII3", L"QSGMII",
> - L"USB3_HOST0", L"USB3_HOST1", L"USB3_DEVICE",
> - L"XAUI0", L"XAUI1", L"XAUI2", L"XAUI3", L"RXAUI0",
> - L"RXAUI1", L"KR" } )
> + - gMarvellTokenSpaceGuid.PcdChip0ComPhyTypes
> + (Array of types - currently supported are:
> +
> + COMPHY_TYPE_PCIE0 1
> + COMPHY_TYPE_PCIE1 2
> + COMPHY_TYPE_PCIE2 3
> + COMPHY_TYPE_PCIE3 4
> + COMPHY_TYPE_SATA0 5
> + COMPHY_TYPE_SATA1 6
> + COMPHY_TYPE_SATA2 7
> + COMPHY_TYPE_SATA3 8
> + COMPHY_TYPE_SGMII0 9
> + COMPHY_TYPE_SGMII1 10
> + COMPHY_TYPE_SGMII2 11
> + COMPHY_TYPE_SGMII3 12
> + COMPHY_TYPE_QSGMII 13
> + COMPHY_TYPE_USB3_HOST0 14
> + COMPHY_TYPE_USB3_HOST1 15
> + COMPHY_TYPE_USB3_DEVICE 16
> + COMPHY_TYPE_XAUI0 17
> + COMPHY_TYPE_XAUI1 18
> + COMPHY_TYPE_XAUI2 19
> + COMPHY_TYPE_XAUI3 20
> + COMPHY_TYPE_RXAUI0 21
> + COMPHY_TYPE_RXAUI1 22
> + COMPHY_TYPE_SFI 23 )
>
> - gMarvellTokenSpaceGuid.PcdChip0ComPhySpeeds
> - (Indicates PHY speeds in MHz. Currently supported are:
> - { 1250, 1500, 2500, 3000, 3125, 5000, 6000, 6250, 1031 } )
> + (Array of speeds - currently supported are:
> +
> + COMPHY_SPEED_1_25G 1
> + COMPHY_SPEED_1_5G 2
> + COMPHY_SPEED_2_5G 3
> + COMPHY_SPEED_3G 4
> + COMPHY_SPEED_3_125G 5
> + COMPHY_SPEED_5G 6
> + COMPHY_SPEED_5_15625G 7
> + COMPHY_SPEED_6G 8
> + COMPHY_SPEED_6_25G 9
> + COMPHY_SPEED_10_3125G 10 )
>
> - gMarvellTokenSpaceGuid.PcdChip0ComPhyInvFlags
> - (Indicates lane polarity invert)
> + (Array of lane inversion types - currently supported are:
> +
> + COMPHY_POLARITY_NO_INVERT 0
> + COMPHY_POLARITY_TXD_INVERT 1
> + COMPHY_POLARITY_RXD_INVERT 2
> + COMPHY_POLARITY_ALL_INVERT 3 )
>
> Example
> -------
> --
> 1.8.3.1
>
next prev parent reply other threads:[~2017-10-06 15:48 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-06 7:51 [platforms: PATCH 0/5] Armada 7k/8k - ParsePcdLib removal Marcin Wojtas
2017-10-06 7:51 ` [platforms: PATCH 1/5] Marvell/Library: ComPhyLib: Remove PCD string parsing Marcin Wojtas
2017-10-06 15:52 ` Leif Lindholm [this message]
2017-10-06 19:22 ` Marcin Wojtas
2017-10-06 19:51 ` Leif Lindholm
2017-10-06 20:08 ` Marcin Wojtas
2017-10-07 14:17 ` Marcin Wojtas
2017-10-07 14:57 ` Leif Lindholm
2017-10-06 7:51 ` [platforms: PATCH 2/5] Marvell/Drivers: MvI2cDxe: Move devices description to MvHwDescLib Marcin Wojtas
2017-10-06 15:56 ` Leif Lindholm
2017-10-06 19:24 ` Marcin Wojtas
2017-10-06 7:51 ` [platforms: PATCH 3/5] Marvell/Library: UtmiLib: " Marcin Wojtas
2017-10-06 15:57 ` Leif Lindholm
2017-10-06 19:26 ` Marcin Wojtas
2017-10-06 19:57 ` Leif Lindholm
2017-10-06 7:51 ` [platforms: PATCH 4/5] Marvell/Drivers: Pp2Dxe: Rework PHY handling Marcin Wojtas
2017-10-06 16:02 ` Leif Lindholm
2017-10-06 19:30 ` Marcin Wojtas
2017-10-06 7:51 ` [platforms: PATCH 5/5] Platform/Marvell/Armada: Remove ParsePcdLib Marcin Wojtas
2017-10-06 16:02 ` Leif Lindholm
2017-10-06 14:29 ` [platforms: PATCH 0/5] Armada 7k/8k - ParsePcdLib removal Ard Biesheuvel
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=20171006155215.g63kakcrvhx7ocra@bivouac.eciton.net \
--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