>>-----Original Message-----
>>From: Gopinath, Thara
>>Sent: Sunday, December 06, 2009 4:55 PM
>>To: [email protected]
>>Cc: Gopinath, Thara; Paul Walmsley
>>Subject: [PATCH] OMAP3: hwmod: Adding flag to prevent caching of sysconfig 
>>register.
>>
>>In the current implementation the sysconfig value is read into
>> _sysc_cache once and an actual update to the sysconfig register
>>happens only if the new value paased is differnt from the one in _sysc_cache.
>>_sysc_cache is updated only if _HWMOD_SYSCONFIG_LOADED is not set.
>>This can lead to the follwing issue if off mode is enabled in modules
>>which employs "always-retore" mechanism of context save and restore.
>>
>>      a. The module sets the sysconfig register through omap_device_enable.
>>         Here _sysc_cache is updated with the value written to the sysconfig
>>         register and left.
>>      b. The power domain containig the module enters off mode and the
>>         module context is lost.
>>      c. The module in use becomes active and calls omap_device_enable to
>>         enable itself. Here a read of sysconfig register does not happen
>>         as _HWMOD_SYSCONFIG_LOADED flag is set. The value to be written
>>         to the sysconfig register will be same as the one written in step a.
>>         Since _sysc_cache reflects the previous written value an update
>>         of the sysconfig register does not happen.
>>This means in modules which employs "always-restore" mechanism
>>after off , the sysconfig regsiters will never get updated.
>>
>>This patch introduces a flag SYSC_NO_CACHE which if set ensures that the
>>sysconfig register is always read into _sysc_cache before an update is
>>attempted.
>>
>>This flags need to be set only by modules which does not do a context save
>>but re-initializes the registers every time the module is accessed. This
>>includes modules like i2c, smartreflex etc.
>>
>>Signed-off-by: Thara Gopinath <[email protected]>
>>Cc: Paul Walmsley <[email protected]>
>>---
>>This patch depends on
>>              http://patchwork.kernel.org/patch/63383/
>>              http://patchwork.kernel.org/patch/65140/
>>
>> arch/arm/mach-omap2/omap_hwmod.c             |    3 ++-
>> arch/arm/plat-omap/include/plat/omap_hwmod.h |    1 +
>> 2 files changed, 3 insertions(+), 1 deletions(-)
>>
>>diff --git a/arch/arm/mach-omap2/omap_hwmod.c 
>>b/arch/arm/mach-omap2/omap_hwmod.c
>>index 3edc387..786bf2e 100644
>>--- a/arch/arm/mach-omap2/omap_hwmod.c
>>+++ b/arch/arm/mach-omap2/omap_hwmod.c
>>@@ -93,7 +93,8 @@ static int _update_sysc_cache(struct omap_hwmod *oh)
>>
>>      oh->_sysc_cache = omap_hwmod_readl(oh, oh->sysconfig->sysc_offs);
>>
>>-     oh->_int_flags |= _HWMOD_SYSCONFIG_LOADED;
>>+     if (!(oh->sysconfig->sysc_flags & SYSC_NO_CACHE))
>>+             oh->_int_flags |= _HWMOD_SYSCONFIG_LOADED;
>>
>>      return 0;
>> }
>>diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-
>>omap/include/plat/omap_hwmod.h
>>index 1f83495..a3298ca 100644
>>--- a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>+++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>@@ -228,6 +228,7 @@ struct omap_hwmod_ocp_if {
>> #define SYSC_HAS_MIDLEMODE           (1 << 6)
>> #define SYSS_MISSING                 (1 << 7)
>> #define SYSC_CHANGE_CLKACT_OFFSET    (1 << 8)
>>+#define SYSC_NO_CACHE                        (1 << 9)
>>
>> /* omap_hwmod_sysconfig.clockact flags */
>> #define CLOCKACT_TEST_BOTH   0x0
>>--
Hi Paul,Kevin.. Does this patch look ok?

>>1.5.4.7

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to