[lkml]   [2012]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH V1] regmap: Bypassing cache when initializing cache
    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 <>
    Observed that regcache_hw_init() is gettign called before
    cache->ops->init() hapens. The function regcache_hw_init()
    is calling the regmap_bulk_read() which internally calls the
    regcache-read() and ending with cache->ops->read() and this
    cause of system crash as the cache ops are not initialized.
    With this patch, avoiding the regcache-read() from
    regmap_bulk_read() by enabling cache bypass.

    drivers/base/regmap/regcache.c | 5 +++++
    1 files changed, 5 insertions(+), 0 deletions(-)

    diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
    index a10e81c..853dfff 100644
    --- a/drivers/base/regmap/regcache.c
    +++ b/drivers/base/regmap/regcache.c
    @@ -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->cache_bypass = cache_bypass;
    if (ret < 0) {
    return ret;

     \ /
      Last update: 2012-02-17 14:31    [W:0.021 / U:10.448 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site