linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: jean.pihet@newoldbits.com (Jean Pihet)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 07/14] ARM: OMAP3+: SmartReflex: clear ERRCONFIG_VPBOUNDINTST only on a need
Date: Wed,  8 Feb 2012 18:43:52 +0100	[thread overview]
Message-ID: <1328723039-15952-8-git-send-email-j-pihet@ti.com> (raw)
In-Reply-To: <1328723039-15952-1-git-send-email-j-pihet@ti.com>

From: Nishanth Menon <nm@ti.com>

The VPBOUNDINTST field of the ERRCONFIG register has an additional
functional meaning of force clearing the SR internal signal with VP
(sr_interruptz).
This can result in scenarios where the VP->SR protocol is violated
because the SR internal signal with VP is already high and VP will
never clear the vpirqclr signal.
Therefore during the next force update to reset to nominal voltage,
VP cannot pulse vpirqclr, so the PRCM HW cannot generate the tranxdone
IRQ and the situation is not recoverable until a cold reset is invoked.

To prevent this situation, check if status is set before clearing it
as this needs to be done only on a need basis.

Reported-by: Vincent Bour <v-bour@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Jean Pihet <j-pihet@ti.com>
---
 arch/arm/mach-omap2/smartreflex.c |   22 ++++++++++++++++------
 1 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c
index f2f2f2a..64d3ca7 100644
--- a/arch/arm/mach-omap2/smartreflex.c
+++ b/arch/arm/mach-omap2/smartreflex.c
@@ -289,6 +289,8 @@ error:
 static void sr_v1_disable(struct omap_sr *sr)
 {
 	int timeout = 0;
+	int errconf_val = ERRCONFIG_MCUACCUMINTST | ERRCONFIG_MCUVALIDINTST |
+			ERRCONFIG_MCUBOUNDINTST;
 
 	/* Enable MCUDisableAcknowledge interrupt */
 	sr_modify_reg(sr, ERRCONFIG_V1,
@@ -297,13 +299,13 @@ static void sr_v1_disable(struct omap_sr *sr)
 	/* SRCONFIG - disable SR */
 	sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
 
-	/* Disable all other SR interrupts and clear the status */
+	/* Disable all other SR interrupts and clear the status as needed */
+	if (sr_read_reg(sr, ERRCONFIG_V1) & ERRCONFIG_VPBOUNDINTST_V1)
+		errconf_val |= ERRCONFIG_VPBOUNDINTST_V1;
 	sr_modify_reg(sr, ERRCONFIG_V1,
 			(ERRCONFIG_MCUACCUMINTEN | ERRCONFIG_MCUVALIDINTEN |
 			ERRCONFIG_MCUBOUNDINTEN | ERRCONFIG_VPBOUNDINTEN_V1),
-			(ERRCONFIG_MCUACCUMINTST | ERRCONFIG_MCUVALIDINTST |
-			ERRCONFIG_MCUBOUNDINTST |
-			ERRCONFIG_VPBOUNDINTST_V1));
+			errconf_val);
 
 	/*
 	 * Wait for SR to be disabled.
@@ -332,9 +334,17 @@ static void sr_v2_disable(struct omap_sr *sr)
 	/* SRCONFIG - disable SR */
 	sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
 
-	/* Disable all other SR interrupts and clear the status */
-	sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
+	/*
+	 * Disable all other SR interrupts and clear the status
+	 * write to status register ONLY on need basis - only if status
+	 * is set.
+	 */
+	if (sr_read_reg(sr, ERRCONFIG_V2) & ERRCONFIG_VPBOUNDINTST_V2)
+		sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
 			ERRCONFIG_VPBOUNDINTST_V2);
+	else
+		sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
+				0x0);
 	sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT |
 			IRQENABLE_MCUVALIDINT |
 			IRQENABLE_MCUBOUNDSINT));
-- 
1.7.5.4

  parent reply	other threads:[~2012-02-08 17:43 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-08 17:43 [PATCH v4 00/14] ARM: OMAP3+: SmartReflex: bugfixes and clean-ups Jean Pihet
2012-02-08 17:43 ` [PATCH 01/14] ARM: OMAP3+: SmartReflex: Layer Cleanup [V4] Jean Pihet
2012-02-28 22:37   ` Kevin Hilman
2012-02-08 17:43 ` [PATCH 02/14] ARM: OMAP3+: SmartReflex: fix err interrupt disable sequence Jean Pihet
2012-02-08 17:43 ` [PATCH 03/14] ARM: OMAP3+: SmartReflex Class3: disable errorgen before disable VP Jean Pihet
2012-02-08 17:43 ` [PATCH 04/14] ARM: OMAP3+: SmartReflex: Add a shutdown hook Jean Pihet
2012-02-28 22:40   ` Kevin Hilman
2012-02-28 22:59     ` Menon, Nishanth
2012-02-29 18:07       ` Kevin Hilman
2012-02-29 23:33         ` Jean Pihet
2012-02-08 17:43 ` [PATCH 05/14] ARM: OMAP3+: SmartReflex: use __devexit_p annotation Jean Pihet
2012-02-08 17:43 ` [PATCH 06/14] ARM: OMAP3+: SmartReflex: Fix status masking in ERRCONFIG register Jean Pihet
2012-02-08 17:43 ` Jean Pihet [this message]
2012-02-08 17:43 ` [PATCH 08/14] ARM: OMAP3+: hwmod: add SmartReflex IRQs Jean Pihet
2012-02-28 22:47   ` Kevin Hilman
2012-02-08 17:43 ` [PATCH 09/14] ARM: OMAP3+: SmartReflex: add missing platform_set_drvdata() Jean Pihet
2012-02-08 17:43 ` [PATCH 10/14] ARM: OMAP3+: SmartReflex: move late_initcall() closer to its argument Jean Pihet
2012-02-08 17:43 ` [PATCH 11/14] ARM: OMAP3+: SmartReflex: misc cleanups Jean Pihet
2012-02-08 17:43 ` [PATCH 12/14] ARM: OMAP3+: SmartReflex: micro-optimization for sanity check Jean Pihet
2012-02-08 17:43 ` [PATCH 13/14] ARM: OMAP3+: SmartReflex: fix the use of debugfs_create_* API Jean Pihet
2012-02-08 17:43 ` [PATCH 14/14] ARM: OMAP3+: SmartReflex: fix error handling Jean Pihet
2012-02-28 22:50 ` [PATCH v4 00/14] ARM: OMAP3+: SmartReflex: bugfixes and clean-ups Kevin Hilman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328723039-15952-8-git-send-email-j-pihet@ti.com \
    --to=jean.pihet@newoldbits.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).