diff mbox

[U-Boot] ARM: tegra: make all I2C ports open-drain

Message ID 1394651444-24134-1-git-send-email-swarren@wwwdotorg.org
State Accepted
Delegated to: Tom Warren
Headers show

Commit Message

Stephen Warren March 12, 2014, 7:10 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

I2C protocol requires open-drain IOs. Fix the Dalmore and Venice2 pinmux
tables to configure the IOs correctly. Without this, Tegra may actively
drive the lines high while an external device is actively driving the
lines low, which can only lead to bad things.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
This should be applied for v2014.04

 board/nvidia/dalmore/pinmux-config-dalmore.h | 16 ++++++++--------
 board/nvidia/venice2/pinmux-config-venice2.h | 16 ++++++++--------
 2 files changed, 16 insertions(+), 16 deletions(-)

Comments

Stephen Warren March 21, 2014, 6:30 p.m. UTC | #1
On 03/12/2014 01:10 PM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> I2C protocol requires open-drain IOs. Fix the Dalmore and Venice2 pinmux
> tables to configure the IOs correctly. Without this, Tegra may actively
> drive the lines high while an external device is actively driving the
> lines low, which can only lead to bad things.

Tom (or Tom or Albert),

This one patch should really be applied as a bug-fix for v2014.04. It'd
be good to get it applied soon.

The other large pinmux series I sent can obviously wait until the next
release.
Simon Glass March 21, 2014, 8:37 p.m. UTC | #2
On 12 March 2014 12:10, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> I2C protocol requires open-drain IOs. Fix the Dalmore and Venice2 pinmux
> tables to configure the IOs correctly. Without this, Tegra may actively
> drive the lines high while an external device is actively driving the
> lines low, which can only lead to bad things.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>

Acked-by: Simon Glass <sjg@chromium.org>
Stephen Warren March 26, 2014, 7:54 p.m. UTC | #3
On 03/21/2014 03:27 PM, Tom Warren wrote:
> I've updated u-boot-tegra/next with this patch, rebased it against ARM master, and pushed it to Denx. All tegra boards build OK.
> 
> Albert - if you want, you can use u-boot-tegra/next to bring in this patch, or apply it to ARM master yourself, or I can do a formal PR. Let me know. Or TomR can just apply it to Denx master.

I haven't seen any response to this, so I assume simply sending a pull
request is the best way forward.

> Tom
> 
>> -----Original Message-----
>> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
>> Sent: Friday, March 21, 2014 11:31 AM
>> To: u-boot@lists.denx.de; Simon Glass; Tom Warren; Stephen Warren
>> Cc: Tom Rini
>> Subject: Re: [U-Boot] [PATCH] ARM: tegra: make all I2C ports open-drain
>>
>> On 03/12/2014 01:10 PM, Stephen Warren wrote:
>>> From: Stephen Warren <swarren@nvidia.com>
>>>
>>> I2C protocol requires open-drain IOs. Fix the Dalmore and Venice2
>>> pinmux tables to configure the IOs correctly. Without this, Tegra may
>>> actively drive the lines high while an external device is actively
>>> driving the lines low, which can only lead to bad things.
>>
>> Tom (or Tom or Albert),
>>
>> This one patch should really be applied as a bug-fix for v2014.04. It'd be good
>> to get it applied soon.
>>
>> The other large pinmux series I sent can obviously wait until the next release.
Tom Rini March 28, 2014, 3:42 p.m. UTC | #4
On Wed, Mar 26, 2014 at 01:54:19PM -0600, Stephen Warren wrote:
> On 03/21/2014 03:27 PM, Tom Warren wrote:
> > I've updated u-boot-tegra/next with this patch, rebased it against ARM master, and pushed it to Denx. All tegra boards build OK.
> > 
> > Albert - if you want, you can use u-boot-tegra/next to bring in this patch, or apply it to ARM master yourself, or I can do a formal PR. Let me know. Or TomR can just apply it to Denx master.
> 
> I haven't seen any response to this, so I assume simply sending a pull
> request is the best way forward.

Yes, please shoot out pull requests, thanks!
diff mbox

Patch

