BobK: Add SAR command support for Bobk board.

	Valid fields:
	 coreclock, freq, pcimode, tmfreq, jtagcpu, ptppll,
	 pciegen1, bootsrc, deviceid

Change-Id: I57338d1a14f5a0149b846e70cc68d6cad5ea7550
Signed-off-by: Terry <bjzhou@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/22432
Reviewed-by: Omri Itach <omrii@marvell.com>
Tested-by: Omri Itach <omrii@marvell.com>
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
index 5540245..cb3643c 100755
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
@@ -1669,9 +1669,9 @@
 	MV_U8		sar0;
 	MV_STATUS	rc1;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
-	MV_U32		fieldOffs = (family == MV_BOBCAT2_DEV_ID) ? 0 : 2;
+	MV_U32		fieldOffs = (family == MV_ALLEYCAT3_DEV_ID) ? 2 : 0;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
@@ -1691,9 +1691,10 @@
 	MV_U8		sar0;
 	MV_STATUS	rc1;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
-	MV_U32		fieldOffs = (family == MV_BOBCAT2_DEV_ID) ? 0 : 2;
+	MV_U32		fieldOffs = (family == MV_ALLEYCAT3_DEV_ID) ? 2 : 0;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)
+		&& (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
@@ -1730,6 +1731,16 @@
 
 		*value = ((((sar2 & 0x1)) << 3) | ((sar & 0x18) >> 3));
 
+	} else if (family == MV_BOBK_DEV_ID) {
+		MV_U8		sar2;
+
+		/* BOBK */
+		if ((MV_ERROR == mvBoardTwsiSatRGet(0, 0, &sar)) ||
+			(MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar2)))
+			return MV_ERROR;
+
+		*value = ((((sar2 & 0x1)) << 3) | ((sar & 0x18) >> 3));
+
 	} else if (family == MV_ALLEYCAT3_DEV_ID) {
 
 		/* AC3 */
@@ -1773,6 +1784,27 @@
 			return MV_ERROR;
 		}
 
+	} else if (family == MV_BOBK_DEV_ID) {
+		MV_U8		sar2;
+		/* BOBK */
+		if ((MV_ERROR == mvBoardTwsiSatRGet(0, 0, &sar)) ||
+			(MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar2)))
+			return MV_ERROR;
+
+		sar  &= ~0x18;
+		sar2 &= ~0x1;
+		sar  |= ((freqVal & 0x03) << 3);
+		sar2 |= ((freqVal & 0x04) >> 2);
+
+		if (MV_OK != mvBoardTwsiSatRSet(0, 0, sar)) {
+			DB(mvOsPrintf("Board: Write CpuFreq(1) S@R fail\n"));
+			return MV_ERROR;
+		}
+		if (MV_OK != mvBoardTwsiSatRSet(3, 0, sar2)) {
+			DB(mvOsPrintf("Board: Write CpuFreq(2) S@R fail\n"));
+			return MV_ERROR;
+		}
+
 	} else if (family == MV_ALLEYCAT3_DEV_ID) {
 
 		/* AC3 */
@@ -1802,16 +1834,27 @@
 	MV_U8		sar2;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
-	if (family != MV_BOBCAT2_DEV_ID) {
+	if (family != MV_BOBCAT2_DEV_ID && family != MV_BOBK_DEV_ID) {
 		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
 		return MV_ERROR; /* AC3 */
 	}
 
-	/* BC2 */
-	if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar2))
-		return MV_ERROR;
+	if (family == MV_BOBCAT2_DEV_ID) {
 
-	*value = ((sar2 & 0x0E) >> 1);
+		/* BC2 */
+		if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar2))
+			return MV_ERROR;
+
+		*value = ((sar2 & 0x0E) >> 1);
+
+	} else if (family == MV_BOBK_DEV_ID) {
+
+		/* BOBK */
+		if (MV_ERROR == mvBoardTwsiSatRGet(0, 0, &sar2))
+			return MV_ERROR;
+
+		*value = (sar2 & 0x07);
+	}
 
 	return MV_OK;
 }
@@ -1822,22 +1865,41 @@
 	MV_U8		sar2;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
