bc2: Enable Board ID field on EEPROM
- Obtain the Board ID from the EEPROM instead of using the
compilation option (excepting customer boards).
- Enable "boardid" SatR fild access on BC2 boards
- Modify the BIN header for reading the board ID from EEPROM.
- When the EEPROM is not present or the information stored
in EEPROM is invalid, assign a default board ID = 0, which
is a DB board ID for both AC3 and BC2 families.
Change-Id: Ibab1296f30c02c7c125effeb38596dbfdbb2abf6
Signed-off-by: kostap <kostap@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/19280
Tested-by: Star_Automation <star@marvell.com>
Reviewed-by: Omri Itach <omrii@marvell.com>
(cherry picked from commit c4217d92f78e92baf2cc9b9c7d0649a4541b39fb)
Reviewed-on: http://vgitil04.il.marvell.com:8080/19748
Tested-by: Omri Itach <omrii@marvell.com>
diff --git a/board/mv_ebu/msys/cmd_sar.c b/board/mv_ebu/msys/cmd_sar.c
index 512f7fc..30d6572 100644
--- a/board/mv_ebu/msys/cmd_sar.c
+++ b/board/mv_ebu/msys/cmd_sar.c
@@ -24,8 +24,13 @@
#include "ctrlEnv/mvCtrlEnvLib.h"
#include "boardEnv/mvBoardEnvLib.h"
-extern MV_BOARD_INFO *marvellAC3BoardInfoTbl[];
-
+#if defined CONFIG_ALLEYCAT3
+ extern MV_BOARD_INFO *marvellAC3BoardInfoTbl[];
+ MV_BOARD_INFO **mvMsysBoardInfoTbl = marvellAC3BoardInfoTbl;
+#else
+ extern MV_BOARD_INFO *marvellBC2BoardInfoTbl[];
+ MV_BOARD_INFO **mvMsysBoardInfoTbl = marvellBC2BoardInfoTbl;
+#endif
/*
bc2 sample and reset register
# 4f # 4e # 4d # 4c #
@@ -53,9 +58,9 @@
CMD_AVS_MODE,
CMD_SLAVE_ADDR,
CMD_DEVICE_NUM,
- CMD_BOARD_ID,
CMD_DDR_ECC_EN,
#endif
+ CMD_BOARD_ID,
CMD_PCIE_MODE,
CMD_BOOTSRC,
CMD_DEVICE_ID,
@@ -74,6 +79,7 @@
0, /* OOB0 connection */
0, /* OOB1 connection */
0, /* Force AMC RC GEN1 PCIe */
+ 0, /* Board ID */
0, /* PCIe mode */
3, /* Boot source */
0 }; /* Device ID */
@@ -87,8 +93,8 @@
1, /* AVS Mode */
1, /* I2C/SMI Slave address */
0, /* Device number */
- 0, /* Board ID */
0, /* DDR ECC enable */
+ 0, /* Board ID */
0, /* PCIe mode */
3, /* Boot source */
0 }; /* Device ID */
@@ -156,11 +162,11 @@
return CMD_SLAVE_ADDR;
if (strcmp(cmd, "devicenum") == 0)
return CMD_DEVICE_NUM;
- if (strcmp(cmd, "boardid") == 0)
- return CMD_BOARD_ID;
if (strcmp(cmd, "ddreccenable") == 0)
return CMD_DDR_ECC_EN;
#endif
+ if (strcmp(cmd, "boardid") == 0)
+ return CMD_BOARD_ID;
if (strcmp(cmd, "pcimode") == 0)
return CMD_PCIE_MODE;
if (strcmp(cmd, "bootsrc") == 0)
@@ -301,18 +307,18 @@
printf("\t| 1 | 1 |\n");
printf("\t-----------------------------\n");
break;
- case CMD_BOARD_ID:
- printf("Determines the board ID (0-7)\n");
- printf("\t| ID | Board |\n");
- printf("\t----------------------------------\n");
- for (i = 0; i < AC3_MARVELL_BOARD_NUM ; i++)
- printf("\t| %d | %-22s |\n", i, marvellAC3BoardInfoTbl[i]->boardName );
- printf("\t----------------------------------\n");
- break;
case CMD_DEVICE_NUM:
printf("Determines the device number (0-3)\n");
break;
#endif
+ case CMD_BOARD_ID:
+ printf("Determines the board ID (0-7)\n");
+ printf("\t| ID | Board |\n");
+ printf("\t----------------------------------\n");
+ for (i = 0; i < MV_MARVELL_BOARD_NUM ; i++)
+ printf("\t| %d | %-22s |\n", i, mvMsysBoardInfoTbl[i]->boardName );
+ printf("\t----------------------------------\n");
+ break;
case CMD_PCIE_MODE:
printf("Determines the PCI-E mode:\n");
printf("\t| ID | Mode |\n");
@@ -459,14 +465,14 @@
printf("devicenum Error: failed reading devicenum\n");
break;
+#endif
case CMD_BOARD_ID:
if (mvBoardSarBoardIdGet(&tmp) == MV_OK)
- printf("boardid\t\t\t= %d ==> %s\n", tmp, marvellAC3BoardInfoTbl[tmp]->boardName);
+ printf("boardid\t\t\t= %d ==> %s\n", tmp, mvMsysBoardInfoTbl[tmp]->boardName);
else
printf("boardid Error: failed reading boardid\n");
break;
-#endif
case CMD_PCIE_MODE:
if (mvBoardPcieModeGet(&tmp) == MV_OK)
printf("pcimode \t\t= %d ==> %s\n", tmp, ((tmp == 0) ? "Endpoint" : "Root Complex"));
@@ -565,13 +571,13 @@
case CMD_SLAVE_ADDR:
rc = mvBoardSmiI2c2AddrSet(tmp);
break;
- case CMD_BOARD_ID:
- rc = mvBoardSarBoardIdSet(tmp);
- break;
case CMD_DEVICE_NUM:
rc = mvBoardDeviceNumSet(tmp);
break;
#endif
+ case CMD_BOARD_ID:
+ rc = mvBoardSarBoardIdSet(tmp);
+ break;
case CMD_PCIE_MODE:
rc = mvBoardPcieModeSet(tmp);
break;
@@ -583,15 +589,13 @@
break;
case CMD_DEFAULT:
for (i = 0 ; i < CMD_DUMP; i++) {
-#if defined CONFIG_ALLEYCAT3
if (i == CMD_BOARD_ID) {
MV_U32 brdId = mvBoardIdGet();
- if ((brdId < AC3_MARVELL_BOARD_ID_BASE) || (brdId >= AC3_MARVELL_MAX_BOARD_ID))
+ if ((brdId < MARVELL_BOARD_ID_BASE) || (brdId >= MV_MAX_MARVELL_BOARD_ID))
mvOsPrintf("Bad Board ID returned - %d! Assigning default value!\n", brdId);
else
- defaultValue[i] = brdId - AC3_MARVELL_BOARD_ID_BASE; /* Update default value with real board ID*/
+ defaultValue[i] = brdId - MARVELL_BOARD_ID_BASE; /* Update default value with real board ID*/
}
-#endif /* CONFIG_ALLEYCAT3 */
if (1 == do_sar_write(i, defaultValue[i]))
rc = MV_FALSE;
do_sar_read(i);
@@ -623,12 +627,10 @@
cmd = argv[1];
mode = sar_cmd_get(argv[2]);
-#if defined CONFIG_ALLEYCAT3
- if(mvBoardIdGet() != DB_AC3_ID && mode != CMD_BOARD_ID) {
+ if(mvBoardIdGet() != MV_DEFAULT_BOARD_ID && mode != CMD_BOARD_ID) {
mvOsPrintf("Error: Sample at reset supports modifying only 'boardid' field for current board\n\n");
goto usage;
}
-#endif
if (strcmp(cmd, "list") == 0)
return do_sar_list(mode);
@@ -674,13 +676,13 @@
#endif
"bootsrc - Boot source\n"
"deviceid - Device ID\n"
-#ifdef CONFIG_ALLEYCAT3
-"\t----Legacy fileds----\n"
-"pllclock - PLL2 VCO clock frequency. Valid for rev.A0 only\n"
"\n\tSW SatR fields\n"
"\t--------------\n"
-"ddreccenable - DDR ECC modes\n"
"boardid - Board ID\n"
+#ifdef CONFIG_ALLEYCAT3
+"ddreccenable - DDR ECC modes\n"
+"\t----Legacy fileds----\n"
+"pllclock - PLL2 VCO clock frequency. Valid for rev.A0 only\n"
#endif
);
#endif /*defined(CONFIG_CMD_SAR)*/
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
index d24a38a..b75e660 100755
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
@@ -1206,55 +1206,51 @@
if (gBoardId != -1)
return gBoardId;
-#if defined CONFIG_ALLEYCAT3
+#ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
- #ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
+ #if defined CONFIG_ALLEYCAT3
#ifdef CONFIG_CUSTOMER_BOARD_0
gBoardId = AC3_CUSTOMER_BOARD_ID0;
#elif CONFIG_CUSTOMER_BOARD_1
gBoardId = AC3_CUSTOMER_BOARD_ID1;
#endif
- #else /* !CONFIG_CUSTOMER_BOARD_SUPPORT */
-
- /* For Marvell Boards: Temporarily set generic board struct pointer to
- use S@R TWSI address, and read board ID */
- board = marvellAC3BoardInfoTbl[mvBoardIdIndexGet(DB_AC3_ID)];
- gBoardId = DB_AC3_ID; /* Terporary for usage by mvCtrlDevFamilyIdGet */
- MV_U8 readValue;
-
- if (mvBoardSarBoardIdGet(&readValue) != MV_OK || readValue >= AC3_MARVELL_BOARD_NUM) {
- mvOsPrintf("%s: Error obtaining Board ID from EEPROM (%d)\n", __func__, readValue);
- mvOsPrintf("%s: Setting default board: DB-DXAC3-MM\n", __func__);
- readValue = DB_AC3_ID - AC3_MARVELL_BOARD_ID_BASE;
- }
-
- gBoardId = AC3_MARVELL_BOARD_ID_BASE + readValue;
- #endif /* CONFIG_CUSTOMER_BOARD_SUPPORT */
-
-#else /* CONFIG_BOBCAT2 */
-
- #ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
+ #else /* BC2 */
#ifdef CONFIG_CUSTOMER_BOARD_0
gBoardId = BC2_CUSTOMER_BOARD_ID0;
#elif CONFIG_CUSTOMER_BOARD_1
gBoardId = BC2_CUSTOMER_BOARD_ID1;
#endif
- #else /* !CONFIG_CUSTOMER_BOARD_SUPPORT */
+ #endif
- #if defined(DB_BOBCAT2)
- gBoardId = DB_DX_BC2_ID;
- #elif defined(RD_BOBCAT2)
- gBoardId = RD_DX_BC2_ID;
- #elif defined(RD_MTL_BOBCAT2)
- gBoardId = RD_MTL_BC2;
- #else
- mvOsPrintf("%s: Board ID must be defined!\n", __func__);
- while (1)
- continue;
- #endif
- #endif /* CONFIG_CUSTOMER_BOARD_SUPPORT */
+#else /* !CONFIG_CUSTOMER_BOARD_SUPPORT */
-#endif
+ MV_U8 readValue;
+ MV_BOARD_INFO **mvBoardInfoTbl =
+ #if defined CONFIG_ALLEYCAT3
+ marvellAC3BoardInfoTbl;
+ #else
+ marvellBC2BoardInfoTbl;
+ #endif
+
+ /* Temporarily set generic board struct pointer, to set/get EEPROM i2c address, and read board ID */
+ board = mvBoardInfoTbl[mvBoardIdIndexGet(MV_DEFAULT_BOARD_ID)];
+ gBoardId = MV_DEFAULT_BOARD_ID; /* Terporary for usage by mvCtrlDevFamilyIdGet */
+
+ if (mvBoardSarBoardIdGet(&readValue) != MV_OK) {
+ mvOsPrintf("%s: Error obtaining Board ID from EEPROM (%d)\n", __func__, readValue);
+ mvOsPrintf("%s: Setting default board to: %s\n", __func__, board->boardName);
+ return MV_DEFAULT_BOARD_ID;
+ }
+ readValue = readValue & (BOARD_ID_INDEX_MASK - 1);
+
+ if (readValue >= MV_MARVELL_BOARD_NUM) {
+ mvOsPrintf("%s: Error: read wrong board ID (%d)\n", __func__, readValue);
+ mvOsPrintf("%s: Setting default board to: %s\n", __func__, board->boardName);
+ return MV_DEFAULT_BOARD_ID;
+ }
+ gBoardId = MARVELL_BOARD_ID_BASE + readValue;
+
+#endif /* CONFIG_CUSTOMER_BOARD_SUPPORT */
return gBoardId;
}
@@ -2209,12 +2205,6 @@
MV_STATUS mvBoardSarBoardIdGet(MV_U8 *value)
{
MV_U8 boardId;
- MV_U16 family = mvCtrlDevFamilyIdGet(0);
-
- if (family != MV_ALLEYCAT3_DEV_ID) {
- DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
- return MV_ERROR;
- }
/* The Board Id is taken from the first address-value pair of the EEPROM initialization sequence
In order to support normal TWSI init sequence flow, the first pair of DWORDS on EEPROM
@@ -2235,14 +2225,16 @@
MV_U8 boardId;
MV_U16 family = mvCtrlDevFamilyIdGet(0);
- if (family != MV_ALLEYCAT3_DEV_ID) {
- DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
- return MV_ERROR;
- }
-
- if (val >= AC3_MARVELL_BOARD_NUM) {
- mvOsPrintf("%s: Error: Unsupported board ID (%d)\n", __func__, val);
- return MV_ERROR;
+ if (family == MV_ALLEYCAT3_DEV_ID) {
+ if (val >= AC3_MARVELL_BOARD_NUM) {
+ mvOsPrintf("%s: Error: Unsupported board ID (%d)\n", __func__, val);
+ return MV_ERROR;
+ }
+ } else {
+ if (val >= BC2_MARVELL_BOARD_NUM) {
+ mvOsPrintf("%s: Error: Unsupported board ID (%d)\n", __func__, val);
+ return MV_ERROR;
+ }
}
/* The Board Id is taken from the first address-value pair of the EEPROM initalization sequnce
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.h b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.h
index 3434624..7846724 100644
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.h
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.h
@@ -105,8 +105,19 @@
#define AC3_MARVELL_BOARD_NUM (AC3_MARVELL_MAX_BOARD_ID - AC3_MARVELL_BOARD_ID_BASE)
#define INVALID_BOARD_ID 0xFFFF
+#define BOARD_ID_INDEX_MASK 0x10 /* Mask used to return board index via board Id */
-#define BOARD_ID_INDEX_MASK 0x10 /* Mask used to return board index via board Id */
+#if defined CONFIG_ALLEYCAT3
+ #define MARVELL_BOARD_ID_BASE AC3_MARVELL_BOARD_ID_BASE
+ #define MV_MAX_MARVELL_BOARD_ID AC3_MARVELL_MAX_BOARD_ID
+ #define MV_MARVELL_BOARD_NUM AC3_MARVELL_BOARD_NUM
+ #define MV_DEFAULT_BOARD_ID DB_AC3_ID
+#else
+ #define MARVELL_BOARD_ID_BASE BC2_MARVELL_BOARD_ID_BASE
+ #define MV_MAX_MARVELL_BOARD_ID BC2_MARVELL_MAX_BOARD_ID
+ #define MV_MARVELL_BOARD_NUM BC2_MARVELL_BOARD_NUM
+ #define MV_DEFAULT_BOARD_ID DB_DX_BC2_ID
+#endif
/********************************************
* Bobcat2 Boards
diff --git a/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.c b/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.c
index 3548638..0534261 100755
--- a/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.c
+++ b/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.c
@@ -87,41 +87,40 @@
if (gBoardId != -1)
return gBoardId;
-/* Customer board ID's */
#ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
- #ifdef CONFIG_BOBCAT2
- #ifdef CONFIG_CUSTOMER_BOARD_0
- gBoardId = BC2_CUSTOMER_BOARD_ID0;
- #elif CONFIG_CUSTOMER_BOARD_1
- gBoardId = BC2_CUSTOMER_BOARD_ID1;
- #endif
- #elif defined CONFIG_ALLEYCAT3
+
+ #if defined CONFIG_ALLEYCAT3
#ifdef CONFIG_CUSTOMER_BOARD_0
gBoardId = AC3_CUSTOMER_BOARD_ID0;
#elif CONFIG_CUSTOMER_BOARD_1
gBoardId = AC3_CUSTOMER_BOARD_ID1;
#endif
+ #else /* BC2 */
+ #ifdef CONFIG_CUSTOMER_BOARD_0
+ gBoardId = BC2_CUSTOMER_BOARD_ID0;
+ #elif CONFIG_CUSTOMER_BOARD_1
+ gBoardId = BC2_CUSTOMER_BOARD_ID1;
+ #endif
#endif
-#else
-/* BobCat2 Board ID's */
- #if defined(DB_BOBCAT2)
- gBoardId = DB_DX_BC2_ID;
- #elif defined(RD_BOBCAT2)
- gBoardId = RD_DX_BC2_ID;
- #elif defined(RD_MTL_BOBCAT2)
- gBoardId = RD_MTL_BC2;
- #else
- MV_U8 readValue = 0;
- /* AlleyCat3 Board ID's */
- if (mvBoardSarBoardIdGet(&readValue) != MV_OK || readValue >= AC3_MARVELL_BOARD_NUM) {
- mvPrintf("%s: Error obtaining Board ID from EEPROM (%d)\n", __func__, readValue);
- mvPrintf("%s: Setting default board: DB-DXAC3-MM\n", __func__);
- readValue = DB_AC3_ID - AC3_MARVELL_BOARD_ID_BASE;
- }
- gBoardId = AC3_MARVELL_BOARD_ID_BASE + readValue;
- #endif
-#endif
+#else /* !CONFIG_CUSTOMER_BOARD_SUPPORT */
+
+ MV_U8 readValue;
+
+ if (mvBoardSarBoardIdGet(&readValue) != MV_OK) {
+ mvPrintf("%s: Error obtaining Board ID from EEPROM (%d)\n", __func__, readValue);
+ mvPrintf("%s: Setting default board to: %d\n", __func__, MV_DEFAULT_BOARD_ID);
+ readValue = MV_DEFAULT_BOARD_ID;
+ }
+ readValue = readValue & (BOARD_ID_INDEX_MASK - 1);
+
+ if (readValue >= MV_MARVELL_BOARD_NUM) {
+ mvPrintf("%s: Error: read wrong board ID (%d)\n", __func__, readValue);
+ return INVALID_BOARD_ID;
+ }
+ gBoardId = MARVELL_BOARD_ID_BASE + readValue;
+
+#endif /* CONFIG_CUSTOMER_BOARD_SUPPORT */
return gBoardId;
}
diff --git a/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.h b/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.h
index 46970f3..a7a1867 100755
--- a/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.h
+++ b/tools/marvell/bin_hdr/platform/sysEnv/msys/mvSysEnvLib.h
@@ -104,6 +104,18 @@
#define INVALID_BOARD_ID 0xFFFF
#define BOARD_ID_INDEX_MASK 0x10 /* Mask used to return board index via board Id */
+#if defined CONFIG_ALLEYCAT3
+ #define MARVELL_BOARD_ID_BASE AC3_MARVELL_BOARD_ID_BASE
+ #define MV_MAX_MARVELL_BOARD_ID AC3_MARVELL_MAX_BOARD_ID
+ #define MV_MARVELL_BOARD_NUM AC3_MARVELL_BOARD_NUM
+ #define MV_DEFAULT_BOARD_ID DB_AC3_ID
+#else
+ #define MARVELL_BOARD_ID_BASE BC2_MARVELL_BOARD_ID_BASE
+ #define MV_MAX_MARVELL_BOARD_ID BC2_MARVELL_MAX_BOARD_ID
+ #define MV_MARVELL_BOARD_NUM BC2_MARVELL_BOARD_NUM
+ #define MV_DEFAULT_BOARD_ID DB_DX_BC2_ID
+#endif
+
/* Bobcat2 device revision */
#define BC2_DEV_VERSION_ID_REG 0xF8240 /* under server space */