diff --git a/arch/arm/mach-mvebu/serdes/a38x/Makefile b/arch/arm/mach-mvebu/serdes/a38x/Makefile
index 1503da84041056c2b323b2ceba696576a5e08426..83b3c0f5d38d1c84b0cb51f7196c834971812f47 100644
--- a/arch/arm/mach-mvebu/serdes/a38x/Makefile
+++ b/arch/arm/mach-mvebu/serdes/a38x/Makefile
@@ -5,6 +5,5 @@
 obj-$(CONFIG_SPL_BUILD)	= ctrl_pex.o
 obj-$(CONFIG_SPL_BUILD)	+= high_speed_env_spec.o
 obj-$(CONFIG_SPL_BUILD)	+= high_speed_env_spec-38x.o
-obj-$(CONFIG_SPL_BUILD)	+= high_speed_topology_spec-38x.o
 obj-$(CONFIG_SPL_BUILD)	+= seq_exec.o
 obj-$(CONFIG_SPL_BUILD)	+= sys_env_lib.o
diff --git a/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec-38x.c b/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec-38x.c
index 5ff8567201385bb2c3c3d43f008ac77f0a3efbad..104e7e88d7428c9d65b0993fd9eef336b2754bc7 100644
--- a/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec-38x.c
+++ b/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec-38x.c
@@ -5,7 +5,6 @@
  */
 
 #include <common.h>
-#include <i2c.h>
 #include <spl.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
diff --git a/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c b/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c
index 23af7698fd10d51b53f053133191fb5bc30027ae..c95231b63eceecd12a2d3974e531b1c3ca40bca5 100644
--- a/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c
+++ b/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c
@@ -5,14 +5,12 @@
  */
 
 #include <common.h>
-#include <i2c.h>
 #include <spl.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/soc.h>
 
 #include "high_speed_env_spec.h"
-#include "high_speed_topology_spec.h"
 #include "sys_env_lib.h"
 #include "ctrl_pex.h"
 
@@ -1364,27 +1362,6 @@ enum serdes_seq serdes_type_and_speed_to_speed_seq(enum serdes_type serdes_type,
 	return seq_id;
 }
 
-/*
- * This is the weak default function for the Marvell evaluation or
- * development boarrds. Like the DB-88F6820-GP and others.
- * Custom boards should define this function in their board
- * code (board directory). And overwrite this default function
- * with this custom specific code.
- */
-__weak int hws_board_topology_load(struct serdes_map *serdes_map_array)
-{
-	u32 board_id = mv_board_id_get();
-	u32 board_id_index = mv_board_id_index_get(board_id);
-
-	DEBUG_INIT_FULL_S("\n### hws_board_topology_load ###\n");
-	/* getting board topology according to the board id */
-	DEBUG_INIT_FULL_S("Getting board topology according to the board id\n");
-
-	CHECK_STATUS(load_topology_func_arr[board_id_index] (serdes_map_array));
-
-	return MV_OK;
-}
-
 void print_topology_details(struct serdes_map *serdes_map_array)
 {
 	u32 lane_num;
@@ -1448,9 +1425,6 @@ int serdes_phy_config(void)
 		return MV_FAIL;
 	}
 
-	/* I2C init */
-	i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
-
 	/* Board topology load */
 	DEBUG_INIT_FULL_S
 	    ("ctrl_high_speed_serdes_phy_config: Loading board topology..\n");
