lkml.org 
[lkml]   [2015]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 7/8] misc: sram: move reserved block logic out of probe function
    Date
    No functional change, but now previously overloaded sram_probe() is
    greatly simplified and perceptible, reserved regions logic also has
    its own space.

    Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
    ---
    Changes from v2 to v3:
    - fixes a variable may be uninitialized warning

    drivers/misc/sram.c | 82 ++++++++++++++++++++++++++++++-----------------------
    1 file changed, 46 insertions(+), 36 deletions(-)

    diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c
    index d9c1852..59562fa 100644
    --- a/drivers/misc/sram.c
    +++ b/drivers/misc/sram.c
    @@ -57,48 +57,20 @@ static int sram_reserve_cmp(void *priv, struct list_head *a,
    return ra->start - rb->start;
    }

    -static int sram_probe(struct platform_device *pdev)
    +static int sram_reserve_regions(struct sram_dev *sram, struct resource *res)
    {
    - struct sram_dev *sram;
    - struct resource *res;
    - struct device_node *np = pdev->dev.of_node, *child;
    + struct device_node *np = sram->dev->of_node, *child;
    phys_addr_t cur_start;
    size_t size, cur_size;
    struct sram_reserve *rblocks, *block;
    struct list_head reserve_list;
    unsigned int nblocks;
    - int ret;
    + int ret = 0;

    INIT_LIST_HEAD(&reserve_list);

    - sram = devm_kzalloc(&pdev->dev, sizeof(*sram), GFP_KERNEL);
    - if (!sram)
    - return -ENOMEM;
    -
    - sram->dev = &pdev->dev;
    -
    - res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    - if (!res) {
    - dev_err(sram->dev, "found no memory resource\n");
    - return -EINVAL;
    - }
    -
    size = resource_size(res);

    - if (!devm_request_mem_region(sram->dev, res->start, size, pdev->name)) {
    - dev_err(sram->dev, "could not request region for resource\n");
    - return -EBUSY;
    - }
    -
    - sram->virt_base = devm_ioremap_wc(sram->dev, res->start, size);
    - if (IS_ERR(sram->virt_base))
    - return PTR_ERR(sram->virt_base);
    -
    - sram->pool = devm_gen_pool_create(sram->dev,
    - ilog2(SRAM_GRANULARITY), -1);
    - if (!sram->pool)
    - return -ENOMEM;
    -
    /*
    * We need an additional block to mark the end of the memory region
    * after the reserved blocks from the dt are processed.
    @@ -187,8 +159,51 @@ static int sram_probe(struct platform_device *pdev)
    cur_start = block->start + block->size;
    }

    + err_chunks:
    kfree(rblocks);

    + return ret;
    +}
    +
    +static int sram_probe(struct platform_device *pdev)
    +{
    + struct sram_dev *sram;
    + struct resource *res;
    + size_t size;
    + int ret;
    +
    + sram = devm_kzalloc(&pdev->dev, sizeof(*sram), GFP_KERNEL);
    + if (!sram)
    + return -ENOMEM;
    +
    + sram->dev = &pdev->dev;
    +
    + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    + if (!res) {
    + dev_err(sram->dev, "found no memory resource\n");
    + return -EINVAL;
    + }
    +
    + size = resource_size(res);
    +
    + if (!devm_request_mem_region(sram->dev, res->start, size, pdev->name)) {
    + dev_err(sram->dev, "could not request region for resource\n");
    + return -EBUSY;
    + }
    +
    + sram->virt_base = devm_ioremap_wc(sram->dev, res->start, size);
    + if (IS_ERR(sram->virt_base))
    + return PTR_ERR(sram->virt_base);
    +
    + sram->pool = devm_gen_pool_create(sram->dev,
    + ilog2(SRAM_GRANULARITY), -1);
    + if (!sram->pool)
    + return -ENOMEM;
    +
    + ret = sram_reserve_regions(sram, res);
    + if (ret)
    + return ret;
    +
    sram->clk = devm_clk_get(sram->dev, NULL);
    if (IS_ERR(sram->clk))
    sram->clk = NULL;
    @@ -201,11 +216,6 @@ static int sram_probe(struct platform_device *pdev)
    gen_pool_size(sram->pool) / 1024, sram->virt_base);

    return 0;
    -
    -err_chunks:
    - kfree(rblocks);
    -
    - return ret;
    }

    static int sram_remove(struct platform_device *pdev)
    --
    2.1.4


    \
     
     \ /
      Last update: 2015-05-25 14:21    [W:7.160 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site