mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH V2] clk: sprd: set max_register according to mapping range
@ 2023-03-16  2:36 Chunyan Zhang
  2023-03-16 23:40 ` Stephen Boyd
  0 siblings, 1 reply; 2+ messages in thread
From: Chunyan Zhang @ 2023-03-16  2:36 UTC (permalink / raw)
  To: Michael Turquette, Stephen Boyd
  Cc: linux-clk, Baolin Wang, Orson Zhai, Chunyan Zhang, Chunyan Zhang, LKML

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: d41f59fd92f2 (clk: sprd: Add common infrastructure)
Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
---
V2:
- Added Fixes tag.
---
 drivers/clk/sprd/common.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/clk/sprd/common.c b/drivers/clk/sprd/common.c
index ce81e4087a8f..2bfbab8db94b 100644
--- a/drivers/clk/sprd/common.c
+++ b/drivers/clk/sprd/common.c
@@ -17,7 +17,6 @@ static const struct regmap_config sprdclk_regmap_config = {
 	.reg_bits	= 32,
 	.reg_stride	= 4,
 	.val_bits	= 32,
-	.max_register	= 0xffff,
 	.fast_io	= true,
 };
 
@@ -43,6 +42,8 @@ int sprd_clk_regmap_init(struct platform_device *pdev,
 	struct device *dev = &pdev->dev;
 	struct device_node *node = dev->of_node, *np;
 	struct regmap *regmap;
+	struct resource *res;
+	struct regmap_config reg_config = sprdclk_regmap_config;
 
 	if (of_find_property(node, "sprd,syscon", NULL)) {
 		regmap = syscon_regmap_lookup_by_phandle(node, "sprd,syscon");
@@ -59,12 +60,14 @@ int sprd_clk_regmap_init(struct platform_device *pdev,
 			return PTR_ERR(regmap);
 		}
 	} else {
-		base = devm_platform_ioremap_resource(pdev, 0);
+		base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
 		if (IS_ERR(base))
 			return PTR_ERR(base);
 
+		reg_config.max_register = resource_size(res) - reg_config.reg_stride;
+
 		regmap = devm_regmap_init_mmio(&pdev->dev, base,
-					       &sprdclk_regmap_config);
+					       &reg_config);
 		if (IS_ERR(regmap)) {
 			pr_err("failed to init regmap\n");
 			return PTR_ERR(regmap);
-- 
2.25.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH V2] clk: sprd: set max_register according to mapping range
  2023-03-16  2:36 [PATCH V2] clk: sprd: set max_register according to mapping range Chunyan Zhang
@ 2023-03-16 23:40 ` Stephen Boyd
  0 siblings, 0 replies; 2+ messages in thread
From: Stephen Boyd @ 2023-03-16 23:40 UTC (permalink / raw)
  To: Chunyan Zhang, Michael Turquette
  Cc: linux-clk, Baolin Wang, Orson Zhai, Chunyan Zhang, Chunyan Zhang, LKML

Quoting Chunyan Zhang (2023-03-15 19:36:24)
> 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: d41f59fd92f2 (clk: sprd: Add common infrastructure)
> Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
> ---

Applied to clk-fixes

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-03-16 23:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-16  2:36 [PATCH V2] clk: sprd: set max_register according to mapping range Chunyan Zhang
2023-03-16 23:40 ` Stephen Boyd

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome