Skip to content

Commit f46c06a

Browse files
committed
Merge tag 'clk-imx-6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/abelvesa/linux into clk-imx
Pull i.MX clk driver updates from Abel Vesa: - Document bindings for i.MX94 LVDS/Display CSR - Fix synchronous abort in i.MX95 BLK CTL driver - Rename LVDS and displaymix CSR BLK needed for supporting i.MX943 - Add i.MX94 LVDS/Display CSR clock to the i.MX95 BLK CTL - Update MAINTAINERS entry to include both nxp,imx* and fsl,imx* * tag 'clk-imx-6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/abelvesa/linux: MAINTAINERS: Update i.MX Clock Entry clk: imx95-blk-ctl: Add clock for i.MX94 LVDS/Display CSR clk: imx95-blk-ctl: Rename lvds and displaymix csr blk clk: imx95-blk-ctl: Fix synchronous abort dt-bindings: clock: Add support for i.MX94 LVDS/DISPLAY CSR clk: imx: Fix an out-of-bounds access in dispmix_csr_clk_dev_data
2 parents 19272b3 + c788652 commit f46c06a

File tree

4 files changed

+91
-23
lines changed

4 files changed

+91
-23
lines changed

Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ properties:
1313
compatible:
1414
items:
1515
- enum:
16+
- nxp,imx94-display-csr
17+
- nxp,imx94-lvds-csr
1618
- nxp,imx95-camera-csr
1719
- nxp,imx95-display-csr
1820
- nxp,imx95-hsio-blk-ctl

MAINTAINERS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17951,9 +17951,9 @@ L: [email protected]
1795117951
1795217952
S: Maintained
1795317953
T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelvesa/linux.git clk/imx
17954-
F: Documentation/devicetree/bindings/clock/imx*
17954+
F: Documentation/devicetree/bindings/clock/*imx*
1795517955
F: drivers/clk/imx/
17956-
F: include/dt-bindings/clock/imx*
17956+
F: include/dt-bindings/clock/*imx*
1795717957

1795817958
NXP PF8100/PF8121A/PF8200 PMIC REGULATOR DEVICE DRIVER
1795917959
M: Jagan Teki <[email protected]>

drivers/clk/imx/clk-imx95-blk-ctl.c

Lines changed: 74 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// SPDX-License-Identifier: GPL-2.0
22
/*
3-
* Copyright 2024 NXP
3+
* Copyright 2024-2025 NXP
44
*/
55

6+
#include <dt-bindings/clock/nxp,imx94-clock.h>
67
#include <dt-bindings/clock/nxp,imx95-clock.h>
78
#include <linux/clk.h>
89
#include <linux/clk-provider.h>
@@ -156,7 +157,7 @@ static const struct imx95_blk_ctl_dev_data camblk_dev_data = {
156157
.clk_reg_offset = 0,
157158
};
158159

