[U-Boot] [PATCH v1] armv8: fsl-layerscape: LS1044A/1048A: enable Only 1x 10GE port

Priyanka Jain priyanka.jain at nxp.com
Wed Sep 25 04:58:12 UTC 2019



>-----Original Message-----
>From: Pramod Kumar
>Sent: Wednesday, September 18, 2019 4:52 PM
>To: u-boot at lists.denx.de
>Cc: York Sun <york.sun at nxp.com>; Jagdish Gediya
><jagdish.gediya at nxp.com>; Priyanka Jain <priyanka.jain at nxp.com>; Pramod
>Kumar <pramod.kumar_1 at nxp.com>
>Subject: [PATCH v1] armv8: fsl-layerscape: LS1044A/1048A: enable Only 1x
>10GE port
>
>LS1044A/1048A is LS1088 personality which support only one 1x 10GE port.
Please correct grammar. LS1044A, LS1048A are LS1088A personalities
>MAC1 and MAC2 are associated with 1G SGMII, 2.5G SGMII, and XFI.
>Disable MAC1 to have only one 1x 10GE port
>
>Signed-off-by: Pramod Kumar <pramod.kumar_1 at nxp.com>
>---
> arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c | 33
>+++++++++++++++++++++-
> 1 file changed, 32 insertions(+), 1 deletion(-)
>
>diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c
>b/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c
>index 8e8b45a..11090e8 100644
>--- a/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c
>+++ b/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c
>@@ -5,6 +5,11 @@
>
> #include <common.h>
> #include <asm/arch/fsl_serdes.h>
>+#include <asm/arch/soc.h>
>+#include <asm/io.h>
>+#define PERSONALITY_LS1088A_TYPE		0
>+#define PERSONALITY_LS1044A_LS1048A_TYPE	1
>+#define PERSONALITY_INVALID_TYPE		-1
>
> struct serdes_config {
> 	u8 ip_protocol;
>@@ -32,6 +37,7 @@ static struct serdes_config serdes1_cfg_tbl[] = {
> 	{0x3A, {SGMII3, PCIE1, SGMII1, SGMII2 }, {3, 5, 3, 3 } },
> 		{}
> };
>+
> static struct serdes_config serdes2_cfg_tbl[] = {
> 	/* SerDes 2 */
> 	{0x0C, {PCIE1, PCIE1, PCIE1, PCIE1 }, {8, 8, 8, 8 } }, @@ -48,6 +54,22 @@
>static struct serdes_config *serdes_cfg_tbl[] = {
> 	serdes2_cfg_tbl,
> };
>
>+int check_personality_type(void)
>+{
>+	struct ccsr_gur __iomem *gur = (void
>*)(CONFIG_SYS_FSL_GUTS_ADDR);
>+	unsigned int  svr, ver;
>+	int personality;
>+
>+	svr = gur_in32(&gur->svr);
>+	ver = SVR_SOC_VER(svr);
>+	if (ver == SVR_LS1088A)
>+		personality =  PERSONALITY_LS1088A_TYPE;
>+	else
>+		personality = PERSONALITY_LS1044A_LS1048A_TYPE;
>+
>+	return personality;
>+}
>+
SVR_SOC_VER macro is to return personality type.
No need to add another function check_personality_type()
If you intend to check presence of MAC1, you might rename it to
something like soc_has_mac1 and return true/false accordingly.

--priyankajain
> int serdes_get_number(int serdes, int cfg)  {
> 	struct serdes_config *ptr;
>@@ -84,10 +106,19 @@ int serdes_get_number(int serdes, int cfg)  enum
>srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)  {
> 	struct serdes_config *ptr;
>+	int personality_type;
>
> 	if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
> 		return 0;
>-
>+	/*
>+	 * LS1044A/1048A  support only one XFI port
>+	 * Disable MAC1 for LS1044A/1048A
>+	 */
>+	if (!serdes && lane == 2) {
>+		personality_type = check_personality_type();
>+		if (personality_type == PERSONALITY_LS1044A_LS1048A_TYPE)
>+			return 0;
>+	}
> 	ptr = serdes_cfg_tbl[serdes];
> 	while (ptr->ip_protocol) {
> 		if (ptr->ip_protocol == cfg)
>--
>2.7.4



More information about the U-Boot mailing list