Skip to contentSkip to conversation

T210: P2571: Enable SD-card power via PMIC LDO2

PATCH New Tom Warren 2 participants 7 messages Jul 29, 2015 – Aug 5, 2015

Subsystems (3)
lore
Share & tools
lore

Tom Warren

author
#0 lore raw

PATCH 1/1 T210: P2571: Enable SD-card power via PMIC LDO2

This was done in the 32-bit AVP loader (SPL) but is board-specific so should be moved to the CPU portion.

---
 board/nvidia/p2571/Makefile        |  1 -
 board/nvidia/p2571/max77620_init.c | 85 --------------------------------------
 board/nvidia/p2571/max77620_init.h |  3 +-
 board/nvidia/p2571/p2571.c         | 22 ++++++++++
 4 files changed, 24 insertions(+), 87 deletions(-)
 delete mode 100644 board/nvidia/p2571/max77620_init.c
board/nvidia/p2571/Makefile +0 -1
index 223062e..627b7ef 100644
@@ -5,5 +5,4 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y	+= max77620_init.o
 obj-y	+= p2571.o
board/nvidia/p2571/max77620_init.c deleted +0 -85

85 lines not on this page · raw message

board/nvidia/p2571/max77620_init.h +2 -1
index 9d5cce7..92c3719 100644
@@ -10,7 +10,8 @@
 
 /* MAX77620-PMIC-specific early init regs */
 
-#define MAX77620_I2C_ADDR		0x78		/* or 0x3C 7-bit */
+#define MAX77620_I2C_ADDR		0x78
+#define MAX77620_I2C_ADDR_7BIT		0x3C
 
 #define MAX77620_SD0_REG		0x16
 #define MAX77620_SD1_REG		0x17
board/nvidia/p2571/p2571.c +22 -0
index fc710c1..842242c 100644
@@ -6,10 +6,32 @@
  */
 
 #include <common.h>
+#include <i2c.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/pinmux.h>
+#include "max77620_init.h"
 #include "pinmux-config-p2571.h"
 
+void pin_mux_mmc(void)
+{
+	struct udevice *dev;
+	uchar val;
+	int ret;
+
+	/* Turn on MAX77620 LDO2 to 3.3V for SD card power */
+	debug("%s: Set LDO2 for VDDIO_SDMMC_AP power to 3.3V\n", __func__);
+	ret = i2c_get_chip_for_busnum(0, MAX77620_I2C_ADDR_7BIT, 1, &dev);
+	if (ret) {
+		printf("%s: Cannot find MAX77620 I2C chip\n", __func__);
+		return;
+	}
+	/* 0xF2 for 3.3v, enabled: bit7:6 = 11 = enable, bit5:0 = voltage */
+	val = 0xF2;
+	ret = dm_i2c_write(dev, MAX77620_CNFG1_L2_REG, &val, 1);
+	if (ret)
+		printf("i2c_write 0 0x3c 0x27 failed: %d\n", ret);
+}
+
 /*
  * Routine: pinmux_init
  * Description: Do individual peripheral pinmux configs
Signature · 1 line
1.8.2.1.610.g562af5b
author
#1 lore raw

PATCH 1/1 T210: P2571: Restore USB gadget mode (ums)

The tegra-common-usb-gadget.h include was causing some build problems in ci_udc.c with a 64-bit gcc in an earlier version of the T210 patches, but it is working fine now, so restore it.

---
 include/configs/p2571.h | 1 +
 1 file changed, 1 insertion(+)
include/configs/p2571.h +1 -0
index 77faf5f..d39fa2a 100644
@@ -68,6 +68,7 @@
  * TODO(twarren at nvidia.com) - add tegra-common-usb-gadget.h back
  * breaks 64-bit build in ci_udc.c
  */
+#include "tegra-common-usb-gadget.h"
 #include "tegra-common-post.h"
 
 #define COUNTER_FREQUENCY	38400000
Signature · 1 line
1.8.2.1.610.g562af5b
author
#2 lore raw

PATCH 1/1 T210: P2571: Turn CPU fan on

In reply to Tom Warren

CPU board (E2530) has a fan - turn it on via GPIO to keep the SoC cool.

---
 arch/arm/mach-tegra/board2.c |  3 +++
 board/nvidia/p2571/p2571.c   | 12 ++++++++++++
 2 files changed, 15 insertions(+)
arch/arm/mach-tegra/board2.c +3 -0
index 36bcfb0..2927b4e 100644
@@ -60,6 +60,7 @@ __weak void pin_mux_usb(void) {}
 __weak void pin_mux_spi(void) {}
 __weak void gpio_early_init_uart(void) {}
 __weak void pin_mux_display(void) {}