-	if (family != MV_BOBCAT2_DEV_ID) {
+	if (family != MV_BOBCAT2_DEV_ID && family != MV_BOBK_DEV_ID) {
 		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
 		return MV_ERROR; /* AC3 */
 	}
 
-	/* BC2 */
-	if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar2))
-		return MV_ERROR;
+	if (family == MV_BOBCAT2_DEV_ID) {
 
-	sar2 &= ~0xE;
-	sar2 |= ((freqVal & 0x07) << 1);
+		/* BC2 */
+		if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar2))
+			return MV_ERROR;
 
-	if (MV_OK != mvBoardTwsiSatRSet(2, 0, sar2)) {
-		DB(mvOsPrintf("Board: Write TM-Freq S@R fail\n"));
-		return MV_ERROR;
+		sar2 &= ~0xE;
+		sar2 |= ((freqVal & 0x07) << 1);
+
+		if (MV_OK != mvBoardTwsiSatRSet(2, 0, sar2)) {
+			DB(mvOsPrintf("Board: Write TM-Freq S@R fail\n"));
+			return MV_ERROR;
+		}
+	} else if (family == MV_BOBK_DEV_ID) {
+
+		/* BOBK */
+		if (MV_ERROR == mvBoardTwsiSatRGet(0, 0, &sar2))
+			return MV_ERROR;
+
+		sar2 &= ~0x7;
+		sar2 |= (freqVal & 0x07);
+
+		if (MV_OK != mvBoardTwsiSatRSet(0, 0, sar2)) {
+			DB(mvOsPrintf("Board: Write TM-Freq S@R fail\n"));
+			return MV_ERROR;
+		}
 	}
+
+	/* BC2 or BOBK*/
+
 	DB(mvOsPrintf("Board: Write TM-Freq S@R succeeded\n"));
 
 	return MV_OK;
@@ -1849,16 +1911,27 @@
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
-	if (family != MV_BOBCAT2_DEV_ID) {
+	if (family != MV_BOBCAT2_DEV_ID && family != MV_BOBK_DEV_ID) {
 		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
 		return MV_ERROR; /* AC3 */
 	}
 
-	/* BC2 */
-	if (MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar))
-		return MV_ERROR;
+	if (family == MV_BOBCAT2_DEV_ID) {
 
-	*value = (sar & 0x8) >> 3;
+		/* BC2 */
+		if (MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar))
+			return MV_ERROR;
+
+		*value = (sar & 0x8) >> 3;
+
+	} else if (family == MV_BOBK_DEV_ID) {
+
+		/* BOBK */
+		if (MV_ERROR == mvBoardTwsiSatRGet(1, 0, &sar))
+			return MV_ERROR;
+
+		*value = (sar & 0x8) >> 3;
+	}
 
 	return MV_OK;
 }
@@ -1869,21 +1942,38 @@
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
-	if (family != MV_BOBCAT2_DEV_ID) {
+	if (family != MV_BOBCAT2_DEV_ID && family != MV_BOBK_DEV_ID) {
 		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
 		return MV_ERROR; /* AC3 */
 	}
 
-	/* BC2 */
-	if (MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar))
-		return MV_ERROR;
+	if (family == MV_BOBCAT2_DEV_ID) {
 
-	sar &= ~(0x8);
-	sar |= ((cpu & 0x1) << 3);
+		/* BC2 */
+		if (MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar))
+			return MV_ERROR;
 
-	if (MV_OK != mvBoardTwsiSatRSet(3, 0, sar)) {
-		DB(mvOsPrintf("Board: Write JTAG CPU S@R fail\n"));
-		return MV_ERROR;
+		sar &= ~(0x8);
+		sar |= ((cpu & 0x1) << 3);
+
+		if (MV_OK != mvBoardTwsiSatRSet(3, 0, sar)) {
+			DB(mvOsPrintf("Board: Write JTAG CPU S@R fail\n"));
+			return MV_ERROR;
+		}
+
+	} else if (family == MV_BOBK_DEV_ID) {
+
+		/* BOBK */
+		if (MV_ERROR == mvBoardTwsiSatRGet(1, 0, &sar))
+			return MV_ERROR;
+
+		sar &= ~(0x8);
+		sar |= ((cpu & 0x1) << 3);
+
+		if (MV_OK != mvBoardTwsiSatRSet(1, 0, sar)) {
+			DB(mvOsPrintf("Board: Write JTAG CPU S@R fail\n"));
+			return MV_ERROR;
+		}
 	}
 
 	DB(mvOsPrintf("Board: Write JTAG CPU  S@R succeeded\n"));
