|
@@ -289,6 +289,8 @@ error:
|
|
static void sr_v1_disable(struct omap_sr *sr)
|
|
static void sr_v1_disable(struct omap_sr *sr)
|
|
{
|
|
{
|
|
int timeout = 0;
|
|
int timeout = 0;
|
|
|
|
+ int errconf_val = ERRCONFIG_MCUACCUMINTST | ERRCONFIG_MCUVALIDINTST |
|
|
|
|
+ ERRCONFIG_MCUBOUNDINTST;
|
|
|
|
|
|
/* Enable MCUDisableAcknowledge interrupt */
|
|
/* Enable MCUDisableAcknowledge interrupt */
|
|
sr_modify_reg(sr, ERRCONFIG_V1,
|
|
sr_modify_reg(sr, ERRCONFIG_V1,
|
|
@@ -297,13 +299,13 @@ static void sr_v1_disable(struct omap_sr *sr)
|
|
/* SRCONFIG - disable SR */
|
|
/* SRCONFIG - disable SR */
|
|
sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
|
|
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,
|
|
sr_modify_reg(sr, ERRCONFIG_V1,
|
|
(ERRCONFIG_MCUACCUMINTEN | ERRCONFIG_MCUVALIDINTEN |
|
|
(ERRCONFIG_MCUACCUMINTEN | ERRCONFIG_MCUVALIDINTEN |
|
|
ERRCONFIG_MCUBOUNDINTEN | ERRCONFIG_VPBOUNDINTEN_V1),
|
|
ERRCONFIG_MCUBOUNDINTEN | ERRCONFIG_VPBOUNDINTEN_V1),
|
|
- (ERRCONFIG_MCUACCUMINTST | ERRCONFIG_MCUVALIDINTST |
|
|
|
|
- ERRCONFIG_MCUBOUNDINTST |
|
|
|
|
- ERRCONFIG_VPBOUNDINTST_V1));
|
|
|
|
|
|
+ errconf_val);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Wait for SR to be disabled.
|
|
* Wait for SR to be disabled.
|
|
@@ -332,9 +334,17 @@ static void sr_v2_disable(struct omap_sr *sr)
|
|
/* SRCONFIG - disable SR */
|
|
/* SRCONFIG - disable SR */
|
|
sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
|
|
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);
|
|
ERRCONFIG_VPBOUNDINTST_V2);
|
|
|
|
+ else
|
|
|
|
+ sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
|
|
|
|
+ 0x0);
|
|
sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT |
|
|
sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT |
|
|
IRQENABLE_MCUVALIDINT |
|
|
IRQENABLE_MCUVALIDINT |
|
|
IRQENABLE_MCUBOUNDSINT));
|
|
IRQENABLE_MCUBOUNDSINT));
|