[U-Boot,v2] board: dra71: Fix selection of OPPs

Submitted by Lokesh Vutla on April 20, 2017, 8:37 a.m.

Details

Message ID 20170420083752.10925-1-lokeshvutla@ti.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Lokesh Vutla April 20, 2017, 8:37 a.m.
As per the DM[1] Dated June 2016–Revised February 2017, Table 5-3,
DRA71 supports the following OPPs for various voltage domains:

VDD_MPU:	OPP_NOM
VDD_CORE:	OPP_NOM
VDD_GPU:	OPP_NOM
VDD_DSPEVE:	OPP_NOM, OPP_HIGH
VDD_IVA:	OPP_NOM, OPP_HIGH

This patch add support for selection of the above OPPs instead of
using OPP_NOM for all voltage domains.

[1] http://www.ti.com/lit/ds/symlink/dra718.pdf

Reported-by: Vishal Mahaveer <vishalm@ti.com>
Signed-off-by: Suman Anna <s-anna@ti.com>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
---
Changes since v1:
- Updated efuse reg bits for OPP_HIGH as pointed out by Suman.

 board/ti/dra7xx/evm.c | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

Comments

Tom Rini April 28, 2017, 1:08 p.m.
On Thu, Apr 20, 2017 at 02:07:52PM +0530, Lokesh Vutla wrote:

> As per the DM[1] Dated June 2016–Revised February 2017, Table 5-3,
> DRA71 supports the following OPPs for various voltage domains:
> 
> VDD_MPU:	OPP_NOM
> VDD_CORE:	OPP_NOM
> VDD_GPU:	OPP_NOM
> VDD_DSPEVE:	OPP_NOM, OPP_HIGH
> VDD_IVA:	OPP_NOM, OPP_HIGH
> 
> This patch add support for selection of the above OPPs instead of
> using OPP_NOM for all voltage domains.
> 
> [1] http://www.ti.com/lit/ds/symlink/dra718.pdf
> 
> Reported-by: Vishal Mahaveer <vishalm@ti.com>
> Signed-off-by: Suman Anna <s-anna@ti.com>
> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>

Applied to u-boot/master, thanks!

Patch hide | download patch | download mbox

diff --git a/board/ti/dra7xx/evm.c b/board/ti/dra7xx/evm.c
index ae2d59da43..ed0bc181cf 100644
--- a/board/ti/dra7xx/evm.c
+++ b/board/ti/dra7xx/evm.c
@@ -438,14 +438,18 @@  struct vcores_data dra718_volts = {
 	 * and are powered by BUCK1 of LP873X PMIC
 	 */
 	.eve.value[OPP_NOM]	= VDD_EVE_DRA7_NOM,
+	.eve.value[OPP_HIGH]	= VDD_EVE_DRA7_HIGH,
 	.eve.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_DSPEVE_NOM,
+	.eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
 	.eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
 	.eve.addr	= LP873X_REG_ADDR_BUCK1,
 	.eve.pmic	= &lp8733,
 	.eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
 
 	.iva.value[OPP_NOM]	= VDD_IVA_DRA7_NOM,
+	.iva.value[OPP_HIGH]	= VDD_IVA_DRA7_HIGH,
 	.iva.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_IVA_NOM,
+	.iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
 	.iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
 	.iva.addr	= LP873X_REG_ADDR_BUCK1,
 	.iva.pmic	= &lp8733,
@@ -456,27 +460,44 @@  int get_voltrail_opp(int rail_offset)
 {
 	int opp;
 
-	/*
-	 * DRA71x supports only OPP_NOM.
-	 */
-	if (board_is_dra71x_evm())
-		return OPP_NOM;
-
 	switch (rail_offset) {
 	case VOLT_MPU:
 		opp = DRA7_MPU_OPP;
+		/* DRA71x supports only OPP_NOM for MPU */
+		if (board_is_dra71x_evm())
+			opp = OPP_NOM;
 		break;
 	case VOLT_CORE:
 		opp = DRA7_CORE_OPP;
+		/* DRA71x supports only OPP_NOM for CORE */
+		if (board_is_dra71x_evm())
+			opp = OPP_NOM;
 		break;
 	case VOLT_GPU:
 		opp = DRA7_GPU_OPP;
+		/* DRA71x supports only OPP_NOM for GPU */
+		if (board_is_dra71x_evm())
+			opp = OPP_NOM;
 		break;
 	case VOLT_EVE:
 		opp = DRA7_DSPEVE_OPP;
+		/*
+		 * DRA71x does not support OPP_OD for EVE.
+		 * If OPP_OD is selected by menuconfig, fallback
+		 * to OPP_NOM.
+		 */
+		if (board_is_dra71x_evm() && opp == OPP_OD)
+			opp = OPP_NOM;
 		break;
 	case VOLT_IVA:
 		opp = DRA7_IVA_OPP;
+		/*
+		 * DRA71x does not support OPP_OD for IVA.
+		 * If OPP_OD is selected by menuconfig, fallback
+		 * to OPP_NOM.
+		 */
+		if (board_is_dra71x_evm() && opp == OPP_OD)
+			opp = OPP_NOM;
 		break;
 	default:
 		opp = OPP_NOM;