mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions
@ 2026-09-16 12:08 Benoît Monin
  2026-09-16 12:08 ` [PATCH v3 1/2] clk: eyeq: Use devm_platform_ioremap_resource() Benoît Monin
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Benoît Monin @ 2026-09-16 12:08 UTC (permalink / raw)
  To: Vladimir Kondratiev, Gregory CLEMENT, Théo Lebrun,
	Stephen Boyd, Brian Masney, Jerome Brunet
  Cc: Benoît Monin, Thomas Petazzoni, Tawfik Bayouk, linux-mips,
	linux-clk, linux-kernel

The Other Logic Blocks of Mobileye SoCs are clock providers, and some of
them are registered early with CLK_OF_DECLARE_DRIVER(). Their early init
maps the registers with of_iomap(), which does not request the memory
region. On the platform device side, eqc_probe() used a plain ioremap()
too, so none of the OLB regions were reserved in the iomem_resource
tree.

Patch 1 converts eqc_probe() to devm_platform_ioremap_resource(): the
region gets requested and the mapping is released by the devres
machinery on unbind. The mapping is moved before the match data check so
that OLBs bound without match data also get mapped and reserved.

Patch 2 adds a match table entry for mobileye,eyeq6h-central-olb without
match data. All of its clocks are registered by the early init and it
has no auxiliary devices; bind it to get its region reserved.

No functional change in normal operation, besides the region reservation.

Signed-off-by: Benoît Monin <benoit.monin@bootlin.com>
---
Changes in v3:
- Unregister the clocks if the clock provider registration fails
  (Thanks Brian and sashiko for the review)
- Link to v2: https://patch.msgid.link/20260914-clk-eyeq-res-v2-0-687e5de3aba7@bootlin.com

Changes in v2:
- Fix early return comment in eqc_probe() (Thanks Théo for the review)
- Split the patch in two (Thanks Brian for the review)
- Link to v1: https://patch.msgid.link/20260911-clk-eyeq-res-v1-1-39b04542db38@bootlin.com

To: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>
To: Gregory CLEMENT <gregory.clement@bootlin.com>
To: Théo Lebrun <theo.lebrun@bootlin.com>
To: Stephen Boyd <sboyd@kernel.org>
To: Brian Masney <bmasney+clk@redhat.com>
To: Jerome Brunet <jbrunet+clk@baylibre.com>
To: Benoît Monin <benoit.monin@bootlin.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Cc: Tawfik Bayouk <tawfik.bayouk@mobileye.com>
Cc: linux-mips@vger.kernel.org
Cc: linux-clk@vger.kernel.org
Cc: linux-kernel@vger.kernel.org

---
Benoît Monin (2):
      clk: eyeq: Use devm_platform_ioremap_resource()
      clk: eyeq: Add mobileye,eyeq6h-central-olb compatible

 drivers/clk/clk-eyeq.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)
---
base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
change-id: 20260910-clk-eyeq-res-ddbf87fc4fd4

Best regards,
--  
Benoît Monin, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


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

* [PATCH v3 1/2] clk: eyeq: Use devm_platform_ioremap_resource()
  2026-09-16 12:08 [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Benoît Monin
@ 2026-09-16 12:08 ` Benoît Monin
  2026-09-16 12:08 ` [PATCH v3 2/2] clk: eyeq: Add mobileye,eyeq6h-central-olb compatible Benoît Monin
  2026-09-17 14:39 ` [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Brian Masney
  2 siblings, 0 replies; 4+ messages in thread
From: Benoît Monin @ 2026-09-16 12:08 UTC (permalink / raw)
  To: Vladimir Kondratiev, Gregory CLEMENT, Théo Lebrun,
	Stephen Boyd, Brian Masney, Jerome Brunet
  Cc: Benoît Monin, Thomas Petazzoni, Tawfik Bayouk, linux-mips,
	linux-clk, linux-kernel

Convert eqc_probe() from the open-coded platform_get_resource() +
ioremap() sequence to devm_platform_ioremap_resource(). Besides less
code, this requests the memory region so the OLB registers are properly
reserved in the iomem_resource tree.

Move devm_platform_ioremap_resource() before checking for device match
data, so OLBs bound without match data also get their memory region
mapped and reserved.

Unregister the clocks before devres unmaps the region if the clock
provider registration fails.

Suggested-by: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>
Signed-off-by: Benoît Monin <benoit.monin@bootlin.com>
---
 drivers/clk/clk-eyeq.c | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/drivers/clk/clk-eyeq.c b/drivers/clk/clk-eyeq.c
index cf37feccc734..3c00be00889a 100644
--- a/drivers/clk/clk-eyeq.c
+++ b/drivers/clk/clk-eyeq.c
@@ -513,21 +513,16 @@ static int eqc_probe(struct platform_device *pdev)
 	const struct eqc_match_data *data;
 	struct clk_hw_onecell_data *cells;
 	unsigned int i, clk_count;
-	struct resource *res;
 	void __iomem *base;
 	int ret;
 
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
 	data = device_get_match_data(dev);
 	if (!data)
-		return 0; /* No clocks nor auxdevs, we are done. */
-
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (!res)
-		return -ENODEV;
-
-	base = ioremap(res->start, resource_size(res));
-	if (!base)
-		return -ENOMEM;
+		return 0; /* No clocks nor auxdevs, stop here but keep resource reserved */
 
 	/* Init optional auxiliary devices. */
 	eqc_auxdev_create_optional(dev, base, data->reset_auxdev_name);
@@ -559,7 +554,20 @@ static int eqc_probe(struct platform_device *pdev)
 			dev_warn(dev, "failed probing clock %s: %d\n", clk->name, ret);
 	}
 
