msys: axp-amc: update Board- and Ctrl- Env initializing
- enable obtaining BoardSysClk for AXP
- enable printing SoC revision for AXP
Change-Id: Ia336a3a55df10e9b51e9f6e758d13b2cbb15b755
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
Signed-off-by: Omri Itach <omrii@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/20550
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
index 354b7f9..4b9dd07 100755
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
@@ -203,6 +203,12 @@
mvGppTypeSet(0, 0xFFFFFFFF, board->gppOutEnValLow);
mvGppTypeSet(1, 0xFFFFFFFF, board->gppOutEnValMid);
+ if (mvCtrlDevFamilyIdGet(0) == MV_78460_DEV_ID) {
+ MV_REG_WRITE(GPP_DATA_OUT_REG(2), board->gppOutValHigh);
+ mvGppPolaritySet(2, 0xFFFFFFFF, board->gppPolarityValHigh);
+ mvGppTypeSet(2, 0xFFFFFFFF, board->gppOutEnValHigh);
+ }
+
#ifndef CONFIG_CUSTOMER_BOARD_SUPPORT
mvBoardOobPortCfgSet();
#endif
@@ -544,6 +550,44 @@
}
/*******************************************************************************
+* mvBoardSysClkGetAxp - Get the board SysClk of AXP (CPU bus clock , i.e. DDR clock)
+*
+* DESCRIPTION:
+* This routine extract the CPU bus clock.
+*
+* INPUT:
+* countNum - Counter number.
+*
+* OUTPUT:
+* None.
+*
+* RETURN:
+* 32bit clock cycles in Hertz.
+*
+*******************************************************************************/
+MV_U32 mvBoardSysClkGetAxp(MV_VOID)
+{
+ MV_U32 idx;
+ MV_U32 cpuFreqMhz, ddrFreqMhz;
+ MV_CPU_ARM_CLK_RATIO clockRatioTbl[] = MV_DDR_L2_CLK_RATIO_TBL_AXP;
+
+ idx = MSAR_DDR_L2_CLK_RATIO_IDX(MV_REG_READ(MPP_SAMPLE_AT_RESET(0)),
+ MV_REG_READ(MPP_SAMPLE_AT_RESET(1)));
+
+ if (clockRatioTbl[idx].vco2cpu != 0) { /* valid ratio ? */
+ cpuFreqMhz = mvCpuPclkGet() / 1000000; /* obtain CPU freq */
+ cpuFreqMhz *= clockRatioTbl[idx].vco2cpu; /* compute VCO freq */
+ ddrFreqMhz = cpuFreqMhz / clockRatioTbl[idx].vco2ddr;
+ /* round up to integer MHz */
+ if (((cpuFreqMhz % clockRatioTbl[idx].vco2ddr) * 10 / clockRatioTbl[idx].vco2ddr) >= 5)
+ ddrFreqMhz++;
+
+ return ddrFreqMhz * 1000000;
+ } else
+ return 0xFFFFFFFF;
+}
+
+/*******************************************************************************
* mvBoardSysClkGet - Get the board SysClk (CPU bus clock , i.e. DDR clock)
*
* DESCRIPTION:
@@ -566,6 +610,8 @@
MV_U32 freq_tbl_ac3[] = MV_CORE_CLK_TBL_AC3;
MV_U16 family = mvCtrlDevFamilyIdGet(0);
+ if (family == MV_78460_DEV_ID)
+ return mvBoardSysClkGetAxp();
idx = MSAR_CORE_CLK(MV_DFX_REG_READ(DFX_DEVICE_SAR_REG(0)), MV_DFX_REG_READ(DFX_DEVICE_SAR_REG(1)));
if (idx >= 7)
diff --git a/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvLib.c b/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvLib.c
index fa2e37d..5c991f9 100755
--- a/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvLib.c
+++ b/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvLib.c
@@ -268,6 +268,8 @@
MV_U32 mppGroup;
MV_U32 mppVal;
MV_U32 i, gppMask;
+ int maxGroup = mvCtrlDevFamilyIdGet(0) == MV_78460_DEV_ID ?
+ MV_MPP_MAX_GROUP_AXP : MV_MPP_MAX_GROUP;
/* Disable MBus Error Propagation */
@@ -280,23 +282,23 @@
mvBoardMppModulesScan();
/* Read MPP config values from board level and write MPP options to HW */
- for (mppGroup = 0; mppGroup < MV_MPP_MAX_GROUP; mppGroup++) {
+ for (mppGroup = 0; mppGroup < maxGroup; mppGroup++) {
mppVal = mvBoardMppGet(mppGroup); /* get pre-defined values */
MV_REG_WRITE(mvCtrlMppRegGet(mppGroup), mppVal);
}
/* disable all GPIO interrupts */
- for (i = 0; i < MV_GPP_MAX_GROUP; i++) {
+ for (i = 0; i < maxGroup; i++) {
MV_REG_WRITE(GPP_INT_MASK_REG(i), 0x0);
MV_REG_WRITE(GPP_INT_LVL_REG(i), 0x0);
}
/* clear all int */
- for (i = 0; i < MV_GPP_MAX_GROUP; i++)
+ for (i = 0; i < maxGroup; i++)
MV_REG_WRITE(GPP_INT_CAUSE_REG(i), 0x0);
/* Set gpp interrupts as needed */
- for (i = 0; i < MV_GPP_MAX_GROUP; i++) {
+ for (i = 0; i < maxGroup; i++) {
gppMask = mvBoardGpioIntMaskGet(i);
mvGppTypeSet(i, gppMask , (MV_GPP_IN & gppMask));
mvGppPolaritySet(i, gppMask , (MV_GPP_IN_INVERT & gppMask));
@@ -309,12 +311,14 @@
if (MV_OK != mvCtrlSerdesPhyConfig())
mvOsPrintf("mvCtrlEnvInit: Can't init some or all SERDES lanes\n");
- mvCtrlDevBusInit();
+ if (mvCtrlDevFamilyIdGet(0) != MV_78460_DEV_ID) {
+ mvCtrlDevBusInit();
#ifdef ERRATA_GL_5956802
/* SW WA for ERRATA 5956802 - disable the external i2c debugger access */
MV_REG_BIT_RESET(TWSI_CONFIG_DEBUG_REG, TWSI_DEBUG_SLAVE_PORT0_EN);
#endif
+ }
mvOsDelay(100);
@@ -651,7 +655,11 @@
*******************************************************************************/
MV_STATUS mvCtrlNameGet(char *pNameBuff)
{
- mvOsSPrintf(pNameBuff, "%s", SOC_NAME_PREFIX);
+ if (mvCtrlDevFamilyIdGet(0) == MV_78460_DEV_ID)
+ mvOsSPrintf(pNameBuff, "%s", "");
+ else
+ mvOsSPrintf(pNameBuff, "%s", SOC_NAME_PREFIX);
+
return MV_OK;
}
@@ -721,7 +729,17 @@
mvOsSPrintf(pNameBuff, " Rev %s", revArrayAC3[revId]);
return;
}
-
+ } else if (ctrlFamily == MV_78460_DEV_ID) {
+ switch (mvCtrlModelRevGet()) {
+ case MV_78460_A0_ID:
+ mvOsSPrintf(pNameBuff, "%s", MV_78460_A0_NAME);
+ return;
+ case MV_78460_B0_ID:
+ mvOsSPrintf(pNameBuff, "%s", MV_78460_B0_NAME);
+ return;
+ default:
+ break;
+ }
} else
mvOsPrintf("%s: Error: Wrong controller model %#x\n", __func__, ctrlFamily);