159-
static const struct imx95_blk_ctl_clk_dev_data lvds_clk_dev_data[] = {
160+
static const struct imx95_blk_ctl_clk_dev_data imx95_lvds_clk_dev_data[] = {
160161
[IMX95_CLK_DISPMIX_LVDS_PHY_DIV] = {
161162
.name = "ldb_phy_div",
162163
.parent_names = (const char *[]){ "ldbpll", },
@@ -213,17 +214,21 @@ static const struct imx95_blk_ctl_clk_dev_data lvds_clk_dev_data[] = {
213214
},
214215
};
215216

216-
static const struct imx95_blk_ctl_dev_data lvds_csr_dev_data = {
217-
.num_clks = ARRAY_SIZE(lvds_clk_dev_data),
218-
.clk_dev_data = lvds_clk_dev_data,
217+
static const struct imx95_blk_ctl_dev_data imx95_lvds_csr_dev_data = {
218+
.num_clks = ARRAY_SIZE(imx95_lvds_clk_dev_data),
219+
.clk_dev_data = imx95_lvds_clk_dev_data,
219220
.clk_reg_offset = 0,
220221
};
221222

222-
static const struct imx95_blk_ctl_clk_dev_data dispmix_csr_clk_dev_data[] = {
223+
static const char * const imx95_disp_engine_parents[] = {
224+
"videopll1", "dsi_pll", "ldb_pll_div7"
225+
};
226+
227+
static const struct imx95_blk_ctl_clk_dev_data imx95_dispmix_csr_clk_dev_data[] = {
223228
[IMX95_CLK_DISPMIX_ENG0_SEL] = {
224229
.name = "disp_engine0_sel",
225-
.parent_names = (const char *[]){"videopll1", "dsi_pll", "ldb_pll_div7", },
226-
.num_parents = 4,
230+
.parent_names = imx95_disp_engine_parents,
231+
.num_parents = ARRAY_SIZE(imx95_disp_engine_parents),
227232
.reg = 0,
228233
.bit_idx = 0,
229234
.bit_width = 2,
@@ -232,8 +237,8 @@ static const struct imx95_blk_ctl_clk_dev_data dispmix_csr_clk_dev_data[] = {
232237
},
233238
[IMX95_CLK_DISPMIX_ENG1_SEL] = {
234239
.name = "disp_engine1_sel",
235-
.parent_names = (const char *[]){"videopll1", "dsi_pll", "ldb_pll_div7", },
236-
.num_parents = 4,
240+
.parent_names = imx95_disp_engine_parents,
241+
.num_parents = ARRAY_SIZE(imx95_disp_engine_parents),
237242
.reg = 0,
238243
.bit_idx = 2,
239244
.bit_width = 2,
@@ -242,9 +247,9 @@ static const struct imx95_blk_ctl_clk_dev_data dispmix_csr_clk_dev_data[] = {
242247
}
243248
};
244249

245-
static const struct imx95_blk_ctl_dev_data dispmix_csr_dev_data = {
246-
.num_clks = ARRAY_SIZE(dispmix_csr_clk_dev_data),
247-
.clk_dev_data = dispmix_csr_clk_dev_data,
250+
static const struct imx95_blk_ctl_dev_data imx95_dispmix_csr_dev_data = {
251+
.num_clks = ARRAY_SIZE(imx95_dispmix_csr_clk_dev_data),
252+
.clk_dev_data = imx95_dispmix_csr_clk_dev_data,
248253
.clk_reg_offset = 0,
249254
};
250255

@@ -296,6 +301,51 @@ static const struct imx95_blk_ctl_dev_data hsio_blk_ctl_dev_data = {
296301
.clk_reg_offset = 0,
297302
};
298303

304+
static const struct imx95_blk_ctl_clk_dev_data imx94_lvds_clk_dev_data[] = {
305+
[IMX94_CLK_DISPMIX_LVDS_CLK_GATE] = {
306+
.name = "lvds_clk_gate",
307+
.parent_names = (const char *[]){ "ldbpll", },
308+
.num_parents = 1,
309+
.reg = 0,
310+
.bit_idx = 1,
311+
.bit_width = 1,
312+
.type = CLK_GATE,
313+
.flags = CLK_SET_RATE_PARENT,
314+
.flags2 = CLK_GATE_SET_TO_DISABLE,
315+
},
316+
};
317+
318+
static const struct imx95_blk_ctl_dev_data imx94_lvds_csr_dev_data = {
319+
.num_clks = ARRAY_SIZE(imx94_lvds_clk_dev_data),
320+
.clk_dev_data = imx94_lvds_clk_dev_data,
321+
.clk_reg_offset = 0,
322+
.rpm_enabled = true,
323+
};
324+
325+
static const char * const imx94_disp_engine_parents[] = {
326+
"disppix", "ldb_pll_div7"
327+
};
328+
329+
static const struct imx95_blk_ctl_clk_dev_data imx94_dispmix_csr_clk_dev_data[] = {
330+
[IMX94_CLK_DISPMIX_CLK_SEL] = {
331+
.name = "disp_clk_sel",
332+
.parent_names = imx94_disp_engine_parents,
333+
.num_parents = ARRAY_SIZE(imx94_disp_engine_parents),
334+
.reg = 0,
335+
.bit_idx = 1,
336+
.bit_width = 1,
337+
.type = CLK_MUX,
338+
.flags = CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT,
339+
},
340+
};
341+
342+
static const struct imx95_blk_ctl_dev_data imx94_dispmix_csr_dev_data = {
343+
.num_clks = ARRAY_SIZE(imx94_dispmix_csr_clk_dev_data),
344+
.clk_dev_data = imx94_dispmix_csr_clk_dev_data,
345+
.clk_reg_offset = 0,
346+
.rpm_enabled = true,
347+
};
348+
299349
static int imx95_bc_probe(struct platform_device *pdev)
300350
{
301351
struct device *dev = &pdev->dev;
@@ -338,8 +388,10 @@ static int imx95_bc_probe(struct platform_device *pdev)
338388
if (!clk_hw_data)
339389
return -ENOMEM;
340390

341-
if (bc_data->rpm_enabled)
342-
pm_runtime_enable(&pdev->dev);
391+
if (bc_data->rpm_enabled) {
392+
devm_pm_runtime_enable(&pdev->dev);
393+
pm_runtime_resume_and_get(&pdev->dev);
394+
}
343395

344396
clk_hw_data->num = bc_data->num_clks;
345397
hws = clk_hw_data->hws;
@@ -379,8 +431,10 @@ static int imx95_bc_probe(struct platform_device *pdev)
379431
goto cleanup;
380432
}
381433

382-
if (pm_runtime_enabled(bc->dev))
434+
if (pm_runtime_enabled(bc->dev)) {
435+
pm_runtime_put_sync(&pdev->dev);
383436
clk_disable_unprepare(bc->clk_apb);
437+
}
384438

385439
return 0;
386440

@@ -391,9 +445,6 @@ static int imx95_bc_probe(struct platform_device *pdev)
391445
clk_hw_unregister(hws[i]);
392446
}
393447

394-
if (bc_data->rpm_enabled)
395-
pm_runtime_disable(&pdev->dev);
396-
397448
return ret;
398449
}
399450

@@ -462,10 +513,12 @@ static const struct dev_pm_ops imx95_bc_pm_ops = {
462513
};
463514

464515
static const struct of_device_id imx95_bc_of_match[] = {
516+
{ .compatible = "nxp,imx94-display-csr", .data = &imx94_dispmix_csr_dev_data },
517+
{ .compatible = "nxp,imx94-lvds-csr", .data = &imx94_lvds_csr_dev_data },
465518
{ .compatible = "nxp,imx95-camera-csr", .data = &camblk_dev_data },
466519
{ .compatible = "nxp,imx95-display-master-csr", },
467-
{ .compatible = "nxp,imx95-lvds-csr", .data = &lvds_csr_dev_data },
468-
{ .compatible = "nxp,imx95-display-csr", .data = &dispmix_csr_dev_data },
520+
{ .compatible = "nxp,imx95-display-csr", .data = &imx95_dispmix_csr_dev_data },
521+
{ .compatible = "nxp,imx95-lvds-csr", .data = &imx95_lvds_csr_dev_data },
469522
{ .compatible = "nxp,imx95-hsio-blk-ctl", .data = &hsio_blk_ctl_dev_data },
470523
{ .compatible = "nxp,imx95-vpu-csr", .data = &vpublk_dev_data },
471524
{ .compatible = "nxp,imx95-netcmix-blk-ctrl", .data = &netcmix_dev_data},
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
2+
/*
3+
* Copyright 2025 NXP
4+
*/
5+
6+
#ifndef __DT_BINDINGS_CLOCK_IMX94_H
7+
#define __DT_BINDINGS_CLOCK_IMX94_H
8+
9+
#define IMX94_CLK_DISPMIX_CLK_SEL 0
10+
11+
#define IMX94_CLK_DISPMIX_LVDS_CLK_GATE 0
12+
13+
#endif /* __DT_BINDINGS_CLOCK_IMX94_H */

0 commit comments

Comments
 (0)