RE: [PATCH] OMAP3: hwmod: Adding flag to prevent caching of sysconfig register.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




>>-----Original Message-----
>>From: Gopinath, Thara
>>Sent: Sunday, December 06, 2009 4:55 PM
>>To: linux-omap@xxxxxxxxxxxxxxx
>>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 <thara@xxxxxx>
>>Cc: Paul Walmsley <paul@xxxxxxxxx>
>>---
>>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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux