Merge remote-tracking branch 'gfiber-internal/prism_dev' into work3
Change-Id: I0d072c15200db94707fb17d6bcd428e99e53e20e
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c
index a1be610..4e525aa 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c
@@ -137,8 +137,8 @@
}
pBoardInfo = mvBoardInfoGet();
- if (pBoardInfo->pBoardInit)
- pBoardInfo->pBoardInit(pBoardInfo);
+ if (pBoardInfo->pBoardEnvInit)
+ pBoardInfo->pBoardEnvInit(pBoardInfo);
nandDev = boardGetDevCSNum(0, BOARD_DEV_NAND_FLASH);
if (nandDev != 0xFFFFFFFF) {
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.h b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.h
index 0207a74..d8b74cd 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.h
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.h
@@ -401,7 +401,8 @@
typedef struct _boardInfo {
char boardName[MV_BOARD_NAME_LEN];
- MV_VOID (*pBoardInit)(struct _boardInfo *);
+ MV_VOID (*pBoardEnvInit)(struct _boardInfo *);
+ MV_VOID (*pBoardEgigaPhyInit)(struct _boardInfo *);
MV_U8 numBoardMppTypeValue;
MV_BOARD_MPP_TYPE_INFO *pBoardMppTypeValue;
MV_U8 numBoardMppConfigValue;
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
index 93f1019..c0edfa5 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
@@ -64,6 +64,7 @@
#include "mvCommon.h"
#include "mvBoardEnvLib.h"
#include "mvBoardEnvSpec.h"
+#include "eth-phy/mvEthPhy.h"
#include "gpp/mvGpp.h"
#include "twsi/mvTwsi.h"
@@ -1192,9 +1193,9 @@
MV_BOARD_GPP_INFO gflt200Evt2InfoBoardGppInfo[] = {
/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
{BOARD_GPP_PON_XVR_TX, 17},
- {BOARD_GPP_LED, 11, .name = "pon-red"},
- {BOARD_GPP_LED, 12, .name = "pon-blue"},
- {BOARD_GPP_LED, 14, .activeLow = 1, .name = "eth-link"},
+ {BOARD_GPP_LED, 9, .activeLow = 1, .name = "pon-blue"},
+ {BOARD_GPP_LED, 10, .activeLow = 1, .name = "pon-red"},
+ {BOARD_GPP_LED, 14, .activeLow = 0, .name = "eth-link"},
{BOARD_GPP_LED, 26, .activeLow = 1, .name = "eth-data"},
};
@@ -1248,7 +1249,7 @@
#define GFLT200_EVT1_BOARD_VER (0)
#define GFLT200_EVT2_BOARD_VER (1 << 13)
-static MV_VOID gflt200BoardInit(MV_BOARD_INFO *pBoardInfo)
+static MV_VOID gflt200BoardEnvInit(MV_BOARD_INFO *pBoardInfo)
{
mvGppTypeSet(0, GFLT200_GPP_BOARD_VER_MASK, GFLT200_GPP_BOARD_VER_MASK);
@@ -1289,9 +1290,37 @@
}
}
+static MV_VOID gflt200BoardEgigaPhyInit(MV_BOARD_INFO *pBoardInfo)
+{
+ /* pass led control to internal phy */
+ MV_REG_WRITE(LED_MATRIX_CTRL_REG(0), 0x82);
+
+ switch (mvGppValueGet(0, GFLT200_GPP_BOARD_VER_MASK)) {
+ case GFLT200_EVT1_BOARD_VER:
+ /* link = mpp 24 = p2 = phy led[5] */
+ /* data = mpp 23 = p1 = phy led[4] */
+ mvEthPhyRegWrite(0, 22, 3);
+ mvEthPhyRegWrite(0, 19, 0x64);
+ mvEthPhyRegWrite(0, 22, 0);
+ break;
+
+ default:
+ /* fallthrough */
+ case GFLT200_EVT2_BOARD_VER:
+ /* link = mpp 14 = c2 = phy led[2] */
+ /* data = mpp 26 = c1 = phy led[1] */
+ mvEthPhyRegWrite(0, 22, 3);
+ mvEthPhyRegWrite(0, 16, 0x40);
+ mvEthPhyRegWrite(0, 17, 0x10);
+ mvEthPhyRegWrite(0, 22, 0);
+ break;
+ }
+}
+
MV_BOARD_INFO gflt200Info = {
.boardName = "GFLT200",
- .pBoardInit = gflt200BoardInit,
+ .pBoardEnvInit = gflt200BoardEnvInit,
+ .pBoardEgigaPhyInit = gflt200BoardEgigaPhyInit,
.numBoardMppTypeValue = MV_ARRAY_SIZE(gflt200InfoBoardMppTypeInfo),
.pBoardMppTypeValue = gflt200InfoBoardMppTypeInfo,
.intsGppMaskLow = 0,
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
index 631b235..ddcd400 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
@@ -468,14 +468,14 @@
****************************************************************************/
#define GFLT200_EVT1_MPP0_7 0x22222220
#define GFLT200_EVT1_MPP8_15 0x00000002
-#define GFLT200_EVT1_MPP16_23 0x00000000
-#define GFLT200_EVT1_MPP24_31 0x40200000
+#define GFLT200_EVT1_MPP16_23 0x50000000
+#define GFLT200_EVT1_MPP24_31 0x40200005
#define GFLT200_EVT1_MPP32_37 0x00000004
#define GFLT200_EVT2_MPP0_7 0x22222220
-#define GFLT200_EVT2_MPP8_15 0x00000002
+#define GFLT200_EVT2_MPP8_15 0x05000002
#define GFLT200_EVT2_MPP16_23 0x00000000
-#define GFLT200_EVT2_MPP24_31 0x40200004
+#define GFLT200_EVT2_MPP24_31 0x40200504
#define GFLT200_EVT2_MPP32_37 0x00000004
/* GPPs
@@ -491,22 +491,21 @@
6 I2C_SCLK (out) ...
7 UART0_TX (out) ...
8 UART0_RX (in) ...
- 9 VDD_MARGIN_EN (out) ---
-10 VDD_MARGIN_CTRL (out) ---
-11 PON_LINK_LED (out) PON_LED_RED (out)
-12 PON_ERROR_LED (out) PON_LED_BLUE (out)
+ 9 VDD_MARGIN_EN (out) PON_LED_BLUE (out)
+10 VDD_MARGIN_CTRL (out) PON_LED_RED (out)
+11 PON_LINK_LED (out) ---
+12 PON_ERROR_LED (out) ---
13 BOARD_VER[0] (in) ...
14 --- GE_LINK_LED (out)
15 BOARD_VER[1] (in) ...
17 SW_RESET (out) ...
18 BOARD_VER[2] (in) ...
21 PON_TX_DIS (out) ...
-22 --- DOLOS_DETECT (in)
23 GE_DATA_LED (out) ---
24 GE_LINK_LED (out) PTP_TRIG_GEN (out)
25 --- PTP_EVENT_REQ (in)
26 PON_C2_DATA (out) GE_DATA_LED (out)
-27 PON_C2_CLK (out) PTP_CLK (in)
+27 PON_C2_CLK (out) DOLOS_DETECT (in)
28 SPI_WP_L (out) ...
29 PON_RX_LOS (in) ...
31 UART1_RX (out) ...
@@ -518,17 +517,17 @@
#define GFLT200_EVT1_GPP_OUT_ENA_LOW (BIT13 | BIT15 | BIT18 | BIT29)
#define GFLT200_EVT1_GPP_OUT_ENA_MID (BIT4)
-#define GFLT200_EVT1_GPP_OUT_VAL_LOW (BIT9 | BIT10 | BIT21 | BIT26 | BIT27 | BIT28)
+#define GFLT200_EVT1_GPP_OUT_VAL_LOW (BIT9 | BIT10 | BIT12 | BIT21 | BIT26 | BIT27 | BIT28)
#define GFLT200_EVT1_GPP_OUT_VAL_MID 0x0
#define GFLT200_EVT1_GPP_POL_LOW 0x0
#define GFLT200_EVT1_GPP_POL_MID 0x0
-#define GFLT200_EVT2_GPP_OUT_ENA_LOW (BIT13 | BIT15 | BIT18 | BIT22 | BIT29)
+#define GFLT200_EVT2_GPP_OUT_ENA_LOW (BIT9 | BIT13 | BIT15 | BIT18 | BIT27 | BIT29)
#define GFLT200_EVT2_GPP_OUT_ENA_MID (BIT4)
#define GFLT200_EVT2_GPP_OUT_VAL_LOW (BIT21 | BIT28)
-#define GFLT200_EVT2_GPP_OUT_VAL_MID 0x0
+#define GFLT200_EVT2_GPP_OUT_VAL_MID (BIT5)
#define GFLT200_EVT2_GPP_POL_LOW 0x0
#define GFLT200_EVT2_GPP_POL_MID 0x0
diff --git a/board/mv_feroceon/mv_kw2/mv_phy.c b/board/mv_feroceon/mv_kw2/mv_phy.c
index 5ab569d..d36d68b 100755
--- a/board/mv_feroceon/mv_kw2/mv_phy.c
+++ b/board/mv_feroceon/mv_kw2/mv_phy.c
@@ -197,9 +197,14 @@
MV_U32 reg;
MV_U32 i;
char *env;
+ MV_BOARD_INFO *pBoardInfo;
mvSysEthPhyInit();
+ pBoardInfo = mvBoardInfoGet();
+ if (pBoardInfo->pBoardEgigaPhyInit)
+ pBoardInfo->pBoardEgigaPhyInit(pBoardInfo);
+
if (ethComplex & (ESC_OPT_RGMIIA_MAC0 | ESC_OPT_RGMIIB_MAC0))
mvEthPhyInit(0, MV_FALSE);
diff --git a/board/mv_feroceon/mv_kw2/prism_cmd.c b/board/mv_feroceon/mv_kw2/prism_cmd.c
index b3ee087..324ee1c 100644
--- a/board/mv_feroceon/mv_kw2/prism_cmd.c
+++ b/board/mv_feroceon/mv_kw2/prism_cmd.c
@@ -566,6 +566,15 @@
}
}
+static void mux_led(MV_U8 mpp)
+{
+ MV_U32 reg = mvCtrlMppRegGet(mpp / 8);
+ MV_U32 val = MV_REG_READ(reg);
+
+ val &= ~(0xf << ((mpp % 8) * 4));
+ MV_REG_WRITE(reg, val);
+}
+
static int do_prism_diag_leds(int level, int argc, char *argv[])
{
int hz = 1;
@@ -607,9 +616,11 @@
&& (!name || (gpp->name && !strcmp(name, gpp->name)))) {
if (mode == LEDS_MODE_LIST)
printf("%s\n", gpp->name);
- else
+ else {
+ mux_led(gpp->gppPinNum);
config_led(gpp->gppPinNum, !gpp->activeLow,
mode, hz);
+ }
}
}