Lines Matching refs:sram

55 static int sram_add_pool(struct sram_dev *sram, struct sram_reserve *block,  in sram_add_pool()  argument
60 part->pool = devm_gen_pool_create(sram->dev, ilog2(SRAM_GRANULARITY), in sram_add_pool()
68 dev_err(sram->dev, "failed to register subpool: %d\n", ret); in sram_add_pool()
75 static int sram_add_export(struct sram_dev *sram, struct sram_reserve *block, in sram_add_export() argument
79 part->battr.attr.name = devm_kasprintf(sram->dev, GFP_KERNEL, in sram_add_export()
90 return device_create_bin_file(sram->dev, &part->battr); in sram_add_export()
93 static int sram_add_partition(struct sram_dev *sram, struct sram_reserve *block, in sram_add_partition() argument
97 struct sram_partition *part = &sram->partition[sram->partitions]; in sram_add_partition()
101 if (sram->config && sram->config->map_only_reserved) { in sram_add_partition()
104 if (sram->no_memory_wc) in sram_add_partition()
105 virt_base = devm_ioremap_resource(sram->dev, &block->res); in sram_add_partition()
107 virt_base = devm_ioremap_resource_wc(sram->dev, &block->res); in sram_add_partition()
110 dev_err(sram->dev, "could not map SRAM at %pr\n", &block->res); in sram_add_partition()
116 part->base = sram->virt_base + block->start; in sram_add_partition()
120 ret = sram_add_pool(sram, block, start, part); in sram_add_partition()
125 ret = sram_add_export(sram, block, start, part); in sram_add_partition()
130 ret = sram_check_protect_exec(sram, block, part); in sram_add_partition()
134 ret = sram_add_pool(sram, block, start, part); in sram_add_partition()
141 sram->partitions++; in sram_add_partition()
146 static void sram_free_partitions(struct sram_dev *sram) in sram_free_partitions() argument
150 if (!sram->partitions) in sram_free_partitions()
153 part = &sram->partition[sram->partitions - 1]; in sram_free_partitions()
154 for (; sram->partitions; sram->partitions--, part--) { in sram_free_partitions()
156 device_remove_bin_file(sram->dev, &part->battr); in sram_free_partitions()
160 dev_err(sram->dev, "removed pool while SRAM allocated\n"); in sram_free_partitions()
173 static int sram_reserve_regions(struct sram_dev *sram, struct resource *res) in sram_reserve_regions() argument
175 struct device_node *np = sram->dev->of_node, *child; in sram_reserve_regions()
202 dev_err(sram->dev, in sram_reserve_regions()
209 dev_err(sram->dev, in sram_reserve_regions()
237 dev_err(sram->dev, in sram_reserve_regions()
245 block->label = devm_kstrdup(sram->dev, in sram_reserve_regions()
252 dev_dbg(sram->dev, "found %sblock '%s' 0x%x-0x%x\n", in sram_reserve_regions()
256 dev_dbg(sram->dev, "found reserved block 0x%x-0x%x\n", in sram_reserve_regions()
272 sram->partition = devm_kcalloc(sram->dev, in sram_reserve_regions()
273 exports, sizeof(*sram->partition), in sram_reserve_regions()
275 if (!sram->partition) { in sram_reserve_regions()
285 dev_err(sram->dev, in sram_reserve_regions()
289 sram_free_partitions(sram); in sram_reserve_regions()
295 ret = sram_add_partition(sram, block, in sram_reserve_regions()
298 sram_free_partitions(sram); in sram_reserve_regions()
316 if (sram->pool) { in sram_reserve_regions()
317 dev_dbg(sram->dev, "adding chunk 0x%lx-0x%lx\n", in sram_reserve_regions()
320 ret = gen_pool_add_virt(sram->pool, in sram_reserve_regions()
321 (unsigned long)sram->virt_base + cur_start, in sram_reserve_regions()
324 sram_free_partitions(sram); in sram_reserve_regions()
381 struct sram_dev *sram; in sram_probe() local
387 sram = devm_kzalloc(&pdev->dev, sizeof(*sram), GFP_KERNEL); in sram_probe()
388 if (!sram) in sram_probe()
391 sram->dev = &pdev->dev; in sram_probe()
392 sram->no_memory_wc = of_property_read_bool(pdev->dev.of_node, "no-memory-wc"); in sram_probe()
393 sram->config = config; in sram_probe()
397 if (sram->no_memory_wc) in sram_probe()
398 sram->virt_base = devm_ioremap_resource(&pdev->dev, res); in sram_probe()
400 sram->virt_base = devm_ioremap_resource_wc(&pdev->dev, res); in sram_probe()
401 if (IS_ERR(sram->virt_base)) { in sram_probe()
403 return PTR_ERR(sram->virt_base); in sram_probe()
406 sram->pool = devm_gen_pool_create(sram->dev, ilog2(SRAM_GRANULARITY), in sram_probe()
408 if (IS_ERR(sram->pool)) in sram_probe()
409 return PTR_ERR(sram->pool); in sram_probe()
412 sram->clk = devm_clk_get(sram->dev, NULL); in sram_probe()
413 if (IS_ERR(sram->clk)) in sram_probe()
414 sram->clk = NULL; in sram_probe()
416 clk_prepare_enable(sram->clk); in sram_probe()
418 ret = sram_reserve_regions(sram, in sram_probe()
423 platform_set_drvdata(pdev, sram); in sram_probe()
431 if (sram->pool) in sram_probe()
432 dev_dbg(sram->dev, "SRAM pool: %zu KiB @ 0x%p\n", in sram_probe()
433 gen_pool_size(sram->pool) / 1024, sram->virt_base); in sram_probe()
438 sram_free_partitions(sram); in sram_probe()
440 if (sram->clk) in sram_probe()
441 clk_disable_unprepare(sram->clk); in sram_probe()
448 struct sram_dev *sram = platform_get_drvdata(pdev); in sram_remove() local
450 sram_free_partitions(sram); in sram_remove()
452 if (sram->pool && gen_pool_avail(sram->pool) < gen_pool_size(sram->pool)) in sram_remove()
453 dev_err(sram->dev, "removed while SRAM allocated\n"); in sram_remove()
455 if (sram->clk) in sram_remove()
456 clk_disable_unprepare(sram->clk); in sram_remove()