diff mbox series

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

Message ID 1568805725-31612-1-git-send-email-pramod.kumar_1@nxp.com
State Not Applicable
Delegated to: Priyanka Jain
Headers show
Series [U-Boot,v1] armv8: fsl-layerscape: LS1044A/1048A: enable Only 1x 10GE port | expand

Commit Message

Pramod Kumar Sept. 18, 2019, 11:22 a.m. UTC
LS1044A/1048A is LS1088 personality which support only one 1x 10GE port.
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@nxp.com>
---
 arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c | 33 +++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

Comments

Priyanka Jain Sept. 25, 2019, 4:58 a.m. UTC | #1
>-----Original Message-----
>From: Pramod Kumar
>Sent: Wednesday, September 18, 2019 4:52 PM
>To: u-boot@lists.denx.de
>Cc: York Sun <york.sun@nxp.com>; Jagdish Gediya
><jagdish.gediya@nxp.com>; Priyanka Jain <priyanka.jain@nxp.com>; Pramod
>Kumar <pramod.kumar_1@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@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
diff mbox series

Patch

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;
+}
+
 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)