Skip to content

Commit 47d4308

Browse files
Chunyan Zhangbebarino
authored andcommitted
clk: sprd: set max_register according to mapping range
In sprd clock driver, regmap_config.max_register was set to a fixed value which is likely larger than the address range configured in device tree, when reading registers through debugfs it would cause access violation. Fixes: d41f59f ("clk: sprd: Add common infrastructure") Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com> Link: https://lore.kernel.org/r/20230316023624.758204-1-chunyan.zhang@unisoc.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
1 parent 5cf9d01 commit 47d4308

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

drivers/clk/sprd/common.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ static const struct regmap_config sprdclk_regmap_config = {
1717
.reg_bits = 32,
1818
.reg_stride = 4,
1919
.val_bits = 32,
20-
.max_register = 0xffff,
2120
.fast_io = true,
2221
};
2322

@@ -43,6 +42,8 @@ int sprd_clk_regmap_init(struct platform_device *pdev,
4342
struct device *dev = &pdev->dev;
4443
struct device_node *node = dev->of_node, *np;
4544
struct regmap *regmap;
45+
struct resource *res;
46+
struct regmap_config reg_config = sprdclk_regmap_config;
4647

4748
if (of_find_property(node, "sprd,syscon", NULL)) {
4849
regmap = syscon_regmap_lookup_by_phandle(node, "sprd,syscon");
@@ -59,12 +60,14 @@ int sprd_clk_regmap_init(struct platform_device *pdev,
5960
return PTR_ERR(regmap);
6061
}
6162
} else {
62-
base = devm_platform_ioremap_resource(pdev, 0);
63+
base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
6364
if (IS_ERR(base))
6465
return PTR_ERR(base);
6566

67+
reg_config.max_register = resource_size(res) - reg_config.reg_stride;
68+
6669
regmap = devm_regmap_init_mmio(&pdev->dev, base,
67-
&sprdclk_regmap_config);
70+
&reg_config);
6871
if (IS_ERR(regmap)) {
6972
pr_err("failed to init regmap\n");
7073
return PTR_ERR(regmap);

0 commit comments

Comments
 (0)