+__weak void start_cpu_fan(void) {}
 
 #if defined(CONFIG_TEGRA_NAND)
 __weak void pin_mux_nand(void)
@@ -230,6 +231,8 @@ int board_late_init(void)
 		setenv("cpu_ns_mode", "");
 	}
 #endif
+	start_cpu_fan();
+
 	return 0;
 }
 
board/nvidia/p2571/p2571.c +12 -0
index 842242c..4b0f973 100644
@@ -9,6 +9,7 @@
 #include <i2c.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/pinmux.h>
+#include <asm/gpio.h>
 #include "max77620_init.h"
 #include "pinmux-config-p2571.h"
 
@@ -49,3 +50,14 @@ void pinmux_init(void)
 	pinmux_config_drvgrp_table(p2571_drvgrps,
 				   ARRAY_SIZE(p2571_drvgrps));
 }
+
+/*
+ * Routine: start_cpu_fan
+ * Description: Enable/start PWM CPU fan on Foster-FFD
+ */
+void start_cpu_fan(void)
+{
+	/* GPIO_PE4 is PS_VDD_FAN_ENABLE */
+	gpio_request(GPIO_PE4, "FAN_VDD");
+	gpio_direction_output(GPIO_PE4, 1);
+}
Signature · 1 line
1.8.2.1.610.g562af5b
author
#3 lore raw

PATCH 1/1 Tegra: Allow TZ writes to VPR aperature regs

In reply to Tom Warren

VPR (Video Protect Region) may be reconfigured from secure code in the kernel/OS. Set the ALLOW_TZ_WRITE_ACCESS bit in REG_CTRL to allow this. Also used common CONFIG option (CONFIG_LOCK_VPR) in T124/T210 builds to enable VPR setup.

---
 arch/arm/include/asm/arch-tegra124/mc.h | 2 ++
 arch/arm/include/asm/arch-tegra210/mc.h | 2 ++
 arch/arm/mach-tegra/Makefile            | 4 +---
 arch/arm/mach-tegra/vpr.c               | 9 +++++++--
 include/configs/tegra124-common.h       | 3 +++
 include/configs/tegra210-common.h       | 3 +++
 6 files changed, 18 insertions(+), 5 deletions(-)