diff --git a/board/nvidia/dalmore/pinmux-config-dalmore.h b/board/nvidia/dalmore/pinmux-config-dalmore.h
index 8c05a1517c11..9dcd5e42af10 100644
--- a/board/nvidia/dalmore/pinmux-config-dalmore.h
+++ b/board/nvidia/dalmore/pinmux-config-dalmore.h
@@ -132,8 +132,8 @@  static struct pingroup_config tegra114_pinmux_common[] = {
 	DEFAULT_PINMUX(ULPI_STP,      ULPI,        NORMAL,    NORMAL,   OUTPUT),
 
 	/* I2C3 pinmux */
-	I2C_PINMUX(CAM_I2C_SCL, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(CAM_I2C_SDA, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(CAM_I2C_SCL, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(CAM_I2C_SDA, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* VI pinmux */
 	VI_PINMUX(CAM_MCLK, VI_ALT3,  NORMAL, NORMAL, OUTPUT, DEFAULT, DEFAULT),
@@ -145,8 +145,8 @@  static struct pingroup_config tegra114_pinmux_common[] = {
 	VI_PINMUX(GPIO_PBB4, VGP4,    NORMAL, NORMAL, OUTPUT, DEFAULT, DEFAULT),
 
 	/* I2C2 pinmux */
-	I2C_PINMUX(GEN2_I2C_SCL, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(GEN2_I2C_SDA, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(GEN2_I2C_SCL, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(GEN2_I2C_SDA, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* UARTD pinmux */
 	DEFAULT_PINMUX(GMI_A16,       UARTD,       NORMAL,    NORMAL,   OUTPUT),
@@ -224,8 +224,8 @@  static struct pingroup_config tegra114_pinmux_common[] = {
 	DEFAULT_PINMUX(KB_ROW9,       UARTA,       NORMAL,    NORMAL,   OUTPUT),
 
 	/* I2CPWR pinmux (I2C5) */
-	I2C_PINMUX(PWR_I2C_SCL, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(PWR_I2C_SDA, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(PWR_I2C_SCL, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(PWR_I2C_SDA, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* SYSCLK pinmux */
 	DEFAULT_PINMUX(SYS_CLK_REQ,   SYSCLK,      NORMAL,    NORMAL,   OUTPUT),
@@ -252,8 +252,8 @@  static struct pingroup_config tegra114_pinmux_common[] = {
 	DEFAULT_PINMUX(CLK3_OUT,      EXTPERIPH3,  NORMAL,    NORMAL,   OUTPUT),
 
 	/* I2C1 pinmux */
-	I2C_PINMUX(GEN1_I2C_SCL, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(GEN1_I2C_SDA, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(GEN1_I2C_SCL, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(GEN1_I2C_SDA, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* UARTB pinmux */
 	DEFAULT_PINMUX(UART2_CTS_N,   UARTB,       NORMAL,    TRISTATE, INPUT),
diff --git a/board/nvidia/venice2/pinmux-config-venice2.h b/board/nvidia/venice2/pinmux-config-venice2.h
index 50868e6488d2..b3d68d589a95 100644
--- a/board/nvidia/venice2/pinmux-config-venice2.h
+++ b/board/nvidia/venice2/pinmux-config-venice2.h
@@ -124,12 +124,12 @@  static struct pingroup_config tegra124_pinmux_common[] = {
 	DEFAULT_PINMUX(ULPI_STP,      SPI1,        NORMAL,    NORMAL,   INPUT),
 
 	/* I2C3 (TPM) pinmux */
-	I2C_PINMUX(CAM_I2C_SCL, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(CAM_I2C_SDA, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(CAM_I2C_SCL, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(CAM_I2C_SDA, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* I2C2 pinmux */
-	I2C_PINMUX(GEN2_I2C_SCL, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(GEN2_I2C_SDA, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(GEN2_I2C_SCL, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(GEN2_I2C_SDA, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* UARTD pinmux (UART4 on Servo board, unused) */
 	DEFAULT_PINMUX(GPIO_PJ7,      UARTD,       NORMAL,    NORMAL,   OUTPUT),
@@ -198,8 +198,8 @@  static struct pingroup_config tegra124_pinmux_common[] = {
 	DEFAULT_PINMUX(KB_ROW10,      UARTA,       UP,        TRISTATE, INPUT),
 
 	/* I2CPWR pinmux (I2C5) */
-	I2C_PINMUX(PWR_I2C_SCL, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(PWR_I2C_SDA, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(PWR_I2C_SCL, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(PWR_I2C_SDA, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* RTCK pinmux */
 	DEFAULT_PINMUX(JTAG_RTCK,     RTCK,        NORMAL,    NORMAL,   INPUT),
@@ -223,8 +223,8 @@  static struct pingroup_config tegra124_pinmux_common[] = {
 	DEFAULT_PINMUX(CLK3_OUT,      EXTPERIPH3,  NORMAL,    NORMAL,   OUTPUT),
 
 	/* I2C1 pinmux */
-	I2C_PINMUX(GEN1_I2C_SCL, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-	I2C_PINMUX(GEN1_I2C_SDA, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+	I2C_PINMUX(GEN1_I2C_SCL, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+	I2C_PINMUX(GEN1_I2C_SDA, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
 
 	/* UARTB, GPS */
 	DEFAULT_PINMUX(UART2_CTS_N,   UARTB,       NORMAL,    TRISTATE, INPUT),