linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-05-16 13:01 [PATCH 1/2] amba pl011: workaround for uart registers lockup Shreshtha Kumar SAHU
@ 2011-05-16 13:01 ` Shreshtha Kumar SAHU
  2011-05-16 13:09   ` Russell King
  0 siblings, 1 reply; 8+ messages in thread
From: Shreshtha Kumar SAHU @ 2011-05-16 13:01 UTC (permalink / raw)
  To: linux-serial, linux-kernel, rmk+kernel, linus.walleij, alan
  Cc: shreshthakumar.sahu

From: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>

This patch provides platform data for following
 - uart reset function to assist uart register lockup workaround

 - init/exit function to fix glitch in the tx pin in tty_open
	when tty port0 is opened a glitch is seen in the tx line
	of uart0. This happens in __pl011_startup() when tx fifo
	interrupt is provoked into asserting.
	Now uart0 pins are enabled (alt function) only when init
	is complete and turned back to gpio when closed.

Signed-off-by: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
---
 arch/arm/mach-ux500/board-mop500-pins.c |   16 +++++++--
 arch/arm/mach-ux500/board-mop500.c      |   53 +++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c
index fd4cf1c..ceab640 100644
--- a/arch/arm/mach-ux500/board-mop500-pins.c
+++ b/arch/arm/mach-ux500/board-mop500-pins.c
@@ -110,10 +110,18 @@ static pin_cfg_t mop500_pins_common[] = {
 	GPIO168_KP_O0,
 
 	/* UART */
-	GPIO0_U0_CTSn	| PIN_INPUT_PULLUP,
-	GPIO1_U0_RTSn	| PIN_OUTPUT_HIGH,
-	GPIO2_U0_RXD	| PIN_INPUT_PULLUP,
-	GPIO3_U0_TXD	| PIN_OUTPUT_HIGH,
+	/* uart-0 pins gpio configuration should be
+	 * kept intact to prevent glitch in tx line
+	 * when tty dev is opened. Later these pins
+	 * are configured to uart mop500_pins_uart0
+	 *
+	 * It will be replaced with uart configuration
+	 * once the issue is solved.
+	 */
+	GPIO0_GPIO	| PIN_INPUT_PULLUP,
+	GPIO1_GPIO	| PIN_OUTPUT_HIGH,
+	GPIO2_GPIO	| PIN_INPUT_PULLUP,
+	GPIO3_GPIO	| PIN_OUTPUT_LOW,
 
 	GPIO29_U2_RXD	| PIN_INPUT_PULLUP,
 	GPIO30_U2_TXD	| PIN_OUTPUT_HIGH,
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index 6e1907fa..e7bc61e 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c
@@ -27,6 +27,7 @@
 #include <linux/leds-lp5521.h>
 #include <linux/input.h>
 #include <linux/gpio_keys.h>
+#include <linux/delay.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -39,6 +40,7 @@
 #include <mach/devices.h>
 #include <mach/irqs.h>
 
+#include "pins-db8500.h"
 #include "ste-dma40-db8500.h"
 #include "devices-db8500.h"
 #include "board-mop500.h"
@@ -391,12 +393,63 @@ static struct stedma40_chan_cfg uart2_dma_cfg_tx = {
 };
 #endif
 
+
+static pin_cfg_t mop500_pins_uart0[] = {
+	GPIO0_U0_CTSn   | PIN_INPUT_PULLUP,
+	GPIO1_U0_RTSn   | PIN_OUTPUT_HIGH,
+	GPIO2_U0_RXD    | PIN_INPUT_PULLUP,
+	GPIO3_U0_TXD    | PIN_OUTPUT_HIGH,
+};
+
+#define PRCC_K_SOFTRST_SET      0x18
+#define PRCC_K_SOFTRST_CLEAR    0x1C
+static void ux500_uart0_reset(void)
+{
+	void __iomem *prcc_rst_set, *prcc_rst_clr;
+	
+	prcc_rst_set = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
+			PRCC_K_SOFTRST_SET);
+	prcc_rst_clr = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
+			PRCC_K_SOFTRST_CLEAR);
+	
+	/* Activate soft reset PRCC_K_SOFTRST_CLEAR */
+	writel((readl(prcc_rst_clr) | 0x1), prcc_rst_clr);
+	udelay(1);
+	
+	/* Release soft reset PRCC_K_SOFTRST_SET */
+	writel((readl(prcc_rst_set) | 0x1), prcc_rst_set);
+	udelay(1);
+}
+
+static void ux500_uart0_init(void)
+{
+	int ret;
+
+	ret = nmk_config_pins(mop500_pins_uart0,
+			ARRAY_SIZE(mop500_pins_uart0));
+	if (ret < 0)
+		pr_err("pl011: uart pins_enable failed\n");
+}
+
+static void ux500_uart0_exit(void)
+{
+	int ret;
+
+	ret = nmk_config_pins_sleep(mop500_pins_uart0,
+			ARRAY_SIZE(mop500_pins_uart0));
+	if (ret < 0)
+		pr_err("pl011: uart pins_disable failed\n");
+}
+
 static struct amba_pl011_data uart0_plat = {
 #ifdef CONFIG_STE_DMA40
 	.dma_filter = stedma40_filter,
 	.dma_rx_param = &uart0_dma_cfg_rx,
 	.dma_tx_param = &uart0_dma_cfg_tx,
 #endif
+	.init = ux500_uart0_init,
+	.exit = ux500_uart0_exit,
+	.reset = ux500_uart0_reset,
 };
 
 static struct amba_pl011_data uart1_plat = {
-- 
1.7.2.dirty

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-05-16 13:01 ` [PATCH 2/2] amba pl011: platform data for reg lockup and glitch Shreshtha Kumar SAHU
@ 2011-05-16 13:09   ` Russell King
  2011-05-16 14:00     ` Shreshtha Kumar SAHU
  0 siblings, 1 reply; 8+ messages in thread
From: Russell King @ 2011-05-16 13:09 UTC (permalink / raw)
  To: Shreshtha Kumar SAHU; +Cc: linux-serial, linux-kernel, linus.walleij, alan

On Mon, May 16, 2011 at 06:31:19PM +0530, Shreshtha Kumar SAHU wrote:
> From: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
> 
> This patch provides platform data for following
>  - uart reset function to assist uart register lockup workaround
> 
>  - init/exit function to fix glitch in the tx pin in tty_open
> 	when tty port0 is opened a glitch is seen in the tx line
> 	of uart0. This happens in __pl011_startup() when tx fifo
> 	interrupt is provoked into asserting.

I was trying to work out where that is, but i can't find this function.
Is your patch against a different version of the driver?

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-05-16 13:09   ` Russell King
@ 2011-05-16 14:00     ` Shreshtha Kumar SAHU
  2011-05-16 14:05       ` Russell King
  0 siblings, 1 reply; 8+ messages in thread
From: Shreshtha Kumar SAHU @ 2011-05-16 14:00 UTC (permalink / raw)
  To: Russell King
  Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	Linus WALLEIJ, alan@linux.intel.com

On Mon, May 16, 2011 at 15:09:05 +0200, Russell King wrote:
> On Mon, May 16, 2011 at 06:31:19PM +0530, Shreshtha Kumar SAHU wrote:
> > From: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
> >
> > This patch provides platform data for following
> >  - uart reset function to assist uart register lockup workaround
> >
> >  - init/exit function to fix glitch in the tx pin in tty_open
> >       when tty port0 is opened a glitch is seen in the tx line
> >       of uart0. This happens in __pl011_startup() when tx fifo
> >       interrupt is provoked into asserting.
> 
> I was trying to work out where that is, but i can't find this function.
> Is your patch against a different version of the driver?
sorry, the function names in commit message is wrong by mistake.
It should be - "This happens in pl011_startup() when tx 
fifo interrupt is provoked into asserting."
I will send out a new patch with corrected commit mesaage.

> 
> --
> Russell King
>  Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
>  maintainer of:

BR,
Shreshtha

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-05-16 14:00     ` Shreshtha Kumar SAHU
@ 2011-05-16 14:05       ` Russell King
  2011-05-16 14:15         ` Shreshtha Kumar SAHU
  0 siblings, 1 reply; 8+ messages in thread
From: Russell King @ 2011-05-16 14:05 UTC (permalink / raw)
  To: Shreshtha Kumar SAHU
  Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	Linus WALLEIJ, alan@linux.intel.com

On Mon, May 16, 2011 at 07:30:46PM +0530, Shreshtha Kumar SAHU wrote:
> On Mon, May 16, 2011 at 15:09:05 +0200, Russell King wrote:
> > On Mon, May 16, 2011 at 06:31:19PM +0530, Shreshtha Kumar SAHU wrote:
> > > From: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
> > >
> > > This patch provides platform data for following
> > >  - uart reset function to assist uart register lockup workaround
> > >
> > >  - init/exit function to fix glitch in the tx pin in tty_open
> > >       when tty port0 is opened a glitch is seen in the tx line
> > >       of uart0. This happens in __pl011_startup() when tx fifo
> > >       interrupt is provoked into asserting.
> > 
> > I was trying to work out where that is, but i can't find this function.
> > Is your patch against a different version of the driver?
> sorry, the function names in commit message is wrong by mistake.
> It should be - "This happens in pl011_startup() when tx 
> fifo interrupt is provoked into asserting."
> I will send out a new patch with corrected commit mesaage.

Have you tracked down why this happens?

Is it the switching into and out of loopback mode, or does loopback mode
not prevent the transmit pin toggling?

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-05-16 14:05       ` Russell King
@ 2011-05-16 14:15         ` Shreshtha Kumar SAHU
  0 siblings, 0 replies; 8+ messages in thread
From: Shreshtha Kumar SAHU @ 2011-05-16 14:15 UTC (permalink / raw)
  To: Russell King
  Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	Linus WALLEIJ, alan@linux.intel.com

On Mon, May 16, 2011 at 16:05:41 +0200, Russell King wrote:
> On Mon, May 16, 2011 at 07:30:46PM +0530, Shreshtha Kumar SAHU wrote:
> > On Mon, May 16, 2011 at 15:09:05 +0200, Russell King wrote:
> > > On Mon, May 16, 2011 at 06:31:19PM +0530, Shreshtha Kumar SAHU wrote:
> > > > From: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
> > > >
> > > > This patch provides platform data for following
> > > >  - uart reset function to assist uart register lockup workaround
> > > >
> > > >  - init/exit function to fix glitch in the tx pin in tty_open
> > > >       when tty port0 is opened a glitch is seen in the tx line
> > > >       of uart0. This happens in __pl011_startup() when tx fifo
> > > >       interrupt is provoked into asserting.
> > > 
> > > I was trying to work out where that is, but i can't find this function.
> > > Is your patch against a different version of the driver?
> > sorry, the function names in commit message is wrong by mistake.
> > It should be - "This happens in pl011_startup() when tx 
> > fifo interrupt is provoked into asserting."
> > I will send out a new patch with corrected commit mesaage.
> 
> Have you tracked down why this happens?
> 
> Is it the switching into and out of loopback mode, or does loopback mode
> not prevent the transmit pin toggling?
As I tried to get the cause for it, I found it is not due to switching in
and out of loopback mode. It was found to be default behaviour of the hardware.
Even in loopback mode data is transmitted out to pins.
> 
> -- 
> Russell King
>  Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
>  maintainer of:

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
@ 2011-06-09 20:56 Linus Walleij
  2011-06-09 21:02 ` Russell King - ARM Linux
  0 siblings, 1 reply; 8+ messages in thread
From: Linus Walleij @ 2011-06-09 20:56 UTC (permalink / raw)
  To: linux-arm-kernel, Greg Kroah-Hartman, linux-serial
  Cc: Lee Jones, Shreshtha Kumar Sahu, Linus Walleij

From: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>

This patch provides platform data for following
 - uart reset function to assist uart register lockup workaround

 - init/exit function to fix glitch in the tx pin in tty_open
	when tty port0 is opened a glitch is seen in the tx line
	of uart0. This happens in pl011_startup() when tx fifo
	interrupt is provoked into asserting.
	Now uart0 pins are enabled (alt function) only when init
	is complete and turned back to gpio when closed.

Signed-off-by: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 arch/arm/mach-ux500/board-mop500-pins.c |   16 +++++++--
 arch/arm/mach-ux500/board-mop500.c      |   54 +++++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c
index fd4cf1c..ceab640 100644
--- a/arch/arm/mach-ux500/board-mop500-pins.c
+++ b/arch/arm/mach-ux500/board-mop500-pins.c
@@ -110,10 +110,18 @@ static pin_cfg_t mop500_pins_common[] = {
 	GPIO168_KP_O0,
 
 	/* UART */
-	GPIO0_U0_CTSn	| PIN_INPUT_PULLUP,
-	GPIO1_U0_RTSn	| PIN_OUTPUT_HIGH,
-	GPIO2_U0_RXD	| PIN_INPUT_PULLUP,
-	GPIO3_U0_TXD	| PIN_OUTPUT_HIGH,
+	/* uart-0 pins gpio configuration should be
+	 * kept intact to prevent glitch in tx line
+	 * when tty dev is opened. Later these pins
+	 * are configured to uart mop500_pins_uart0
+	 *
+	 * It will be replaced with uart configuration
+	 * once the issue is solved.
+	 */
+	GPIO0_GPIO	| PIN_INPUT_PULLUP,
+	GPIO1_GPIO	| PIN_OUTPUT_HIGH,
+	GPIO2_GPIO	| PIN_INPUT_PULLUP,
+	GPIO3_GPIO	| PIN_OUTPUT_LOW,
 
 	GPIO29_U2_RXD	| PIN_INPUT_PULLUP,
 	GPIO30_U2_TXD	| PIN_OUTPUT_HIGH,
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index bb26f40..2a08c07 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c
@@ -27,18 +27,21 @@
 #include <linux/leds-lp5521.h>
 #include <linux/input.h>
 #include <linux/gpio_keys.h>
+#include <linux/delay.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 
 #include <plat/i2c.h>
 #include <plat/ste_dma40.h>
+#include <plat/pincfg.h>
 
 #include <mach/hardware.h>
 #include <mach/setup.h>
 #include <mach/devices.h>
 #include <mach/irqs.h>
 
+#include "pins-db8500.h"
 #include "ste-dma40-db8500.h"
 #include "devices-db8500.h"
 #include "board-mop500.h"
@@ -393,12 +396,63 @@ static struct stedma40_chan_cfg uart2_dma_cfg_tx = {
 };
 #endif
 
+
+static pin_cfg_t mop500_pins_uart0[] = {
+	GPIO0_U0_CTSn   | PIN_INPUT_PULLUP,
+	GPIO1_U0_RTSn   | PIN_OUTPUT_HIGH,
+	GPIO2_U0_RXD    | PIN_INPUT_PULLUP,
+	GPIO3_U0_TXD    | PIN_OUTPUT_HIGH,
+};
+
+#define PRCC_K_SOFTRST_SET      0x18
+#define PRCC_K_SOFTRST_CLEAR    0x1C
+static void ux500_uart0_reset(void)
+{
+	void __iomem *prcc_rst_set, *prcc_rst_clr;
+
+	prcc_rst_set = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
+			PRCC_K_SOFTRST_SET);
+	prcc_rst_clr = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
+			PRCC_K_SOFTRST_CLEAR);
+
+	/* Activate soft reset PRCC_K_SOFTRST_CLEAR */
+	writel((readl(prcc_rst_clr) | 0x1), prcc_rst_clr);
+	udelay(1);
+
+	/* Release soft reset PRCC_K_SOFTRST_SET */
+	writel((readl(prcc_rst_set) | 0x1), prcc_rst_set);
+	udelay(1);
+}
+
+static void ux500_uart0_init(void)
+{
+	int ret;
+
+	ret = nmk_config_pins(mop500_pins_uart0,
+			ARRAY_SIZE(mop500_pins_uart0));
+	if (ret < 0)
+		pr_err("pl011: uart pins_enable failed\n");
+}
+
+static void ux500_uart0_exit(void)
+{
+	int ret;
+
+	ret = nmk_config_pins_sleep(mop500_pins_uart0,
+			ARRAY_SIZE(mop500_pins_uart0));
+	if (ret < 0)
+		pr_err("pl011: uart pins_disable failed\n");
+}
+
 static struct amba_pl011_data uart0_plat = {
 #ifdef CONFIG_STE_DMA40
 	.dma_filter = stedma40_filter,
 	.dma_rx_param = &uart0_dma_cfg_rx,
 	.dma_tx_param = &uart0_dma_cfg_tx,
 #endif
+	.init = ux500_uart0_init,
+	.exit = ux500_uart0_exit,
+	.reset = ux500_uart0_reset,
 };
 
 static struct amba_pl011_data uart1_plat = {
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-06-09 20:56 [PATCH 2/2] amba pl011: platform data for reg lockup and glitch Linus Walleij
@ 2011-06-09 21:02 ` Russell King - ARM Linux
  2011-06-10  9:07   ` Shreshtha Kumar SAHU
  0 siblings, 1 reply; 8+ messages in thread
From: Russell King - ARM Linux @ 2011-06-09 21:02 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-arm-kernel, Greg Kroah-Hartman, linux-serial, Linus Walleij,
	Lee Jones, Shreshtha Kumar Sahu

On Thu, Jun 09, 2011 at 10:56:48PM +0200, Linus Walleij wrote:
> +	/* uart-0 pins gpio configuration should be
> +	 * kept intact to prevent glitch in tx line
> +	 * when tty dev is opened. Later these pins
> +	 * are configured to uart mop500_pins_uart0
> +	 *
> +	 * It will be replaced with uart configuration
> +	 * once the issue is solved.
> +	 */
> +	GPIO0_GPIO	| PIN_INPUT_PULLUP,
> +	GPIO1_GPIO	| PIN_OUTPUT_HIGH,
> +	GPIO2_GPIO	| PIN_INPUT_PULLUP,
> +	GPIO3_GPIO	| PIN_OUTPUT_LOW,

Why do you want the TXD line (GPIO3) to be indicating a break condition?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] amba pl011: platform data for reg lockup and glitch
  2011-06-09 21:02 ` Russell King - ARM Linux
@ 2011-06-10  9:07   ` Shreshtha Kumar SAHU
  0 siblings, 0 replies; 8+ messages in thread
