1 // SPDX-License-Identifier: GPL-2.0
3 * Renesas Clock Pulse Generator / Module Standby and Software Reset
5 * Copyright (C) 2015 Glider bvba
7 * Based on clk-mstp.c, clk-rcar-gen2.c, and clk-rcar-gen3.c
9 * Copyright (C) 2013 Ideas On Board SPRL
10 * Copyright (C) 2015 Renesas Electronics Corp.
13 #include <linux/clk.h>
14 #include <linux/clk-provider.h>
15 #include <linux/clk/renesas.h>
16 #include <linux/delay.h>
17 #include <linux/device.h>
18 #include <linux/init.h>
20 #include <linux/iopoll.h>
21 #include <linux/mod_devicetable.h>
22 #include <linux/module.h>
23 #include <linux/of_address.h>
24 #include <linux/platform_device.h>
25 #include <linux/pm_clock.h>
26 #include <linux/pm_domain.h>
27 #include <linux/psci.h>
28 #include <linux/reset-controller.h>
29 #include <linux/slab.h>
31 #include <dt-bindings/clock/renesas-cpg-mssr.h>
33 #include "renesas-cpg-mssr.h"
37 #define WARN_DEBUG(x) WARN_ON(x)
39 #define WARN_DEBUG(x) do { } while (0)
43 * Module Standby and Software Reset register offets.
45 * If the registers exist, these are valid for SH-Mobile, R-Mobile,
46 * R-Car Gen2, R-Car Gen3, and RZ/G1.
47 * These are NOT valid for R-Car Gen1 and RZ/A1!
51 * Module Stop Status Register offsets
54 static const u16 mstpsr
[] = {
55 0x030, 0x038, 0x040, 0x048, 0x04C, 0x03C, 0x1C0, 0x1C4,
56 0x9A0, 0x9A4, 0x9A8, 0x9AC,
59 static const u16 mstpsr_for_gen4
[] = {
60 0x2E00, 0x2E04, 0x2E08, 0x2E0C, 0x2E10, 0x2E14, 0x2E18, 0x2E1C,
61 0x2E20, 0x2E24, 0x2E28, 0x2E2C, 0x2E30, 0x2E34, 0x2E38, 0x2E3C,
62 0x2E40, 0x2E44, 0x2E48, 0x2E4C, 0x2E50, 0x2E54, 0x2E58, 0x2E5C,
63 0x2E60, 0x2E64, 0x2E68, 0x2E6C, 0x2E70, 0x2E74,
67 * System Module Stop Control Register offsets
70 static const u16 smstpcr
[] = {
71 0x130, 0x134, 0x138, 0x13C, 0x140, 0x144, 0x148, 0x14C,
72 0x990, 0x994, 0x998, 0x99C,
75 static const u16 mstpcr_for_gen4
[] = {
76 0x2D00, 0x2D04, 0x2D08, 0x2D0C, 0x2D10, 0x2D14, 0x2D18, 0x2D1C,
77 0x2D20, 0x2D24, 0x2D28, 0x2D2C, 0x2D30, 0x2D34, 0x2D38, 0x2D3C,
78 0x2D40, 0x2D44, 0x2D48, 0x2D4C, 0x2D50, 0x2D54, 0x2D58, 0x2D5C,
79 0x2D60, 0x2D64, 0x2D68, 0x2D6C, 0x2D70, 0x2D74,
83 * Standby Control Register offsets (RZ/A)
84 * Base address is FRQCR register
87 static const u16 stbcr
[] = {
88 0xFFFF/*dummy*/, 0x010, 0x014, 0x410, 0x414, 0x418, 0x41C, 0x420,
93 * Software Reset Register offsets
96 static const u16 srcr
[] = {
97 0x0A0, 0x0A8, 0x0B0, 0x0B8, 0x0BC, 0x0C4, 0x1C8, 0x1CC,
98 0x920, 0x924, 0x928, 0x92C,
101 static const u16 srcr_for_gen4
[] = {
102 0x2C00, 0x2C04, 0x2C08, 0x2C0C, 0x2C10, 0x2C14, 0x2C18, 0x2C1C,
103 0x2C20, 0x2C24, 0x2C28, 0x2C2C, 0x2C30, 0x2C34, 0x2C38, 0x2C3C,
104 0x2C40, 0x2C44, 0x2C48, 0x2C4C, 0x2C50, 0x2C54, 0x2C58, 0x2C5C,
105 0x2C60, 0x2C64, 0x2C68, 0x2C6C, 0x2C70, 0x2C74,
109 * Software Reset Clearing Register offsets
112 static const u16 srstclr
[] = {
113 0x940, 0x944, 0x948, 0x94C, 0x950, 0x954, 0x958, 0x95C,
114 0x960, 0x964, 0x968, 0x96C,
117 static const u16 srstclr_for_gen4
[] = {
118 0x2C80, 0x2C84, 0x2C88, 0x2C8C, 0x2C90, 0x2C94, 0x2C98, 0x2C9C,
119 0x2CA0, 0x2CA4, 0x2CA8, 0x2CAC, 0x2CB0, 0x2CB4, 0x2CB8, 0x2CBC,
120 0x2CC0, 0x2CC4, 0x2CC8, 0x2CCC, 0x2CD0, 0x2CD4, 0x2CD8, 0x2CDC,
121 0x2CE0, 0x2CE4, 0x2CE8, 0x2CEC, 0x2CF0, 0x2CF4,
125 * struct cpg_mssr_priv - Clock Pulse Generator / Module Standby
126 * and Software Reset Private Data
128 * @rcdev: Optional reset controller entity
129 * @dev: CPG/MSSR device
130 * @base: CPG/MSSR register block base address
131 * @reg_layout: CPG/MSSR register layout
132 * @rmw_lock: protects RMW register accesses
133 * @np: Device node in DT for this CPG/MSSR module
134 * @num_core_clks: Number of Core Clocks in clks[]
135 * @num_mod_clks: Number of Module Clocks in clks[]
136 * @last_dt_core_clk: ID of the last Core Clock exported to DT
137 * @notifiers: Notifier chain to save/restore clock state for system resume
138 * @status_regs: Pointer to status registers array
139 * @control_regs: Pointer to control registers array
140 * @reset_regs: Pointer to reset registers array
141 * @reset_clear_regs: Pointer to reset clearing registers array
142 * @smstpcr_saved: [].mask: Mask of SMSTPCR[] bits under our control
143 * [].val: Saved values of SMSTPCR[]
144 * @reserved_ids: Temporary used, reserved id list
145 * @num_reserved_ids: Temporary used, number of reserved id list
146 * @clks: Array containing all Core and Module Clocks
148 struct cpg_mssr_priv
{
149 #ifdef CONFIG_RESET_CONTROLLER
150 struct reset_controller_dev rcdev
;
154 enum clk_reg_layout reg_layout
;
156 struct device_node
*np
;
158 unsigned int num_core_clks
;
159 unsigned int num_mod_clks
;
160 unsigned int last_dt_core_clk
;
162 struct raw_notifier_head notifiers
;
163 const u16
*status_regs
;
164 const u16
*control_regs
;
165 const u16
*reset_regs
;
166 const u16
*reset_clear_regs
;
170 } smstpcr_saved
[ARRAY_SIZE(mstpsr_for_gen4
)];
172 unsigned int *reserved_ids
;
173 unsigned int num_reserved_ids
;
178 static struct cpg_mssr_priv
*cpg_mssr_priv
;
181 * struct mstp_clock - MSTP gating clock
182 * @hw: handle between common and hardware-specific interfaces
183 * @index: MSTP clock number
184 * @priv: CPG/MSSR private data
189 struct cpg_mssr_priv
*priv
;
192 #define to_mstp_clock(_hw) container_of(_hw, struct mstp_clock, hw)
194 static int cpg_mstp_clock_endisable(struct clk_hw
*hw
, bool enable
)
196 struct mstp_clock
*clock
= to_mstp_clock(hw
);
197 struct cpg_mssr_priv
*priv
= clock
->priv
;
198 unsigned int reg
= clock
->index
/ 32;
199 unsigned int bit
= clock
->index
% 32;
200 struct device
*dev
= priv
->dev
;
201 u32 bitmask
= BIT(bit
);
206 dev_dbg(dev
, "MSTP %u%02u/%pC %s\n", reg
, bit
, hw
->clk
,
207 enable
? "ON" : "OFF");
208 spin_lock_irqsave(&priv
->rmw_lock
, flags
);
210 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
) {
211 value
= readb(priv
->base
+ priv
->control_regs
[reg
]);
216 writeb(value
, priv
->base
+ priv
->control_regs
[reg
]);
218 /* dummy read to ensure write has completed */
219 readb(priv
->base
+ priv
->control_regs
[reg
]);
220 barrier_data(priv
->base
+ priv
->control_regs
[reg
]);
222 value
= readl(priv
->base
+ priv
->control_regs
[reg
]);
227 writel(value
, priv
->base
+ priv
->control_regs
[reg
]);
230 spin_unlock_irqrestore(&priv
->rmw_lock
, flags
);
232 if (!enable
|| priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
)
235 error
= readl_poll_timeout_atomic(priv
->base
+ priv
->status_regs
[reg
],
236 value
, !(value
& bitmask
), 0, 10);
238 dev_err(dev
, "Failed to enable SMSTP %p[%d]\n",
239 priv
->base
+ priv
->control_regs
[reg
], bit
);
244 static int cpg_mstp_clock_enable(struct clk_hw
*hw
)
246 return cpg_mstp_clock_endisable(hw
, true);
249 static void cpg_mstp_clock_disable(struct clk_hw
*hw
)
251 cpg_mstp_clock_endisable(hw
, false);
254 static int cpg_mstp_clock_is_enabled(struct clk_hw
*hw
)
256 struct mstp_clock
*clock
= to_mstp_clock(hw
);
257 struct cpg_mssr_priv
*priv
= clock
->priv
;
260 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
)
261 value
= readb(priv
->base
+ priv
->control_regs
[clock
->index
/ 32]);
263 value
= readl(priv
->base
+ priv
->status_regs
[clock
->index
/ 32]);
265 return !(value
& BIT(clock
->index
% 32));
268 static const struct clk_ops cpg_mstp_clock_ops
= {
269 .enable
= cpg_mstp_clock_enable
,
270 .disable
= cpg_mstp_clock_disable
,
271 .is_enabled
= cpg_mstp_clock_is_enabled
,
275 struct clk
*cpg_mssr_clk_src_twocell_get(struct of_phandle_args
*clkspec
,
278 unsigned int clkidx
= clkspec
->args
[1];
279 struct cpg_mssr_priv
*priv
= data
;
280 struct device
*dev
= priv
->dev
;
286 switch (clkspec
->args
[0]) {
289 if (clkidx
> priv
->last_dt_core_clk
) {
290 dev_err(dev
, "Invalid %s clock index %u\n", type
,
292 return ERR_PTR(-EINVAL
);
294 clk
= priv
->clks
[clkidx
];
299 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
) {
300 idx
= MOD_CLK_PACK_10(clkidx
);
301 range_check
= 7 - (clkidx
% 10);
303 idx
= MOD_CLK_PACK(clkidx
);
304 range_check
= 31 - (clkidx
% 100);
306 if (range_check
< 0 || idx
>= priv
->num_mod_clks
) {
307 dev_err(dev
, "Invalid %s clock index %u\n", type
,
309 return ERR_PTR(-EINVAL
);
311 clk
= priv
->clks
[priv
->num_core_clks
+ idx
];
315 dev_err(dev
, "Invalid CPG clock type %u\n", clkspec
->args
[0]);
316 return ERR_PTR(-EINVAL
);
320 dev_err(dev
, "Cannot get %s clock %u: %ld", type
, clkidx
,
323 dev_dbg(dev
, "clock (%u, %u) is %pC at %lu Hz\n",
324 clkspec
->args
[0], clkspec
->args
[1], clk
,
329 static void __init
cpg_mssr_register_core_clk(const struct cpg_core_clk
*core
,
330 const struct cpg_mssr_info
*info
,
331 struct cpg_mssr_priv
*priv
)
333 struct clk
*clk
= ERR_PTR(-ENOTSUPP
), *parent
;
334 struct device
*dev
= priv
->dev
;
335 unsigned int id
= core
->id
, div
= core
->div
;
336 const char *parent_name
;
338 WARN_DEBUG(id
>= priv
->num_core_clks
);
339 WARN_DEBUG(PTR_ERR(priv
->clks
[id
]) != -ENOENT
);
342 /* Skip NULLified clock */
346 switch (core
->type
) {
348 clk
= of_clk_get_by_name(priv
->np
, core
->name
);
352 case CLK_TYPE_DIV6P1
:
353 case CLK_TYPE_DIV6_RO
:
354 WARN_DEBUG(core
->parent
>= priv
->num_core_clks
);
355 parent
= priv
->clks
[core
->parent
];
356 if (IS_ERR(parent
)) {
361 parent_name
= __clk_get_name(parent
);
363 if (core
->type
== CLK_TYPE_DIV6_RO
)
364 /* Multiply with the DIV6 register value */
365 div
*= (readl(priv
->base
+ core
->offset
) & 0x3f) + 1;
367 if (core
->type
== CLK_TYPE_DIV6P1
) {
368 clk
= cpg_div6_register(core
->name
, 1, &parent_name
,
369 priv
->base
+ core
->offset
,
372 clk
= clk_register_fixed_factor(NULL
, core
->name
,
379 clk
= clk_register_fixed_rate(NULL
, core
->name
, NULL
, 0,
384 if (info
->cpg_clk_register
)
385 clk
= info
->cpg_clk_register(dev
, core
, info
,
386 priv
->clks
, priv
->base
,
389 dev_err(dev
, "%s has unsupported core clock type %u\n",
390 core
->name
, core
->type
);
394 if (IS_ERR_OR_NULL(clk
))
397 dev_dbg(dev
, "Core clock %pC at %lu Hz\n", clk
, clk_get_rate(clk
));
398 priv
->clks
[id
] = clk
;
402 dev_err(dev
, "Failed to register %s clock %s: %ld\n", "core",
403 core
->name
, PTR_ERR(clk
));
406 static void __init
cpg_mssr_register_mod_clk(const struct mssr_mod_clk
*mod
,
407 const struct cpg_mssr_info
*info
,
408 struct cpg_mssr_priv
*priv
)
410 struct mstp_clock
*clock
= NULL
;
411 struct device
*dev
= priv
->dev
;
412 unsigned int id
= mod
->id
;
413 struct clk_init_data init
= {};
414 struct clk
*parent
, *clk
;
415 const char *parent_name
;
418 WARN_DEBUG(id
< priv
->num_core_clks
);
419 WARN_DEBUG(id
>= priv
->num_core_clks
+ priv
->num_mod_clks
);
420 WARN_DEBUG(mod
->parent
>= priv
->num_core_clks
+ priv
->num_mod_clks
);
421 WARN_DEBUG(PTR_ERR(priv
->clks
[id
]) != -ENOENT
);
424 /* Skip NULLified clock */
428 parent
= priv
->clks
[mod
->parent
];
429 if (IS_ERR(parent
)) {
434 clock
= kzalloc(sizeof(*clock
), GFP_KERNEL
);
436 clk
= ERR_PTR(-ENOMEM
);
440 init
.name
= mod
->name
;
441 init
.ops
= &cpg_mstp_clock_ops
;
442 init
.flags
= CLK_SET_RATE_PARENT
;
443 parent_name
= __clk_get_name(parent
);
444 init
.parent_names
= &parent_name
;
445 init
.num_parents
= 1;
447 clock
->index
= id
- priv
->num_core_clks
;
449 clock
->hw
.init
= &init
;
451 for (i
= 0; i
< info
->num_crit_mod_clks
; i
++)
452 if (id
== info
->crit_mod_clks
[i
] &&
453 cpg_mstp_clock_is_enabled(&clock
->hw
)) {
454 dev_dbg(dev
, "MSTP %s setting CLK_IS_CRITICAL\n",
456 init
.flags
|= CLK_IS_CRITICAL
;
461 * Ignore reserved device.
463 * cpg_mssr_reserved_init()
465 for (i
= 0; i
< priv
->num_reserved_ids
; i
++) {
466 if (id
== priv
->reserved_ids
[i
]) {
467 dev_info(dev
, "Ignore Linux non-assigned mod (%s)\n", mod
->name
);
468 init
.flags
|= CLK_IGNORE_UNUSED
;
473 clk
= clk_register(NULL
, &clock
->hw
);
477 dev_dbg(dev
, "Module clock %pC at %lu Hz\n", clk
, clk_get_rate(clk
));
478 priv
->clks
[id
] = clk
;
479 priv
->smstpcr_saved
[clock
->index
/ 32].mask
|= BIT(clock
->index
% 32);
483 dev_err(dev
, "Failed to register %s clock %s: %ld\n", "module",
484 mod
->name
, PTR_ERR(clk
));
488 struct cpg_mssr_clk_domain
{
489 struct generic_pm_domain genpd
;
490 unsigned int num_core_pm_clks
;
491 unsigned int core_pm_clks
[];
494 static struct cpg_mssr_clk_domain
*cpg_mssr_clk_domain
;
496 static bool cpg_mssr_is_pm_clk(const struct of_phandle_args
*clkspec
,
497 struct cpg_mssr_clk_domain
*pd
)
501 if (clkspec
->np
!= pd
->genpd
.dev
.of_node
|| clkspec
->args_count
!= 2)
504 switch (clkspec
->args
[0]) {
506 for (i
= 0; i
< pd
->num_core_pm_clks
; i
++)
507 if (clkspec
->args
[1] == pd
->core_pm_clks
[i
])
519 int cpg_mssr_attach_dev(struct generic_pm_domain
*unused
, struct device
*dev
)
521 struct cpg_mssr_clk_domain
*pd
= cpg_mssr_clk_domain
;
522 struct device_node
*np
= dev
->of_node
;
523 struct of_phandle_args clkspec
;
529 dev_dbg(dev
, "CPG/MSSR clock domain not yet available\n");
530 return -EPROBE_DEFER
;
533 while (!of_parse_phandle_with_args(np
, "clocks", "#clock-cells", i
,
535 if (cpg_mssr_is_pm_clk(&clkspec
, pd
))
538 of_node_put(clkspec
.np
);
545 clk
= of_clk_get_from_provider(&clkspec
);
546 of_node_put(clkspec
.np
);
551 error
= pm_clk_create(dev
);
555 error
= pm_clk_add_clk(dev
, clk
);
568 void cpg_mssr_detach_dev(struct generic_pm_domain
*unused
, struct device
*dev
)
570 if (!pm_clk_no_clocks(dev
))
574 static void cpg_mssr_genpd_remove(void *data
)
576 pm_genpd_remove(data
);
579 static int __init
cpg_mssr_add_clk_domain(struct device
*dev
,
580 const unsigned int *core_pm_clks
,
581 unsigned int num_core_pm_clks
)
583 struct device_node
*np
= dev
->of_node
;
584 struct generic_pm_domain
*genpd
;
585 struct cpg_mssr_clk_domain
*pd
;
586 size_t pm_size
= num_core_pm_clks
* sizeof(core_pm_clks
[0]);
589 pd
= devm_kzalloc(dev
, sizeof(*pd
) + pm_size
, GFP_KERNEL
);
593 pd
->num_core_pm_clks
= num_core_pm_clks
;
594 memcpy(pd
->core_pm_clks
, core_pm_clks
, pm_size
);
597 genpd
->name
= np
->name
;
598 genpd
->flags
= GENPD_FLAG_PM_CLK
| GENPD_FLAG_ALWAYS_ON
|
599 GENPD_FLAG_ACTIVE_WAKEUP
;
600 genpd
->attach_dev
= cpg_mssr_attach_dev
;
601 genpd
->detach_dev
= cpg_mssr_detach_dev
;
602 ret
= pm_genpd_init(genpd
, &pm_domain_always_on_gov
, false);
606 ret
= devm_add_action_or_reset(dev
, cpg_mssr_genpd_remove
, genpd
);
610 cpg_mssr_clk_domain
= pd
;
612 return of_genpd_add_provider_simple(np
, genpd
);
615 #ifdef CONFIG_RESET_CONTROLLER
617 #define rcdev_to_priv(x) container_of(x, struct cpg_mssr_priv, rcdev)
619 static int cpg_mssr_reset(struct reset_controller_dev
*rcdev
,
622 struct cpg_mssr_priv
*priv
= rcdev_to_priv(rcdev
);
623 unsigned int reg
= id
/ 32;
624 unsigned int bit
= id
% 32;
625 u32 bitmask
= BIT(bit
);
627 dev_dbg(priv
->dev
, "reset %u%02u\n", reg
, bit
);
630 writel(bitmask
, priv
->base
+ priv
->reset_regs
[reg
]);
632 /* Wait for at least one cycle of the RCLK clock (@ ca. 32 kHz) */
635 /* Release module from reset state */
636 writel(bitmask
, priv
->base
+ priv
->reset_clear_regs
[reg
]);
641 static int cpg_mssr_assert(struct reset_controller_dev
*rcdev
, unsigned long id
)
643 struct cpg_mssr_priv
*priv
= rcdev_to_priv(rcdev
);
644 unsigned int reg
= id
/ 32;
645 unsigned int bit
= id
% 32;
646 u32 bitmask
= BIT(bit
);
648 dev_dbg(priv
->dev
, "assert %u%02u\n", reg
, bit
);
650 writel(bitmask
, priv
->base
+ priv
->reset_regs
[reg
]);
654 static int cpg_mssr_deassert(struct reset_controller_dev
*rcdev
,
657 struct cpg_mssr_priv
*priv
= rcdev_to_priv(rcdev
);
658 unsigned int reg
= id
/ 32;
659 unsigned int bit
= id
% 32;
660 u32 bitmask
= BIT(bit
);
662 dev_dbg(priv
->dev
, "deassert %u%02u\n", reg
, bit
);
664 writel(bitmask
, priv
->base
+ priv
->reset_clear_regs
[reg
]);
668 static int cpg_mssr_status(struct reset_controller_dev
*rcdev
,
671 struct cpg_mssr_priv
*priv
= rcdev_to_priv(rcdev
);
672 unsigned int reg
= id
/ 32;
673 unsigned int bit
= id
% 32;
674 u32 bitmask
= BIT(bit
);
676 return !!(readl(priv
->base
+ priv
->reset_regs
[reg
]) & bitmask
);
679 static const struct reset_control_ops cpg_mssr_reset_ops
= {
680 .reset
= cpg_mssr_reset
,
681 .assert = cpg_mssr_assert
,
682 .deassert
= cpg_mssr_deassert
,
683 .status
= cpg_mssr_status
,
686 static int cpg_mssr_reset_xlate(struct reset_controller_dev
*rcdev
,
687 const struct of_phandle_args
*reset_spec
)
689 struct cpg_mssr_priv
*priv
= rcdev_to_priv(rcdev
);
690 unsigned int unpacked
= reset_spec
->args
[0];
691 unsigned int idx
= MOD_CLK_PACK(unpacked
);
693 if (unpacked
% 100 > 31 || idx
>= rcdev
->nr_resets
) {
694 dev_err(priv
->dev
, "Invalid reset index %u\n", unpacked
);
701 static int cpg_mssr_reset_controller_register(struct cpg_mssr_priv
*priv
)
703 priv
->rcdev
.ops
= &cpg_mssr_reset_ops
;
704 priv
->rcdev
.of_node
= priv
->dev
->of_node
;
705 priv
->rcdev
.of_reset_n_cells
= 1;
706 priv
->rcdev
.of_xlate
= cpg_mssr_reset_xlate
;
707 priv
->rcdev
.nr_resets
= priv
->num_mod_clks
;
708 return devm_reset_controller_register(priv
->dev
, &priv
->rcdev
);
711 #else /* !CONFIG_RESET_CONTROLLER */
712 static inline int cpg_mssr_reset_controller_register(struct cpg_mssr_priv
*priv
)
716 #endif /* !CONFIG_RESET_CONTROLLER */
718 static const struct of_device_id cpg_mssr_match
[] = {
719 #ifdef CONFIG_CLK_R7S9210
721 .compatible
= "renesas,r7s9210-cpg-mssr",
722 .data
= &r7s9210_cpg_mssr_info
,
725 #ifdef CONFIG_CLK_R8A7742
727 .compatible
= "renesas,r8a7742-cpg-mssr",
728 .data
= &r8a7742_cpg_mssr_info
,
731 #ifdef CONFIG_CLK_R8A7743
733 .compatible
= "renesas,r8a7743-cpg-mssr",
734 .data
= &r8a7743_cpg_mssr_info
,
736 /* RZ/G1N is (almost) identical to RZ/G1M w.r.t. clocks. */
738 .compatible
= "renesas,r8a7744-cpg-mssr",
739 .data
= &r8a7743_cpg_mssr_info
,
742 #ifdef CONFIG_CLK_R8A7745
744 .compatible
= "renesas,r8a7745-cpg-mssr",
745 .data
= &r8a7745_cpg_mssr_info
,
748 #ifdef CONFIG_CLK_R8A77470
750 .compatible
= "renesas,r8a77470-cpg-mssr",
751 .data
= &r8a77470_cpg_mssr_info
,
754 #ifdef CONFIG_CLK_R8A774A1
756 .compatible
= "renesas,r8a774a1-cpg-mssr",
757 .data
= &r8a774a1_cpg_mssr_info
,
760 #ifdef CONFIG_CLK_R8A774B1
762 .compatible
= "renesas,r8a774b1-cpg-mssr",
763 .data
= &r8a774b1_cpg_mssr_info
,
766 #ifdef CONFIG_CLK_R8A774C0
768 .compatible
= "renesas,r8a774c0-cpg-mssr",
769 .data
= &r8a774c0_cpg_mssr_info
,
772 #ifdef CONFIG_CLK_R8A774E1
774 .compatible
= "renesas,r8a774e1-cpg-mssr",
775 .data
= &r8a774e1_cpg_mssr_info
,
778 #ifdef CONFIG_CLK_R8A7790
780 .compatible
= "renesas,r8a7790-cpg-mssr",
781 .data
= &r8a7790_cpg_mssr_info
,
784 #ifdef CONFIG_CLK_R8A7791
786 .compatible
= "renesas,r8a7791-cpg-mssr",
787 .data
= &r8a7791_cpg_mssr_info
,
789 /* R-Car M2-N is (almost) identical to R-Car M2-W w.r.t. clocks. */
791 .compatible
= "renesas,r8a7793-cpg-mssr",
792 .data
= &r8a7791_cpg_mssr_info
,
795 #ifdef CONFIG_CLK_R8A7792
797 .compatible
= "renesas,r8a7792-cpg-mssr",
798 .data
= &r8a7792_cpg_mssr_info
,
801 #ifdef CONFIG_CLK_R8A7794
803 .compatible
= "renesas,r8a7794-cpg-mssr",
804 .data
= &r8a7794_cpg_mssr_info
,
807 #ifdef CONFIG_CLK_R8A7795
809 .compatible
= "renesas,r8a7795-cpg-mssr",
810 .data
= &r8a7795_cpg_mssr_info
,
813 #ifdef CONFIG_CLK_R8A77960
815 .compatible
= "renesas,r8a7796-cpg-mssr",
816 .data
= &r8a7796_cpg_mssr_info
,
819 #ifdef CONFIG_CLK_R8A77961
821 .compatible
= "renesas,r8a77961-cpg-mssr",
822 .data
= &r8a7796_cpg_mssr_info
,
825 #ifdef CONFIG_CLK_R8A77965
827 .compatible
= "renesas,r8a77965-cpg-mssr",
828 .data
= &r8a77965_cpg_mssr_info
,
831 #ifdef CONFIG_CLK_R8A77970
833 .compatible
= "renesas,r8a77970-cpg-mssr",
834 .data
= &r8a77970_cpg_mssr_info
,
837 #ifdef CONFIG_CLK_R8A77980
839 .compatible
= "renesas,r8a77980-cpg-mssr",
840 .data
= &r8a77980_cpg_mssr_info
,
843 #ifdef CONFIG_CLK_R8A77990
845 .compatible
= "renesas,r8a77990-cpg-mssr",
846 .data
= &r8a77990_cpg_mssr_info
,
849 #ifdef CONFIG_CLK_R8A77995
851 .compatible
= "renesas,r8a77995-cpg-mssr",
852 .data
= &r8a77995_cpg_mssr_info
,
855 #ifdef CONFIG_CLK_R8A779A0
857 .compatible
= "renesas,r8a779a0-cpg-mssr",
858 .data
= &r8a779a0_cpg_mssr_info
,
861 #ifdef CONFIG_CLK_R8A779F0
863 .compatible
= "renesas,r8a779f0-cpg-mssr",
864 .data
= &r8a779f0_cpg_mssr_info
,
867 #ifdef CONFIG_CLK_R8A779G0
869 .compatible
= "renesas,r8a779g0-cpg-mssr",
870 .data
= &r8a779g0_cpg_mssr_info
,
873 #ifdef CONFIG_CLK_R8A779H0
875 .compatible
= "renesas,r8a779h0-cpg-mssr",
876 .data
= &r8a779h0_cpg_mssr_info
,
882 static void cpg_mssr_del_clk_provider(void *data
)
884 of_clk_del_provider(data
);
887 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM_PSCI_FW)
888 static int cpg_mssr_suspend_noirq(struct device
*dev
)
890 struct cpg_mssr_priv
*priv
= dev_get_drvdata(dev
);
893 /* This is the best we can do to check for the presence of PSCI */
894 if (!psci_ops
.cpu_suspend
)
897 /* Save module registers with bits under our control */
898 for (reg
= 0; reg
< ARRAY_SIZE(priv
->smstpcr_saved
); reg
++) {
899 if (priv
->smstpcr_saved
[reg
].mask
)
900 priv
->smstpcr_saved
[reg
].val
=
901 priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
?
902 readb(priv
->base
+ priv
->control_regs
[reg
]) :
903 readl(priv
->base
+ priv
->control_regs
[reg
]);
906 /* Save core clocks */
907 raw_notifier_call_chain(&priv
->notifiers
, PM_EVENT_SUSPEND
, NULL
);
912 static int cpg_mssr_resume_noirq(struct device
*dev
)
914 struct cpg_mssr_priv
*priv
= dev_get_drvdata(dev
);
916 u32 mask
, oldval
, newval
;
919 /* This is the best we can do to check for the presence of PSCI */
920 if (!psci_ops
.cpu_suspend
)
923 /* Restore core clocks */
924 raw_notifier_call_chain(&priv
->notifiers
, PM_EVENT_RESUME
, NULL
);
926 /* Restore module clocks */
927 for (reg
= 0; reg
< ARRAY_SIZE(priv
->smstpcr_saved
); reg
++) {
928 mask
= priv
->smstpcr_saved
[reg
].mask
;
932 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
)
933 oldval
= readb(priv
->base
+ priv
->control_regs
[reg
]);
935 oldval
= readl(priv
->base
+ priv
->control_regs
[reg
]);
936 newval
= oldval
& ~mask
;
937 newval
|= priv
->smstpcr_saved
[reg
].val
& mask
;
938 if (newval
== oldval
)
941 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
) {
942 writeb(newval
, priv
->base
+ priv
->control_regs
[reg
]);
943 /* dummy read to ensure write has completed */
944 readb(priv
->base
+ priv
->control_regs
[reg
]);
945 barrier_data(priv
->base
+ priv
->control_regs
[reg
]);
948 writel(newval
, priv
->base
+ priv
->control_regs
[reg
]);
950 /* Wait until enabled clocks are really enabled */
951 mask
&= ~priv
->smstpcr_saved
[reg
].val
;
955 error
= readl_poll_timeout_atomic(priv
->base
+ priv
->status_regs
[reg
],
956 oldval
, !(oldval
& mask
), 0, 10);
958 dev_warn(dev
, "Failed to enable SMSTP%u[0x%x]\n", reg
,
965 static const struct dev_pm_ops cpg_mssr_pm
= {
966 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cpg_mssr_suspend_noirq
,
967 cpg_mssr_resume_noirq
)
969 #define DEV_PM_OPS &cpg_mssr_pm
971 #define DEV_PM_OPS NULL
972 #endif /* CONFIG_PM_SLEEP && CONFIG_ARM_PSCI_FW */
974 static void __init
cpg_mssr_reserved_exit(struct cpg_mssr_priv
*priv
)
976 kfree(priv
->reserved_ids
);
979 static int __init
cpg_mssr_reserved_init(struct cpg_mssr_priv
*priv
,
980 const struct cpg_mssr_info
*info
)
982 struct device_node
*soc
= of_find_node_by_path("/soc");
983 struct device_node
*node
;
984 uint32_t args
[MAX_PHANDLE_ARGS
];
985 unsigned int *ids
= NULL
;
986 unsigned int num
= 0;
989 * Because clk_disable_unused() will disable all unused clocks, the device which is assigned
990 * to a non-Linux system will be disabled when Linux is booted.
992 * To avoid such situation, renesas-cpg-mssr assumes the device which has
993 * status = "reserved" is assigned to a non-Linux system, and adds CLK_IGNORE_UNUSED flag
994 * to its CPG_MOD clocks.
996 * cpg_mssr_register_mod_clk()
998 * scif5: serial@e6f30000 {
1000 * => clocks = <&cpg CPG_MOD 202>,
1001 * <&cpg CPG_CORE R8A7795_CLK_S3D1>,
1004 * status = "reserved";
1007 for_each_reserved_child_of_node(soc
, node
) {
1008 struct of_phandle_iterator it
;
1011 of_for_each_phandle(&it
, rc
, node
, "clocks", "#clock-cells", -1) {
1014 if (it
.node
!= priv
->np
)
1017 if (of_phandle_iterator_args(&it
, args
, MAX_PHANDLE_ARGS
) != 2)
1020 if (args
[0] != CPG_MOD
)
1023 ids
= krealloc_array(ids
, (num
+ 1), sizeof(*ids
), GFP_KERNEL
);
1025 of_node_put(it
.node
);
1029 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
)
1030 idx
= MOD_CLK_PACK_10(args
[1]); /* for DEF_MOD_STB() */
1032 idx
= MOD_CLK_PACK(args
[1]); /* for DEF_MOD() */
1034 ids
[num
] = info
->num_total_core_clks
+ idx
;
1040 priv
->num_reserved_ids
= num
;
1041 priv
->reserved_ids
= ids
;
1046 static int __init
cpg_mssr_common_init(struct device
*dev
,
1047 struct device_node
*np
,
1048 const struct cpg_mssr_info
*info
)
1050 struct cpg_mssr_priv
*priv
;
1051 unsigned int nclks
, i
;
1055 error
= info
->init(dev
);
1060 nclks
= info
->num_total_core_clks
+ info
->num_hw_mod_clks
;
1061 priv
= kzalloc(struct_size(priv
, clks
, nclks
), GFP_KERNEL
);
1067 spin_lock_init(&priv
->rmw_lock
);
1069 priv
->base
= of_iomap(np
, 0);
1075 priv
->num_core_clks
= info
->num_total_core_clks
;
1076 priv
->num_mod_clks
= info
->num_hw_mod_clks
;
1077 priv
->last_dt_core_clk
= info
->last_dt_core_clk
;
1078 RAW_INIT_NOTIFIER_HEAD(&priv
->notifiers
);
1079 priv
->reg_layout
= info
->reg_layout
;
1080 if (priv
->reg_layout
== CLK_REG_LAYOUT_RCAR_GEN2_AND_GEN3
) {
1081 priv
->status_regs
= mstpsr
;
1082 priv
->control_regs
= smstpcr
;
1083 priv
->reset_regs
= srcr
;
1084 priv
->reset_clear_regs
= srstclr
;
1085 } else if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
) {
1086 priv
->control_regs
= stbcr
;
1087 } else if (priv
->reg_layout
== CLK_REG_LAYOUT_RCAR_GEN4
) {
1088 priv
->status_regs
= mstpsr_for_gen4
;
1089 priv
->control_regs
= mstpcr_for_gen4
;
1090 priv
->reset_regs
= srcr_for_gen4
;
1091 priv
->reset_clear_regs
= srstclr_for_gen4
;
1097 for (i
= 0; i
< nclks
; i
++)
1098 priv
->clks
[i
] = ERR_PTR(-ENOENT
);
1100 error
= cpg_mssr_reserved_init(priv
, info
);
1104 error
= of_clk_add_provider(np
, cpg_mssr_clk_src_twocell_get
, priv
);
1108 cpg_mssr_priv
= priv
;
1113 cpg_mssr_reserved_exit(priv
);
1116 iounmap(priv
->base
);
1122 void __init
cpg_mssr_early_init(struct device_node
*np
,
1123 const struct cpg_mssr_info
*info
)
1128 error
= cpg_mssr_common_init(NULL
, np
, info
);
1132 for (i
= 0; i
< info
->num_early_core_clks
; i
++)
1133 cpg_mssr_register_core_clk(&info
->early_core_clks
[i
], info
,
1136 for (i
= 0; i
< info
->num_early_mod_clks
; i
++)
1137 cpg_mssr_register_mod_clk(&info
->early_mod_clks
[i
], info
,
1142 static int __init
cpg_mssr_probe(struct platform_device
*pdev
)
1144 struct device
*dev
= &pdev
->dev
;
1145 struct device_node
*np
= dev
->of_node
;
1146 const struct cpg_mssr_info
*info
;
1147 struct cpg_mssr_priv
*priv
;
1151 info
= of_device_get_match_data(dev
);
1153 if (!cpg_mssr_priv
) {
1154 error
= cpg_mssr_common_init(dev
, dev
->of_node
, info
);
1159 priv
= cpg_mssr_priv
;
1161 dev_set_drvdata(dev
, priv
);
1163 for (i
= 0; i
< info
->num_core_clks
; i
++)
1164 cpg_mssr_register_core_clk(&info
->core_clks
[i
], info
, priv
);
1166 for (i
= 0; i
< info
->num_mod_clks
; i
++)
1167 cpg_mssr_register_mod_clk(&info
->mod_clks
[i
], info
, priv
);
1169 error
= devm_add_action_or_reset(dev
,
1170 cpg_mssr_del_clk_provider
,
1175 error
= cpg_mssr_add_clk_domain(dev
, info
->core_pm_clks
,
1176 info
->num_core_pm_clks
);
1180 /* Reset Controller not supported for Standby Control SoCs */
1181 if (priv
->reg_layout
== CLK_REG_LAYOUT_RZ_A
)
1184 error
= cpg_mssr_reset_controller_register(priv
);
1187 cpg_mssr_reserved_exit(priv
);
1192 static struct platform_driver cpg_mssr_driver
= {
1194 .name
= "renesas-cpg-mssr",
1195 .of_match_table
= cpg_mssr_match
,
1200 static int __init
cpg_mssr_init(void)
1202 return platform_driver_probe(&cpg_mssr_driver
, cpg_mssr_probe
);
1205 subsys_initcall(cpg_mssr_init
);
1207 void __init
mssr_mod_nullify(struct mssr_mod_clk
*mod_clks
,
1208 unsigned int num_mod_clks
,
1209 const unsigned int *clks
, unsigned int n
)
1213 for (i
= 0, j
= 0; i
< num_mod_clks
&& j
< n
; i
++)
1214 if (mod_clks
[i
].id
== clks
[j
]) {
1215 mod_clks
[i
].name
= NULL
;
1220 MODULE_DESCRIPTION("Renesas CPG/MSSR Driver");