From 6bedf44714a145e09fddb8c5a03ada210b812ec9 Mon Sep 17 00:00:00 2001 From: Prabhakar Kushwaha Date: Thu, 23 Nov 2017 16:51:41 +0530 Subject: arm: Add support of updating dts before fix-up "ethernet" node fix-up for device tree happens before Linux boot. There can be requirement of updating "ethernet" node even before fix-up. So, add support of updating "ethernet" node. Signed-off-by: Prabhakar Kushwaha Reviewed-by: York Sun --- include/fdt_support.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include') diff --git a/include/fdt_support.h b/include/fdt_support.h index e0f908636c2..f00fadcddbf 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -290,4 +290,7 @@ int fdt_overlay_apply_verbose(void *fdt, void *fdto); int fdtdec_get_int(const void *blob, int node, const char *prop_name, int default_val); #endif +#ifdef CONFIG_FMAN_ENET +int fdt_update_ethernet_dt(void *blob); +#endif #endif /* ifndef __FDT_SUPPORT_H */ -- cgit v1.3.1 From 4ace304062e143da8ab7851d0c8570d61777ec06 Mon Sep 17 00:00:00 2001 From: Prabhakar Kushwaha Date: Thu, 23 Nov 2017 16:51:48 +0530 Subject: boards: ls1046ardb: disable unavailable "ethernet" node in dts Linux device tree contains "ethernet" node for all possible interface supported by SoC i.e. LS1046A. It is not necessary for a SerDes protocol to support all possible interface. So disable unavailable "ethernet" node in device tree. Also, enable FDT_SEQ_MACADDR_FROM_ENV to fetch MAC address sequentially from environment variables Signed-off-by: Prabhakar Kushwaha Reviewed-by: York Sun --- board/freescale/ls1046ardb/eth.c | 51 ++++++++++++++++++++++++++++++++++++++++ include/configs/ls1046ardb.h | 2 ++ 2 files changed, 53 insertions(+) (limited to 'include') diff --git a/board/freescale/ls1046ardb/eth.c b/board/freescale/ls1046ardb/eth.c index ac8bbec9a3c..9a07609820c 100644 --- a/board/freescale/ls1046ardb/eth.c +++ b/board/freescale/ls1046ardb/eth.c @@ -75,3 +75,54 @@ int board_eth_init(bd_t *bis) return pci_eth_init(bis); } + +#ifdef CONFIG_FMAN_ENET +int fdt_update_ethernet_dt(void *blob) +{ + u32 srds_s1; + int i, prop; + int offset, nodeoff; + const char *path; + struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + + srds_s1 = in_be32(&gur->rcwsr[4]) & + FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK; + srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT; + + /* Cycle through all aliases */ + for (prop = 0; ; prop++) { + const char *name; + + /* FDT might have been edited, recompute the offset */ + offset = fdt_first_property_offset(blob, + fdt_path_offset(blob, + "/aliases") + ); + /* Select property number 'prop' */ + for (i = 0; i < prop; i++) + offset = fdt_next_property_offset(blob, offset); + + if (offset < 0) + break; + + path = fdt_getprop_by_offset(blob, offset, &name, NULL); + nodeoff = fdt_path_offset(blob, path); + + switch (srds_s1) { + case 0x1133: + if (!strcmp(name, "ethernet0")) + fdt_status_disabled(blob, nodeoff); + + if (!strcmp(name, "ethernet1")) + fdt_status_disabled(blob, nodeoff); + break; + default: + printf("%s: Invalid SerDes prtcl 0x%x for LS1046ARDB\n", + __func__, srds_s1); + break; + } + } + + return 0; +} +#endif diff --git a/include/configs/ls1046ardb.h b/include/configs/ls1046ardb.h index 784894f0b7b..793e67506dc 100644 --- a/include/configs/ls1046ardb.h +++ b/include/configs/ls1046ardb.h @@ -195,6 +195,8 @@ #define FM1_10GEC1_PHY_ADDR 0x0 +#define FDT_SEQ_MACADDR_FROM_ENV + #define CONFIG_ETHPRIME "FM1@DTSEC3" #endif -- cgit v1.3.1