1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Renesas Clock Pulse Generator / Module Standby and Software Reset
4  *
5  * Copyright (C) 2015 Glider bvba
6  *
7  * Based on clk-mstp.c, clk-rcar-gen2.c, and clk-rcar-gen3.c
8  *
9  * Copyright (C) 2013 Ideas On Board SPRL
10  * Copyright (C) 2015 Renesas Electronics Corp.
11  */
12 
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>
19 #include <linux/io.h>
20 #include <linux/mod_devicetable.h>
21 #include <linux/module.h>
22 #include <linux/of_address.h>
23 #include <linux/of_device.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>
30 
31 #include <dt-bindings/clock/renesas-cpg-mssr.h>
32 
33 #include "renesas-cpg-mssr.h"
34 #include "clk-div6.h"
35 
36 #ifdef DEBUG
37 #define WARN_DEBUG(x)	WARN_ON(x)
38 #else
39 #define WARN_DEBUG(x)	do { } while (0)
40 #endif
41 
42 
43 /*
44  * Module Standby and Software Reset register offets.
45  *
46  * If the registers exist, these are valid for SH-Mobile, R-Mobile,
47  * R-Car Gen2, R-Car Gen3, and RZ/G1.
48  * These are NOT valid for R-Car Gen1 and RZ/A1!
49  */
50 
51 /*
52  * Module Stop Status Register offsets
53  */
54 
55 static const u16 mstpsr[] = {
56 	0x030, 0x038, 0x040, 0x048, 0x04C, 0x03C, 0x1C0, 0x1C4,
57 	0x9A0, 0x9A4, 0x9A8, 0x9AC,
58 };
59 
60 static const u16 mstpsr_for_v3u[] = {
61 	0x2E00, 0x2E04, 0x2E08, 0x2E0C, 0x2E10, 0x2E14, 0x2E18, 0x2E1C,
62 	0x2E20, 0x2E24, 0x2E28, 0x2E2C, 0x2E30, 0x2E34, 0x2E38,
63 };
64 
65 /*
66  * System Module Stop Control Register offsets
67  */
68 
69 static const u16 smstpcr[] = {
70 	0x130, 0x134, 0x138, 0x13C, 0x140, 0x144, 0x148, 0x14C,
71 	0x990, 0x994, 0x998, 0x99C,
72 };
73 
74 static const u16 mstpcr_for_v3u[] = {
75 	0x2D00, 0x2D04, 0x2D08, 0x2D0C, 0x2D10, 0x2D14, 0x2D18, 0x2D1C,
76 	0x2D20, 0x2D24, 0x2D28, 0x2D2C, 0x2D30, 0x2D34, 0x2D38,
77 };
78 
79 /*
80  * Standby Control Register offsets (RZ/A)
81  * Base address is FRQCR register
82  */
83 
84 static const u16 stbcr[] = {
85 	0xFFFF/*dummy*/, 0x010, 0x014, 0x410, 0x414, 0x418, 0x41C, 0x420,
86 	0x424, 0x428, 0x42C,
87 };
88 
89 /*
90  * Software Reset Register offsets
91  */
92 
93 static const u16 srcr[] = {
94 	0x0A0, 0x0A8, 0x0B0, 0x0B8, 0x0BC, 0x0C4, 0x1C8, 0x1CC,
95 	0x920, 0x924, 0x928, 0x92C,
96 };
97 
98 static const u16 srcr_for_v3u[] = {
99 	0x2C00, 0x2C04, 0x2C08, 0x2C0C, 0x2C10, 0x2C14, 0x2C18, 0x2C1C,
100 	0x2C20, 0x2C24, 0x2C28, 0x2C2C, 0x2C30, 0x2C34, 0x2C38,
101 };
102 
103 /* Realtime Module Stop Control Register offsets */
104 #define RMSTPCR(i)	(smstpcr[i] - 0x20)
105 
106 /* Modem Module Stop Control Register offsets (r8a73a4) */
107 #define MMSTPCR(i)	(smstpcr[i] + 0x20)
108 
109 /* Software Reset Clearing Register offsets */
110 
111 static const u16 srstclr[] = {
112 	0x940, 0x944, 0x948, 0x94C, 0x950, 0x954, 0x958, 0x95C,
113 	0x960, 0x964, 0x968, 0x96C,
114 };
115 
116 static const u16 srstclr_for_v3u[] = {
117 	0x2C80, 0x2C84, 0x2C88, 0x2C8C, 0x2C90, 0x2C94, 0x2C98, 0x2C9C,
118 	0x2CA0, 0x2CA4, 0x2CA8, 0x2CAC, 0x2CB0, 0x2CB4, 0x2CB8,
119 };
120 
121 /**
122  * struct cpg_mssr_priv - Clock Pulse Generator / Module Standby
123  *                        and Software Reset Private Data
124  *
125  * @rcdev: Optional reset controller entity
126  * @dev: CPG/MSSR device
127  * @base: CPG/MSSR register block base address
128  * @reg_layout: CPG/MSSR register layout
129  * @rmw_lock: protects RMW register accesses
130  * @np: Device node in DT for this CPG/MSSR module
131  * @num_core_clks: Number of Core Clocks in clks[]
132  * @num_mod_clks: Number of Module Clocks in clks[]
133  * @last_dt_core_clk: ID of the last Core Clock exported to DT
134  * @notifiers: Notifier chain to save/restore clock state for system resume
135  * @status_regs: Pointer to status registers array
136  * @control_regs: Pointer to control registers array
137  * @reset_regs: Pointer to reset registers array
138  * @reset_clear_regs:  Pointer to reset clearing registers array
139  * @smstpcr_saved: [].mask: Mask of SMSTPCR[] bits under our control
140  *                 [].val: Saved values of SMSTPCR[]
141  * @clks: Array containing all Core and Module Clocks
142  */
143 struct cpg_mssr_priv {
144 #ifdef CONFIG_RESET_CONTROLLER
145 	struct reset_controller_dev rcdev;
146 #endif
147 	struct device *dev;
148 	void __iomem *base;
149 	enum clk_reg_layout reg_layout;
150 	spinlock_t rmw_lock;
151 	struct device_node *np;
152 
153 	unsigned int num_core_clks;
154 	unsigned int num_mod_clks;
155 	unsigned int last_dt_core_clk;
156 
157 	struct raw_notifier_head notifiers;
158 	const u16 *status_regs;
159 	const u16 *control_regs;
160 	const u16 *reset_regs;
161 	const u16 *reset_clear_regs;
162 	struct {
163 		u32 mask;
164 		u32 val;
165 	} smstpcr_saved[ARRAY_SIZE(mstpsr_for_v3u)];
166 
167 	struct clk *clks[];
168 };
169 
170 static struct cpg_mssr_priv *cpg_mssr_priv;
171 
172 /**
173  * struct mstp_clock - MSTP gating clock
174  * @hw: handle between common and hardware-specific interfaces
175  * @index: MSTP clock number
176  * @priv: CPG/MSSR private data
177  */
178 struct mstp_clock {
179 	struct clk_hw hw;
180 	u32 index;
181 	struct cpg_mssr_priv *priv;
182 };
183 
184 #define to_mstp_clock(_hw) container_of(_hw, struct mstp_clock, hw)
185 
cpg_mstp_clock_endisable(struct clk_hw * hw,bool enable)186 static int cpg_mstp_clock_endisable(struct clk_hw *hw, bool enable)
187 {
188 	struct mstp_clock *clock = to_mstp_clock(hw);
189 	struct cpg_mssr_priv *priv = clock->priv;
190 	unsigned int reg = clock->index / 32;
191 	unsigned int bit = clock->index % 32;
192 	struct device *dev = priv->dev;
193 	u32 bitmask = BIT(bit);
194 	unsigned long flags;
195 	unsigned int i;
196 	u32 value;
197 
198 	dev_dbg(dev, "MSTP %u%02u/%pC %s\n", reg, bit, hw->clk,
199 		enable ? "ON" : "OFF");
200 	spin_lock_irqsave(&priv->rmw_lock, flags);
201 
202 	if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) {
203 		value = readb(priv->base + priv->control_regs[reg]);
204 		if (enable)
205 			value &= ~bitmask;
206 		else
207 			value |= bitmask;
208 		writeb(value, priv->base + priv->control_regs[reg]);
209 
210 		/* dummy read to ensure write has completed */
211 		readb(priv->base + priv->control_regs[reg]);
212 		barrier_data(priv->base + priv->control_regs[reg]);
213 	} else {
214 		value = readl(priv->base + priv->control_regs[reg]);
215 		if (enable)
216 			value &= ~bitmask;
217 		else
218 			value |= bitmask;
219 		writel(value, priv->base + priv->control_regs[reg]);
220 	}
221 
222 	spin_unlock_irqrestore(&priv->rmw_lock, flags);
223 
224 	if (!enable || priv->reg_layout == CLK_REG_LAYOUT_RZ_A)
225 		return 0;
226 
227 	for (i = 1000; i > 0; --i) {
228 		if (!(readl(priv->base + priv->status_regs[reg]) & bitmask))
229 			break;
230 		cpu_relax();
231 	}
232 
233 	if (!i) {
234 		dev_err(dev, "Failed to enable SMSTP %p[%d]\n",
235 			priv->base + priv->control_regs[reg], bit);
236 		return -ETIMEDOUT;
237 	}
238 
239 	return 0;
240 }
241 
cpg_mstp_clock_enable(struct clk_hw * hw)242 static int cpg_mstp_clock_enable(struct clk_hw *hw)
243 {
244 	return cpg_mstp_clock_endisable(hw, true);
245 }
246 
cpg_mstp_clock_disable(struct clk_hw * hw)247 static void cpg_mstp_clock_disable(struct clk_hw *hw)
248 {
249 	cpg_mstp_clock_endisable(hw, false);
250 }
251 
cpg_mstp_clock_is_enabled(struct clk_hw * hw)252 static int cpg_mstp_clock_is_enabled(struct clk_hw *hw)
253 {
254 	struct mstp_clock *clock = to_mstp_clock(hw);
255 	struct cpg_mssr_priv *priv = clock->priv;
256 	u32 value;
257 
258 	if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A)
259 		value = readb(priv->base + priv->control_regs[clock->index / 32]);
260 	else
261 		value = readl(priv->base + priv->status_regs[clock->index / 32]);
262 
263 	return !(value & BIT(clock->index % 32));
264 }
265 
266 static const struct clk_ops cpg_mstp_clock_ops = {
267 	.enable = cpg_mstp_clock_enable,
268 	.disable = cpg_mstp_clock_disable,
269 	.is_enabled = cpg_mstp_clock_is_enabled,
270 };
271 
272 static
cpg_mssr_clk_src_twocell_get(struct of_phandle_args * clkspec,void * data)273 struct clk *cpg_mssr_clk_src_twocell_get(struct of_phandle_args *clkspec,
274 					 void *data)
275 {
276 	unsigned int clkidx = clkspec->args[1];
277 	struct cpg_mssr_priv *priv = data;
278 	struct device *dev = priv->dev;
279 	unsigned int idx;
280 	const char *type;
281 	struct clk *clk;
282 	int range_check;
283 
284 	switch (clkspec->args[0]) {
285 	case CPG_CORE:
286 		type = "core";
287 		if (clkidx > priv->last_dt_core_clk) {
288 			dev_err(dev, "Invalid %s clock index %u\n", type,
289 			       clkidx);
290 			return ERR_PTR(-EINVAL);
291 		}
292 		clk = priv->clks[clkidx];
293 		break;
294 
295 	case CPG_MOD:
296 		type = "module";
297 		if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) {
298 			idx = MOD_CLK_PACK_10(clkidx);
299 			range_check = 7 - (clkidx % 10);
300 		} else {
301 			idx = MOD_CLK_PACK(clkidx);
302 			range_check = 31 - (clkidx % 100);
303 		}
304 		if (range_check < 0 || idx >= priv->num_mod_clks) {
305 			dev_err(dev, "Invalid %s clock index %u\n", type,
306 				clkidx);
307 			return ERR_PTR(-EINVAL);
308 		}
309 		clk = priv->clks[priv->num_core_clks + idx];
310 		break;
311 
312 	default:
313 		dev_err(dev, "Invalid CPG clock type %u\n", clkspec->args[0]);
314 		return ERR_PTR(-EINVAL);
315 	}
316 
317 	if (IS_ERR(clk))
318 		dev_err(dev, "Cannot get %s clock %u: %ld", type, clkidx,
319 		       PTR_ERR(clk));
320 	else
321 		dev_dbg(dev, "clock (%u, %u) is %pC at %lu Hz\n",
322 			clkspec->args[0], clkspec->args[1], clk,
323 			clk_get_rate(clk));
324 	return clk;
325 }
326 
cpg_mssr_register_core_clk(const struct cpg_core_clk * core,const struct cpg_mssr_info * info,struct cpg_mssr_priv * priv)327 static void __init cpg_mssr_register_core_clk(const struct cpg_core_clk *core,
328 					      const struct cpg_mssr_info *info,
329 					      struct cpg_mssr_priv *priv)
330 {
331 	struct clk *clk = ERR_PTR(-ENOTSUPP), *parent;
332 	struct device *dev = priv->dev;
333 	unsigned int id = core->id, div = core->div;
334 	const char *parent_name;
335 
336 	WARN_DEBUG(id >= priv->num_core_clks);
337 	WARN_DEBUG(PTR_ERR(priv->clks[id]) != -ENOENT);
338 
339 	if (!core->name) {
340 		/* Skip NULLified clock */
341 		return;
342 	}
343 
344 	switch (core->type) {
345 	case CLK_TYPE_IN:
346 		clk = of_clk_get_by_name(priv->np, core->name);
347 		break;
348 
349 	case CLK_TYPE_FF:
350 	case CLK_TYPE_DIV6P1:
351 	case CLK_TYPE_DIV6_RO:
352 		WARN_DEBUG(core->parent >= priv->num_core_clks);
353 		parent = priv->clks[core->parent];
354 		if (IS_ERR(parent)) {
355 			clk = parent;
356 			goto fail;
357 		}
358 
359 		parent_name = __clk_get_name(parent);
360 
361 		if (core->type == CLK_TYPE_DIV6_RO)
362 			/* Multiply with the DIV6 register value */
363 			div *= (readl(priv->base + core->offset) & 0x3f) + 1;
364 
365 		if (core->type == CLK_TYPE_DIV6P1) {
366 			clk = cpg_div6_register(core->name, 1, &parent_name,
367 						priv->base + core->offset,
368 						&priv->notifiers);
369 		} else {
370 			clk = clk_register_fixed_factor(NULL, core->name,
371 							parent_name, 0,
372 							core->mult, div);
373 		}
374 		break;
375 
376 	case CLK_TYPE_FR:
377 		clk = clk_register_fixed_rate(NULL, core->name, NULL, 0,
378 					      core->mult);
379 		break;
380 
381 	default:
382 		if (info->cpg_clk_register)
383 			clk = info->cpg_clk_register(dev, core, info,
384 						     priv->clks, priv->base,
385 						     &priv->notifiers);
386 		else
387 			dev_err(dev, "%s has unsupported core clock type %u\n",
388 				core->name, core->type);
389 		break;
390 	}
391 
392 	if (IS_ERR_OR_NULL(clk))
393 		goto fail;
394 
395 	dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
396 	priv->clks[id] = clk;
397 	return;
398 
399 fail:
400 	dev_err(dev, "Failed to register %s clock %s: %ld\n", "core",
401 		core->name, PTR_ERR(clk));
402 }
403 
cpg_mssr_register_mod_clk(const struct mssr_mod_clk * mod,const struct cpg_mssr_info * info,struct cpg_mssr_priv * priv)404 static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod,
405 					     const struct cpg_mssr_info *info,
406 					     struct cpg_mssr_priv *priv)
407 {
408 	struct mstp_clock *clock = NULL;
409 	struct device *dev = priv->dev;
410 	unsigned int id = mod->id;
411 	struct clk_init_data init = {};
412 	struct clk *parent, *clk;
413 	const char *parent_name;
414 	unsigned int i;
415 
416 	WARN_DEBUG(id < priv->num_core_clks);
417 	WARN_DEBUG(id >= priv->num_core_clks + priv->num_mod_clks);
418 	WARN_DEBUG(mod->parent >= priv->num_core_clks + priv->num_mod_clks);
419 	WARN_DEBUG(PTR_ERR(priv->clks[id]) != -ENOENT);
420 
421 	if (!mod->name) {
422 		/* Skip NULLified clock */
423 		return;
424 	}
425 
426 	parent = priv->clks[mod->parent];
427 	if (IS_ERR(parent)) {
428 		clk = parent;
429 		goto fail;
430 	}
431 
432 	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
433 	if (!clock) {
434 		clk = ERR_PTR(-ENOMEM);
435 		goto fail;
436 	}
437 
438 	init.name = mod->name;
439 	init.ops = &cpg_mstp_clock_ops;
440 	init.flags = CLK_SET_RATE_PARENT;
441 	parent_name = __clk_get_name(parent);
442 	init.parent_names = &parent_name;
443 	init.num_parents = 1;
444 
445 	clock->index = id - priv->num_core_clks;
446 	clock->priv = priv;
447 	clock->hw.init = &init;
448 
449 	for (i = 0; i < info->num_crit_mod_clks; i++)
450 		if (id == info->crit_mod_clks[i] &&
451 		    cpg_mstp_clock_is_enabled(&clock->hw)) {
452 			dev_dbg(dev, "MSTP %s setting CLK_IS_CRITICAL\n",
453 				mod->name);
454 			init.flags |= CLK_IS_CRITICAL;
455 			break;
456 		}
457 
458 	clk = clk_register(NULL, &clock->hw);
459 	if (IS_ERR(clk))
460 		goto fail;
461 
462 	dev_dbg(dev, "Module clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
463 	priv->clks[id] = clk;
464 	priv->smstpcr_saved[clock->index / 32].mask |= BIT(clock->index % 32);
465 	return;
466 
467 fail:
468 	dev_err(dev, "Failed to register %s clock %s: %ld\n", "module",
469 		mod->name, PTR_ERR(clk));
470 	kfree(clock);
471 }
472 
473 struct cpg_mssr_clk_domain {
474 	struct generic_pm_domain genpd;
475 	unsigned int num_core_pm_clks;
476 	unsigned int core_pm_clks[];
477 };
478 
479 static struct cpg_mssr_clk_domain *cpg_mssr_clk_domain;
480 
cpg_mssr_is_pm_clk(const struct of_phandle_args * clkspec,struct cpg_mssr_clk_domain * pd)481 static bool cpg_mssr_is_pm_clk(const struct of_phandle_args *clkspec,
482 			       struct cpg_mssr_clk_domain *pd)
483 {
484 	unsigned int i;
485 
486 	if (clkspec->np != pd->genpd.dev.of_node || clkspec->args_count != 2)
487 		return false;
488 
489 	switch (clkspec->args[0]) {
490 	case CPG_CORE:
491 		for (i = 0; i < pd->num_core_pm_clks; i++)
492 			if (clkspec->args[1] == pd->core_pm_clks[i])
493 				return true;
494 		return false;
495 
496 	case CPG_MOD:
497 		return true;
498 
499 	default:
500 		return false;
501 	}
502 }
503 
cpg_mssr_attach_dev(struct generic_pm_domain * unused,struct device * dev)504 int cpg_mssr_attach_dev(struct generic_pm_domain *unused, struct device *dev)
505 {
506 	struct cpg_mssr_clk_domain *pd = cpg_mssr_clk_domain;
507 	struct device_node *np = dev->of_node;
508 	struct of_phandle_args clkspec;
509 	struct clk *clk;
510 	int i = 0;
511 	int error;
512 
513 	if (!pd) {
514 		dev_dbg(dev, "CPG/MSSR clock domain not yet available\n");
515 		return -EPROBE_DEFER;
516 	}
517 
518 	while (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", i,
519 					   &clkspec)) {
520 		if (cpg_mssr_is_pm_clk(&clkspec, pd))
521 			goto found;
522 
523 		of_node_put(clkspec.np);
524 		i++;
525 	}
526 
527 	return 0;
528 
529 found:
530 	clk = of_clk_get_from_provider(&clkspec);
531 	of_node_put(clkspec.np);
532 
533 	if (IS_ERR(clk))
534 		return PTR_ERR(clk);
535 
536 	error = pm_clk_create(dev);
537 	if (error)
538 		goto fail_put;
539 
540 	error = pm_clk_add_clk(dev, clk);
541 	if (error)
542 		goto fail_destroy;
543 
544 	return 0;
545 
546 fail_destroy:
547 	pm_clk_destroy(dev);
548 fail_put:
549 	clk_put(clk);
550 	return error;
551 }
552 
cpg_mssr_detach_dev(struct generic_pm_domain * unused,struct device * dev)553 void cpg_mssr_detach_dev(struct generic_pm_domain *unused, struct device *dev)
554 {
555 	if (!pm_clk_no_clocks(dev))
556 		pm_clk_destroy(dev);
557 }
558 
cpg_mssr_add_clk_domain(struct device * dev,const unsigned int * core_pm_clks,unsigned int num_core_pm_clks)559 static int __init cpg_mssr_add_clk_domain(struct device *dev,
560 					  const unsigned int *core_pm_clks,
561 					  unsigned int num_core_pm_clks)
562 {
563 	struct device_node *np = dev->of_node;
564 	struct generic_pm_domain *genpd;
565 	struct cpg_mssr_clk_domain *pd;
566 	size_t pm_size = num_core_pm_clks * sizeof(core_pm_clks[0]);
567 
568 	pd = devm_kzalloc(dev, sizeof(*pd) + pm_size, GFP_KERNEL);
569 	if (!pd)
570 		return -ENOMEM;
571 
572 	pd->num_core_pm_clks = num_core_pm_clks;
573 	memcpy(pd->core_pm_clks, core_pm_clks, pm_size);
574 
575 	genpd = &pd->genpd;
576 	genpd->name = np->name;
577 	genpd->flags = GENPD_FLAG_PM_CLK | GENPD_FLAG_ALWAYS_ON |
578 		       GENPD_FLAG_ACTIVE_WAKEUP;
579 	genpd->attach_dev = cpg_mssr_attach_dev;
580 	genpd->detach_dev = cpg_mssr_detach_dev;
581 	pm_genpd_init(genpd, &pm_domain_always_on_gov, false);
582 	cpg_mssr_clk_domain = pd;
583 
584 	of_genpd_add_provider_simple(np, genpd);
585 	return 0;
586 }
587 
588 #ifdef CONFIG_RESET_CONTROLLER
589 
590 #define rcdev_to_priv(x)	container_of(x, struct cpg_mssr_priv, rcdev)
591 
cpg_mssr_reset(struct reset_controller_dev * rcdev,unsigned long id)592 static int cpg_mssr_reset(struct reset_controller_dev *rcdev,
593 			  unsigned long id)
594 {
595 	struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev);
596 	unsigned int reg = id / 32;
597 	unsigned int bit = id % 32;
598 	u32 bitmask = BIT(bit);
599 
600 	dev_dbg(priv->dev, "reset %u%02u\n", reg, bit);
601 
602 	/* Reset module */
603 	writel(bitmask, priv->base + priv->reset_regs[reg]);
604 
605 	/* Wait for at least one cycle of the RCLK clock (@ ca. 32 kHz) */
606 	udelay(35);
607 
608 	/* Release module from reset state */
609 	writel(bitmask, priv->base + priv->reset_clear_regs[reg]);
610 
611 	return 0;
612 }
613 
cpg_mssr_assert(struct reset_controller_dev * rcdev,unsigned long id)614 static int cpg_mssr_assert(struct reset_controller_dev *rcdev, unsigned long id)
615 {
616 	struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev);
617 	unsigned int reg = id / 32;
618 	unsigned int bit = id % 32;
619 	u32 bitmask = BIT(bit);
620 
621 	dev_dbg(priv->dev, "assert %u%02u\n", reg, bit);
622 
623 	writel(bitmask, priv->base + priv->reset_regs[reg]);
624 	return 0;
625 }
626 
cpg_mssr_deassert(struct reset_controller_dev * rcdev,unsigned long id)627 static int cpg_mssr_deassert(struct reset_controller_dev *rcdev,
628 			     unsigned long id)
629 {
630 	struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev);
631 	unsigned int reg = id / 32;
632 	unsigned int bit = id % 32;
633 	u32 bitmask = BIT(bit);
634 
635 	dev_dbg(priv->dev, "deassert %u%02u\n", reg, bit);
636 
637 	writel(bitmask, priv->base + priv->reset_clear_regs[reg]);
638 	return 0;
639 }
640 
cpg_mssr_status(struct reset_controller_dev * rcdev,unsigned long id)641 static int cpg_mssr_status(struct reset_controller_dev *rcdev,
642 			   unsigned long id)
643 {
644 	struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev);
645 	unsigned int reg = id / 32;
646 	unsigned int bit = id % 32;
647 	u32 bitmask = BIT(bit);
648 
649 	return !!(readl(priv->base + priv->reset_regs[reg]) & bitmask);
650 }
651 
652 static const struct reset_control_ops cpg_mssr_reset_ops = {
653 	.reset = cpg_mssr_reset,
654 	.assert = cpg_mssr_assert,
655 	.deassert = cpg_mssr_deassert,
656 	.status = cpg_mssr_status,
657 };
658 
cpg_mssr_reset_xlate(struct reset_controller_dev * rcdev,const struct of_phandle_args * reset_spec)659 static int cpg_mssr_reset_xlate(struct reset_controller_dev *rcdev,
660 				const struct of_phandle_args *reset_spec)
661 {
662 	struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev);
663 	unsigned int unpacked = reset_spec->args[0];
664 	unsigned int idx = MOD_CLK_PACK(unpacked);
665 
666 	if (unpacked % 100 > 31 || idx >= rcdev->nr_resets) {
667 		dev_err(priv->dev, "Invalid reset index %u\n", unpacked);
668 		return -EINVAL;
669 	}
670 
671 	return idx;
672 }
673 
cpg_mssr_reset_controller_register(struct cpg_mssr_priv * priv)674 static int cpg_mssr_reset_controller_register(struct cpg_mssr_priv *priv)
675 {
676 	priv->rcdev.ops = &cpg_mssr_reset_ops;
677 	priv->rcdev.of_node = priv->dev->of_node;
678 	priv->rcdev.of_reset_n_cells = 1;
679 	priv->rcdev.of_xlate = cpg_mssr_reset_xlate;
680 	priv->rcdev.nr_resets = priv->num_mod_clks;
681 	return devm_reset_controller_register(priv->dev, &priv->rcdev);
682 }
683 
684 #else /* !CONFIG_RESET_CONTROLLER */
cpg_mssr_reset_controller_register(struct cpg_mssr_priv * priv)685 static inline int cpg_mssr_reset_controller_register(struct cpg_mssr_priv *priv)
686 {
687 	return 0;
688 }
689 #endif /* !CONFIG_RESET_CONTROLLER */
690 
691 
692 static const struct of_device_id cpg_mssr_match[] = {
693 #ifdef CONFIG_CLK_R7S9210
694 	{
695 		.compatible = "renesas,r7s9210-cpg-mssr",
696 		.data = &r7s9210_cpg_mssr_info,
697 	},
698 #endif
699 #ifdef CONFIG_CLK_R8A7742
700 	{
701 		.compatible = "renesas,r8a7742-cpg-mssr",
702 		.data = &r8a7742_cpg_mssr_info,
703 	},
704 #endif
705 #ifdef CONFIG_CLK_R8A7743
706 	{
707 		.compatible = "renesas,r8a7743-cpg-mssr",
708 		.data = &r8a7743_cpg_mssr_info,
709 	},
710 	/* RZ/G1N is (almost) identical to RZ/G1M w.r.t. clocks. */
711 	{
712 		.compatible = "renesas,r8a7744-cpg-mssr",
713 		.data = &r8a7743_cpg_mssr_info,
714 	},
715 #endif
716 #ifdef CONFIG_CLK_R8A7745
717 	{
718 		.compatible = "renesas,r8a7745-cpg-mssr",
719 		.data = &r8a7745_cpg_mssr_info,
720 	},
721 #endif
722 #ifdef CONFIG_CLK_R8A77470
723 	{
724 		.compatible = "renesas,r8a77470-cpg-mssr",
725 		.data = &r8a77470_cpg_mssr_info,
726 	},
727 #endif
728 #ifdef CONFIG_CLK_R8A774A1
729 	{
730 		.compatible = "renesas,r8a774a1-cpg-mssr",
731 		.data = &r8a774a1_cpg_mssr_info,
732 	},
733 #endif
734 #ifdef CONFIG_CLK_R8A774B1
735 	{
736 		.compatible = "renesas,r8a774b1-cpg-mssr",
737 		.data = &r8a774b1_cpg_mssr_info,
738 	},
739 #endif
740 #ifdef CONFIG_CLK_R8A774C0
741 	{
742 		.compatible = "renesas,r8a774c0-cpg-mssr",
743 		.data = &r8a774c0_cpg_mssr_info,
744 	},
745 #endif
746 #ifdef CONFIG_CLK_R8A774E1
747 	{
748 		.compatible = "renesas,r8a774e1-cpg-mssr",
749 		.data = &r8a774e1_cpg_mssr_info,
750 	},
751 #endif
752 #ifdef CONFIG_CLK_R8A7790
753 	{
754 		.compatible = "renesas,r8a7790-cpg-mssr",
755 		.data = &r8a7790_cpg_mssr_info,
756 	},
757 #endif
758 #ifdef CONFIG_CLK_R8A7791
759 	{
760 		.compatible = "renesas,r8a7791-cpg-mssr",
761 		.data = &r8a7791_cpg_mssr_info,
762 	},
763 	/* R-Car M2-N is (almost) identical to R-Car M2-W w.r.t. clocks. */
764 	{
765 		.compatible = "renesas,r8a7793-cpg-mssr",
766 		.data = &r8a7791_cpg_mssr_info,
767 	},
768 #endif
769 #ifdef CONFIG_CLK_R8A7792
770 	{
771 		.compatible = "renesas,r8a7792-cpg-mssr",
772 		.data = &r8a7792_cpg_mssr_info,
773 	},
774 #endif
775 #ifdef CONFIG_CLK_R8A7794
776 	{
777 		.compatible = "renesas,r8a7794-cpg-mssr",
778 		.data = &r8a7794_cpg_mssr_info,
779 	},
780 #endif
781 #ifdef CONFIG_CLK_R8A7795
782 	{
783 		.compatible = "renesas,r8a7795-cpg-mssr",
784 		.data = &r8a7795_cpg_mssr_info,
785 	},
786 #endif
787 #ifdef CONFIG_CLK_R8A77960
788 	{
789 		.compatible = "renesas,r8a7796-cpg-mssr",
790 		.data = &r8a7796_cpg_mssr_info,
791 	},
792 #endif
793 #ifdef CONFIG_CLK_R8A77961
794 	{
795 		.compatible = "renesas,r8a77961-cpg-mssr",
796 		.data = &r8a7796_cpg_mssr_info,
797 	},
798 #endif
799 #ifdef CONFIG_CLK_R8A77965
800 	{
801 		.compatible = "renesas,r8a77965-cpg-mssr",
802 		.data = &r8a77965_cpg_mssr_info,
803 	},
804 #endif
805 #ifdef CONFIG_CLK_R8A77970
806 	{
807 		.compatible = "renesas,r8a77970-cpg-mssr",
808 		.data = &r8a77970_cpg_mssr_info,
809 	},
810 #endif
811 #ifdef CONFIG_CLK_R8A77980
812 	{
813 		.compatible = "renesas,r8a77980-cpg-mssr",
814 		.data = &r8a77980_cpg_mssr_info,
815 	},
816 #endif
817 #ifdef CONFIG_CLK_R8A77990
818 	{
819 		.compatible = "renesas,r8a77990-cpg-mssr",
820 		.data = &r8a77990_cpg_mssr_info,
821 	},
822 #endif
823 #ifdef CONFIG_CLK_R8A77995
824 	{
825 		.compatible = "renesas,r8a77995-cpg-mssr",
826 		.data = &r8a77995_cpg_mssr_info,
827 	},
828 #endif
829 #ifdef CONFIG_CLK_R8A779A0
830 	{
831 		.compatible = "renesas,r8a779a0-cpg-mssr",
832 		.data = &r8a779a0_cpg_mssr_info,
833 	},
834 #endif
835 	{ /* sentinel */ }
836 };
837 
cpg_mssr_del_clk_provider(void * data)838 static void cpg_mssr_del_clk_provider(void *data)
839 {
840 	of_clk_del_provider(data);
841 }
842 
843 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM_PSCI_FW)
cpg_mssr_suspend_noirq(struct device * dev)844 static int cpg_mssr_suspend_noirq(struct device *dev)
845 {
846 	struct cpg_mssr_priv *priv = dev_get_drvdata(dev);
847 	unsigned int reg;
848 
849 	/* This is the best we can do to check for the presence of PSCI */
850 	if (!psci_ops.cpu_suspend)
851 		return 0;
852 
853 	/* Save module registers with bits under our control */
854 	for (reg = 0; reg < ARRAY_SIZE(priv->smstpcr_saved); reg++) {
855 		if (priv->smstpcr_saved[reg].mask)
856 			priv->smstpcr_saved[reg].val =
857 				priv->reg_layout == CLK_REG_LAYOUT_RZ_A ?
858 				readb(priv->base + priv->control_regs[reg]) :
859 				readl(priv->base + priv->control_regs[reg]);
860 	}
861 
862 	/* Save core clocks */
863 	raw_notifier_call_chain(&priv->notifiers, PM_EVENT_SUSPEND, NULL);
864 
865 	return 0;
866 }
867 
cpg_mssr_resume_noirq(struct device * dev)868 static int cpg_mssr_resume_noirq(struct device *dev)
869 {
870 	struct cpg_mssr_priv *priv = dev_get_drvdata(dev);
871 	unsigned int reg, i;
872 	u32 mask, oldval, newval;
873 
874 	/* This is the best we can do to check for the presence of PSCI */
875 	if (!psci_ops.cpu_suspend)
876 		return 0;
877 
878 	/* Restore core clocks */
879 	raw_notifier_call_chain(&priv->notifiers, PM_EVENT_RESUME, NULL);
880 
881 	/* Restore module clocks */
882 	for (reg = 0; reg < ARRAY_SIZE(priv->smstpcr_saved); reg++) {
883 		mask = priv->smstpcr_saved[reg].mask;
884 		if (!mask)
885 			continue;
886 
887 		if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A)
888 			oldval = readb(priv->base + priv->control_regs[reg]);
889 		else
890 			oldval = readl(priv->base + priv->control_regs[reg]);
891 		newval = oldval & ~mask;
892 		newval |= priv->smstpcr_saved[reg].val & mask;
893 		if (newval == oldval)
894 			continue;
895 
896 		if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) {
897 			writeb(newval, priv->base + priv->control_regs[reg]);
898 			/* dummy read to ensure write has completed */
899 			readb(priv->base + priv->control_regs[reg]);
900 			barrier_data(priv->base + priv->control_regs[reg]);
901 			continue;
902 		} else
903 			writel(newval, priv->base + priv->control_regs[reg]);
904 
905 		/* Wait until enabled clocks are really enabled */
906 		mask &= ~priv->smstpcr_saved[reg].val;
907 		if (!mask)
908 			continue;
909 
910 		for (i = 1000; i > 0; --i) {
911 			oldval = readl(priv->base + priv->status_regs[reg]);
912 			if (!(oldval & mask))
913 				break;
914 			cpu_relax();
915 		}
916 
917 		if (!i)
918 			dev_warn(dev, "Failed to enable %s%u[0x%x]\n",
919 				 priv->reg_layout == CLK_REG_LAYOUT_RZ_A ?
920 				 "STB" : "SMSTP", reg, oldval & mask);
921 	}
922 
923 	return 0;
924 }
925 
926 static const struct dev_pm_ops cpg_mssr_pm = {
927 	SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cpg_mssr_suspend_noirq,
928 				      cpg_mssr_resume_noirq)
929 };
930 #define DEV_PM_OPS	&cpg_mssr_pm
931 #else
932 #define DEV_PM_OPS	NULL
933 #endif /* CONFIG_PM_SLEEP && CONFIG_ARM_PSCI_FW */
934 
cpg_mssr_common_init(struct device * dev,struct device_node * np,const struct cpg_mssr_info * info)935 static int __init cpg_mssr_common_init(struct device *dev,
936 				       struct device_node *np,
937 				       const struct cpg_mssr_info *info)
938 {
939 	struct cpg_mssr_priv *priv;
940 	unsigned int nclks, i;
941 	int error;
942 
943 	if (info->init) {
944 		error = info->init(dev);
945 		if (error)
946 			return error;
947 	}
948 
949 	nclks = info->num_total_core_clks + info->num_hw_mod_clks;
950 	priv = kzalloc(struct_size(priv, clks, nclks), GFP_KERNEL);
951 	if (!priv)
952 		return -ENOMEM;
953 
954 	priv->np = np;
955 	priv->dev = dev;
956 	spin_lock_init(&priv->rmw_lock);
957 
958 	priv->base = of_iomap(np, 0);
959 	if (!priv->base) {
960 		error = -ENOMEM;
961 		goto out_err;
962 	}
963 
964 	cpg_mssr_priv = priv;
965 	priv->num_core_clks = info->num_total_core_clks;
966 	priv->num_mod_clks = info->num_hw_mod_clks;
967 	priv->last_dt_core_clk = info->last_dt_core_clk;
968 	RAW_INIT_NOTIFIER_HEAD(&priv->notifiers);
969 	priv->reg_layout = info->reg_layout;
970 	if (priv->reg_layout == CLK_REG_LAYOUT_RCAR_GEN2_AND_GEN3) {
971 		priv->status_regs = mstpsr;
972 		priv->control_regs = smstpcr;
973 		priv->reset_regs = srcr;
974 		priv->reset_clear_regs = srstclr;
975 	} else if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) {
976 		priv->control_regs = stbcr;
977 	} else if (priv->reg_layout == CLK_REG_LAYOUT_RCAR_V3U) {
978 		priv->status_regs = mstpsr_for_v3u;
979 		priv->control_regs = mstpcr_for_v3u;
980 		priv->reset_regs = srcr_for_v3u;
981 		priv->reset_clear_regs = srstclr_for_v3u;
982 	} else {
983 		error = -EINVAL;
984 		goto out_err;
985 	}
986 
987 	for (i = 0; i < nclks; i++)
988 		priv->clks[i] = ERR_PTR(-ENOENT);
989 
990 	error = of_clk_add_provider(np, cpg_mssr_clk_src_twocell_get, priv);
991 	if (error)
992 		goto out_err;
993 
994 	return 0;
995 
996 out_err:
997 	if (priv->base)
998 		iounmap(priv->base);
999 	kfree(priv);
1000 
1001 	return error;
1002 }
1003 
cpg_mssr_early_init(struct device_node * np,const struct cpg_mssr_info * info)1004 void __init cpg_mssr_early_init(struct device_node *np,
1005 				const struct cpg_mssr_info *info)
1006 {
1007 	int error;
1008 	int i;
1009 
1010 	error = cpg_mssr_common_init(NULL, np, info);
1011 	if (error)
1012 		return;
1013 
1014 	for (i = 0; i < info->num_early_core_clks; i++)
1015 		cpg_mssr_register_core_clk(&info->early_core_clks[i], info,
1016 					   cpg_mssr_priv);
1017 
1018 	for (i = 0; i < info->num_early_mod_clks; i++)
1019 		cpg_mssr_register_mod_clk(&info->early_mod_clks[i], info,
1020 					  cpg_mssr_priv);
1021 
1022 }
1023 
cpg_mssr_probe(struct platform_device * pdev)1024 static int __init cpg_mssr_probe(struct platform_device *pdev)
1025 {
1026 	struct device *dev = &pdev->dev;
1027 	struct device_node *np = dev->of_node;
1028 	const struct cpg_mssr_info *info;
1029 	struct cpg_mssr_priv *priv;
1030 	unsigned int i;
1031 	int error;
1032 
1033 	info = of_device_get_match_data(dev);
1034 
1035 	if (!cpg_mssr_priv) {
1036 		error = cpg_mssr_common_init(dev, dev->of_node, info);
1037 		if (error)
1038 			return error;
1039 	}
1040 
1041 	priv = cpg_mssr_priv;
1042 	priv->dev = dev;
1043 	dev_set_drvdata(dev, priv);
1044 
1045 	for (i = 0; i < info->num_core_clks; i++)
1046 		cpg_mssr_register_core_clk(&info->core_clks[i], info, priv);
1047 
1048 	for (i = 0; i < info->num_mod_clks; i++)
1049 		cpg_mssr_register_mod_clk(&info->mod_clks[i], info, priv);
1050 
1051 	error = devm_add_action_or_reset(dev,
1052 					 cpg_mssr_del_clk_provider,
1053 					 np);
1054 	if (error)
1055 		return error;
1056 
1057 	error = cpg_mssr_add_clk_domain(dev, info->core_pm_clks,
1058 					info->num_core_pm_clks);
1059 	if (error)
1060 		return error;
1061 
1062 	/* Reset Controller not supported for Standby Control SoCs */
1063 	if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A)
1064 		return 0;
1065 
1066 	error = cpg_mssr_reset_controller_register(priv);
1067 	if (error)
1068 		return error;
1069 
1070 	return 0;
1071 }
1072 
1073 static struct platform_driver cpg_mssr_driver = {
1074 	.driver		= {
1075 		.name	= "renesas-cpg-mssr",
1076 		.of_match_table = cpg_mssr_match,
1077 		.pm = DEV_PM_OPS,
1078 	},
1079 };
1080 
cpg_mssr_init(void)1081 static int __init cpg_mssr_init(void)
1082 {
1083 	return platform_driver_probe(&cpg_mssr_driver, cpg_mssr_probe);
1084 }
1085 
1086 subsys_initcall(cpg_mssr_init);
1087 
cpg_core_nullify_range(struct cpg_core_clk * core_clks,unsigned int num_core_clks,unsigned int first_clk,unsigned int last_clk)1088 void __init cpg_core_nullify_range(struct cpg_core_clk *core_clks,
1089 				   unsigned int num_core_clks,
1090 				   unsigned int first_clk,
1091 				   unsigned int last_clk)
1092 {
1093 	unsigned int i;
1094 
1095 	for (i = 0; i < num_core_clks; i++)
1096 		if (core_clks[i].id >= first_clk &&
1097 		    core_clks[i].id <= last_clk)
1098 			core_clks[i].name = NULL;
1099 }
1100 
mssr_mod_nullify(struct mssr_mod_clk * mod_clks,unsigned int num_mod_clks,const unsigned int * clks,unsigned int n)1101 void __init mssr_mod_nullify(struct mssr_mod_clk *mod_clks,
1102 			     unsigned int num_mod_clks,
1103 			     const unsigned int *clks, unsigned int n)
1104 {
1105 	unsigned int i, j;
1106 
1107 	for (i = 0, j = 0; i < num_mod_clks && j < n; i++)
1108 		if (mod_clks[i].id == clks[j]) {
1109 			mod_clks[i].name = NULL;
1110 			j++;
1111 		}
1112 }
1113 
mssr_mod_reparent(struct mssr_mod_clk * mod_clks,unsigned int num_mod_clks,const struct mssr_mod_reparent * clks,unsigned int n)1114 void __init mssr_mod_reparent(struct mssr_mod_clk *mod_clks,
1115 			      unsigned int num_mod_clks,
1116 			      const struct mssr_mod_reparent *clks,
1117 			      unsigned int n)
1118 {
1119 	unsigned int i, j;
1120 
1121 	for (i = 0, j = 0; i < num_mod_clks && j < n; i++)
1122 		if (mod_clks[i].id == clks[j].clk) {
1123 			mod_clks[i].parent = clks[j].parent;
1124 			j++;
1125 		}
1126 }
1127 
1128 MODULE_DESCRIPTION("Renesas CPG/MSSR Driver");
1129 MODULE_LICENSE("GPL v2");
1130