-	return of_clk_add_hw_provider(np, of_clk_hw_onecell_get, cells);
+	ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, cells);
+	if (ret) {
+		for (i = 0; i < data->clk_count; i++) {
+			const struct eqc_clock *clk = &data->clks[i];
+			struct clk_hw *hw = cells->hws[clk->index];
+
+			if (!IS_ERR_OR_NULL(hw) && clk->unregister)
+				clk->unregister(hw);
+		}
+
+		kfree(cells);
+	}
+
+	return ret;
 }
 
 #define DIV(_index, _parent_idx, _name, _parent_name,			\

-- 
2.55.0


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

* [PATCH v3 2/2] clk: eyeq: Add mobileye,eyeq6h-central-olb compatible
  2026-09-16 12:08 [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Benoît Monin
  2026-09-16 12:08 ` [PATCH v3 1/2] clk: eyeq: Use devm_platform_ioremap_resource() Benoît Monin
@ 2026-09-16 12:08 ` Benoît Monin
  2026-09-17 14:39 ` [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Brian Masney
  2 siblings, 0 replies; 4+ messages in thread
From: Benoît Monin @ 2026-09-16 12:08 UTC (permalink / raw)
  To: Vladimir Kondratiev, Gregory CLEMENT, Théo Lebrun,
	Stephen Boyd, Brian Masney, Jerome Brunet
  Cc: Benoît Monin, Thomas Petazzoni, Tawfik Bayouk, linux-mips,
	linux-clk, linux-kernel

Add an entry for mobileye,eyeq6h-central-olb without match data: its
clocks are all registered by the early init and it has no auxiliary
devices, so probe() now reserves its region and stops there.

Signed-off-by: Benoît Monin <benoit.monin@bootlin.com>
---
 drivers/clk/clk-eyeq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/clk/clk-eyeq.c b/drivers/clk/clk-eyeq.c
index 3c00be00889a..ae0faee31689 100644
--- a/drivers/clk/clk-eyeq.c
+++ b/drivers/clk/clk-eyeq.c
@@ -1183,6 +1183,7 @@ static const struct of_device_id eqc_match_table[] = {
 	{ .compatible = "mobileye,eyeq5-olb", .data = &eqc_eyeq5_match_data },
 	{ .compatible = "mobileye,eyeq6l-olb", .data = &eqc_eyeq6l_match_data },
 	{ .compatible = "mobileye,eyeq6lplus-olb", .data = &eqc_eyeq6lplus_match_data },
+	{ .compatible = "mobileye,eyeq6h-central-olb" /* no data, early only */ },
 	{ .compatible = "mobileye,eyeq6h-west-olb", .data = &eqc_eyeq6h_west_match_data },
 	{ .compatible = "mobileye,eyeq6h-east-olb", .data = &eqc_eyeq6h_east_match_data },
 	{ .compatible = "mobileye,eyeq6h-south-olb", .data = &eqc_eyeq6h_south_match_data },

-- 
2.55.0


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

* Re: [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions
  2026-09-16 12:08 [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Benoît Monin
  2026-09-16 12:08 ` [PATCH v3 1/2] clk: eyeq: Use devm_platform_ioremap_resource() Benoît Monin
  2026-09-16 12:08 ` [PATCH v3 2/2] clk: eyeq: Add mobileye,eyeq6h-central-olb compatible Benoît Monin
@ 2026-09-17 14:39 ` Brian Masney
  2 siblings, 0 replies; 4+ messages in thread
From: Brian Masney @ 2026-09-17 14:39 UTC (permalink / raw)
  To: Vladimir Kondratiev, Gregory CLEMENT, Théo Lebrun,
	Stephen Boyd, Brian Masney, Jerome Brunet, Benoît Monin
  Cc: Thomas Petazzoni, Tawfik Bayouk, linux-mips, linux-clk, linux-kernel


On Wed, 16 Sep 2026 14:08:53 +0200, Benoît Monin wrote:
> clk: eyeq: Reserve OLB memory regions
> 
> The Other Logic Blocks of Mobileye SoCs are clock providers, and some of
> them are registered early with CLK_OF_DECLARE_DRIVER(). Their early init
> maps the registers with of_iomap(), which does not request the memory
> region. On the platform device side, eqc_probe() used a plain ioremap()
> too, so none of the OLB regions were reserved in the iomem_resource
> tree.
> 
> [...]

Applied, thanks!

[1/2] clk: eyeq: Use devm_platform_ioremap_resource()
      commit: b8bd186778e74492a2bbeaed7e00d87dbe46b6f2
[2/2] clk: eyeq: Add mobileye,eyeq6h-central-olb compatible
      commit: 07bdb358bc50f17442b6b685d18a6f141b6f276b

Best regards,
-- 
Brian Masney <bmasney@redhat.com>


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

end of thread, other threads:[~2026-09-17 14:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-16 12:08 [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Benoît Monin
2026-09-16 12:08 ` [PATCH v3 1/2] clk: eyeq: Use devm_platform_ioremap_resource() Benoît Monin
2026-09-16 12:08 ` [PATCH v3 2/2] clk: eyeq: Add mobileye,eyeq6h-central-olb compatible Benoît Monin
2026-09-17 14:39 ` [PATCH v3 0/2] clk: eyeq: Reserve OLB memory regions Brian Masney

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

all inboxes | Powered by JetHome®