[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