arch/arm/include/asm/arch-tegra124/mc.h +2 -0
index 37998a4..851e3df 100644
@@ -78,5 +78,7 @@ struct mc_ctlr {
 
 #define TEGRA_MC_VIDEO_PROTECT_REG_WRITE_ACCESS_ENABLED		(0 << 0)
 #define TEGRA_MC_VIDEO_PROTECT_REG_WRITE_ACCESS_DISABLED	(1 << 0)
+#define TEGRA_MC_VIDEO_PROTECT_ALLOW_TZ_WRITE_ACCESS_DISABLED	(0 << 1)
+#define TEGRA_MC_VIDEO_PROTECT_ALLOW_TZ_WRITE_ACCESS_ENABLED	(1 << 1)
 
 #endif	/* _TEGRA124_MC_H_ */
arch/arm/include/asm/arch-tegra210/mc.h +2 -0
index 77e9aa5..2a20b47 100644
@@ -68,5 +68,7 @@ struct mc_ctlr {
 
 #define TEGRA_MC_VIDEO_PROTECT_REG_WRITE_ACCESS_ENABLED		(0 << 0)
 #define TEGRA_MC_VIDEO_PROTECT_REG_WRITE_ACCESS_DISABLED	(1 << 0)
+#define TEGRA_MC_VIDEO_PROTECT_ALLOW_TZ_WRITE_ACCESS_DISABLED	(0 << 1)
+#define TEGRA_MC_VIDEO_PROTECT_ALLOW_TZ_WRITE_ACCESS_ENABLED	(1 << 1)
 
 #endif	/* _TEGRA210_MC_H_ */
arch/arm/mach-tegra/Makefile +1 -3
index 0db8ee0..8a42216 100644
@@ -24,9 +24,7 @@ obj-y += pinmux-common.o
 obj-y += powergate.o
 obj-y += xusb-padctl.o
 obj-$(CONFIG_DISPLAY_CPUINFO) += sys_info.o
-#TCW Fix this to use a common config switch (CONFIG_LOCK_VPR?)
-obj-$(CONFIG_TEGRA124) += vpr.o
-obj-$(CONFIG_TEGRA210) += vpr.o
+obj-$(CONFIG_LOCK_VPR) += vpr.o
 obj-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o
 
 ifndef CONFIG_SPL_BUILD
arch/arm/mach-tegra/vpr.c +7 -2
index f695811..091163e 100644
@@ -21,14 +21,19 @@
 #include <asm/arch/tegra.h>
 #include <asm/arch/mc.h>
 
-/* Configures VPR.  Right now, all we do is turn it off. */
+/*
+ * Configures VPR. Right now, all we do is turn it off.
+ * But we set ALLOW_TZ_WRITE_ACCESS so secure code
+ * in the kernel/OS can reconfig it later if needed.
+ */
 void config_vpr(void)
 {
 	struct mc_ctlr *mc = (struct mc_ctlr *)NV_PA_MC_BASE;
 
 	/* Turn VPR off */
 	writel(0, &mc->mc_video_protect_size_mb);
-	writel(TEGRA_MC_VIDEO_PROTECT_REG_WRITE_ACCESS_DISABLED,
+	writel(TEGRA_MC_VIDEO_PROTECT_REG_WRITE_ACCESS_DISABLED |
+	       TEGRA_MC_VIDEO_PROTECT_ALLOW_TZ_WRITE_ACCESS_ENABLED,
 	       &mc->mc_video_protect_reg_ctrl);
 	/* read back to ensure the write went through */
 	readl(&mc->mc_video_protect_reg_ctrl);
include/configs/tegra124-common.h +3 -0
index af7698d..e850a75 100644
@@ -70,4 +70,7 @@
 #define CONFIG_USB_EHCI_TXFIFO_THRESH	0x10
 #define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS 1
 
+/* Set up VPR (Video Protect Region) */
+#define CONFIG_LOCK_VPR
+
 #endif /* _TEGRA124_COMMON_H_ */
include/configs/tegra210-common.h +3 -0
index 0348d47..267beab 100644
@@ -73,4 +73,7 @@
 #define CONFIG_USB_EHCI_TXFIFO_THRESH	0x10
 #define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS 1
 
+/* Set up VPR (Video Protect Region) */
+#define CONFIG_LOCK_VPR
+
 #endif /* _TEGRA210_COMMON_H_ */
Signature · 1 line
1.8.2.1.610.g562af5b
#4 lore raw

PATCH 1/1 Tegra: Allow TZ writes to VPR aperature regs

Quoted 5 lines · Tom Warren

VPR (Video Protect Region) may be reconfigured from secure code in the kernel/OS. Set the ALLOW_TZ_WRITE_ACCESS bit in REG_CTRL to allow this. Also used common CONFIG option (CONFIG_LOCK_VPR) in T124/T210 builds to enable VPR setup.

I haven't investigated this much, but it seems fine.

author
#5 lore raw

PATCH 1/1 Tegra: Allow TZ writes to VPR aperature regs

Stephen,

Quoted 9 lines

-----Original Message-----
From: Stephen Warren [mailto:swarren at wwwdotorg.org]
Sent: Wednesday, August 05, 2015 12:52 PM
To: Tom Warren
Cc: u-boot at lists.denx.de; Thierry Reding; Stephen Warren; tomcwarren3959 at gmail.com
Subject: Re: [U-Boot] [PATCH] Tegra: Allow TZ writes to VPR aperature regs

On 07/29/2015 10:24 AM, Tom Warren wrote:

Quoted 8 lines
Quoted 4 lines

VPR (Video Protect Region) may be reconfigured from secure code in the kernel/OS. Set the ALLOW_TZ_WRITE_ACCESS bit in REG_CTRL to allow this. Also used common CONFIG option (CONFIG_LOCK_VPR) in T124/T210 builds to enable VPR setup.

I haven't investigated this much, but it seems fine.

Thanks, but I'm dropping this patch. I've added Alex's 2 GPU/VPR patches, so this isn't needed (and enabling TZ writes is only done for dynamic VPR, which I've learned isn't needed/used).

Tom
--
nvpublic

#6 lore raw

PATCH 1/1 T210: P2571: Enable SD-card power via PMIC LDO2

In reply to Tom Warren
Quoted 2 lines · Tom Warren

This was done in the 32-bit AVP loader (SPL) but is board-specific so should be moved to the CPU portion.

For:
T210: P2571: Enable SD-card power via PMIC LDO2
T210: P2571: Restore USB gadget mode (ums)
T210: P2571: Turn CPU fan on

(the line lengths in the commit messages are very short...)

For:
Tegra: Allow TZ writes to VPR aperature regs

I need to learn/think some more to review that.