diff --git a/arch/arm/mach-mvebu/serdes/a38x/high_speed_topology_spec-38x.c b/arch/arm/mach-mvebu/serdes/a38x/high_speed_topology_spec-38x.c
deleted file mode 100644
index 5f2c3eb308f42c2686ee01aaec519b693c267d9b..0000000000000000000000000000000000000000
--- a/arch/arm/mach-mvebu/serdes/a38x/high_speed_topology_spec-38x.c
+++ /dev/null
@@ -1,1009 +0,0 @@
-/*
- * Copyright (C) Marvell International Ltd. and its affiliates
- *
- * SPDX-License-Identifier:	GPL-2.0
- */
-
-#include <common.h>
-#include <i2c.h>
-#include <spl.h>
-#include <asm/io.h>
-#include <asm/arch/cpu.h>
-#include <asm/arch/soc.h>
-
-#include "high_speed_topology_spec.h"
-#include "sys_env_lib.h"
-
-#ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
-/*
- * This is an example implementation for this custom board
- * specific function
- */
-static struct serdes_map custom_board_topology_config[] = {
-	/* Customer Board Topology - reference from Marvell DB-GP board */
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SATA3, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-int hws_board_topology_load(struct serdes_map *serdes_map_array)
-{
-	serdes_map_array = custom_board_topology_config;
-}
-#endif
-
-load_topology_func_ptr load_topology_func_arr[] = {
-	load_topology_rd,	/* RD NAS */
-	load_topology_db,	/* 6820 DB-BP (A38x) */
-	load_topology_rd,	/* RD AP */
-	load_topology_db_ap,	/* DB AP */
-	load_topology_db_gp,	/* DB GP */
-	load_topology_db_381,	/* 6821 DB-BP (A381) */
-	load_topology_db_amc,	/* DB-AMC */
-};
-
-/*****************************************/
-/** Load topology - Marvell 380 DB - BP **/
-/*****************************************/
-/* Configuration options */
-struct serdes_map db_config_default[MAX_SERDES_LANES] = {
-	{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{SATA3, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{USB3_HOST0, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_config_slm1363_c[MAX_SERDES_LANES] = {
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{PEX3, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-};
-
-struct serdes_map db_config_slm1363_d[MAX_SERDES_LANES] = {
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	{PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	{PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	{PEX3, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	{USB3_HOST0, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_config_slm1363_e[MAX_SERDES_LANES] = {
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{USB3_HOST0, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_config_slm1363_f[MAX_SERDES_LANES] = {
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{PEX3, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_config_slm1364_d[MAX_SERDES_LANES] = {
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII0, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII2, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_config_slm1364_e[MAX_SERDES_LANES] = {
-	{SGMII0, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII2, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0}
-};
-
-struct serdes_map db_config_slm1364_f[MAX_SERDES_LANES] = {
-	{SGMII0, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{SGMII2, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	{DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0, 0},
-	{PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0}
-};
-
-/*************************************************************************/
-/** The following structs are mapping for DB board 'SatR' configuration **/
-/*************************************************************************/
-struct serdes_map db_satr_config_lane1[SATR_DB_LANE1_MAX_OPTIONS] = {
-	/* 0 */ {DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 1 */ {PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 2 */ {SATA0, SERDES_SPEED_3_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 3 */ {SGMII0, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 4 */ {SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 5 */ {USB3_HOST0, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 6 */ {QSGMII, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_satr_config_lane2[SATR_DB_LANE2_MAX_OPTIONS] = {
-	/* 0 */ {DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 1 */ {PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 2 */ {SATA1, SERDES_SPEED_3_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 3 */ {SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0}
-};
-
-/*******************************************************/
-/* Configuration options DB ****************************/
-/* mapping from TWSI address data to configuration map */
-/*******************************************************/
-struct serdes_map *topology_config_db[] = {
-	db_config_slm1363_c,
-	db_config_slm1363_d,
-	db_config_slm1363_e,
-	db_config_slm1363_f,
-	db_config_slm1364_d,
-	db_config_slm1364_e,
-	db_config_slm1364_f,
-	db_config_default
-};
-
-/*************************************/
-/** Load topology - Marvell DB - AP **/
-/*************************************/
-struct serdes_map db_ap_config_default[MAX_SERDES_LANES] = {
-	/* 0 */ {PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 1 */ {SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 2 */ {PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 3 */ {SGMII2, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 4 */ {USB3_HOST0, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 5 */ {PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0}
-};
-
-/*************************************/
-/** Load topology - Marvell DB - GP **/
-/*************************************/
-struct serdes_map db_gp_config_default[MAX_SERDES_LANES] = {
-	/* 0 */ {PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	/* 1 */ {SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	/* 2 */ {SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	/* 3 */ {SATA3, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	/* 4 */ {SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
-	/* 5 */ {USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0}
-};
-
-struct serdes_map db_amc_config_default[MAX_SERDES_LANES] = {
-	/* 0 */ {PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	/* 1 */ {PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	/* 2 */ {PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	/* 3 */ {PEX3, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X4, 0, 0},
-	/* 4 */ {SGMII1, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-	/* 5 */ {SGMII2, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 0,
-		 0},
-};
-
-/*****************************************/
-/** Load topology - Marvell 381 DB - BP **/
-/*****************************************/
-/* Configuration options */
-struct serdes_map db381_config_default[MAX_SERDES_LANES] = {
-	{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 1, 1},
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{PEX1, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
-};
-
-struct serdes_map db_config_slm1427[MAX_SERDES_LANES] = {
-	{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 1, 1},
-	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 1, 1},
-	{SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 1, 1},
-	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 1, 1}
-};
-
-struct serdes_map db_config_slm1426[MAX_SERDES_LANES] = {
-	{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 1, 1},
-	{USB3_HOST0, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 1, 1},
-	{SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 1, 1},
-	{SGMII2, SERDES_SPEED_3_125_GBPS, SERDES_DEFAULT_MODE, 1, 1}
-};
-
-/*
- * this array must be aligned with enum topology_config_db381 enum,
- * every update to this array requires update to enum topology_config_db381
- * enum
- */
-struct serdes_map *topology_config_db_381[] = {
-	db_config_slm1427,
-	db_config_slm1426,
-	db381_config_default,
-};
-
-u8 topology_config_db_mode_get(void)
-{
-	u8 mode;
-
-	DEBUG_INIT_FULL_S("\n### topology_config_db_mode_get ###\n");
-
-	/* Default - return DB_CONFIG_DEFAULT */
-
-	if (!i2c_read(DB_GET_MODE_SLM1363_ADDR, 0, 1, &mode, 1)) {
-		switch (mode & 0xf) {
-		case 0xc:
-			DEBUG_INIT_S("\nInit DB board SLM 1363 C topology\n");
-			return DB_CONFIG_SLM1363_C;
-		case 0xd:
-			DEBUG_INIT_S("\nInit DB board SLM 1363 D topology\n");
-			return DB_CONFIG_SLM1363_D;
-		case 0xe:
-			DEBUG_INIT_S("\nInit DB board SLM 1363 E topology\n");
-			return DB_CONFIG_SLM1363_E;
-		case 0xf:
-			DEBUG_INIT_S("\nInit DB board SLM 1363 F topology\n");
-			return DB_CONFIG_SLM1363_F;
-		default:	/* not the right module */
-			break;
-		}
-	}
-
-	/* SLM1364 Module */
-	if (i2c_read(DB_GET_MODE_SLM1364_ADDR, 0, 1, &mode, 1)) {
-		DEBUG_INIT_S("\nInit DB board default topology\n");
-		return DB_CONFIG_DEFAULT;
-	}
-
-	switch (mode & 0xf) {
-	case 0xd:
-		DEBUG_INIT_S("\nInit DB board SLM 1364 D topology\n");
-		return DB_CONFIG_SLM1364_D;
-	case 0xe:
-		DEBUG_INIT_S("\nInit DB board SLM 1364 E topology\n");
-		return DB_CONFIG_SLM1364_E;
-	case 0xf:
-		DEBUG_INIT_S("\nInit DB board SLM 1364 F topology\n");
-		return DB_CONFIG_SLM1364_F;
-	default:		/* Default configuration */
-		DEBUG_INIT_S("\nInit DB board default topology\n");
-		return DB_CONFIG_DEFAULT;
-	}
-}
-
-u8 topology_config_db_381_mode_get(void)
-{
-	u8 mode;
-
-	DEBUG_INIT_FULL_S("\n### topology_config_db_381_mode_get ###\n");
-
-	if (!i2c_read(DB381_GET_MODE_SLM1426_1427_ADDR, 0, 2, &mode, 1)) {
-		switch (mode & 0xf) {
-		case 0x1:
-			DEBUG_INIT_S("\nInit DB-381 board SLM 1427 topology\n");
-			return DB_CONFIG_SLM1427;
-		case 0x2:
-			DEBUG_INIT_S("\nInit DB-381 board SLM 1426 topology\n");
-			return DB_CONFIG_SLM1426;
-		default:	/* not the right module */
-			break;
-		}
-	}
-
-	/* in case not detected any supported module, use default topology */
-	DEBUG_INIT_S("\nInit DB-381 board default topology\n");
-	return DB_381_CONFIG_DEFAULT;
-}
-
-/*
- * Read SatR field 'sgmiispeed' and update lane topology SGMII entries
- * speed setup
- */
-int update_topology_sgmii_speed(struct serdes_map *serdes_map_array)
-{
-	u32 serdes_type, lane_num;
-	u8 config_val;
-
-	/* Update SGMII speed settings by 'sgmiispeed' SatR value */
-	for (lane_num = 0; lane_num < hws_serdes_get_max_lane(); lane_num++) {
-		serdes_type = serdes_map_array[lane_num].serdes_type;
-		/*Read SatR configuration for SGMII speed */
-		if ((serdes_type == SGMII0) || (serdes_type == SGMII1) ||
-		    (serdes_type == SGMII2)) {
-			/* Read SatR 'sgmiispeed' value */
-			if (i2c_read(EEPROM_I2C_ADDR, 0, 2, &config_val, 1)) {
-				printf("%s: TWSI Read of 'sgmiispeed' failed\n",
-				       __func__);
-				return MV_FAIL;
-			}
-
-			if (0 == (config_val & 0x40)) {
-				serdes_map_array[lane_num].serdes_speed =
-					SERDES_SPEED_1_25_GBPS;
-			} else {
-				serdes_map_array[lane_num].serdes_speed =
-					SERDES_SPEED_3_125_GBPS;
-			}
-		}
-	}
-	return MV_OK;
-}
-
-struct serdes_map default_lane = {
-	DEFAULT_SERDES, LAST_SERDES_SPEED, SERDES_DEFAULT_MODE
-};
-int is_custom_topology = 0;	/* indicate user of non-default topology */
-
-/*
- * Read SatR fields (dbserdes1/2 , gpserdes1/2/5) and update lane
- * topology accordingly
- */
-int update_topology_satr(struct serdes_map *serdes_map_array)
-{
-	u8 config_val, lane_select, i;
-	u32 board_id = mv_board_id_get();
-
-	switch (board_id) {
-	case DB_68XX_ID:	/* read 'dbserdes1' & 'dbserdes2' */
-	case DB_BP_6821_ID:
-		if (i2c_read(EEPROM_I2C_ADDR, 1, 2, &config_val, 1)) {
-			printf("%s: TWSI Read of 'dbserdes1/2' failed\n",
-			       __func__);
-			return MV_FAIL;
-		}
-
-		/* Lane #1 */
-		lane_select = (config_val & SATR_DB_LANE1_CFG_MASK) >>
-			SATR_DB_LANE1_CFG_OFFSET;
-		if (lane_select >= SATR_DB_LANE1_MAX_OPTIONS) {
-			printf("\n\%s: Error: invalid value for SatR field 'dbserdes1' (%x)\n",
-			       __func__, lane_select);
-			printf("\t_skipping Topology update (run 'SatR write default')\n");
-			return MV_FAIL;
-		}
-
-		/*
-		 * If modified default serdes_type for lane#1, update
-		 * topology and mark it as custom
-		 */
-		if (serdes_map_array[1].serdes_type !=
-		    db_satr_config_lane1[lane_select].serdes_type) {
-			serdes_map_array[1] = db_satr_config_lane1[lane_select];
-			is_custom_topology = 1;
-			/* DB 381/2 board has inverted SerDes polarity */
-			if (board_id == DB_BP_6821_ID)
-				serdes_map_array[1].swap_rx =
-					serdes_map_array[1].swap_tx = 1;
-		}
-
-		/* Lane #2 */
-		lane_select = (config_val & SATR_DB_LANE2_CFG_MASK) >>
-			SATR_DB_LANE2_CFG_OFFSET;
-		if (lane_select >= SATR_DB_LANE2_MAX_OPTIONS) {
-			printf("\n\%s: Error: invalid value for SatR field 'dbserdes2' (%x)\n",
-			       __func__, lane_select);
-			printf("\t_skipping Topology update (run 'SatR write default')\n");
-			return MV_FAIL;
-		}
-
-		/*
-		 * If modified default serdes_type for lane@2, update
-		 * topology and mark it as custom
-		 */
-		if (serdes_map_array[2].serdes_type !=
-		    db_satr_config_lane2[lane_select].serdes_type) {
-			serdes_map_array[2] = db_satr_config_lane2[lane_select];
-			is_custom_topology = 1;
-			/* DB 381/2 board has inverted SerDes polarity */
-			if (board_id == DB_BP_6821_ID)
-				serdes_map_array[2].swap_rx =
-					serdes_map_array[2].swap_tx = 1;
-		}
-
-		if (is_custom_topology == 1) {
-			/*
-			 * Check for conflicts with detected lane #1 and
-			 * lane #2 (Disable conflicted lanes)
-			 */
-			for (i = 0; i < hws_serdes_get_max_lane(); i++) {
-				if (i != 1 && serdes_map_array[1].serdes_type ==
-				    serdes_map_array[i].serdes_type) {
-					printf("\t_lane #%d Type conflicts with Lane #1 (Lane #%d disabled)\n",
-					       i, i);
-					serdes_map_array[i] =
-						db_satr_config_lane1[0];
-				}
-
-				if (i != 2 &&
-				    serdes_map_array[2].serdes_type ==
-				    serdes_map_array[i].serdes_type) {
-					printf("\t_lane #%d Type conflicts with Lane #2 (Lane #%d disabled)\n",
-					       i, i);
-					serdes_map_array[i] =
-						db_satr_config_lane1[0];
-				}
-			}
-		}
-
-		break;		/* case DB_68XX_ID */
-	case DB_GP_68XX_ID:	/* read 'gpserdes1' & 'gpserdes2' */
-		if (i2c_read(EEPROM_I2C_ADDR, 2, 2, &config_val, 1)) {
-			printf("%s: TWSI Read of 'gpserdes1/2' failed\n",
-			       __func__);
-			return MV_FAIL;
-		}
-
-		/*
-		 * Lane #1:
-		 * lane_select = 0 --> SATA0,
-		 * lane_select = 1 --> PCIe0 (mini PCIe)
-		 */
-		lane_select = (config_val & SATR_GP_LANE1_CFG_MASK) >>
-			SATR_GP_LANE1_CFG_OFFSET;
-		if (lane_select == 1) {
-			serdes_map_array[1].serdes_mode = PEX0;
-			serdes_map_array[1].serdes_speed = SERDES_SPEED_5_GBPS;
-			serdes_map_array[1].serdes_type = PEX_ROOT_COMPLEX_X1;
-			/*
-			 * If lane 1 is set to PCIe0 --> disable PCIe0
-			 * on lane 0
-			 */
-			serdes_map_array[0] = default_lane;
-			/* indicate user of non-default topology */
-			is_custom_topology = 1;
-		}
-		printf("Lane 1 detection: %s\n",
-		       lane_select ? "PCIe0 (mini PCIe)" : "SATA0");
-
-		/*
-		 * Lane #2:
-		 * lane_select = 0 --> SATA1,
-		 * lane_select = 1 --> PCIe1 (mini PCIe)
-		 */
-		lane_select = (config_val & SATR_GP_LANE2_CFG_MASK) >>
-			SATR_GP_LANE2_CFG_OFFSET;
-		if (lane_select == 1) {
-			serdes_map_array[2].serdes_type = PEX1;
-			serdes_map_array[2].serdes_speed = SERDES_SPEED_5_GBPS;
-			serdes_map_array[2].serdes_mode = PEX_ROOT_COMPLEX_X1;
-			/* indicate user of non-default topology */
-			is_custom_topology = 1;
-		}
-		printf("Lane 2 detection: %s\n",
-		       lane_select ? "PCIe1 (mini PCIe)" : "SATA1");
-		break;		/* case DB_GP_68XX_ID */
-	}
-
-	if (is_custom_topology)
-		printf("\nDetected custom SerDes topology (to restore default run 'SatR write default')\n\n");
-
-	return MV_OK;
-}
-
-/*
- * hws_update_device_toplogy
- * DESCRIPTION: Update the default board topology for specific device Id
- * INPUT:
- *	topology_config_ptr - pointer to the Serdes mapping
- *	topology_mode - topology mode (index)
- * OUTPUT: None
- * RRETURNS:
- *	MV_OK - if updating the board topology success
- *	MV_BAD_PARAM - if the input parameter is wrong
- */
-int hws_update_device_toplogy(struct serdes_map *topology_config_ptr,
-			      enum topology_config_db topology_mode)
-{
-	u32 dev_id = sys_env_device_id_get();
-	u32 board_id = mv_board_id_get();
-
-	switch (topology_mode) {
-	case DB_CONFIG_DEFAULT:
-		switch (dev_id) {
-		case MV_6810:
-			/*
-			 * DB-AP : default for Lane3=SGMII2 -->
-			 * 6810 supports only 2 SGMII interfaces:
-			 * lane 3 disabled
-			 */
-			if (board_id == DB_AP_68XX_ID) {
-				printf("Device 6810 supports only 2 SGMII interfaces: SGMII-2 @ lane3 disabled\n");
-				topology_config_ptr[3] = default_lane;
-			}
-
-			/*
-			 * 6810 has only 4 SerDes and the forth one is
-			 * Serdes number 5 (i.e. Serdes 4 is not connected),
-			 * therefore we need to copy SerDes 5 configuration
-			 * to SerDes 4
-			 */
-			printf("Device 6810 does not supports SerDes Lane #4: replaced topology entry with lane #5\n");
-			topology_config_ptr[4] = topology_config_ptr[5];
-
-			/*
-			 * No break between cases since the 1st
-			 * 6820 limitation apply on 6810
-			 */
-		case MV_6820:
-			/*
-			 * DB-GP & DB-BP: default for Lane3=SATA3 -->
-			 * 6810/20 supports only 2 SATA interfaces:
-			 * lane 3 disabled
-			 */
-			if ((board_id == DB_68XX_ID) ||
-			    (board_id == DB_GP_68XX_ID)) {
-				printf("Device 6810/20 supports only 2 SATA interfaces: SATA Port 3 @ lane3 disabled\n");
-				topology_config_ptr[3] = default_lane;
-			}
-			/*
-			 * DB-GP on 6820 only: default for Lane4=SATA2
-			 * --> 6820 supports only 2 SATA interfaces:
-			 * lane 3 disabled
-			 */
-			if (board_id == DB_GP_68XX_ID && dev_id == MV_6820) {
-				printf("Device 6820 supports only 2 SATA interfaces: SATA Port 2 @ lane4 disabled\n");
-				topology_config_ptr[4] = default_lane;
-			}
-			break;
-		default:
-			break;
-		}
-		break;
-
-	default:
-		printf("sys_env_update_device_toplogy: selected topology is not supported by this routine\n");
-		break;
-	}
-
-	return MV_OK;
-}
-
-int load_topology_db_381(struct serdes_map *serdes_map_array)
-{
-	u32 lane_num;
-	u8 topology_mode;
-	struct serdes_map *topology_config_ptr;
-	u8 twsi_data;
-	u8 usb3_host0_or_device = 0, usb3_host1_or_device = 0;
-
-	printf("\nInitialize DB-88F6821-BP board topology\n");
-
-	/* Getting the relevant topology mode (index) */
-	topology_mode = topology_config_db_381_mode_get();
-	topology_config_ptr = topology_config_db_381[topology_mode];
-
-	/* Read USB3.0 mode: HOST/DEVICE */
-	if (load_topology_usb_mode_get(&twsi_data) == MV_OK) {
-		usb3_host0_or_device = (twsi_data & 0x1);
-		/* Only one USB3 device is enabled */
-		if (usb3_host0_or_device == 0)
-			usb3_host1_or_device = ((twsi_data >> 1) & 0x1);
-	}
-
-	/* Updating the topology map */
-	for (lane_num = 0; lane_num < hws_serdes_get_max_lane(); lane_num++) {
-		serdes_map_array[lane_num].serdes_mode =
-			topology_config_ptr[lane_num].serdes_mode;
-		serdes_map_array[lane_num].serdes_speed =
-			topology_config_ptr[lane_num].serdes_speed;
-		serdes_map_array[lane_num].serdes_type =
-			topology_config_ptr[lane_num].serdes_type;
-		serdes_map_array[lane_num].swap_rx =
-			topology_config_ptr[lane_num].swap_rx;
-		serdes_map_array[lane_num].swap_tx =
-			topology_config_ptr[lane_num].swap_tx;
-
-		/* Update USB3 device if needed */
-		if (usb3_host0_or_device == 1 &&
-		    serdes_map_array[lane_num].serdes_type == USB3_HOST0)
-			serdes_map_array[lane_num].serdes_type = USB3_DEVICE;
-
-		if (usb3_host1_or_device == 1 &&
-		    serdes_map_array[lane_num].serdes_type == USB3_HOST1)
-			serdes_map_array[lane_num].serdes_type = USB3_DEVICE;
-	}
-
-	/* If not detected any SerDes Site module, read 'SatR' lane setup */
-	if (topology_mode == DB_381_CONFIG_DEFAULT)
-		update_topology_satr(serdes_map_array);
-
-	/* update 'sgmiispeed' settings */
-	update_topology_sgmii_speed(serdes_map_array);
-
-	return MV_OK;
-}
-
-int load_topology_db(struct serdes_map *serdes_map_array)
-{
-	u32 lane_num;
-	u8 topology_mode;
-	struct serdes_map *topology_config_ptr;
-	u8 twsi_data;
-	u8 usb3_host0_or_device = 0, usb3_host1_or_device = 0;
-
-	printf("\nInitialize DB-88F6820-BP board topology\n");
-
-	/* Getting the relevant topology mode (index) */
-	topology_mode = topology_config_db_mode_get();
-
-	if (topology_mode == DB_NO_TOPOLOGY)
-		topology_mode = DB_CONFIG_DEFAULT;
-
-	topology_config_ptr = topology_config_db[topology_mode];
-
-	/* Update the default board topology device flavours */
-	CHECK_STATUS(hws_update_device_toplogy
-		     (topology_config_ptr, topology_mode));
-
-	/* Read USB3.0 mode: HOST/DEVICE */
-	if (load_topology_usb_mode_get(&twsi_data) == MV_OK) {
-		usb3_host0_or_device = (twsi_data & 0x1);
-		/* Only one USB3 device is enabled */
-		if (usb3_host0_or_device == 0)
-			usb3_host1_or_device = ((twsi_data >> 1) & 0x1);
-	}
-
-	/* Updating the topology map */
-	for (lane_num = 0; lane_num < hws_serdes_get_max_lane(); lane_num++) {
-		serdes_map_array[lane_num].serdes_mode =
-			topology_config_ptr[lane_num].serdes_mode;
-		serdes_map_array[lane_num].serdes_speed =
-			topology_config_ptr[lane_num].serdes_speed;
-		serdes_map_array[lane_num].serdes_type =
-			topology_config_ptr[lane_num].serdes_type;
-		serdes_map_array[lane_num].swap_rx =
-			topology_config_ptr[lane_num].swap_rx;
-		serdes_map_array[lane_num].swap_tx =
-			topology_config_ptr[lane_num].swap_tx;
-
-		/*
-		 * Update USB3 device if needed - relevant for
-		 * lane 3,4,5 only
-		 */
-		if (lane_num >= 3) {
-			if ((serdes_map_array[lane_num].serdes_type ==
-			     USB3_HOST0) && (usb3_host0_or_device == 1))
-				serdes_map_array[lane_num].serdes_type =
-					USB3_DEVICE;
-
-			if ((serdes_map_array[lane_num].serdes_type ==
-			     USB3_HOST1) && (usb3_host1_or_device == 1))
-				serdes_map_array[lane_num].serdes_type =
-					USB3_DEVICE;
-		}
-	}
-
-	/* If not detected any SerDes Site module, read 'SatR' lane setup */
-	if (topology_mode == DB_CONFIG_DEFAULT)
-		update_topology_satr(serdes_map_array);
-
-	/* update 'sgmiispeed' settings */
-	update_topology_sgmii_speed(serdes_map_array);
-
-	return MV_OK;
-}
-
-int load_topology_db_ap(struct serdes_map *serdes_map_array)
-{
-	u32 lane_num;
-	struct serdes_map *topology_config_ptr;
-
-	DEBUG_INIT_FULL_S("\n### load_topology_db_ap ###\n");
-
-	printf("\nInitialize DB-AP board topology\n");
-	topology_config_ptr = db_ap_config_default;
-
-	/* Update the default board topology device flavours */
-	CHECK_STATUS(hws_update_device_toplogy
-		     (topology_config_ptr, DB_CONFIG_DEFAULT));
-
-	/* Updating the topology map */
-	for (lane_num = 0; lane_num < hws_serdes_get_max_lane(); lane_num++) {
-		serdes_map_array[lane_num].serdes_mode =
-			topology_config_ptr[lane_num].serdes_mode;
-		serdes_map_array[lane_num].serdes_speed =
-			topology_config_ptr[lane_num].serdes_speed;
-		serdes_map_array[lane_num].serdes_type =
-			topology_config_ptr[lane_num].serdes_type;
-		serdes_map_array[lane_num].swap_rx =
-			topology_config_ptr[lane_num].swap_rx;
-		serdes_map_array[lane_num].swap_tx =
-			topology_config_ptr[lane_num].swap_tx;
-	}
-
-	update_topology_sgmii_speed(serdes_map_array);
-
-	return MV_OK;
-}
-
-int load_topology_db_gp(struct serdes_map *serdes_map_array)
-{
-	u32 lane_num;
-	struct serdes_map *topology_config_ptr;
-	int is_sgmii = 0;
-
-	DEBUG_INIT_FULL_S("\n### load_topology_db_gp ###\n");
-
-	topology_config_ptr = db_gp_config_default;
-
-	printf("\nInitialize DB-GP board topology\n");
-
-	/* check S@R: if lane 5 is USB3 or SGMII */
-	if (load_topology_rd_sgmii_usb(&is_sgmii) != MV_OK)
-		printf("%s: TWSI Read failed - Loading Default Topology\n",
-		       __func__);
-	else {
-		topology_config_ptr[5].serdes_type =
-			is_sgmii ? SGMII2 : USB3_HOST1;
-		topology_config_ptr[5].serdes_speed = is_sgmii ?
-			SERDES_SPEED_3_125_GBPS : SERDES_SPEED_5_GBPS;
-		topology_config_ptr[5].serdes_mode = SERDES_DEFAULT_MODE;
-	}
-
-	/* Update the default board topology device flavours */
-	CHECK_STATUS(hws_update_device_toplogy
-		     (topology_config_ptr, DB_CONFIG_DEFAULT));
-
-	/* Updating the topology map */
-	for (lane_num = 0; lane_num < hws_serdes_get_max_lane(); lane_num++) {
-		serdes_map_array[lane_num].serdes_mode =
-			topology_config_ptr[lane_num].serdes_mode;
-		serdes_map_array[lane_num].serdes_speed =
-			topology_config_ptr[lane_num].serdes_speed;
-		serdes_map_array[lane_num].serdes_type =
-			topology_config_ptr[lane_num].serdes_type;
-		serdes_map_array[lane_num].swap_rx =
-			topology_config_ptr[lane_num].swap_rx;
-		serdes_map_array[lane_num].swap_tx =
-			topology_config_ptr[lane_num].swap_tx;
-	}
-
-	/*
-	 * Update 'gpserdes1/2/3' lane configuration , and 'sgmiispeed'
-	 * for SGMII lanes
-	 */
-	update_topology_satr(serdes_map_array);
-	update_topology_sgmii_speed(serdes_map_array);
-
-	return MV_OK;
-}
-
-int load_topology_db_amc(struct serdes_map *serdes_map_array)
-{
-	u32 lane_num;
-	struct serdes_map *topology_config_ptr;
-
-	DEBUG_INIT_FULL_S("\n### load_topology_db_amc ###\n");
-
-	printf("\nInitialize DB-AMC board topology\n");
-	topology_config_ptr = db_amc_config_default;
-
-	/* Update the default board topology device flavours */
-	CHECK_STATUS(hws_update_device_toplogy
-		     (topology_config_ptr, DB_CONFIG_DEFAULT));
-
-	/* Updating the topology map */
-	for (lane_num = 0; lane_num < hws_serdes_get_max_lane(); lane_num++) {
-		serdes_map_array[lane_num].serdes_mode =
-			topology_config_ptr[lane_num].serdes_mode;
-		serdes_map_array[lane_num].serdes_speed =
-			topology_config_ptr[lane_num].serdes_speed;
-		serdes_map_array[lane_num].serdes_type =
-			topology_config_ptr[lane_num].serdes_type;
-		serdes_map_array[lane_num].swap_rx =
-			topology_config_ptr[lane_num].swap_rx;
-		serdes_map_array[lane_num].swap_tx =
-			topology_config_ptr[lane_num].swap_tx;
-	}
-
-	update_topology_sgmii_speed(serdes_map_array);
-
-	return MV_OK;
-}
-
-int load_topology_rd(struct serdes_map *serdes_map_array)
-{
-	u8 mode;
-
-	DEBUG_INIT_FULL_S("\n### load_topology_rd ###\n");
-
-	DEBUG_INIT_S("\nInit RD board ");
-
-	/* Reading mode */
-	DEBUG_INIT_FULL_S("load_topology_rd: getting mode\n");
-	if (i2c_read(EEPROM_I2C_ADDR, 0, 2, &mode, 1)) {
-		DEBUG_INIT_S("load_topology_rd: TWSI Read failed\n");
-		return MV_FAIL;
-	}
-
-	/* Updating the topology map */
-	DEBUG_INIT_FULL_S("load_topology_rd: Loading board topology details\n");
-
-	/* RD mode: 0 = NAS, 1 = AP */
-	if (((mode >> 1) & 0x1) == 0) {
-		CHECK_STATUS(load_topology_rd_nas(serdes_map_array));
-	} else {
-		CHECK_STATUS(load_topology_rd_ap(serdes_map_array));
-	}
-
-	update_topology_sgmii_speed(serdes_map_array);
-
-	return MV_OK;
-}
-
-int load_topology_rd_nas(struct serdes_map *serdes_map_array)
-{
-	int is_sgmii = 0;
-	u32 i;
-
-	DEBUG_INIT_S("\nInit RD NAS topology ");
-
-	/* check if lane 4 is USB3 or SGMII */
-	if (load_topology_rd_sgmii_usb(&is_sgmii) != MV_OK) {
-		DEBUG_INIT_S("load_topology_rd NAS: TWSI Read failed\n");
-		return MV_FAIL;
-	}
-
-	/* Lane 0 */
-	serdes_map_array[0].serdes_type = PEX0;
-	serdes_map_array[0].serdes_speed = SERDES_SPEED_5_GBPS;
-	serdes_map_array[0].serdes_mode = PEX_ROOT_COMPLEX_X1;
-
-	/* Lane 1 */
-	serdes_map_array[1].serdes_type = SATA0;
-	serdes_map_array[1].serdes_speed = SERDES_SPEED_3_GBPS;
-	serdes_map_array[1].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* Lane 2 */
-	serdes_map_array[2].serdes_type = SATA1;
-	serdes_map_array[2].serdes_speed = SERDES_SPEED_3_GBPS;
-	serdes_map_array[2].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* Lane 3 */
-	serdes_map_array[3].serdes_type = SATA3;
-	serdes_map_array[3].serdes_speed = SERDES_SPEED_3_GBPS;
-	serdes_map_array[3].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* Lane 4 */
-	if (is_sgmii == 1) {
-		DEBUG_INIT_S("Serdes Lane 4 is SGMII\n");
-		serdes_map_array[4].serdes_type = SGMII1;
-		serdes_map_array[4].serdes_speed = SERDES_SPEED_3_125_GBPS;
-		serdes_map_array[4].serdes_mode = SERDES_DEFAULT_MODE;
-	} else {
-		DEBUG_INIT_S("Serdes Lane 4 is USB3\n");
-		serdes_map_array[4].serdes_type = USB3_HOST0;
-		serdes_map_array[4].serdes_speed = SERDES_SPEED_5_GBPS;
-		serdes_map_array[4].serdes_mode = SERDES_DEFAULT_MODE;
-	}
-
-	/* Lane 5 */
-	serdes_map_array[5].serdes_type = SATA2;
-	serdes_map_array[5].serdes_speed = SERDES_SPEED_3_GBPS;
-	serdes_map_array[5].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* init swap configuration */
-	for (i = 0; i <= 5; i++) {
-		serdes_map_array[i].swap_rx = 0;
-		serdes_map_array[i].swap_tx = 0;
-	}
-
-	return MV_OK;
-}
-
-int load_topology_rd_ap(struct serdes_map *serdes_map_array)
-{
-	int is_sgmii = 0;
-	u32 i;
-
-	DEBUG_INIT_S("\nInit RD AP topology ");
-
-	/* check if lane 4 is USB3 or SGMII */
-	if (load_topology_rd_sgmii_usb(&is_sgmii) != MV_OK) {
-		DEBUG_INIT_S("load_topology_rd AP: TWSI Read failed\n");
-		return MV_FAIL;
-	}
-
-	/* Lane 0 */
-	serdes_map_array[0].serdes_type = DEFAULT_SERDES;
-	serdes_map_array[0].serdes_speed = LAST_SERDES_SPEED;
-	serdes_map_array[0].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* Lane 1 */
-	serdes_map_array[1].serdes_type = PEX0;
-	serdes_map_array[1].serdes_speed = SERDES_SPEED_5_GBPS;
-	serdes_map_array[1].serdes_mode = PEX_ROOT_COMPLEX_X1;
-
-	/* Lane 2 */
-	serdes_map_array[2].serdes_type = PEX1;
-	serdes_map_array[2].serdes_speed = SERDES_SPEED_5_GBPS;
-	serdes_map_array[2].serdes_mode = PEX_ROOT_COMPLEX_X1;
-
-	/* Lane 3 */
-	serdes_map_array[3].serdes_type = SATA3;
-	serdes_map_array[3].serdes_speed = SERDES_SPEED_3_GBPS;
-	serdes_map_array[3].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* Lane 4 */
-	if (is_sgmii == 1) {
-		DEBUG_INIT_S("Serdes Lane 4 is SGMII\n");
-		serdes_map_array[4].serdes_type = SGMII1;
-		serdes_map_array[4].serdes_speed = SERDES_SPEED_3_125_GBPS;
-		serdes_map_array[4].serdes_mode = SERDES_DEFAULT_MODE;
-	} else {
-		DEBUG_INIT_S("Serdes Lane 4 is USB3\n");
-		serdes_map_array[4].serdes_type = USB3_HOST0;
-		serdes_map_array[4].serdes_speed = SERDES_SPEED_5_GBPS;
-		serdes_map_array[4].serdes_mode = SERDES_DEFAULT_MODE;
-	}
-
-	/* Lane 5 */
-	serdes_map_array[5].serdes_type = SATA2;
-	serdes_map_array[5].serdes_speed = SERDES_SPEED_3_GBPS;
-	serdes_map_array[5].serdes_mode = SERDES_DEFAULT_MODE;
-
-	/* init swap configuration */
-	for (i = 0; i <= 5; i++) {
-		serdes_map_array[i].swap_rx = 0;
-		serdes_map_array[i].swap_tx = 0;
-	}
-
-	return MV_OK;
-}
-
-int load_topology_rd_sgmii_usb(int *is_sgmii)
-{
-	u8 mode;
-
-	/*
-	 * DB-GP board: Device 6810 supports only 2 GbE ports:
-	 * SGMII2 not supported (USE USB3 Host instead)
-	 */
-	if (sys_env_device_id_get() == MV_6810) {
-		printf("Device 6810 supports only 2 GbE ports: SGMII-2 @ lane5 disabled (setting USB3.0 H1 instead)\n");
-		*is_sgmii = 0;
-		return MV_OK;
-	}
-
-	if (!i2c_read(RD_GET_MODE_ADDR, 1, 2, &mode, 1)) {
-		*is_sgmii = ((mode >> 2) & 0x1);
-	} else {
-		/* else use the default - USB3 */
-		*is_sgmii = 0;
-	}
-
-	if (*is_sgmii)
-		is_custom_topology = 1;
-
-	printf("Lane 5 detection: %s\n",
-	       *is_sgmii ? "SGMII2" : "USB3.0 Host Port 1");
-
-	return MV_OK;
-}
-
-/*
- * 'usb3port0'/'usb3port1' fields are located in EEPROM,
- * at 3rd byte(offset=2), bit 0:1 (respectively)
- */
-int load_topology_usb_mode_get(u8 *twsi_data)
-{
-	if (!i2c_read(EEPROM_I2C_ADDR, 2, 2, twsi_data, 1))
-		return MV_OK;
-
-	return MV_ERROR;
-}
diff --git a/arch/arm/mach-mvebu/serdes/a38x/high_speed_topology_spec.h b/arch/arm/mach-mvebu/serdes/a38x/high_speed_topology_spec.h
deleted file mode 100644
index 3cfb1c71e70e06d124fab89f3274d330bde393e3..0000000000000000000000000000000000000000
--- a/arch/arm/mach-mvebu/serdes/a38x/high_speed_topology_spec.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) Marvell International Ltd. and its affiliates
- *
- * SPDX-License-Identifier:	GPL-2.0
- */
-
-#ifndef _HIGHSPEED_TOPOLOGY_SPEC_H
-#define _HIGHSPEED_TOPOLOGY_SPEC_H
-
-#include "high_speed_env_spec.h"
-
-/* Topology map options for the DB_A38X_BP board */
-enum topology_config_db {
-	DB_CONFIG_SLM1363_C,
-	DB_CONFIG_SLM1363_D,
-	DB_CONFIG_SLM1363_E,
-	DB_CONFIG_SLM1363_F,
-	DB_CONFIG_SLM1364_D,
-	DB_CONFIG_SLM1364_E,
-	DB_CONFIG_SLM1364_F,
-	DB_CONFIG_DEFAULT,
-	DB_NO_TOPOLOGY
-};
-
-/*
- * this enum must be aligned with topology_config_db_381 array,
- * every update to this enum requires update to topology_config_db_381
- * array
- */
-enum topology_config_db381 {
-	DB_CONFIG_SLM1427,	/* enum for db_config_slm1427 */
-	DB_CONFIG_SLM1426,	/* enum for db_config_slm1426 */
-	DB_381_CONFIG_DEFAULT,
-	DB_381_NO_TOPOLOGY
-};
-
-/* A generic function pointer for loading the board topology map */
-typedef int (*load_topology_func_ptr)(struct serdes_map *serdes_map_array);
-
-extern load_topology_func_ptr load_topology_func_arr[];
-
-/*
- * topology_config_db_mode_get -
- *
- * DESCRIPTION:		Gets the relevant topology mode (index).
- *			for load_topology_db use only.
- * INPUT:		None.
- * OUTPUT:		None.
- * RETURNS:		the topology mode
- */
-u8 topology_config_db_mode_get(void);
-
-/*
- * load_topology_xxx -
- *
- * DESCRIPTION:		Loads the board topology for the XXX board
- * INPUT:		serdes_map_array - The struct that will contain
- *			the board topology map
- * OUTPUT:		The board topology map.
- * RETURNS:		MV_OK   for success
- *			MV_FAIL	for failure (a wrong topology mode was read
- *			from the board)
- */
-
-/* load_topology_db - Loads the board topology for DB Board */
-int load_topology_db(struct serdes_map *serdes_map_array);
-
-/* load_topology_rd - Loads the board topology for RD Board */
-int load_topology_rd(struct serdes_map *serdes_map_array);
-
-/* load_topology_rd_nas - Loads the board topology for RD NAS Board */
-int load_topology_rd_nas(struct serdes_map *serdes_map_array);
-
-/* load_topology_rd_ap - Loads the board topology for RD Ap Board */
-int load_topology_rd_ap(struct serdes_map *serdes_map_array);
-
-/* load_topology_db_ap - Loads the board topology for DB-AP Board */
-int load_topology_db_ap(struct serdes_map *serdes_map_array);
-
-/* load_topology_db_gp - Loads the board topology for DB GP Board */
-int load_topology_db_gp(struct serdes_map *serdes_map_array);
-
-/* load_topology_db_381 - Loads the board topology for 381 DB-BP Board */
-int load_topology_db_381(struct serdes_map *serdes_map_array);
-
-/* load_topology_db_amc - Loads the board topology for DB-AMC Board */
-int load_topology_db_amc(struct serdes_map *serdes_map_array);
-
-/*
- * hws_update_device_toplogy
- * DESCRIPTION: Update the default board topology for specific device Id
- * INPUT:
- *	topology_config_ptr - pointer to the Serdes mapping
- *	topology_mode - topology mode (index)
- * OUTPUT: None
- * RRETURNS:
- *	MV_OK - if updating the board topology success
- *	MV_BAD_PARAM - if the input parameter is wrong
- */
-int hws_update_device_toplogy(struct serdes_map *topology_config_ptr,
-			      enum topology_config_db topology_mode);
-
-/*
- * load_topology_rd_sgmii_usb -
- *
- * DESCRIPTION:			For RD board check if lane 4 is USB3 or SGMII
- * INPUT:			None
- * OUTPUT:			is_sgmii - return 1 if lane 4 is SGMII
- *				return 0 if lane 4 is USB.
- * RETURNS:			MV_OK for success
- */
-int load_topology_rd_sgmii_usb(int *is_sgmii);
-
-/*
- * load_topology_usb_mode_get -
- *
- * DESCRIPTION:			For DB board check if USB3.0 mode
- * INPUT:			None
- * OUTPUT:			twsi_data - return data read from S@R via I2C
- * RETURNS:			MV_OK for success
- */
-int load_topology_usb_mode_get(u8 *twsi_data);
-
-#endif /* _HIGHSPEED_TOPOLOGY_SPEC_H */
diff --git a/arch/arm/mach-mvebu/serdes/a38x/seq_exec.c b/arch/arm/mach-mvebu/serdes/a38x/seq_exec.c
index ee2305b983651771ea530b3018bf46b040963bad..905b907076f8d95bc5029cae557e1ce916e4d4fb 100644
--- a/arch/arm/mach-mvebu/serdes/a38x/seq_exec.c
+++ b/arch/arm/mach-mvebu/serdes/a38x/seq_exec.c
@@ -5,7 +5,6 @@
  */
 
 #include <common.h>
-#include <i2c.h>
 #include <spl.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
diff --git a/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.c b/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.c
index efd3873203751f5cb3c0e6bb53ef7cf68a4d7fb5..49d704a36230aed0024e523a2c2a5f97ae7c185a 100644
--- a/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.c
+++ b/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.c
@@ -5,7 +5,6 @@
  */
 
 #include <common.h>
-#include <i2c.h>
 #include <spl.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
@@ -236,153 +235,3 @@ u32 sys_env_device_id_get(void)
 
 	return g_dev_id;
 }
-
-#ifdef MV_DDR_TOPOLOGY_UPDATE_FROM_TWSI
-/*
-* sys_env_get_topology_update_info
-* DESCRIPTION: Read TWSI fields to update DDR topology structure
-* INPUT: None
-* OUTPUT: None, 0 means no topology update
-* RETURN:
-*       Bit mask of changes topology features
-*/
-#ifdef CONFIG_ARMADA_39X
-u32 sys_env_get_topology_update_info(
-	struct topology_update_info *tui)
-{
-	/* Set 16/32 bit configuration*/
-	tui->update_width = 1;
-	tui->width = TOPOLOGY_UPDATE_WIDTH_32BIT;
-
-#ifdef CONFIG_DDR3
-	if (1 == sys_env_config_get(MV_CONFIG_DDR_BUSWIDTH)) {
-		/* 16bit */
-		tui->width = TOPOLOGY_UPDATE_WIDTH_16BIT;
-	} else {
-		/* 32bit */
-		tui->width = TOPOLOGY_UPDATE_WIDTH_32BIT;
-	}
-#endif
-
-	/* Set ECC/no ECC bit configuration */
-	tui->update_ecc = 1;
-	if (0 == sys_env_config_get(MV_CONFIG_DDR_ECC_EN)) {
-		/* NO ECC */
-		tui->ecc = TOPOLOGY_UPDATE_ECC_OFF;
-	} else {
-		/* ECC */
-		tui->ecc = TOPOLOGY_UPDATE_ECC_ON;
-	}
-
-	tui->update_ecc_pup3_mode = 1;
-	tui->ecc_pup_mode_offset = TOPOLOGY_UPDATE_ECC_OFFSET_PUP4;
-
-	return MV_OK;
-}
-#else /*CONFIG_ARMADA_38X*/
-u32 sys_env_get_topology_update_info(
-	struct topology_update_info *tui)
-{
-	u8 config_val;
-	u8 ecc_mode[A38X_MV_MAX_MARVELL_BOARD_ID -
-		    A38X_MARVELL_BOARD_ID_BASE][5] = TOPOLOGY_UPDATE;
-	u8 board_id = mv_board_id_get();
-	int ret;
-
-	board_id = mv_board_id_index_get(board_id);
-	ret = i2c_read(EEPROM_I2C_ADDR, 0, 2, &config_val, 1);
-	if (ret) {
-		DEBUG_INIT_S("sys_env_get_topology_update_info: TWSI Read failed\n");
-		return 0;
-	}
-
-	/* Set 16/32 bit configuration */
-	if ((0 == (config_val & DDR_SATR_CONFIG_MASK_WIDTH)) ||
-	    (ecc_mode[board_id][TOPOLOGY_UPDATE_32BIT] == 0)) {
-		/* 16bit by SatR of 32bit mode not supported for the board */
-		if ((ecc_mode[board_id][TOPOLOGY_UPDATE_16BIT] != 0)) {
-			tui->update_width = 1;
-			tui->width = TOPOLOGY_UPDATE_WIDTH_16BIT;
-		}
-	} else {
-		/* 32bit */
-		if ((ecc_mode[board_id][TOPOLOGY_UPDATE_32BIT] != 0)) {
-			tui->update_width = 1;
-			tui->width = TOPOLOGY_UPDATE_WIDTH_32BIT;
-		}
-	}
-
-	/* Set ECC/no ECC bit configuration */
-	if (0 == (config_val & DDR_SATR_CONFIG_MASK_ECC)) {
-		/* NO ECC */
-		tui->update_ecc = 1;
-		tui->ecc = TOPOLOGY_UPDATE_ECC_OFF;
-	} else {
-		/* ECC */
-		if ((ecc_mode[board_id][TOPOLOGY_UPDATE_32BIT_ECC] != 0) ||
-		    (ecc_mode[board_id][TOPOLOGY_UPDATE_16BIT_ECC] != 0) ||
-		    (ecc_mode[board_id][TOPOLOGY_UPDATE_16BIT_ECC_PUP3] != 0)) {
-			tui->update_ecc = 1;
-			tui->ecc = TOPOLOGY_UPDATE_ECC_ON;
-		}
-	}
-
-	/* Set ECC pup bit configuration */
-	if (0 == (config_val & DDR_SATR_CONFIG_MASK_ECC_PUP)) {
-		/* PUP3 */
-		/*
-		 * Check if PUP3 configuration allowed, if not -
-		 * force Pup4 with warning message
-		 */
-		if ((ecc_mode[board_id][TOPOLOGY_UPDATE_16BIT_ECC_PUP3] != 0)) {
-			if (tui->width == TOPOLOGY_UPDATE_WIDTH_16BIT) {
-				tui->update_ecc_pup3_mode = 1;
-				tui->ecc_pup_mode_offset =
-					TOPOLOGY_UPDATE_ECC_OFFSET_PUP3;
-			} else {
-				if ((ecc_mode[board_id][TOPOLOGY_UPDATE_32BIT_ECC] != 0)) {
-					printf("DDR Topology Update: ECC PUP3 not valid for 32bit mode, force ECC in PUP4\n");
-					tui->update_ecc_pup3_mode = 1;
-					tui->ecc_pup_mode_offset =
-						TOPOLOGY_UPDATE_ECC_OFFSET_PUP4;
-				}
-			}
-		} else {
-			if (ecc_mode[board_id][TOPOLOGY_UPDATE_16BIT_ECC] !=
-			    0) {
-				printf("DDR Topology Update: ECC on PUP3 not supported, force ECC on PUP4\n");
-				tui->update_ecc_pup3_mode = 1;
-				tui->ecc_pup_mode_offset =
-					TOPOLOGY_UPDATE_ECC_OFFSET_PUP4;
-			}
-		}
-	} else {
-		/* PUP4 */
-		if ((ecc_mode[board_id][TOPOLOGY_UPDATE_32BIT_ECC] != 0) ||
-		    (ecc_mode[board_id][TOPOLOGY_UPDATE_16BIT_ECC] != 0)) {
-			tui->update_ecc_pup3_mode = 1;
-			tui->ecc_pup_mode_offset =
-				TOPOLOGY_UPDATE_ECC_OFFSET_PUP4;
-		}
-	}
-
-	/*
-	 * Check for forbidden ECC mode,
-	 * if by default width and pup selection set 32bit ECC mode and this
-	 * mode not supported for the board - config 16bit with ECC on PUP3
-	 */
-	if ((tui->ecc == TOPOLOGY_UPDATE_ECC_ON) &&
-	    (tui->width == TOPOLOGY_UPDATE_WIDTH_32BIT)) {
-		if (ecc_mode[board_id][TOPOLOGY_UPDATE_32BIT_ECC] == 0) {
-			printf("DDR Topology Update: 32bit mode with ECC not allowed on this board, forced  16bit with ECC on PUP3\n");
-			tui->width = TOPOLOGY_UPDATE_WIDTH_16BIT;
-			tui->update_ecc_pup3_mode = 1;
-			tui->ecc_pup_mode_offset =
-				TOPOLOGY_UPDATE_ECC_OFFSET_PUP3;
-		}
-	}
-
-	return MV_OK;
-}
-#endif /* CONFIG_ARMADA_38X */
-#endif /* MV_DDR_TOPOLOGY_UPDATE_FROM_TWSI */
diff --git a/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.h b/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.h
index 3e5373c085b527a18da7fff8896c62f715d4d5e1..a413c51043eefcbf2bae2692d842e53d16c2e8bf 100644
--- a/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.h
+++ b/arch/arm/mach-mvebu/serdes/a38x/sys_env_lib.h
@@ -364,8 +364,6 @@ u8 sys_env_device_rev_get(void);
 u32 sys_env_device_id_get(void);
 u16 sys_env_model_get(void);
 struct dlb_config *sys_env_dlb_config_ptr_get(void);
-u32 sys_env_get_topology_update_info(
-	struct topology_update_info *topology_update_info);
 u32 sys_env_get_cs_ena_from_reg(void);
 
 #endif /* _SYS_ENV_LIB_H */
diff --git a/board/Marvell/db-88f6820-gp/db-88f6820-gp.c b/board/Marvell/db-88f6820-gp/db-88f6820-gp.c
index 84ca55c7d5025d6a61c8f1fd4049c983aaa2f992..384d002d5d195919a139ae139e7b6856e6259bbf 100644
--- a/board/Marvell/db-88f6820-gp/db-88f6820-gp.c
+++ b/board/Marvell/db-88f6820-gp/db-88f6820-gp.c
@@ -13,6 +13,7 @@
 #include <asm/arch/soc.h>
 
 #include "../drivers/ddr/marvell/a38x/ddr3_a38x_topology.h"
+#include <../serdes/a38x/high_speed_env_spec.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -55,6 +56,21 @@ static struct marvell_io_exp io_exp[] = {
 	{ 0x21, 3, 0xC0 }  /* Output Data, register#1 */
 };
 
+static struct serdes_map board_serdes_map[] = {
+	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
+	{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
+	{SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
+	{SATA3, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
+	{SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
+	{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
+};
+
+int hws_board_topology_load(struct serdes_map *serdes_map_array)
+{
+	memcpy(serdes_map_array, board_serdes_map, sizeof(board_serdes_map));
+	return 0;
+}
+
 /*
  * Define the DDR layout / topology here in the board file. This will
  * be used by the DDR3 init code in the SPL U-Boot version to configure
diff --git a/drivers/ddr/marvell/a38x/ddr3_a38x.h b/drivers/ddr/marvell/a38x/ddr3_a38x.h
index 49621bc1331f470379d47a72033ccd57406a50e6..1ed517446f955a3296c62b86bee09f6694849f05 100644
--- a/drivers/ddr/marvell/a38x/ddr3_a38x.h
+++ b/drivers/ddr/marvell/a38x/ddr3_a38x.h
@@ -12,11 +12,6 @@
 
 #include "ddr3_hws_hw_training_def.h"
 
-/* Allow topolgy update from board TWSI device*/
-#if !defined(CONFIG_CUSTOMER_BOARD_SUPPORT)
-#define MV_DDR_TOPOLOGY_UPDATE_FROM_TWSI
-#endif
-
 #define ECC_SUPPORT
 
 /* right now, we're not supporting this in mainline */
diff --git a/drivers/ddr/marvell/a38x/ddr3_init.c b/drivers/ddr/marvell/a38x/ddr3_init.c
index d6ed8e03e907b76c6b6da0f85c077aae85276d17..556f877039aa0bb488d0a279d41d54d90c378b71 100644
--- a/drivers/ddr/marvell/a38x/ddr3_init.c
+++ b/drivers/ddr/marvell/a38x/ddr3_init.c
@@ -96,7 +96,6 @@ u8 generic_init_controller = 1;
 static u32 ddr3_get_static_ddr_mode(void);
 #endif
 static int ddr3_hws_tune_training_params(u8 dev_num);
-static int ddr3_update_topology_map(struct hws_topology_map *topology_map);
 
 /* device revision */
 #define DEV_VERSION_ID_REG		0x1823c
@@ -383,14 +382,6 @@ int ddr3_init(void)
 	}
 #endif
 
-	/* Load topology for New Training IP */
-	status = ddr3_load_topology_map();
-	if (MV_OK != status) {
-		printf("%s Training Sequence topology load - FAILED\n",
-		       ddr_type);
-		return status;
-	}
-
 	/* Tune training algo paramteres */
 	status = ddr3_hws_tune_training_params(0);
 	if (MV_OK != status)
@@ -539,27 +530,6 @@ u32 ddr3_get_cs_num_from_reg(void)
 	return cs_count;
 }
 
-/*
- * Name:     ddr3_load_topology_map
- * Desc:
- * Args:
- * Notes:
- * Returns:
- */
-int ddr3_load_topology_map(void)
-{
-	struct hws_topology_map *tm = ddr3_get_topology_map();
-
-#if defined(MV_DDR_TOPOLOGY_UPDATE_FROM_TWSI)
-	/* Update topology data */
-	if (MV_OK != ddr3_update_topology_map(tm)) {
-		DEBUG_INIT_FULL_S("Failed update of DDR3 Topology map\n");
-	}
-#endif
-
-	return MV_OK;
-}
-
 void get_target_freq(u32 freq_mode, u32 *ddr_freq, u32 *hclk_ps)
 {
 	u32 tmp, hclk = 200;
@@ -781,48 +751,6 @@ int ddr3_calc_mem_cs_size(u32 cs, u32 *cs_size)
 	return MV_OK;
 }
 
-#if defined(MV_DDR_TOPOLOGY_UPDATE_FROM_TWSI)
-/*
- * Name:     ddr3_update_topology_map
- * Desc:
- * Args:
- * Notes: Update topology map by Sat_r values
- * Returns:
- */
-static int ddr3_update_topology_map(struct hws_topology_map *tm)
-{
-	struct topology_update_info topology_update_info;
-
-	topology_update_info.update_width = 0;
-	topology_update_info.update_ecc = 0;
-	topology_update_info.update_ecc_pup3_mode = 0;
-	sys_env_get_topology_update_info(&topology_update_info);
-	if (topology_update_info.update_width) {
-		tm->bus_act_mask &=
-		    ~(TOPOLOGY_UPDATE_WIDTH_32BIT_MASK);
-		if (topology_update_info.width == TOPOLOGY_UPDATE_WIDTH_16BIT)
-			tm->bus_act_mask =
-			    TOPOLOGY_UPDATE_WIDTH_16BIT_MASK;
-		else
-			tm->bus_act_mask =
-			    TOPOLOGY_UPDATE_WIDTH_32BIT_MASK;
-	}
-
-	if (topology_update_info.update_ecc) {
-		if (topology_update_info.ecc == TOPOLOGY_UPDATE_ECC_OFF) {
-			tm->bus_act_mask &=
-			    ~(1 << topology_update_info.ecc_pup_mode_offset);
-		} else {
-			tm->bus_act_mask |=
-			    topology_update_info.
-			    ecc << topology_update_info.ecc_pup_mode_offset;
-		}
-	}
-
-	return MV_OK;
-}
-#endif
-
 /*
  * Name:     ddr3_hws_tune_training_params
  * Desc: