fix: a38x: Change the boot device source register in secure boot mode

- Change the boot device source for secure boot mode.
  Instead of reading boot device ID from SatR register,
  read if from secure configuration register, which
  reflects the value burned into efuse.

- Once the secure mode activated by efuse, the actual
  boot device always taken from efuse by the HW and any
  other boot device configured by SatR is ignored.
  Therefore the mvCtrlbootSrcGet() function should be
  aware of the boot mode (secure/non-secure) in order
  to return the correct boot device ID.

Change-Id: Iea17ab9c02babce3fcd7a4b86d3d4ebb89552827
Signed-off-by: Konstantin Porotchkin <kostap@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/23818
Tested-by: Star_Automation <star@marvell.com>
Reviewed-by: Omri Itach <omrii@marvell.com>
diff --git a/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvLib.c b/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvLib.c
index 8be1c58..ed750d9 100644
--- a/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvLib.c
+++ b/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvLib.c
@@ -750,11 +750,23 @@
 MV_U32 mvCtrlbootSrcGet(void)
 {
 	MV_U32 satrVal, bootSrc;
+	MV_U32 secBootCtrl = MV_REG_READ(SECURE_BOOT_REG);
 
-	satrVal = MV_REG_READ(MPP_SAMPLE_AT_RESET);
-	bootSrc = (satrVal & SATR_BOOT_SRC_MASK) >> SATR_BOOT_SRC_OFFS;
+	if ((secBootCtrl & SECURE_BOOT_ENA_MASK) != 0) {
+		/* Secure mode
+		 Once the secure mode activated by efuse, the actual
+		 boot device is always taken from the efuse by the HW
+		 and any other boot device configured by SatR is ignored.
+		*/
+		bootSrc = (secBootCtrl & SECURE_BOOT_DEVICE_MASK) >> SECURE_BOOT_DEVICE_OFFS;
+	} else {
 
-	DB(mvOsPrintf("%s: Read from S@R BOOTSRC = 0x%X\n", __func__, bootSrc));
+		satrVal = MV_REG_READ(MPP_SAMPLE_AT_RESET);
+		bootSrc = (satrVal & SATR_BOOT_SRC_MASK) >> SATR_BOOT_SRC_OFFS;
+
+		DB(mvOsPrintf("%s: Read from S@R BOOTSRC = 0x%X\n", __func__, bootSrc));
+	}
+
 	return bootSrc;
 }
 
diff --git a/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvRegs.h b/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvRegs.h
index 18c06c1..2b4c94a 100644
--- a/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvRegs.h
+++ b/board/mv_ebu/a38x/armada_38x_family/ctrlEnv/mvCtrlEnvRegs.h
@@ -228,6 +228,15 @@
 #define GENERAL_PURPOSE_RESERVED1_REG		0x182E4
 #define GENERAL_PURPOSE_RESERVED1_DEFAULT_VALUE	(~BIT17)
 
+/*****************/
+/* Secure boot */
+/*****************/
+#define SECURE_BOOT_REG				0x18280
+#define SECURE_BOOT_ENA_OFFS			0
+#define SECURE_BOOT_ENA_MASK			(1 << SECURE_BOOT_ENA_OFFS)
+#define SECURE_BOOT_DEVICE_OFFS			8
+#define SECURE_BOOT_DEVICE_MASK			(0xFF << SECURE_BOOT_DEVICE_OFFS)
+
 /* USB3 registers */
 #define MV_USB3_WIN_BASE(dev)		(MV_USB3_REGS_BASE(dev) + 0x4000)