@@ -1897,8 +1987,8 @@
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
 	if (family != MV_BOBCAT2_DEV_ID) {
-		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
-		return MV_ERROR; /* AC3 */
+		DB(mvOsPrintf("%s: Only Support BC2 controller family\n", __func__));
+		return MV_ERROR; /* AC3/BOBK */
 	}
 
 	/* BC2 */
@@ -1917,8 +2007,8 @@
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
 	if (family != MV_BOBCAT2_DEV_ID) {
-		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
-		return MV_ERROR; /* AC3 */
+		DB(mvOsPrintf("%s: Only Support BC2 controller family\n", __func__));
+		return MV_ERROR; /* AC3/BOBK */
 	}
 
 	/* BC2 */
@@ -1944,8 +2034,8 @@
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
 
 	if (family != MV_BOBCAT2_DEV_ID) {
-		DB(mvOsPrintf("%s: AC3 controller family is not supported\n", __func__));
-		return MV_ERROR; /* AC3 */
+		DB(mvOsPrintf("%s: Only Support BC2 controller family\n", __func__));
+		return MV_ERROR; /* AC3/BOBK */
 	}
 
 	if (port > 1) {
@@ -2048,9 +2138,9 @@
 {
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
-	MV_U8		twsiDevice = (family == MV_BOBCAT2_DEV_ID) ? 3 : 2;
+	MV_U8		twsiDevice = (family == MV_ALLEYCAT3_DEV_ID) ? 2 : 3;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
@@ -2058,7 +2148,10 @@
 	if (MV_ERROR == mvBoardTwsiSatRGet(twsiDevice, 0, &sar))
 		return MV_ERROR;
 
-	*value = (sar & 0x7);
+	if (family == MV_BOBK_DEV_ID)
+		*value = ((sar & 0x0E) >> 1);
+	else
+		*value = (sar & 0x7);
 
 	return MV_OK;
 }
@@ -2068,9 +2161,9 @@
 {
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
-	MV_U8		twsiDevice = (family == MV_BOBCAT2_DEV_ID) ? 3 : 2;
+	MV_U8		twsiDevice = (family == MV_ALLEYCAT3_DEV_ID) ? 2 : 3;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
@@ -2078,8 +2171,13 @@
 	if (MV_ERROR == mvBoardTwsiSatRGet(twsiDevice, 0, &sar))
 		return MV_ERROR;
 
-	sar &= ~(0x7);
-	sar |= (val & 0x7);
+	if (family == MV_BOBK_DEV_ID) {
+		sar &= ~(0xE);
+		sar |= ((val & 0x7) << 1);
+	} else {
+		sar &= ~(0x7);
+		sar |= (val & 0x7);
+	}
 
 	if (MV_OK != mvBoardTwsiSatRSet(twsiDevice, 0, sar)) {
 		DB(mvOsPrintf("Board: Write BootDev S@R fail\n"));
@@ -2094,16 +2192,17 @@
 {
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
+	MV_U8		twsiDevice = (family == MV_BOBK_DEV_ID) ? 2 : 0;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
 
-	if (MV_ERROR == mvBoardTwsiSatRGet(0, 0, &sar))
-		return MV_ERROR;
+	if (MV_ERROR == mvBoardTwsiSatRGet(twsiDevice, 0, &sar))
+			return MV_ERROR;
 
-	*value = (sar & 0x1F);
+		*value = (sar & 0x1F);
 
 	return MV_OK;
 }
@@ -2113,19 +2212,20 @@
 {
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
+	MV_U8		twsiDevice = (family == MV_BOBK_DEV_ID) ? 2 : 0;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
 
-	if (MV_ERROR == mvBoardTwsiSatRGet(0, 0, &sar))
+	if (MV_ERROR == mvBoardTwsiSatRGet(twsiDevice, 0, &sar))
 		return MV_ERROR;
 
 	sar &= ~(0x1F);
 	sar |= (val & 0x1F);
 
-	if (MV_OK != mvBoardTwsiSatRSet(0, 0, sar)) {
+	if (MV_OK != mvBoardTwsiSatRSet(twsiDevice, 0, sar)) {
 		DB(mvOsPrintf("Board: Write device-id S@R fail\n"));
 		return MV_ERROR;
 	}
@@ -2184,17 +2284,24 @@
 {
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
-	MV_U8		bitOffset = (family == MV_BOBCAT2_DEV_ID) ? 4 : 3;
+	MV_U8		bitOffset = (family == MV_ALLEYCAT3_DEV_ID) ? 3 : 4;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
 
-	if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar))
-		return MV_ERROR;
+	if ((family == MV_ALLEYCAT3_DEV_ID) || (family == MV_BOBCAT2_DEV_ID)) {
+		if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar))
+			return MV_ERROR;
 
-	*val = (sar & (0x1 << bitOffset)) >> bitOffset;
+		*val = (sar & (0x1 << bitOffset)) >> bitOffset;
+	} else if (family == MV_BOBK_DEV_ID) {
+		if (MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar))
+			return MV_ERROR;
+
+		*val = (sar & (0x1 << bitOffset)) >> bitOffset;
+	}
 
 	return MV_OK;
 }