From: Shreshtha Kumar SAHU @ 2011-06-10  9:07 UTC (permalink / raw)
  To: Russell King - ARM Linux
  Cc: Linus WALLEIJ, linux-arm-kernel@lists.infradead.org,
	Greg Kroah-Hartman, linux-serial@vger.kernel.org, Linus Walleij,
	Lee Jones

On Thu, Jun 09, 2011 at 23:02:18 +0200, Russell King - ARM Linux wrote:
> On Thu, Jun 09, 2011 at 10:56:48PM +0200, Linus Walleij wrote:
> > +	/* uart-0 pins gpio configuration should be
> > +	 * kept intact to prevent glitch in tx line
> > +	 * when tty dev is opened. Later these pins
> > +	 * are configured to uart mop500_pins_uart0
> > +	 *
> > +	 * It will be replaced with uart configuration
> > +	 * once the issue is solved.
> > +	 */
> > +	GPIO0_GPIO	| PIN_INPUT_PULLUP,
> > +	GPIO1_GPIO	| PIN_OUTPUT_HIGH,
> > +	GPIO2_GPIO	| PIN_INPUT_PULLUP,
> > +	GPIO3_GPIO	| PIN_OUTPUT_LOW,
> 
> Why do you want the TXD line (GPIO3) to be indicating a break condition?

Yes it should be PIN_OUTPUT_HIGH, as it is configured in mop500_pins_uart0.

Thanks,
Shreshtha

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-06-10  9:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-09 20:56 [PATCH 2/2] amba pl011: platform data for reg lockup and glitch Linus Walleij
2011-06-09 21:02 ` Russell King - ARM Linux
2011-06-10  9:07   ` Shreshtha Kumar SAHU
  -- strict thread matches above, loose matches on Subject: below --
2011-05-16 13:01 [PATCH 1/2] amba pl011: workaround for uart registers lockup Shreshtha Kumar SAHU
2011-05-16 13:01 ` [PATCH 2/2] amba pl011: platform data for reg lockup and glitch Shreshtha Kumar SAHU
2011-05-16 13:09   ` Russell King
2011-05-16 14:00     ` Shreshtha Kumar SAHU
2011-05-16 14:05       ` Russell King
2011-05-16 14:15         ` Shreshtha Kumar SAHU

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).