regmap: Bypassing cache when initializing cache
authorLaxman Dewangan <ldewangan@nvidia.com>
Fri, 17 Feb 2012 13:27:26 +0000 (18:57 +0530)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 17 Feb 2012 17:19:00 +0000 (09:19 -0800)
During regcache_init, if client has not passed the
default data of cached register then it is directly
read from the hw to initialize cache. This hw register
read happens before cache ops are initialized and hence
avoiding register read to check for the data available
on cache or not by enabling flag of cache_bypass.

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/base/regmap/regcache.c

index 1ead66186b7c0a90586f223b0b9bc23d3770a3ed..4b903a8e92a28c0c0de6fcea5478665cdcbcae76 100644 (file)
@@ -35,12 +35,17 @@ static int regcache_hw_init(struct regmap *map)
                return -EINVAL;
 
        if (!map->reg_defaults_raw) {
+               u32 cache_bypass = map->cache_bypass;
                dev_warn(map->dev, "No cache defaults, reading back from HW\n");
+
+               /* Bypass the cache access till data read from HW*/
+               map->cache_bypass = 1;
                tmp_buf = kmalloc(map->cache_size_raw, GFP_KERNEL);
                if (!tmp_buf)
                        return -EINVAL;
                ret = regmap_bulk_read(map, 0, tmp_buf,
                                       map->num_reg_defaults_raw);
+               map->cache_bypass = cache_bypass;
                if (ret < 0) {
                        kfree(tmp_buf);
                        return ret;