@@ -2204,22 +2311,35 @@
 {
 	MV_U8		sar;
 	MV_U16		family = mvCtrlDevFamilyIdGet(0);
-	MV_U8		bitOffset = (family == MV_BOBCAT2_DEV_ID) ? 4 : 3;
+	MV_U8		bitOffset = (family == MV_ALLEYCAT3_DEV_ID) ? 3 : 4;
 
-	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID)) {
+	if ((family != MV_ALLEYCAT3_DEV_ID) && (family != MV_BOBCAT2_DEV_ID) && (family != MV_BOBK_DEV_ID)) {
 		DB(mvOsPrintf("%s: Controller family (0x%04x) is not supported\n", __func__, family));
 		return MV_ERROR;
 	}
 
-	if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar))
-		return MV_ERROR;
+	if ((family == MV_ALLEYCAT3_DEV_ID) || (family == MV_BOBCAT2_DEV_ID)) {
+		if (MV_ERROR == mvBoardTwsiSatRGet(2, 0, &sar))
+			return MV_ERROR;
 
-	sar &= ~(0x1 << bitOffset);
-	sar |= (val & 0x1) << bitOffset;
+		sar &= ~(0x1 << bitOffset);
+		sar |= (val & 0x1) << bitOffset;
 
-	if (MV_OK != mvBoardTwsiSatRSet(2, 0, sar)) {
-		DB(mvOsPrintf("Board: Write pcimode S@R fail\n"));
-		return MV_ERROR;
+		if (MV_OK != mvBoardTwsiSatRSet(2, 0, sar)) {
+			DB(mvOsPrintf("Board: Write pcimode S@R fail\n"));
+			return MV_ERROR;
+		}
+	} else if (family == MV_BOBK_DEV_ID) {
+		if (MV_ERROR == mvBoardTwsiSatRGet(3, 0, &sar))
+			return MV_ERROR;
+
+		sar &= ~(0x1 << bitOffset);
+		sar |= (val & 0x1) << bitOffset;
+
+		if (MV_OK != mvBoardTwsiSatRSet(3, 0, sar)) {
+			DB(mvOsPrintf("Board: Write pcimode S@R fail\n"));
+			return MV_ERROR;
+		}
 	}
 
 	DB(mvOsPrintf("Board: Write pcimode S@R succeeded\n"));
@@ -2446,7 +2566,12 @@
 			mvOsPrintf("%s: Error: Unsupported board ID (%d)\n", __func__, val);
 			return MV_ERROR;
 		}
-	} else {
+	} else if (family == MV_BOBK_DEV_ID) {
+		if (val >= BOBK_MARVELL_BOARD_NUM) {
+			mvOsPrintf("%s: Error: Unsupported board ID (%d)\n", __func__, val);
+			return MV_ERROR;
+		}
+	} else if (family == MV_BOBCAT2_DEV_ID) {
 		if (val >= BC2_MARVELL_BOARD_NUM) {
 			mvOsPrintf("%s: Error: Unsupported board ID (%d)\n", __func__, val);
 			return MV_ERROR;