xref: /linux/drivers/soc/tegra/pmc.c (revision 8137a49e1567726eb10fcf55ad141ac19804ca6b)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * drivers/soc/tegra/pmc.c
4  *
5  * Copyright (c) 2010 Google, Inc
6  * Copyright (c) 2018-2020, NVIDIA CORPORATION. All rights reserved.
7  *
8  * Author:
9  *	Colin Cross <ccross@google.com>
10  */
11 
12 #define pr_fmt(fmt) "tegra-pmc: " fmt
13 
14 #include <linux/arm-smccc.h>
15 #include <linux/clk.h>
16 #include <linux/clk-provider.h>
17 #include <linux/clkdev.h>
18 #include <linux/clk/clk-conf.h>
19 #include <linux/clk/tegra.h>
20 #include <linux/debugfs.h>
21 #include <linux/delay.h>
22 #include <linux/device.h>
23 #include <linux/err.h>
24 #include <linux/export.h>
25 #include <linux/init.h>
26 #include <linux/io.h>
27 #include <linux/iopoll.h>
28 #include <linux/irqdomain.h>
29 #include <linux/irq.h>
30 #include <linux/kernel.h>
31 #include <linux/of_address.h>
32 #include <linux/of_clk.h>
33 #include <linux/of.h>
34 #include <linux/of_irq.h>
35 #include <linux/of_platform.h>
36 #include <linux/pinctrl/pinconf-generic.h>
37 #include <linux/pinctrl/pinconf.h>
38 #include <linux/pinctrl/pinctrl.h>
39 #include <linux/platform_device.h>
40 #include <linux/pm_domain.h>
41 #include <linux/pm_opp.h>
42 #include <linux/reboot.h>
43 #include <linux/regmap.h>
44 #include <linux/reset.h>
45 #include <linux/seq_file.h>
46 #include <linux/slab.h>
47 #include <linux/spinlock.h>
48 
49 #include <soc/tegra/common.h>
50 #include <soc/tegra/fuse.h>
51 #include <soc/tegra/pmc.h>
52 
53 #include <dt-bindings/interrupt-controller/arm-gic.h>
54 #include <dt-bindings/pinctrl/pinctrl-tegra-io-pad.h>
55 #include <dt-bindings/gpio/tegra186-gpio.h>
56 #include <dt-bindings/gpio/tegra194-gpio.h>
57 #include <dt-bindings/soc/tegra-pmc.h>
58 
59 #define PMC_CNTRL			0x0
60 #define  PMC_CNTRL_INTR_POLARITY	BIT(17) /* inverts INTR polarity */
61 #define  PMC_CNTRL_CPU_PWRREQ_OE	BIT(16) /* CPU pwr req enable */
62 #define  PMC_CNTRL_CPU_PWRREQ_POLARITY	BIT(15) /* CPU pwr req polarity */
63 #define  PMC_CNTRL_SIDE_EFFECT_LP0	BIT(14) /* LP0 when CPU pwr gated */
64 #define  PMC_CNTRL_SYSCLK_OE		BIT(11) /* system clock enable */
65 #define  PMC_CNTRL_SYSCLK_POLARITY	BIT(10) /* sys clk polarity */
66 #define  PMC_CNTRL_PWRREQ_POLARITY	BIT(8)
67 #define  PMC_CNTRL_BLINK_EN		7
68 #define  PMC_CNTRL_MAIN_RST		BIT(4)
69 
70 #define PMC_WAKE_MASK			0x0c
71 #define PMC_WAKE_LEVEL			0x10
72 #define PMC_WAKE_STATUS			0x14
73 #define PMC_SW_WAKE_STATUS		0x18
74 #define PMC_DPD_PADS_ORIDE		0x1c
75 #define  PMC_DPD_PADS_ORIDE_BLINK	20
76 
77 #define DPD_SAMPLE			0x020
78 #define  DPD_SAMPLE_ENABLE		BIT(0)
79 #define  DPD_SAMPLE_DISABLE		(0 << 0)
80 
81 #define PWRGATE_TOGGLE			0x30
82 #define  PWRGATE_TOGGLE_START		BIT(8)
83 
84 #define REMOVE_CLAMPING			0x34
85 
86 #define PWRGATE_STATUS			0x38
87 
88 #define PMC_BLINK_TIMER			0x40
89 #define PMC_IMPL_E_33V_PWR		0x40
90 
91 #define PMC_PWR_DET			0x48
92 
93 #define PMC_SCRATCH0_MODE_RECOVERY	BIT(31)
94 #define PMC_SCRATCH0_MODE_BOOTLOADER	BIT(30)
95 #define PMC_SCRATCH0_MODE_RCM		BIT(1)
96 #define PMC_SCRATCH0_MODE_MASK		(PMC_SCRATCH0_MODE_RECOVERY | \
97 					 PMC_SCRATCH0_MODE_BOOTLOADER | \
98 					 PMC_SCRATCH0_MODE_RCM)
99 
100 #define PMC_CPUPWRGOOD_TIMER		0xc8
101 #define PMC_CPUPWROFF_TIMER		0xcc
102 #define PMC_COREPWRGOOD_TIMER		0x3c
103 #define PMC_COREPWROFF_TIMER		0xe0
104 
105 #define PMC_PWR_DET_VALUE		0xe4
106 
107 #define PMC_USB_DEBOUNCE_DEL		0xec
108 #define PMC_USB_AO			0xf0
109 
110 #define PMC_SCRATCH41			0x140
111 
112 #define PMC_WAKE2_MASK			0x160
113 #define PMC_WAKE2_LEVEL			0x164
114 #define PMC_WAKE2_STATUS		0x168
115 #define PMC_SW_WAKE2_STATUS		0x16c
116 
117 #define PMC_CLK_OUT_CNTRL		0x1a8
118 #define  PMC_CLK_OUT_MUX_MASK		GENMASK(1, 0)
119 #define PMC_SENSOR_CTRL			0x1b0
120 #define  PMC_SENSOR_CTRL_SCRATCH_WRITE	BIT(2)
121 #define  PMC_SENSOR_CTRL_ENABLE_RST	BIT(1)
122 
123 #define  PMC_RST_STATUS_POR		0
124 #define  PMC_RST_STATUS_WATCHDOG	1
125 #define  PMC_RST_STATUS_SENSOR		2
126 #define  PMC_RST_STATUS_SW_MAIN		3
127 #define  PMC_RST_STATUS_LP0		4
128 #define  PMC_RST_STATUS_AOTAG		5
129 
130 #define IO_DPD_REQ			0x1b8
131 #define  IO_DPD_REQ_CODE_IDLE		(0U << 30)
132 #define  IO_DPD_REQ_CODE_OFF		(1U << 30)
133 #define  IO_DPD_REQ_CODE_ON		(2U << 30)
134 #define  IO_DPD_REQ_CODE_MASK		(3U << 30)
135 
136 #define IO_DPD_STATUS			0x1bc
137 #define IO_DPD2_REQ			0x1c0
138 #define IO_DPD2_STATUS			0x1c4
139 #define SEL_DPD_TIM			0x1c8
140 
141 #define PMC_UTMIP_UHSIC_TRIGGERS	0x1ec
142 #define PMC_UTMIP_UHSIC_SAVED_STATE	0x1f0
143 
144 #define PMC_UTMIP_TERM_PAD_CFG		0x1f8
145 #define PMC_UTMIP_UHSIC_SLEEP_CFG	0x1fc
146 #define PMC_UTMIP_UHSIC_FAKE		0x218
147 
148 #define PMC_SCRATCH54			0x258
149 #define  PMC_SCRATCH54_DATA_SHIFT	8
150 #define  PMC_SCRATCH54_ADDR_SHIFT	0
151 
152 #define PMC_SCRATCH55			0x25c
153 #define  PMC_SCRATCH55_RESET_TEGRA	BIT(31)
154 #define  PMC_SCRATCH55_CNTRL_ID_SHIFT	27
155 #define  PMC_SCRATCH55_PINMUX_SHIFT	24
156 #define  PMC_SCRATCH55_16BITOP		BIT(15)
157 #define  PMC_SCRATCH55_CHECKSUM_SHIFT	16
158 #define  PMC_SCRATCH55_I2CSLV1_SHIFT	0
159 
160 #define  PMC_UTMIP_UHSIC_LINE_WAKEUP	0x26c
161 
162 #define PMC_UTMIP_BIAS_MASTER_CNTRL	0x270
163 #define PMC_UTMIP_MASTER_CONFIG		0x274
164 #define PMC_UTMIP_UHSIC2_TRIGGERS	0x27c
165 #define PMC_UTMIP_MASTER2_CONFIG	0x29c
166 
167 #define GPU_RG_CNTRL			0x2d4
168 
169 #define PMC_UTMIP_PAD_CFG0		0x4c0
170 #define PMC_UTMIP_UHSIC_SLEEP_CFG1	0x4d0
171 #define PMC_UTMIP_SLEEPWALK_P3		0x4e0
172 /* Tegra186 and later */
173 #define WAKE_AOWAKE_CNTRL(x) (0x000 + ((x) << 2))
174 #define WAKE_AOWAKE_CNTRL_LEVEL (1 << 3)
175 #define WAKE_AOWAKE_MASK_W(x) (0x180 + ((x) << 2))
176 #define WAKE_AOWAKE_MASK_R(x) (0x300 + ((x) << 2))
177 #define WAKE_AOWAKE_STATUS_W(x) (0x30c + ((x) << 2))
178 #define WAKE_AOWAKE_STATUS_R(x) (0x48c + ((x) << 2))
179 #define WAKE_AOWAKE_TIER0_ROUTING(x) (0x4b4 + ((x) << 2))
180 #define WAKE_AOWAKE_TIER1_ROUTING(x) (0x4c0 + ((x) << 2))
181 #define WAKE_AOWAKE_TIER2_ROUTING(x) (0x4cc + ((x) << 2))
182 
183 #define WAKE_AOWAKE_CTRL 0x4f4
184 #define  WAKE_AOWAKE_CTRL_INTR_POLARITY BIT(0)
185 
186 /* for secure PMC */
187 #define TEGRA_SMC_PMC		0xc2fffe00
188 #define  TEGRA_SMC_PMC_READ	0xaa
189 #define  TEGRA_SMC_PMC_WRITE	0xbb
190 
191 struct pmc_clk {
192 	struct clk_hw	hw;
193 	unsigned long	offs;
194 	u32		mux_shift;
195 	u32		force_en_shift;
196 };
197 
198 #define to_pmc_clk(_hw) container_of(_hw, struct pmc_clk, hw)
199 
200 struct pmc_clk_gate {
201 	struct clk_hw	hw;
202 	unsigned long	offs;
203 	u32		shift;
204 };
205 
206 #define to_pmc_clk_gate(_hw) container_of(_hw, struct pmc_clk_gate, hw)
207 
208 struct pmc_clk_init_data {
209 	char *name;
210 	const char *const *parents;
211 	int num_parents;
212 	int clk_id;
213 	u8 mux_shift;
214 	u8 force_en_shift;
215 };
216 
217 static const char * const clk_out1_parents[] = { "osc", "osc_div2",
218 	"osc_div4", "extern1",
219 };
220 
221 static const char * const clk_out2_parents[] = { "osc", "osc_div2",
222 	"osc_div4", "extern2",
223 };
224 
225 static const char * const clk_out3_parents[] = { "osc", "osc_div2",
226 	"osc_div4", "extern3",
227 };
228 
229 static const struct pmc_clk_init_data tegra_pmc_clks_data[] = {
230 	{
231 		.name = "pmc_clk_out_1",
232 		.parents = clk_out1_parents,
233 		.num_parents = ARRAY_SIZE(clk_out1_parents),
234 		.clk_id = TEGRA_PMC_CLK_OUT_1,
235 		.mux_shift = 6,
236 		.force_en_shift = 2,
237 	},
238 	{
239 		.name = "pmc_clk_out_2",
240 		.parents = clk_out2_parents,
241 		.num_parents = ARRAY_SIZE(clk_out2_parents),
242 		.clk_id = TEGRA_PMC_CLK_OUT_2,
243 		.mux_shift = 14,
244 		.force_en_shift = 10,
245 	},
246 	{
247 		.name = "pmc_clk_out_3",
248 		.parents = clk_out3_parents,
249 		.num_parents = ARRAY_SIZE(clk_out3_parents),
250 		.clk_id = TEGRA_PMC_CLK_OUT_3,
251 		.mux_shift = 22,
252 		.force_en_shift = 18,
253 	},
254 };
255 
256 struct tegra_powergate {
257 	struct generic_pm_domain genpd;
258 	struct tegra_pmc *pmc;
259 	unsigned int id;
260 	struct clk **clks;
261 	unsigned int num_clks;
262 	unsigned long *clk_rates;
263 	struct reset_control *reset;
264 };
265 
266 struct tegra_io_pad_soc {
267 	enum tegra_io_pad id;
268 	unsigned int dpd;
269 	unsigned int voltage;
270 	const char *name;
271 };
272 
273 struct tegra_pmc_regs {
274 	unsigned int scratch0;
275 	unsigned int dpd_req;
276 	unsigned int dpd_status;
277 	unsigned int dpd2_req;
278 	unsigned int dpd2_status;
279 	unsigned int rst_status;
280 	unsigned int rst_source_shift;
281 	unsigned int rst_source_mask;
282 	unsigned int rst_level_shift;
283 	unsigned int rst_level_mask;
284 };
285 
286 struct tegra_wake_event {
287 	const char *name;
288 	unsigned int id;
289 	unsigned int irq;
290 	struct {
291 		unsigned int instance;
292 		unsigned int pin;
293 	} gpio;
294 };
295 
296 #define TEGRA_WAKE_IRQ(_name, _id, _irq)		\
297 	{						\
298 		.name = _name,				\
299 		.id = _id,				\
300 		.irq = _irq,				\
301 		.gpio = {				\
302 			.instance = UINT_MAX,		\
303 			.pin = UINT_MAX,		\
304 		},					\
305 	}
306 
307 #define TEGRA_WAKE_GPIO(_name, _id, _instance, _pin)	\
308 	{						\
309 		.name = _name,				\
310 		.id = _id,				\
311 		.irq = 0,				\
312 		.gpio = {				\
313 			.instance = _instance,		\
314 			.pin = _pin,			\
315 		},					\
316 	}
317 
318 struct tegra_pmc_soc {
319 	unsigned int num_powergates;
320 	const char *const *powergates;
321 	unsigned int num_cpu_powergates;
322 	const u8 *cpu_powergates;
323 
324 	bool has_tsense_reset;
325 	bool has_gpu_clamps;
326 	bool needs_mbist_war;
327 	bool has_impl_33v_pwr;
328 	bool maybe_tz_only;
329 
330 	const struct tegra_io_pad_soc *io_pads;
331 	unsigned int num_io_pads;
332 
333 	const struct pinctrl_pin_desc *pin_descs;
334 	unsigned int num_pin_descs;
335 
336 	const struct tegra_pmc_regs *regs;
337 	void (*init)(struct tegra_pmc *pmc);
338 	void (*setup_irq_polarity)(struct tegra_pmc *pmc,
339 				   struct device_node *np,
340 				   bool invert);
341 	int (*irq_set_wake)(struct irq_data *data, unsigned int on);
342 	int (*irq_set_type)(struct irq_data *data, unsigned int type);
343 	int (*powergate_set)(struct tegra_pmc *pmc, unsigned int id,
344 			     bool new_state);
345 
346 	const char * const *reset_sources;
347 	unsigned int num_reset_sources;
348 	const char * const *reset_levels;
349 	unsigned int num_reset_levels;
350 
351 	/*
352 	 * These describe events that can wake the system from sleep (i.e.
353 	 * LP0 or SC7). Wakeup from other sleep states (such as LP1 or LP2)
354 	 * are dealt with in the LIC.
355 	 */
356 	const struct tegra_wake_event *wake_events;
357 	unsigned int num_wake_events;
358 
359 	const struct pmc_clk_init_data *pmc_clks_data;
360 	unsigned int num_pmc_clks;
361 	bool has_blink_output;
362 	bool has_usb_sleepwalk;
363 };
364 
365 /**
366  * struct tegra_pmc - NVIDIA Tegra PMC
367  * @dev: pointer to PMC device structure
368  * @base: pointer to I/O remapped register region
369  * @wake: pointer to I/O remapped region for WAKE registers
370  * @aotag: pointer to I/O remapped region for AOTAG registers
371  * @scratch: pointer to I/O remapped region for scratch registers
372  * @clk: pointer to pclk clock
373  * @soc: pointer to SoC data structure
374  * @tz_only: flag specifying if the PMC can only be accessed via TrustZone
375  * @debugfs: pointer to debugfs entry
376  * @rate: currently configured rate of pclk
377  * @suspend_mode: lowest suspend mode available
378  * @cpu_good_time: CPU power good time (in microseconds)
379  * @cpu_off_time: CPU power off time (in microsecends)
380  * @core_osc_time: core power good OSC time (in microseconds)
381  * @core_pmu_time: core power good PMU time (in microseconds)
382  * @core_off_time: core power off time (in microseconds)
383  * @corereq_high: core power request is active-high
384  * @sysclkreq_high: system clock request is active-high
385  * @combined_req: combined power request for CPU & core
386  * @cpu_pwr_good_en: CPU power good signal is enabled
387  * @lp0_vec_phys: physical base address of the LP0 warm boot code
388  * @lp0_vec_size: size of the LP0 warm boot code
389  * @powergates_available: Bitmap of available power gates
390  * @powergates_lock: mutex for power gate register access
391  * @pctl_dev: pin controller exposed by the PMC
392  * @domain: IRQ domain provided by the PMC
393  * @irq: chip implementation for the IRQ domain
394  * @clk_nb: pclk clock changes handler
395  */
396 struct tegra_pmc {
397 	struct device *dev;
398 	void __iomem *base;
399 	void __iomem *wake;
400 	void __iomem *aotag;
401 	void __iomem *scratch;
402 	struct clk *clk;
403 	struct dentry *debugfs;
404 
405 	const struct tegra_pmc_soc *soc;
406 	bool tz_only;
407 
408 	unsigned long rate;
409 
410 	enum tegra_suspend_mode suspend_mode;
411 	u32 cpu_good_time;
412 	u32 cpu_off_time;
413 	u32 core_osc_time;
414 	u32 core_pmu_time;
415 	u32 core_off_time;
416 	bool corereq_high;
417 	bool sysclkreq_high;
418 	bool combined_req;
419 	bool cpu_pwr_good_en;
420 	u32 lp0_vec_phys;
421 	u32 lp0_vec_size;
422 	DECLARE_BITMAP(powergates_available, TEGRA_POWERGATE_MAX);
423 
424 	struct mutex powergates_lock;
425 
426 	struct pinctrl_dev *pctl_dev;
427 
428 	struct irq_domain *domain;
429 	struct irq_chip irq;
430 
431 	struct notifier_block clk_nb;
432 
433 	bool core_domain_state_synced;
434 	bool core_domain_registered;
435 };
436 
437 static struct tegra_pmc *pmc = &(struct tegra_pmc) {
438 	.base = NULL,
439 	.suspend_mode = TEGRA_SUSPEND_NONE,
440 };
441 
442 static inline struct tegra_powergate *
443 to_powergate(struct generic_pm_domain *domain)
444 {
445 	return container_of(domain, struct tegra_powergate, genpd);
446 }
447 
448 static u32 tegra_pmc_readl(struct tegra_pmc *pmc, unsigned long offset)
449 {
450 	struct arm_smccc_res res;
451 
452 	if (pmc->tz_only) {
453 		arm_smccc_smc(TEGRA_SMC_PMC, TEGRA_SMC_PMC_READ, offset, 0, 0,
454 			      0, 0, 0, &res);
455 		if (res.a0) {
456 			if (pmc->dev)
457 				dev_warn(pmc->dev, "%s(): SMC failed: %lu\n",
458 					 __func__, res.a0);
459 			else
460 				pr_warn("%s(): SMC failed: %lu\n", __func__,
461 					res.a0);
462 		}
463 
464 		return res.a1;
465 	}
466 
467 	return readl(pmc->base + offset);
468 }
469 
470 static void tegra_pmc_writel(struct tegra_pmc *pmc, u32 value,
471 			     unsigned long offset)
472 {
473 	struct arm_smccc_res res;
474 
475 	if (pmc->tz_only) {
476 		arm_smccc_smc(TEGRA_SMC_PMC, TEGRA_SMC_PMC_WRITE, offset,
477 			      value, 0, 0, 0, 0, &res);
478 		if (res.a0) {
479 			if (pmc->dev)
480 				dev_warn(pmc->dev, "%s(): SMC failed: %lu\n",
481 					 __func__, res.a0);
482 			else
483 				pr_warn("%s(): SMC failed: %lu\n", __func__,
484 					res.a0);
485 		}
486 	} else {
487 		writel(value, pmc->base + offset);
488 	}
489 }
490 
491 static u32 tegra_pmc_scratch_readl(struct tegra_pmc *pmc, unsigned long offset)
492 {
493 	if (pmc->tz_only)
494 		return tegra_pmc_readl(pmc, offset);
495 
496 	return readl(pmc->scratch + offset);
497 }
498 
499 static void tegra_pmc_scratch_writel(struct tegra_pmc *pmc, u32 value,
500 				     unsigned long offset)
501 {
502 	if (pmc->tz_only)
503 		tegra_pmc_writel(pmc, value, offset);
504 	else
505 		writel(value, pmc->scratch + offset);
506 }
507 
508 /*
509  * TODO Figure out a way to call this with the struct tegra_pmc * passed in.
510  * This currently doesn't work because readx_poll_timeout() can only operate
511  * on functions that take a single argument.
512  */
513 static inline bool tegra_powergate_state(int id)
514 {
515 	if (id == TEGRA_POWERGATE_3D && pmc->soc->has_gpu_clamps)
516 		return (tegra_pmc_readl(pmc, GPU_RG_CNTRL) & 0x1) == 0;
517 	else
518 		return (tegra_pmc_readl(pmc, PWRGATE_STATUS) & BIT(id)) != 0;
519 }
520 
521 static inline bool tegra_powergate_is_valid(struct tegra_pmc *pmc, int id)
522 {
523 	return (pmc->soc && pmc->soc->powergates[id]);
524 }
525 
526 static inline bool tegra_powergate_is_available(struct tegra_pmc *pmc, int id)
527 {
528 	return test_bit(id, pmc->powergates_available);
529 }
530 
531 static int tegra_powergate_lookup(struct tegra_pmc *pmc, const char *name)
532 {
533 	unsigned int i;
534 
535 	if (!pmc || !pmc->soc || !name)
536 		return -EINVAL;
537 
538 	for (i = 0; i < pmc->soc->num_powergates; i++) {
539 		if (!tegra_powergate_is_valid(pmc, i))
540 			continue;
541 
542 		if (!strcmp(name, pmc->soc->powergates[i]))
543 			return i;
544 	}
545 
546 	return -ENODEV;
547 }
548 
549 static int tegra20_powergate_set(struct tegra_pmc *pmc, unsigned int id,
550 				 bool new_state)
551 {
552 	unsigned int retries = 100;
553 	bool status;
554 	int ret;
555 
556 	/*
557 	 * As per TRM documentation, the toggle command will be dropped by PMC
558 	 * if there is contention with a HW-initiated toggling (i.e. CPU core
559 	 * power-gated), the command should be retried in that case.
560 	 */
561 	do {
562 		tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
563 
564 		/* wait for PMC to execute the command */
565 		ret = readx_poll_timeout(tegra_powergate_state, id, status,
566 					 status == new_state, 1, 10);
567 	} while (ret == -ETIMEDOUT && retries--);
568 
569 	return ret;
570 }
571 
572 static inline bool tegra_powergate_toggle_ready(struct tegra_pmc *pmc)
573 {
574 	return !(tegra_pmc_readl(pmc, PWRGATE_TOGGLE) & PWRGATE_TOGGLE_START);
575 }
576 
577 static int tegra114_powergate_set(struct tegra_pmc *pmc, unsigned int id,
578 				  bool new_state)
579 {
580 	bool status;
581 	int err;
582 
583 	/* wait while PMC power gating is contended */
584 	err = readx_poll_timeout(tegra_powergate_toggle_ready, pmc, status,
585 				 status == true, 1, 100);
586 	if (err)
587 		return err;
588 
589 	tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
590 
591 	/* wait for PMC to accept the command */
592 	err = readx_poll_timeout(tegra_powergate_toggle_ready, pmc, status,
593 				 status == true, 1, 100);
594 	if (err)
595 		return err;
596 
597 	/* wait for PMC to execute the command */
598 	err = readx_poll_timeout(tegra_powergate_state, id, status,
599 				 status == new_state, 10, 100000);
600 	if (err)
601 		return err;
602 
603 	return 0;
604 }
605 
606 /**
607  * tegra_powergate_set() - set the state of a partition
608  * @pmc: power management controller
609  * @id: partition ID
610  * @new_state: new state of the partition
611  */
612 static int tegra_powergate_set(struct tegra_pmc *pmc, unsigned int id,
613 			       bool new_state)
614 {
615 	int err;
616 
617 	if (id == TEGRA_POWERGATE_3D && pmc->soc->has_gpu_clamps)
618 		return -EINVAL;
619 
620 	mutex_lock(&pmc->powergates_lock);
621 
622 	if (tegra_powergate_state(id) == new_state) {
623 		mutex_unlock(&pmc->powergates_lock);
624 		return 0;
625 	}
626 
627 	err = pmc->soc->powergate_set(pmc, id, new_state);
628 
629 	mutex_unlock(&pmc->powergates_lock);
630 
631 	return err;
632 }
633 
634 static int __tegra_powergate_remove_clamping(struct tegra_pmc *pmc,
635 					     unsigned int id)
636 {
637 	u32 mask;
638 
639 	mutex_lock(&pmc->powergates_lock);
640 
641 	/*
642 	 * On Tegra124 and later, the clamps for the GPU are controlled by a
643 	 * separate register (with different semantics).
644 	 */
645 	if (id == TEGRA_POWERGATE_3D) {
646 		if (pmc->soc->has_gpu_clamps) {
647 			tegra_pmc_writel(pmc, 0, GPU_RG_CNTRL);
648 			goto out;
649 		}
650 	}
651 
652 	/*
653 	 * Tegra 2 has a bug where PCIE and VDE clamping masks are
654 	 * swapped relatively to the partition ids
655 	 */
656 	if (id == TEGRA_POWERGATE_VDEC)
657 		mask = (1 << TEGRA_POWERGATE_PCIE);
658 	else if (id == TEGRA_POWERGATE_PCIE)
659 		mask = (1 << TEGRA_POWERGATE_VDEC);
660 	else
661 		mask = (1 << id);
662 
663 	tegra_pmc_writel(pmc, mask, REMOVE_CLAMPING);
664 
665 out:
666 	mutex_unlock(&pmc->powergates_lock);
667 
668 	return 0;
669 }
670 
671 static int tegra_powergate_prepare_clocks(struct tegra_powergate *pg)
672 {
673 	unsigned long safe_rate = 100 * 1000 * 1000;
674 	unsigned int i;
675 	int err;
676 
677 	for (i = 0; i < pg->num_clks; i++) {
678 		pg->clk_rates[i] = clk_get_rate(pg->clks[i]);
679 
680 		if (!pg->clk_rates[i]) {
681 			err = -EINVAL;
682 			goto out;
683 		}
684 
685 		if (pg->clk_rates[i] <= safe_rate)
686 			continue;
687 
688 		/*
689 		 * We don't know whether voltage state is okay for the
690 		 * current clock rate, hence it's better to temporally
691 		 * switch clock to a safe rate which is suitable for
692 		 * all voltages, before enabling the clock.
693 		 */
694 		err = clk_set_rate(pg->clks[i], safe_rate);
695 		if (err)
696 			goto out;
697 	}
698 
699 	return 0;
700 
701 out:
702 	while (i--)
703 		clk_set_rate(pg->clks[i], pg->clk_rates[i]);
704 
705 	return err;
706 }
707 
708 static int tegra_powergate_unprepare_clocks(struct tegra_powergate *pg)
709 {
710 	unsigned int i;
711 	int err;
712 
713 	for (i = 0; i < pg->num_clks; i++) {
714 		err = clk_set_rate(pg->clks[i], pg->clk_rates[i]);
715 		if (err)
716 			return err;
717 	}
718 
719 	return 0;
720 }
721 
722 static void tegra_powergate_disable_clocks(struct tegra_powergate *pg)
723 {
724 	unsigned int i;
725 
726 	for (i = 0; i < pg->num_clks; i++)
727 		clk_disable_unprepare(pg->clks[i]);
728 }
729 
730 static int tegra_powergate_enable_clocks(struct tegra_powergate *pg)
731 {
732 	unsigned int i;
733 	int err;
734 
735 	for (i = 0; i < pg->num_clks; i++) {
736 		err = clk_prepare_enable(pg->clks[i]);
737 		if (err)
738 			goto out;
739 	}
740 
741 	return 0;
742 
743 out:
744 	while (i--)
745 		clk_disable_unprepare(pg->clks[i]);
746 
747 	return err;
748 }
749 
750 static int tegra_powergate_power_up(struct tegra_powergate *pg,
751 				    bool disable_clocks)
752 {
753 	int err;
754 
755 	err = reset_control_assert(pg->reset);
756 	if (err)
757 		return err;
758 
759 	usleep_range(10, 20);
760 
761 	err = tegra_powergate_set(pg->pmc, pg->id, true);
762 	if (err < 0)
763 		return err;
764 
765 	usleep_range(10, 20);
766 
767 	err = tegra_powergate_prepare_clocks(pg);
768 	if (err)
769 		goto powergate_off;
770 
771 	err = tegra_powergate_enable_clocks(pg);
772 	if (err)
773 		goto unprepare_clks;
774 
775 	usleep_range(10, 20);
776 
777 	err = __tegra_powergate_remove_clamping(pg->pmc, pg->id);
778 	if (err)
779 		goto disable_clks;
780 
781 	usleep_range(10, 20);
782 
783 	err = reset_control_deassert(pg->reset);
784 	if (err)
785 		goto powergate_off;
786 
787 	usleep_range(10, 20);
788 
789 	if (pg->pmc->soc->needs_mbist_war)
790 		err = tegra210_clk_handle_mbist_war(pg->id);
791 	if (err)
792 		goto disable_clks;
793 
794 	if (disable_clocks)
795 		tegra_powergate_disable_clocks(pg);
796 
797 	err = tegra_powergate_unprepare_clocks(pg);
798 	if (err)
799 		return err;
800 
801 	return 0;
802 
803 disable_clks:
804 	tegra_powergate_disable_clocks(pg);
805 	usleep_range(10, 20);
806 
807 unprepare_clks:
808 	tegra_powergate_unprepare_clocks(pg);
809 
810 powergate_off:
811 	tegra_powergate_set(pg->pmc, pg->id, false);
812 
813 	return err;
814 }
815 
816 static int tegra_powergate_power_down(struct tegra_powergate *pg)
817 {
818 	int err;
819 
820 	err = tegra_powergate_prepare_clocks(pg);
821 	if (err)
822 		return err;
823 
824 	err = tegra_powergate_enable_clocks(pg);
825 	if (err)
826 		goto unprepare_clks;
827 
828 	usleep_range(10, 20);
829 
830 	err = reset_control_assert(pg->reset);
831 	if (err)
832 		goto disable_clks;
833 
834 	usleep_range(10, 20);
835 
836 	tegra_powergate_disable_clocks(pg);
837 
838 	usleep_range(10, 20);
839 
840 	err = tegra_powergate_set(pg->pmc, pg->id, false);
841 	if (err)
842 		goto assert_resets;
843 
844 	err = tegra_powergate_unprepare_clocks(pg);
845 	if (err)
846 		return err;
847 
848 	return 0;
849 
850 assert_resets:
851 	tegra_powergate_enable_clocks(pg);
852 	usleep_range(10, 20);
853 	reset_control_deassert(pg->reset);
854 	usleep_range(10, 20);
855 
856 disable_clks:
857 	tegra_powergate_disable_clocks(pg);
858 
859 unprepare_clks:
860 	tegra_powergate_unprepare_clocks(pg);
861 
862 	return err;
863 }
864 
865 static int tegra_genpd_power_on(struct generic_pm_domain *domain)
866 {
867 	struct tegra_powergate *pg = to_powergate(domain);
868 	struct device *dev = pg->pmc->dev;
869 	int err;
870 
871 	err = tegra_powergate_power_up(pg, true);
872 	if (err) {
873 		dev_err(dev, "failed to turn on PM domain %s: %d\n",
874 			pg->genpd.name, err);
875 		goto out;
876 	}
877 
878 	reset_control_release(pg->reset);
879 
880 out:
881 	return err;
882 }
883 
884 static int tegra_genpd_power_off(struct generic_pm_domain *domain)
885 {
886 	struct tegra_powergate *pg = to_powergate(domain);
887 	struct device *dev = pg->pmc->dev;
888 	int err;
889 
890 	err = reset_control_acquire(pg->reset);
891 	if (err < 0) {
892 		dev_err(dev, "failed to acquire resets for PM domain %s: %d\n",
893 			pg->genpd.name, err);
894 		return err;
895 	}
896 
897 	err = tegra_powergate_power_down(pg);
898 	if (err) {
899 		dev_err(dev, "failed to turn off PM domain %s: %d\n",
900 			pg->genpd.name, err);
901 		reset_control_release(pg->reset);
902 	}
903 
904 	return err;
905 }
906 
907 /**
908  * tegra_powergate_power_on() - power on partition
909  * @id: partition ID
910  */
911 int tegra_powergate_power_on(unsigned int id)
912 {
913 	if (!tegra_powergate_is_available(pmc, id))
914 		return -EINVAL;
915 
916 	return tegra_powergate_set(pmc, id, true);
917 }
918 EXPORT_SYMBOL(tegra_powergate_power_on);
919 
920 /**
921  * tegra_powergate_power_off() - power off partition
922  * @id: partition ID
923  */
924 int tegra_powergate_power_off(unsigned int id)
925 {
926 	if (!tegra_powergate_is_available(pmc, id))
927 		return -EINVAL;
928 
929 	return tegra_powergate_set(pmc, id, false);
930 }
931 EXPORT_SYMBOL(tegra_powergate_power_off);
932 
933 /**
934  * tegra_powergate_is_powered() - check if partition is powered
935  * @pmc: power management controller
936  * @id: partition ID
937  */
938 static int tegra_powergate_is_powered(struct tegra_pmc *pmc, unsigned int id)
939 {
940 	if (!tegra_powergate_is_valid(pmc, id))
941 		return -EINVAL;
942 
943 	return tegra_powergate_state(id);
944 }
945 
946 /**
947  * tegra_powergate_remove_clamping() - remove power clamps for partition
948  * @id: partition ID
949  */
950 int tegra_powergate_remove_clamping(unsigned int id)
951 {
952 	if (!tegra_powergate_is_available(pmc, id))
953 		return -EINVAL;
954 
955 	return __tegra_powergate_remove_clamping(pmc, id);
956 }
957 EXPORT_SYMBOL(tegra_powergate_remove_clamping);
958 
959 /**
960  * tegra_powergate_sequence_power_up() - power up partition
961  * @id: partition ID
962  * @clk: clock for partition
963  * @rst: reset for partition
964  *
965  * Must be called with clk disabled, and returns with clk enabled.
966  */
967 int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk,
968 				      struct reset_control *rst)
969 {
970 	struct tegra_powergate *pg;
971 	int err;
972 
973 	if (!tegra_powergate_is_available(pmc, id))
974 		return -EINVAL;
975 
976 	pg = kzalloc(sizeof(*pg), GFP_KERNEL);
977 	if (!pg)
978 		return -ENOMEM;
979 
980 	pg->clk_rates = kzalloc(sizeof(*pg->clk_rates), GFP_KERNEL);
981 	if (!pg->clk_rates) {
982 		kfree(pg->clks);
983 		return -ENOMEM;
984 	}
985 
986 	pg->id = id;
987 	pg->clks = &clk;
988 	pg->num_clks = 1;
989 	pg->reset = rst;
990 	pg->pmc = pmc;
991 
992 	err = tegra_powergate_power_up(pg, false);
993 	if (err)
994 		dev_err(pmc->dev, "failed to turn on partition %d: %d\n", id,
995 			err);
996 
997 	kfree(pg->clk_rates);
998 	kfree(pg);
999 
1000 	return err;
1001 }
1002 EXPORT_SYMBOL(tegra_powergate_sequence_power_up);
1003 
1004 /**
1005  * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID
1006  * @pmc: power management controller
1007  * @cpuid: CPU partition ID
1008  *
1009  * Returns the partition ID corresponding to the CPU partition ID or a
1010  * negative error code on failure.
1011  */
1012 static int tegra_get_cpu_powergate_id(struct tegra_pmc *pmc,
1013 				      unsigned int cpuid)
1014 {
1015 	if (pmc->soc && cpuid < pmc->soc->num_cpu_powergates)
1016 		return pmc->soc->cpu_powergates[cpuid];
1017 
1018 	return -EINVAL;
1019 }
1020 
1021 /**
1022  * tegra_pmc_cpu_is_powered() - check if CPU partition is powered
1023  * @cpuid: CPU partition ID
1024  */
1025 bool tegra_pmc_cpu_is_powered(unsigned int cpuid)
1026 {
1027 	int id;
1028 
1029 	id = tegra_get_cpu_powergate_id(pmc, cpuid);
1030 	if (id < 0)
1031 		return false;
1032 
1033 	return tegra_powergate_is_powered(pmc, id);
1034 }
1035 
1036 /**
1037  * tegra_pmc_cpu_power_on() - power on CPU partition
1038  * @cpuid: CPU partition ID
1039  */
1040 int tegra_pmc_cpu_power_on(unsigned int cpuid)
1041 {
1042 	int id;
1043 
1044 	id = tegra_get_cpu_powergate_id(pmc, cpuid);
1045 	if (id < 0)
1046 		return id;
1047 
1048 	return tegra_powergate_set(pmc, id, true);
1049 }
1050 
1051 /**
1052  * tegra_pmc_cpu_remove_clamping() - remove power clamps for CPU partition
1053  * @cpuid: CPU partition ID
1054  */
1055 int tegra_pmc_cpu_remove_clamping(unsigned int cpuid)
1056 {
1057 	int id;
1058 
1059 	id = tegra_get_cpu_powergate_id(pmc, cpuid);
1060 	if (id < 0)
1061 		return id;
1062 
1063 	return tegra_powergate_remove_clamping(id);
1064 }
1065 
1066 static int tegra_pmc_restart_notify(struct notifier_block *this,
1067 				    unsigned long action, void *data)
1068 {
1069 	const char *cmd = data;
1070 	u32 value;
1071 
1072 	value = tegra_pmc_scratch_readl(pmc, pmc->soc->regs->scratch0);
1073 	value &= ~PMC_SCRATCH0_MODE_MASK;
1074 
1075 	if (cmd) {
1076 		if (strcmp(cmd, "recovery") == 0)
1077 			value |= PMC_SCRATCH0_MODE_RECOVERY;
1078 
1079 		if (strcmp(cmd, "bootloader") == 0)
1080 			value |= PMC_SCRATCH0_MODE_BOOTLOADER;
1081 
1082 		if (strcmp(cmd, "forced-recovery") == 0)
1083 			value |= PMC_SCRATCH0_MODE_RCM;
1084 	}
1085 
1086 	tegra_pmc_scratch_writel(pmc, value, pmc->soc->regs->scratch0);
1087 
1088 	/* reset everything but PMC_SCRATCH0 and PMC_RST_STATUS */
1089 	value = tegra_pmc_readl(pmc, PMC_CNTRL);
1090 	value |= PMC_CNTRL_MAIN_RST;
1091 	tegra_pmc_writel(pmc, value, PMC_CNTRL);
1092 
1093 	return NOTIFY_DONE;
1094 }
1095 
1096 static struct notifier_block tegra_pmc_restart_handler = {
1097 	.notifier_call = tegra_pmc_restart_notify,
1098 	.priority = 128,
1099 };
1100 
1101 static int powergate_show(struct seq_file *s, void *data)
1102 {
1103 	unsigned int i;
1104 	int status;
1105 
1106 	seq_printf(s, " powergate powered\n");
1107 	seq_printf(s, "------------------\n");
1108 
1109 	for (i = 0; i < pmc->soc->num_powergates; i++) {
1110 		status = tegra_powergate_is_powered(pmc, i);
1111 		if (status < 0)
1112 			continue;
1113 
1114 		seq_printf(s, " %9s %7s\n", pmc->soc->powergates[i],
1115 			   status ? "yes" : "no");
1116 	}
1117 
1118 	return 0;
1119 }
1120 
1121 DEFINE_SHOW_ATTRIBUTE(powergate);
1122 
1123 static int tegra_powergate_debugfs_init(void)
1124 {
1125 	pmc->debugfs = debugfs_create_file("powergate", S_IRUGO, NULL, NULL,
1126 					   &powergate_fops);
1127 	if (!pmc->debugfs)
1128 		return -ENOMEM;
1129 
1130 	return 0;
1131 }
1132 
1133 static int tegra_powergate_of_get_clks(struct tegra_powergate *pg,
1134 				       struct device_node *np)
1135 {
1136 	struct clk *clk;
1137 	unsigned int i, count;
1138 	int err;
1139 
1140 	count = of_clk_get_parent_count(np);
1141 	if (count == 0)
1142 		return -ENODEV;
1143 
1144 	pg->clks = kcalloc(count, sizeof(clk), GFP_KERNEL);
1145 	if (!pg->clks)
1146 		return -ENOMEM;
1147 
1148 	pg->clk_rates = kcalloc(count, sizeof(*pg->clk_rates), GFP_KERNEL);
1149 	if (!pg->clk_rates) {
1150 		kfree(pg->clks);
1151 		return -ENOMEM;
1152 	}
1153 
1154 	for (i = 0; i < count; i++) {
1155 		pg->clks[i] = of_clk_get(np, i);
1156 		if (IS_ERR(pg->clks[i])) {
1157 			err = PTR_ERR(pg->clks[i]);
1158 			goto err;
1159 		}
1160 	}
1161 
1162 	pg->num_clks = count;
1163 
1164 	return 0;
1165 
1166 err:
1167 	while (i--)
1168 		clk_put(pg->clks[i]);
1169 
1170 	kfree(pg->clk_rates);
1171 	kfree(pg->clks);
1172 
1173 	return err;
1174 }
1175 
1176 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
1177 					 struct device_node *np, bool off)
1178 {
1179 	struct device *dev = pg->pmc->dev;
1180 	int err;
1181 
1182 	pg->reset = of_reset_control_array_get_exclusive_released(np);
1183 	if (IS_ERR(pg->reset)) {
1184 		err = PTR_ERR(pg->reset);
1185 		dev_err(dev, "failed to get device resets: %d\n", err);
1186 		return err;
1187 	}
1188 
1189 	err = reset_control_acquire(pg->reset);
1190 	if (err < 0) {
1191 		pr_err("failed to acquire resets: %d\n", err);
1192 		goto out;
1193 	}
1194 
1195 	if (off) {
1196 		err = reset_control_assert(pg->reset);
1197 	} else {
1198 		err = reset_control_deassert(pg->reset);
1199 		if (err < 0)
1200 			goto out;
1201 
1202 		reset_control_release(pg->reset);
1203 	}
1204 
1205 out:
1206 	if (err) {
1207 		reset_control_release(pg->reset);
1208 		reset_control_put(pg->reset);
1209 	}
1210 
1211 	return err;
1212 }
1213 
1214 static int tegra_powergate_add(struct tegra_pmc *pmc, struct device_node *np)
1215 {
1216 	struct device *dev = pmc->dev;
1217 	struct tegra_powergate *pg;
1218 	int id, err = 0;
1219 	bool off;
1220 
1221 	pg = kzalloc(sizeof(*pg), GFP_KERNEL);
1222 	if (!pg)
1223 		return -ENOMEM;
1224 
1225 	id = tegra_powergate_lookup(pmc, np->name);
1226 	if (id < 0) {
1227 		dev_err(dev, "powergate lookup failed for %pOFn: %d\n", np, id);
1228 		err = -ENODEV;
1229 		goto free_mem;
1230 	}
1231 
1232 	/*
1233 	 * Clear the bit for this powergate so it cannot be managed
1234 	 * directly via the legacy APIs for controlling powergates.
1235 	 */
1236 	clear_bit(id, pmc->powergates_available);
1237 
1238 	pg->id = id;
1239 	pg->genpd.name = np->name;
1240 	pg->genpd.power_off = tegra_genpd_power_off;
1241 	pg->genpd.power_on = tegra_genpd_power_on;
1242 	pg->pmc = pmc;
1243 
1244 	off = !tegra_powergate_is_powered(pmc, pg->id);
1245 
1246 	err = tegra_powergate_of_get_clks(pg, np);
1247 	if (err < 0) {
1248 		dev_err(dev, "failed to get clocks for %pOFn: %d\n", np, err);
1249 		goto set_available;
1250 	}
1251 
1252 	err = tegra_powergate_of_get_resets(pg, np, off);
1253 	if (err < 0) {
1254 		dev_err(dev, "failed to get resets for %pOFn: %d\n", np, err);
1255 		goto remove_clks;
1256 	}
1257 
1258 	if (!IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS)) {
1259 		if (off)
1260 			WARN_ON(tegra_powergate_power_up(pg, true));
1261 
1262 		goto remove_resets;
1263 	}
1264 
1265 	err = pm_genpd_init(&pg->genpd, NULL, off);
1266 	if (err < 0) {
1267 		dev_err(dev, "failed to initialise PM domain %pOFn: %d\n", np,
1268 		       err);
1269 		goto remove_resets;
1270 	}
1271 
1272 	err = of_genpd_add_provider_simple(np, &pg->genpd);
1273 	if (err < 0) {
1274 		dev_err(dev, "failed to add PM domain provider for %pOFn: %d\n",
1275 			np, err);
1276 		goto remove_genpd;
1277 	}
1278 
1279 	dev_dbg(dev, "added PM domain %s\n", pg->genpd.name);
1280 
1281 	return 0;
1282 
1283 remove_genpd:
1284 	pm_genpd_remove(&pg->genpd);
1285 
1286 remove_resets:
1287 	reset_control_put(pg->reset);
1288 
1289 remove_clks:
1290 	while (pg->num_clks--)
1291 		clk_put(pg->clks[pg->num_clks]);
1292 
1293 	kfree(pg->clks);
1294 
1295 set_available:
1296 	set_bit(id, pmc->powergates_available);
1297 
1298 free_mem:
1299 	kfree(pg);
1300 
1301 	return err;
1302 }
1303 
1304 bool tegra_pmc_core_domain_state_synced(void)
1305 {
1306 	return pmc->core_domain_state_synced;
1307 }
1308 
1309 static int
1310 tegra_pmc_core_pd_set_performance_state(struct generic_pm_domain *genpd,
1311 					unsigned int level)
1312 {
1313 	struct dev_pm_opp *opp;
1314 	int err;
1315 
1316 	opp = dev_pm_opp_find_level_ceil(&genpd->dev, &level);
1317 	if (IS_ERR(opp)) {
1318 		dev_err(&genpd->dev, "failed to find OPP for level %u: %pe\n",
1319 			level, opp);
1320 		return PTR_ERR(opp);
1321 	}
1322 
1323 	mutex_lock(&pmc->powergates_lock);
1324 	err = dev_pm_opp_set_opp(pmc->dev, opp);
1325 	mutex_unlock(&pmc->powergates_lock);
1326 
1327 	dev_pm_opp_put(opp);
1328 
1329 	if (err) {
1330 		dev_err(&genpd->dev, "failed to set voltage to %duV: %d\n",
1331 			level, err);
1332 		return err;
1333 	}
1334 
1335 	return 0;
1336 }
1337 
1338 static unsigned int
1339 tegra_pmc_core_pd_opp_to_performance_state(struct generic_pm_domain *genpd,
1340 					   struct dev_pm_opp *opp)
1341 {
1342 	return dev_pm_opp_get_level(opp);
1343 }
1344 
1345 static int tegra_pmc_core_pd_add(struct tegra_pmc *pmc, struct device_node *np)
1346 {
1347 	struct generic_pm_domain *genpd;
1348 	const char *rname = "core";
1349 	int err;
1350 
1351 	genpd = devm_kzalloc(pmc->dev, sizeof(*genpd), GFP_KERNEL);
1352 	if (!genpd)
1353 		return -ENOMEM;
1354 
1355 	genpd->name = np->name;
1356 	genpd->set_performance_state = tegra_pmc_core_pd_set_performance_state;
1357 	genpd->opp_to_performance_state = tegra_pmc_core_pd_opp_to_performance_state;
1358 
1359 	err = devm_pm_opp_set_regulators(pmc->dev, &rname, 1);
1360 	if (err)
1361 		return dev_err_probe(pmc->dev, err,
1362 				     "failed to set core OPP regulator\n");
1363 
1364 	err = pm_genpd_init(genpd, NULL, false);
1365 	if (err) {
1366 		dev_err(pmc->dev, "failed to init core genpd: %d\n", err);
1367 		return err;
1368 	}
1369 
1370 	err = of_genpd_add_provider_simple(np, genpd);
1371 	if (err) {
1372 		dev_err(pmc->dev, "failed to add core genpd: %d\n", err);
1373 		goto remove_genpd;
1374 	}
1375 
1376 	pmc->core_domain_registered = true;
1377 
1378 	return 0;
1379 
1380 remove_genpd:
1381 	pm_genpd_remove(genpd);
1382 
1383 	return err;
1384 }
1385 
1386 static int tegra_powergate_init(struct tegra_pmc *pmc,
1387 				struct device_node *parent)
1388 {
1389 	struct of_phandle_args child_args, parent_args;
1390 	struct device_node *np, *child;
1391 	int err = 0;
1392 
1393 	/*
1394 	 * Core power domain is the parent of powergate domains, hence it
1395 	 * should be registered first.
1396 	 */
1397 	np = of_get_child_by_name(parent, "core-domain");
1398 	if (np) {
1399 		err = tegra_pmc_core_pd_add(pmc, np);
1400 		of_node_put(np);
1401 		if (err)
1402 			return err;
1403 	}
1404 
1405 	np = of_get_child_by_name(parent, "powergates");
1406 	if (!np)
1407 		return 0;
1408 
1409 	for_each_child_of_node(np, child) {
1410 		err = tegra_powergate_add(pmc, child);
1411 		if (err < 0) {
1412 			of_node_put(child);
1413 			break;
1414 		}
1415 
1416 		if (of_parse_phandle_with_args(child, "power-domains",
1417 					       "#power-domain-cells",
1418 					       0, &parent_args))
1419 			continue;
1420 
1421 		child_args.np = child;
1422 		child_args.args_count = 0;
1423 
1424 		err = of_genpd_add_subdomain(&parent_args, &child_args);
1425 		of_node_put(parent_args.np);
1426 		if (err) {
1427 			of_node_put(child);
1428 			break;
1429 		}
1430 	}
1431 
1432 	of_node_put(np);
1433 
1434 	return err;
1435 }
1436 
1437 static void tegra_powergate_remove(struct generic_pm_domain *genpd)
1438 {
1439 	struct tegra_powergate *pg = to_powergate(genpd);
1440 
1441 	reset_control_put(pg->reset);
1442 
1443 	while (pg->num_clks--)
1444 		clk_put(pg->clks[pg->num_clks]);
1445 
1446 	kfree(pg->clks);
1447 
1448 	set_bit(pg->id, pmc->powergates_available);
1449 
1450 	kfree(pg);
1451 }
1452 
1453 static void tegra_powergate_remove_all(struct device_node *parent)
1454 {
1455 	struct generic_pm_domain *genpd;
1456 	struct device_node *np, *child;
1457 
1458 	np = of_get_child_by_name(parent, "powergates");
1459 	if (!np)
1460 		return;
1461 
1462 	for_each_child_of_node(np, child) {
1463 		of_genpd_del_provider(child);
1464 
1465 		genpd = of_genpd_remove_last(child);
1466 		if (IS_ERR(genpd))
1467 			continue;
1468 
1469 		tegra_powergate_remove(genpd);
1470 	}
1471 
1472 	of_node_put(np);
1473 
1474 	np = of_get_child_by_name(parent, "core-domain");
1475 	if (np) {
1476 		of_genpd_del_provider(np);
1477 		of_genpd_remove_last(np);
1478 	}
1479 }
1480 
1481 static const struct tegra_io_pad_soc *
1482 tegra_io_pad_find(struct tegra_pmc *pmc, enum tegra_io_pad id)
1483 {
1484 	unsigned int i;
1485 
1486 	for (i = 0; i < pmc->soc->num_io_pads; i++)
1487 		if (pmc->soc->io_pads[i].id == id)
1488 			return &pmc->soc->io_pads[i];
1489 
1490 	return NULL;
1491 }
1492 
1493 static int tegra_io_pad_get_dpd_register_bit(struct tegra_pmc *pmc,
1494 					     enum tegra_io_pad id,
1495 					     unsigned long *request,
1496 					     unsigned long *status,
1497 					     u32 *mask)
1498 {
1499 	const struct tegra_io_pad_soc *pad;
1500 
1501 	pad = tegra_io_pad_find(pmc, id);
1502 	if (!pad) {
1503 		dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1504 		return -ENOENT;
1505 	}
1506 
1507 	if (pad->dpd == UINT_MAX)
1508 		return -ENOTSUPP;
1509 
1510 	*mask = BIT(pad->dpd % 32);
1511 
1512 	if (pad->dpd < 32) {
1513 		*status = pmc->soc->regs->dpd_status;
1514 		*request = pmc->soc->regs->dpd_req;
1515 	} else {
1516 		*status = pmc->soc->regs->dpd2_status;
1517 		*request = pmc->soc->regs->dpd2_req;
1518 	}
1519 
1520 	return 0;
1521 }
1522 
1523 static int tegra_io_pad_prepare(struct tegra_pmc *pmc, enum tegra_io_pad id,
1524 				unsigned long *request, unsigned long *status,
1525 				u32 *mask)
1526 {
1527 	unsigned long rate, value;
1528 	int err;
1529 
1530 	err = tegra_io_pad_get_dpd_register_bit(pmc, id, request, status, mask);
1531 	if (err)
1532 		return err;
1533 
1534 	if (pmc->clk) {
1535 		rate = pmc->rate;
1536 		if (!rate) {
1537 			dev_err(pmc->dev, "failed to get clock rate\n");
1538 			return -ENODEV;
1539 		}
1540 
1541 		tegra_pmc_writel(pmc, DPD_SAMPLE_ENABLE, DPD_SAMPLE);
1542 
1543 		/* must be at least 200 ns, in APB (PCLK) clock cycles */
1544 		value = DIV_ROUND_UP(1000000000, rate);
1545 		value = DIV_ROUND_UP(200, value);
1546 		tegra_pmc_writel(pmc, value, SEL_DPD_TIM);
1547 	}
1548 
1549 	return 0;
1550 }
1551 
1552 static int tegra_io_pad_poll(struct tegra_pmc *pmc, unsigned long offset,
1553 			     u32 mask, u32 val, unsigned long timeout)
1554 {
1555 	u32 value;
1556 
1557 	timeout = jiffies + msecs_to_jiffies(timeout);
1558 
1559 	while (time_after(timeout, jiffies)) {
1560 		value = tegra_pmc_readl(pmc, offset);
1561 		if ((value & mask) == val)
1562 			return 0;
1563 
1564 		usleep_range(250, 1000);
1565 	}
1566 
1567 	return -ETIMEDOUT;
1568 }
1569 
1570 static void tegra_io_pad_unprepare(struct tegra_pmc *pmc)
1571 {
1572 	if (pmc->clk)
1573 		tegra_pmc_writel(pmc, DPD_SAMPLE_DISABLE, DPD_SAMPLE);
1574 }
1575 
1576 /**
1577  * tegra_io_pad_power_enable() - enable power to I/O pad
1578  * @id: Tegra I/O pad ID for which to enable power
1579  *
1580  * Returns: 0 on success or a negative error code on failure.
1581  */
1582 int tegra_io_pad_power_enable(enum tegra_io_pad id)
1583 {
1584 	unsigned long request, status;
1585 	u32 mask;
1586 	int err;
1587 
1588 	mutex_lock(&pmc->powergates_lock);
1589 
1590 	err = tegra_io_pad_prepare(pmc, id, &request, &status, &mask);
1591 	if (err < 0) {
1592 		dev_err(pmc->dev, "failed to prepare I/O pad: %d\n", err);
1593 		goto unlock;
1594 	}
1595 
1596 	tegra_pmc_writel(pmc, IO_DPD_REQ_CODE_OFF | mask, request);
1597 
1598 	err = tegra_io_pad_poll(pmc, status, mask, 0, 250);
1599 	if (err < 0) {
1600 		dev_err(pmc->dev, "failed to enable I/O pad: %d\n", err);
1601 		goto unlock;
1602 	}
1603 
1604 	tegra_io_pad_unprepare(pmc);
1605 
1606 unlock:
1607 	mutex_unlock(&pmc->powergates_lock);
1608 	return err;
1609 }
1610 EXPORT_SYMBOL(tegra_io_pad_power_enable);
1611 
1612 /**
1613  * tegra_io_pad_power_disable() - disable power to I/O pad
1614  * @id: Tegra I/O pad ID for which to disable power
1615  *
1616  * Returns: 0 on success or a negative error code on failure.
1617  */
1618 int tegra_io_pad_power_disable(enum tegra_io_pad id)
1619 {
1620 	unsigned long request, status;
1621 	u32 mask;
1622 	int err;
1623 
1624 	mutex_lock(&pmc->powergates_lock);
1625 
1626 	err = tegra_io_pad_prepare(pmc, id, &request, &status, &mask);
1627 	if (err < 0) {
1628 		dev_err(pmc->dev, "failed to prepare I/O pad: %d\n", err);
1629 		goto unlock;
1630 	}
1631 
1632 	tegra_pmc_writel(pmc, IO_DPD_REQ_CODE_ON | mask, request);
1633 
1634 	err = tegra_io_pad_poll(pmc, status, mask, mask, 250);
1635 	if (err < 0) {
1636 		dev_err(pmc->dev, "failed to disable I/O pad: %d\n", err);
1637 		goto unlock;
1638 	}
1639 
1640 	tegra_io_pad_unprepare(pmc);
1641 
1642 unlock:
1643 	mutex_unlock(&pmc->powergates_lock);
1644 	return err;
1645 }
1646 EXPORT_SYMBOL(tegra_io_pad_power_disable);
1647 
1648 static int tegra_io_pad_is_powered(struct tegra_pmc *pmc, enum tegra_io_pad id)
1649 {
1650 	unsigned long request, status;
1651 	u32 mask, value;
1652 	int err;
1653 
1654 	err = tegra_io_pad_get_dpd_register_bit(pmc, id, &request, &status,
1655 						&mask);
1656 	if (err)
1657 		return err;
1658 
1659 	value = tegra_pmc_readl(pmc, status);
1660 
1661 	return !(value & mask);
1662 }
1663 
1664 static int tegra_io_pad_set_voltage(struct tegra_pmc *pmc, enum tegra_io_pad id,
1665 				    int voltage)
1666 {
1667 	const struct tegra_io_pad_soc *pad;
1668 	u32 value;
1669 
1670 	pad = tegra_io_pad_find(pmc, id);
1671 	if (!pad)
1672 		return -ENOENT;
1673 
1674 	if (pad->voltage == UINT_MAX)
1675 		return -ENOTSUPP;
1676 
1677 	mutex_lock(&pmc->powergates_lock);
1678 
1679 	if (pmc->soc->has_impl_33v_pwr) {
1680 		value = tegra_pmc_readl(pmc, PMC_IMPL_E_33V_PWR);
1681 
1682 		if (voltage == TEGRA_IO_PAD_VOLTAGE_1V8)
1683 			value &= ~BIT(pad->voltage);
1684 		else
1685 			value |= BIT(pad->voltage);
1686 
1687 		tegra_pmc_writel(pmc, value, PMC_IMPL_E_33V_PWR);
1688 	} else {
1689 		/* write-enable PMC_PWR_DET_VALUE[pad->voltage] */
1690 		value = tegra_pmc_readl(pmc, PMC_PWR_DET);
1691 		value |= BIT(pad->voltage);
1692 		tegra_pmc_writel(pmc, value, PMC_PWR_DET);
1693 
1694 		/* update I/O voltage */
1695 		value = tegra_pmc_readl(pmc, PMC_PWR_DET_VALUE);
1696 
1697 		if (voltage == TEGRA_IO_PAD_VOLTAGE_1V8)
1698 			value &= ~BIT(pad->voltage);
1699 		else
1700 			value |= BIT(pad->voltage);
1701 
1702 		tegra_pmc_writel(pmc, value, PMC_PWR_DET_VALUE);
1703 	}
1704 
1705 	mutex_unlock(&pmc->powergates_lock);
1706 
1707 	usleep_range(100, 250);
1708 
1709 	return 0;
1710 }
1711 
1712 static int tegra_io_pad_get_voltage(struct tegra_pmc *pmc, enum tegra_io_pad id)
1713 {
1714 	const struct tegra_io_pad_soc *pad;
1715 	u32 value;
1716 
1717 	pad = tegra_io_pad_find(pmc, id);
1718 	if (!pad)
1719 		return -ENOENT;
1720 
1721 	if (pad->voltage == UINT_MAX)
1722 		return -ENOTSUPP;
1723 
1724 	if (pmc->soc->has_impl_33v_pwr)
1725 		value = tegra_pmc_readl(pmc, PMC_IMPL_E_33V_PWR);
1726 	else
1727 		value = tegra_pmc_readl(pmc, PMC_PWR_DET_VALUE);
1728 
1729 	if ((value & BIT(pad->voltage)) == 0)
1730 		return TEGRA_IO_PAD_VOLTAGE_1V8;
1731 
1732 	return TEGRA_IO_PAD_VOLTAGE_3V3;
1733 }
1734 
1735 /**
1736  * tegra_io_rail_power_on() - enable power to I/O rail
1737  * @id: Tegra I/O pad ID for which to enable power
1738  *
1739  * See also: tegra_io_pad_power_enable()
1740  */
1741 int tegra_io_rail_power_on(unsigned int id)
1742 {
1743 	return tegra_io_pad_power_enable(id);
1744 }
1745 EXPORT_SYMBOL(tegra_io_rail_power_on);
1746 
1747 /**
1748  * tegra_io_rail_power_off() - disable power to I/O rail
1749  * @id: Tegra I/O pad ID for which to disable power
1750  *
1751  * See also: tegra_io_pad_power_disable()
1752  */
1753 int tegra_io_rail_power_off(unsigned int id)
1754 {
1755 	return tegra_io_pad_power_disable(id);
1756 }
1757 EXPORT_SYMBOL(tegra_io_rail_power_off);
1758 
1759 #ifdef CONFIG_PM_SLEEP
1760 enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)
1761 {
1762 	return pmc->suspend_mode;
1763 }
1764 
1765 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode)
1766 {
1767 	if (mode < TEGRA_SUSPEND_NONE || mode >= TEGRA_MAX_SUSPEND_MODE)
1768 		return;
1769 
1770 	pmc->suspend_mode = mode;
1771 }
1772 
1773 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode)
1774 {
1775 	unsigned long long rate = 0;
1776 	u64 ticks;
1777 	u32 value;
1778 
1779 	switch (mode) {
1780 	case TEGRA_SUSPEND_LP1:
1781 		rate = 32768;
1782 		break;
1783 
1784 	case TEGRA_SUSPEND_LP2:
1785 		rate = pmc->rate;
1786 		break;
1787 
1788 	default:
1789 		break;
1790 	}
1791 
1792 	if (WARN_ON_ONCE(rate == 0))
1793 		rate = 100000000;
1794 
1795 	ticks = pmc->cpu_good_time * rate + USEC_PER_SEC - 1;
1796 	do_div(ticks, USEC_PER_SEC);
1797 	tegra_pmc_writel(pmc, ticks, PMC_CPUPWRGOOD_TIMER);
1798 
1799 	ticks = pmc->cpu_off_time * rate + USEC_PER_SEC - 1;
1800 	do_div(ticks, USEC_PER_SEC);
1801 	tegra_pmc_writel(pmc, ticks, PMC_CPUPWROFF_TIMER);
1802 
1803 	value = tegra_pmc_readl(pmc, PMC_CNTRL);
1804 	value &= ~PMC_CNTRL_SIDE_EFFECT_LP0;
1805 	value |= PMC_CNTRL_CPU_PWRREQ_OE;
1806 	tegra_pmc_writel(pmc, value, PMC_CNTRL);
1807 }
1808 #endif
1809 
1810 static int tegra_pmc_parse_dt(struct tegra_pmc *pmc, struct device_node *np)
1811 {
1812 	u32 value, values[2];
1813 
1814 	if (of_property_read_u32(np, "nvidia,suspend-mode", &value)) {
1815 	} else {
1816 		switch (value) {
1817 		case 0:
1818 			pmc->suspend_mode = TEGRA_SUSPEND_LP0;
1819 			break;
1820 
1821 		case 1:
1822 			pmc->suspend_mode = TEGRA_SUSPEND_LP1;
1823 			break;
1824 
1825 		case 2:
1826 			pmc->suspend_mode = TEGRA_SUSPEND_LP2;
1827 			break;
1828 
1829 		default:
1830 			pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1831 			break;
1832 		}
1833 	}
1834 
1835 	pmc->suspend_mode = tegra_pm_validate_suspend_mode(pmc->suspend_mode);
1836 
1837 	if (of_property_read_u32(np, "nvidia,cpu-pwr-good-time", &value))
1838 		pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1839 
1840 	pmc->cpu_good_time = value;
1841 
1842 	if (of_property_read_u32(np, "nvidia,cpu-pwr-off-time", &value))
1843 		pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1844 
1845 	pmc->cpu_off_time = value;
1846 
1847 	if (of_property_read_u32_array(np, "nvidia,core-pwr-good-time",
1848 				       values, ARRAY_SIZE(values)))
1849 		pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1850 
1851 	pmc->core_osc_time = values[0];
1852 	pmc->core_pmu_time = values[1];
1853 
1854 	if (of_property_read_u32(np, "nvidia,core-pwr-off-time", &value))
1855 		pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1856 
1857 	pmc->core_off_time = value;
1858 
1859 	pmc->corereq_high = of_property_read_bool(np,
1860 				"nvidia,core-power-req-active-high");
1861 
1862 	pmc->sysclkreq_high = of_property_read_bool(np,
1863 				"nvidia,sys-clock-req-active-high");
1864 
1865 	pmc->combined_req = of_property_read_bool(np,
1866 				"nvidia,combined-power-req");
1867 
1868 	pmc->cpu_pwr_good_en = of_property_read_bool(np,
1869 				"nvidia,cpu-pwr-good-en");
1870 
1871 	if (of_property_read_u32_array(np, "nvidia,lp0-vec", values,
1872 				       ARRAY_SIZE(values)))
1873 		if (pmc->suspend_mode == TEGRA_SUSPEND_LP0)
1874 			pmc->suspend_mode = TEGRA_SUSPEND_LP1;
1875 
1876 	pmc->lp0_vec_phys = values[0];
1877 	pmc->lp0_vec_size = values[1];
1878 
1879 	return 0;
1880 }
1881 
1882 static void tegra_pmc_init(struct tegra_pmc *pmc)
1883 {
1884 	if (pmc->soc->init)
1885 		pmc->soc->init(pmc);
1886 }
1887 
1888 static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
1889 {
1890 	static const char disabled[] = "emergency thermal reset disabled";
1891 	u32 pmu_addr, ctrl_id, reg_addr, reg_data, pinmux;
1892 	struct device *dev = pmc->dev;
1893 	struct device_node *np;
1894 	u32 value, checksum;
1895 
1896 	if (!pmc->soc->has_tsense_reset)
1897 		return;
1898 
1899 	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
1900 	if (!np) {
1901 		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
1902 		return;
1903 	}
1904 
1905 	if (of_property_read_u32(np, "nvidia,i2c-controller-id", &ctrl_id)) {
1906 		dev_err(dev, "I2C controller ID missing, %s.\n", disabled);
1907 		goto out;
1908 	}
1909 
1910 	if (of_property_read_u32(np, "nvidia,bus-addr", &pmu_addr)) {
1911 		dev_err(dev, "nvidia,bus-addr missing, %s.\n", disabled);
1912 		goto out;
1913 	}
1914 
1915 	if (of_property_read_u32(np, "nvidia,reg-addr", &reg_addr)) {
1916 		dev_err(dev, "nvidia,reg-addr missing, %s.\n", disabled);
1917 		goto out;
1918 	}
1919 
1920 	if (of_property_read_u32(np, "nvidia,reg-data", &reg_data)) {
1921 		dev_err(dev, "nvidia,reg-data missing, %s.\n", disabled);
1922 		goto out;
1923 	}
1924 
1925 	if (of_property_read_u32(np, "nvidia,pinmux-id", &pinmux))
1926 		pinmux = 0;
1927 
1928 	value = tegra_pmc_readl(pmc, PMC_SENSOR_CTRL);
1929 	value |= PMC_SENSOR_CTRL_SCRATCH_WRITE;
1930 	tegra_pmc_writel(pmc, value, PMC_SENSOR_CTRL);
1931 
1932 	value = (reg_data << PMC_SCRATCH54_DATA_SHIFT) |
1933 		(reg_addr << PMC_SCRATCH54_ADDR_SHIFT);
1934 	tegra_pmc_writel(pmc, value, PMC_SCRATCH54);
1935 
1936 	value = PMC_SCRATCH55_RESET_TEGRA;
1937 	value |= ctrl_id << PMC_SCRATCH55_CNTRL_ID_SHIFT;
1938 	value |= pinmux << PMC_SCRATCH55_PINMUX_SHIFT;
1939 	value |= pmu_addr << PMC_SCRATCH55_I2CSLV1_SHIFT;
1940 
1941 	/*
1942 	 * Calculate checksum of SCRATCH54, SCRATCH55 fields. Bits 23:16 will
1943 	 * contain the checksum and are currently zero, so they are not added.
1944 	 */
1945 	checksum = reg_addr + reg_data + (value & 0xff) + ((value >> 8) & 0xff)
1946 		+ ((value >> 24) & 0xff);
1947 	checksum &= 0xff;
1948 	checksum = 0x100 - checksum;
1949 
1950 	value |= checksum << PMC_SCRATCH55_CHECKSUM_SHIFT;
1951 
1952 	tegra_pmc_writel(pmc, value, PMC_SCRATCH55);
1953 
1954 	value = tegra_pmc_readl(pmc, PMC_SENSOR_CTRL);
1955 	value |= PMC_SENSOR_CTRL_ENABLE_RST;
1956 	tegra_pmc_writel(pmc, value, PMC_SENSOR_CTRL);
1957 
1958 	dev_info(pmc->dev, "emergency thermal reset enabled\n");
1959 
1960 out:
1961 	of_node_put(np);
1962 }
1963 
1964 static int tegra_io_pad_pinctrl_get_groups_count(struct pinctrl_dev *pctl_dev)
1965 {
1966 	struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
1967 
1968 	return pmc->soc->num_io_pads;
1969 }
1970 
1971 static const char *tegra_io_pad_pinctrl_get_group_name(struct pinctrl_dev *pctl,
1972 						       unsigned int group)
1973 {
1974 	struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl);
1975 
1976 	return pmc->soc->io_pads[group].name;
1977 }
1978 
1979 static int tegra_io_pad_pinctrl_get_group_pins(struct pinctrl_dev *pctl_dev,
1980 					       unsigned int group,
1981 					       const unsigned int **pins,
1982 					       unsigned int *num_pins)
1983 {
1984 	struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
1985 
1986 	*pins = &pmc->soc->io_pads[group].id;
1987 	*num_pins = 1;
1988 
1989 	return 0;
1990 }
1991 
1992 static const struct pinctrl_ops tegra_io_pad_pinctrl_ops = {
1993 	.get_groups_count = tegra_io_pad_pinctrl_get_groups_count,
1994 	.get_group_name = tegra_io_pad_pinctrl_get_group_name,
1995 	.get_group_pins = tegra_io_pad_pinctrl_get_group_pins,
1996 	.dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
1997 	.dt_free_map = pinconf_generic_dt_free_map,
1998 };
1999 
2000 static int tegra_io_pad_pinconf_get(struct pinctrl_dev *pctl_dev,
2001 				    unsigned int pin, unsigned long *config)
2002 {
2003 	enum pin_config_param param = pinconf_to_config_param(*config);
2004 	struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2005 	const struct tegra_io_pad_soc *pad;
2006 	int ret;
2007 	u32 arg;
2008 
2009 	pad = tegra_io_pad_find(pmc, pin);
2010 	if (!pad)
2011 		return -EINVAL;
2012 
2013 	switch (param) {
2014 	case PIN_CONFIG_POWER_SOURCE:
2015 		ret = tegra_io_pad_get_voltage(pmc, pad->id);
2016 		if (ret < 0)
2017 			return ret;
2018 
2019 		arg = ret;
2020 		break;
2021 
2022 	case PIN_CONFIG_MODE_LOW_POWER:
2023 		ret = tegra_io_pad_is_powered(pmc, pad->id);
2024 		if (ret < 0)
2025 			return ret;
2026 
2027 		arg = !ret;
2028 		break;
2029 
2030 	default:
2031 		return -EINVAL;
2032 	}
2033 
2034 	*config = pinconf_to_config_packed(param, arg);
2035 
2036 	return 0;
2037 }
2038 
2039 static int tegra_io_pad_pinconf_set(struct pinctrl_dev *pctl_dev,
2040 				    unsigned int pin, unsigned long *configs,
2041 				    unsigned int num_configs)
2042 {
2043 	struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2044 	const struct tegra_io_pad_soc *pad;
2045 	enum pin_config_param param;
2046 	unsigned int i;
2047 	int err;
2048 	u32 arg;
2049 
2050 	pad = tegra_io_pad_find(pmc, pin);
2051 	if (!pad)
2052 		return -EINVAL;
2053 
2054 	for (i = 0; i < num_configs; ++i) {
2055 		param = pinconf_to_config_param(configs[i]);
2056 		arg = pinconf_to_config_argument(configs[i]);
2057 
2058 		switch (param) {
2059 		case PIN_CONFIG_MODE_LOW_POWER:
2060 			if (arg)
2061 				err = tegra_io_pad_power_disable(pad->id);
2062 			else
2063 				err = tegra_io_pad_power_enable(pad->id);
2064 			if (err)
2065 				return err;
2066 			break;
2067 		case PIN_CONFIG_POWER_SOURCE:
2068 			if (arg != TEGRA_IO_PAD_VOLTAGE_1V8 &&
2069 			    arg != TEGRA_IO_PAD_VOLTAGE_3V3)
2070 				return -EINVAL;
2071 			err = tegra_io_pad_set_voltage(pmc, pad->id, arg);
2072 			if (err)
2073 				return err;
2074 			break;
2075 		default:
2076 			return -EINVAL;
2077 		}
2078 	}
2079 
2080 	return 0;
2081 }
2082 
2083 static const struct pinconf_ops tegra_io_pad_pinconf_ops = {
2084 	.pin_config_get = tegra_io_pad_pinconf_get,
2085 	.pin_config_set = tegra_io_pad_pinconf_set,
2086 	.is_generic = true,
2087 };
2088 
2089 static struct pinctrl_desc tegra_pmc_pctl_desc = {
2090 	.pctlops = &tegra_io_pad_pinctrl_ops,
2091 	.confops = &tegra_io_pad_pinconf_ops,
2092 };
2093 
2094 static int tegra_pmc_pinctrl_init(struct tegra_pmc *pmc)
2095 {
2096 	int err;
2097 
2098 	if (!pmc->soc->num_pin_descs)
2099 		return 0;
2100 
2101 	tegra_pmc_pctl_desc.name = dev_name(pmc->dev);
2102 	tegra_pmc_pctl_desc.pins = pmc->soc->pin_descs;
2103 	tegra_pmc_pctl_desc.npins = pmc->soc->num_pin_descs;
2104 
2105 	pmc->pctl_dev = devm_pinctrl_register(pmc->dev, &tegra_pmc_pctl_desc,
2106 					      pmc);
2107 	if (IS_ERR(pmc->pctl_dev)) {
2108 		err = PTR_ERR(pmc->pctl_dev);
2109 		dev_err(pmc->dev, "failed to register pin controller: %d\n",
2110 			err);
2111 		return err;
2112 	}
2113 
2114 	return 0;
2115 }
2116 
2117 static ssize_t reset_reason_show(struct device *dev,
2118 				 struct device_attribute *attr, char *buf)
2119 {
2120 	u32 value;
2121 
2122 	value = tegra_pmc_readl(pmc, pmc->soc->regs->rst_status);
2123 	value &= pmc->soc->regs->rst_source_mask;
2124 	value >>= pmc->soc->regs->rst_source_shift;
2125 
2126 	if (WARN_ON(value >= pmc->soc->num_reset_sources))
2127 		return sprintf(buf, "%s\n", "UNKNOWN");
2128 
2129 	return sprintf(buf, "%s\n", pmc->soc->reset_sources[value]);
2130 }
2131 
2132 static DEVICE_ATTR_RO(reset_reason);
2133 
2134 static ssize_t reset_level_show(struct device *dev,
2135 				struct device_attribute *attr, char *buf)
2136 {
2137 	u32 value;
2138 
2139 	value = tegra_pmc_readl(pmc, pmc->soc->regs->rst_status);
2140 	value &= pmc->soc->regs->rst_level_mask;
2141 	value >>= pmc->soc->regs->rst_level_shift;
2142 
2143 	if (WARN_ON(value >= pmc->soc->num_reset_levels))
2144 		return sprintf(buf, "%s\n", "UNKNOWN");
2145 
2146 	return sprintf(buf, "%s\n", pmc->soc->reset_levels[value]);
2147 }
2148 
2149 static DEVICE_ATTR_RO(reset_level);
2150 
2151 static void tegra_pmc_reset_sysfs_init(struct tegra_pmc *pmc)
2152 {
2153 	struct device *dev = pmc->dev;
2154 	int err = 0;
2155 
2156 	if (pmc->soc->reset_sources) {
2157 		err = device_create_file(dev, &dev_attr_reset_reason);
2158 		if (err < 0)
2159 			dev_warn(dev,
2160 				 "failed to create attr \"reset_reason\": %d\n",
2161 				 err);
2162 	}
2163 
2164 	if (pmc->soc->reset_levels) {
2165 		err = device_create_file(dev, &dev_attr_reset_level);
2166 		if (err < 0)
2167 			dev_warn(dev,
2168 				 "failed to create attr \"reset_level\": %d\n",
2169 				 err);
2170 	}
2171 }
2172 
2173 static int tegra_pmc_irq_translate(struct irq_domain *domain,
2174 				   struct irq_fwspec *fwspec,
2175 				   unsigned long *hwirq,
2176 				   unsigned int *type)
2177 {
2178 	if (WARN_ON(fwspec->param_count < 2))
2179 		return -EINVAL;
2180 
2181 	*hwirq = fwspec->param[0];
2182 	*type = fwspec->param[1];
2183 
2184 	return 0;
2185 }
2186 
2187 static int tegra_pmc_irq_alloc(struct irq_domain *domain, unsigned int virq,
2188 			       unsigned int num_irqs, void *data)
2189 {
2190 	struct tegra_pmc *pmc = domain->host_data;
2191 	const struct tegra_pmc_soc *soc = pmc->soc;
2192 	struct irq_fwspec *fwspec = data;
2193 	unsigned int i;
2194 	int err = 0;
2195 
2196 	if (WARN_ON(num_irqs > 1))
2197 		return -EINVAL;
2198 
2199 	for (i = 0; i < soc->num_wake_events; i++) {
2200 		const struct tegra_wake_event *event = &soc->wake_events[i];
2201 
2202 		if (fwspec->param_count == 2) {
2203 			struct irq_fwspec spec;
2204 
2205 			if (event->id != fwspec->param[0])
2206 				continue;
2207 
2208 			err = irq_domain_set_hwirq_and_chip(domain, virq,
2209 							    event->id,
2210 							    &pmc->irq, pmc);
2211 			if (err < 0)
2212 				break;
2213 
2214 			spec.fwnode = &pmc->dev->of_node->fwnode;
2215 			spec.param_count = 3;
2216 			spec.param[0] = GIC_SPI;
2217 			spec.param[1] = event->irq;
2218 			spec.param[2] = fwspec->param[1];
2219 
2220 			err = irq_domain_alloc_irqs_parent(domain, virq,
2221 							   num_irqs, &spec);
2222 
2223 			break;
2224 		}
2225 
2226 		if (fwspec->param_count == 3) {
2227 			if (event->gpio.instance != fwspec->param[0] ||
2228 			    event->gpio.pin != fwspec->param[1])
2229 				continue;
2230 
2231 			err = irq_domain_set_hwirq_and_chip(domain, virq,
2232 							    event->id,
2233 							    &pmc->irq, pmc);
2234 
2235 			/* GPIO hierarchies stop at the PMC level */
2236 			if (!err && domain->parent)
2237  				err = irq_domain_disconnect_hierarchy(domain->parent,
2238 								      virq);
2239 			break;
2240 		}
2241 	}
2242 
2243 	/* If there is no wake-up event, there is no PMC mapping */
2244 	if (i == soc->num_wake_events)
2245 		err = irq_domain_disconnect_hierarchy(domain, virq);
2246 
2247 	return err;
2248 }
2249 
2250 static const struct irq_domain_ops tegra_pmc_irq_domain_ops = {
2251 	.translate = tegra_pmc_irq_translate,
2252 	.alloc = tegra_pmc_irq_alloc,
2253 };
2254 
2255 static int tegra210_pmc_irq_set_wake(struct irq_data *data, unsigned int on)
2256 {
2257 	struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2258 	unsigned int offset, bit;
2259 	u32 value;
2260 
2261 	offset = data->hwirq / 32;
2262 	bit = data->hwirq % 32;
2263 
2264 	/* clear wake status */
2265 	tegra_pmc_writel(pmc, 0, PMC_SW_WAKE_STATUS);
2266 	tegra_pmc_writel(pmc, 0, PMC_SW_WAKE2_STATUS);
2267 
2268 	tegra_pmc_writel(pmc, 0, PMC_WAKE_STATUS);
2269 	tegra_pmc_writel(pmc, 0, PMC_WAKE2_STATUS);
2270 
2271 	/* enable PMC wake */
2272 	if (data->hwirq >= 32)
2273 		offset = PMC_WAKE2_MASK;
2274 	else
2275 		offset = PMC_WAKE_MASK;
2276 
2277 	value = tegra_pmc_readl(pmc, offset);
2278 
2279 	if (on)
2280 		value |= BIT(bit);
2281 	else
2282 		value &= ~BIT(bit);
2283 
2284 	tegra_pmc_writel(pmc, value, offset);
2285 
2286 	return 0;
2287 }
2288 
2289 static int tegra210_pmc_irq_set_type(struct irq_data *data, unsigned int type)
2290 {
2291 	struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2292 	unsigned int offset, bit;
2293 	u32 value;
2294 
2295 	offset = data->hwirq / 32;
2296 	bit = data->hwirq % 32;
2297 
2298 	if (data->hwirq >= 32)
2299 		offset = PMC_WAKE2_LEVEL;
2300 	else
2301 		offset = PMC_WAKE_LEVEL;
2302 
2303 	value = tegra_pmc_readl(pmc, offset);
2304 
2305 	switch (type) {
2306 	case IRQ_TYPE_EDGE_RISING:
2307 	case IRQ_TYPE_LEVEL_HIGH:
2308 		value |= BIT(bit);
2309 		break;
2310 
2311 	case IRQ_TYPE_EDGE_FALLING:
2312 	case IRQ_TYPE_LEVEL_LOW:
2313 		value &= ~BIT(bit);
2314 		break;
2315 
2316 	case IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING:
2317 		value ^= BIT(bit);
2318 		break;
2319 
2320 	default:
2321 		return -EINVAL;
2322 	}
2323 
2324 	tegra_pmc_writel(pmc, value, offset);
2325 
2326 	return 0;
2327 }
2328 
2329 static int tegra186_pmc_irq_set_wake(struct irq_data *data, unsigned int on)
2330 {
2331 	struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2332 	unsigned int offset, bit;
2333 	u32 value;
2334 
2335 	offset = data->hwirq / 32;
2336 	bit = data->hwirq % 32;
2337 
2338 	/* clear wake status */
2339 	writel(0x1, pmc->wake + WAKE_AOWAKE_STATUS_W(data->hwirq));
2340 
2341 	/* route wake to tier 2 */
2342 	value = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(offset));
2343 
2344 	if (!on)
2345 		value &= ~(1 << bit);
2346 	else
2347 		value |= 1 << bit;
2348 
2349 	writel(value, pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(offset));
2350 
2351 	/* enable wakeup event */
2352 	writel(!!on, pmc->wake + WAKE_AOWAKE_MASK_W(data->hwirq));
2353 
2354 	return 0;
2355 }
2356 
2357 static int tegra186_pmc_irq_set_type(struct irq_data *data, unsigned int type)
2358 {
2359 	struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2360 	u32 value;
2361 
2362 	value = readl(pmc->wake + WAKE_AOWAKE_CNTRL(data->hwirq));
2363 
2364 	switch (type) {
2365 	case IRQ_TYPE_EDGE_RISING:
2366 	case IRQ_TYPE_LEVEL_HIGH:
2367 		value |= WAKE_AOWAKE_CNTRL_LEVEL;
2368 		break;
2369 
2370 	case IRQ_TYPE_EDGE_FALLING:
2371 	case IRQ_TYPE_LEVEL_LOW:
2372 		value &= ~WAKE_AOWAKE_CNTRL_LEVEL;
2373 		break;
2374 
2375 	case IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING:
2376 		value ^= WAKE_AOWAKE_CNTRL_LEVEL;
2377 		break;
2378 
2379 	default:
2380 		return -EINVAL;
2381 	}
2382 
2383 	writel(value, pmc->wake + WAKE_AOWAKE_CNTRL(data->hwirq));
2384 
2385 	return 0;
2386 }
2387 
2388 static void tegra_irq_mask_parent(struct irq_data *data)
2389 {
2390 	if (data->parent_data)
2391 		irq_chip_mask_parent(data);
2392 }
2393 
2394 static void tegra_irq_unmask_parent(struct irq_data *data)
2395 {
2396 	if (data->parent_data)
2397 		irq_chip_unmask_parent(data);
2398 }
2399 
2400 static void tegra_irq_eoi_parent(struct irq_data *data)
2401 {
2402 	if (data->parent_data)
2403 		irq_chip_eoi_parent(data);
2404 }
2405 
2406 static int tegra_irq_set_affinity_parent(struct irq_data *data,
2407 					 const struct cpumask *dest,
2408 					 bool force)
2409 {
2410 	if (data->parent_data)
2411 		return irq_chip_set_affinity_parent(data, dest, force);
2412 
2413 	return -EINVAL;
2414 }
2415 
2416 static int tegra_pmc_irq_init(struct tegra_pmc *pmc)
2417 {
2418 	struct irq_domain *parent = NULL;
2419 	struct device_node *np;
2420 
2421 	np = of_irq_find_parent(pmc->dev->of_node);
2422 	if (np) {
2423 		parent = irq_find_host(np);
2424 		of_node_put(np);
2425 	}
2426 
2427 	if (!parent)
2428 		return 0;
2429 
2430 	pmc->irq.name = dev_name(pmc->dev);
2431 	pmc->irq.irq_mask = tegra_irq_mask_parent;
2432 	pmc->irq.irq_unmask = tegra_irq_unmask_parent;
2433 	pmc->irq.irq_eoi = tegra_irq_eoi_parent;
2434 	pmc->irq.irq_set_affinity = tegra_irq_set_affinity_parent;
2435 	pmc->irq.irq_set_type = pmc->soc->irq_set_type;
2436 	pmc->irq.irq_set_wake = pmc->soc->irq_set_wake;
2437 
2438 	pmc->domain = irq_domain_add_hierarchy(parent, 0, 96, pmc->dev->of_node,
2439 					       &tegra_pmc_irq_domain_ops, pmc);
2440 	if (!pmc->domain) {
2441 		dev_err(pmc->dev, "failed to allocate domain\n");
2442 		return -ENOMEM;
2443 	}
2444 
2445 	return 0;
2446 }
2447 
2448 static int tegra_pmc_clk_notify_cb(struct notifier_block *nb,
2449 				   unsigned long action, void *ptr)
2450 {
2451 	struct tegra_pmc *pmc = container_of(nb, struct tegra_pmc, clk_nb);
2452 	struct clk_notifier_data *data = ptr;
2453 
2454 	switch (action) {
2455 	case PRE_RATE_CHANGE:
2456 		mutex_lock(&pmc->powergates_lock);
2457 		break;
2458 
2459 	case POST_RATE_CHANGE:
2460 		pmc->rate = data->new_rate;
2461 		fallthrough;
2462 
2463 	case ABORT_RATE_CHANGE:
2464 		mutex_unlock(&pmc->powergates_lock);
2465 		break;
2466 
2467 	default:
2468 		WARN_ON_ONCE(1);
2469 		return notifier_from_errno(-EINVAL);
2470 	}
2471 
2472 	return NOTIFY_OK;
2473 }
2474 
2475 static void pmc_clk_fence_udelay(u32 offset)
2476 {
2477 	tegra_pmc_readl(pmc, offset);
2478 	/* pmc clk propagation delay 2 us */
2479 	udelay(2);
2480 }
2481 
2482 static u8 pmc_clk_mux_get_parent(struct clk_hw *hw)
2483 {
2484 	struct pmc_clk *clk = to_pmc_clk(hw);
2485 	u32 val;
2486 
2487 	val = tegra_pmc_readl(pmc, clk->offs) >> clk->mux_shift;
2488 	val &= PMC_CLK_OUT_MUX_MASK;
2489 
2490 	return val;
2491 }
2492 
2493 static int pmc_clk_mux_set_parent(struct clk_hw *hw, u8 index)
2494 {
2495 	struct pmc_clk *clk = to_pmc_clk(hw);
2496 	u32 val;
2497 
2498 	val = tegra_pmc_readl(pmc, clk->offs);
2499 	val &= ~(PMC_CLK_OUT_MUX_MASK << clk->mux_shift);
2500 	val |= index << clk->mux_shift;
2501 	tegra_pmc_writel(pmc, val, clk->offs);
2502 	pmc_clk_fence_udelay(clk->offs);
2503 
2504 	return 0;
2505 }
2506 
2507 static int pmc_clk_is_enabled(struct clk_hw *hw)
2508 {
2509 	struct pmc_clk *clk = to_pmc_clk(hw);
2510 	u32 val;
2511 
2512 	val = tegra_pmc_readl(pmc, clk->offs) & BIT(clk->force_en_shift);
2513 
2514 	return val ? 1 : 0;
2515 }
2516 
2517 static void pmc_clk_set_state(unsigned long offs, u32 shift, int state)
2518 {
2519 	u32 val;
2520 
2521 	val = tegra_pmc_readl(pmc, offs);
2522 	val = state ? (val | BIT(shift)) : (val & ~BIT(shift));
2523 	tegra_pmc_writel(pmc, val, offs);
2524 	pmc_clk_fence_udelay(offs);
2525 }
2526 
2527 static int pmc_clk_enable(struct clk_hw *hw)
2528 {
2529 	struct pmc_clk *clk = to_pmc_clk(hw);
2530 
2531 	pmc_clk_set_state(clk->offs, clk->force_en_shift, 1);
2532 
2533 	return 0;
2534 }
2535 
2536 static void pmc_clk_disable(struct clk_hw *hw)
2537 {
2538 	struct pmc_clk *clk = to_pmc_clk(hw);
2539 
2540 	pmc_clk_set_state(clk->offs, clk->force_en_shift, 0);
2541 }
2542 
2543 static const struct clk_ops pmc_clk_ops = {
2544 	.get_parent = pmc_clk_mux_get_parent,
2545 	.set_parent = pmc_clk_mux_set_parent,
2546 	.determine_rate = __clk_mux_determine_rate,
2547 	.is_enabled = pmc_clk_is_enabled,
2548 	.enable = pmc_clk_enable,
2549 	.disable = pmc_clk_disable,
2550 };
2551 
2552 static struct clk *
2553 tegra_pmc_clk_out_register(struct tegra_pmc *pmc,
2554 			   const struct pmc_clk_init_data *data,
2555 			   unsigned long offset)
2556 {
2557 	struct clk_init_data init;
2558 	struct pmc_clk *pmc_clk;
2559 
2560 	pmc_clk = devm_kzalloc(pmc->dev, sizeof(*pmc_clk), GFP_KERNEL);
2561 	if (!pmc_clk)
2562 		return ERR_PTR(-ENOMEM);
2563 
2564 	init.name = data->name;
2565 	init.ops = &pmc_clk_ops;
2566 	init.parent_names = data->parents;
2567 	init.num_parents = data->num_parents;
2568 	init.flags = CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT |
2569 		     CLK_SET_PARENT_GATE;
2570 
2571 	pmc_clk->hw.init = &init;
2572 	pmc_clk->offs = offset;
2573 	pmc_clk->mux_shift = data->mux_shift;
2574 	pmc_clk->force_en_shift = data->force_en_shift;
2575 
2576 	return clk_register(NULL, &pmc_clk->hw);
2577 }
2578 
2579 static int pmc_clk_gate_is_enabled(struct clk_hw *hw)
2580 {
2581 	struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2582 
2583 	return tegra_pmc_readl(pmc, gate->offs) & BIT(gate->shift) ? 1 : 0;
2584 }
2585 
2586 static int pmc_clk_gate_enable(struct clk_hw *hw)
2587 {
2588 	struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2589 
2590 	pmc_clk_set_state(gate->offs, gate->shift, 1);
2591 
2592 	return 0;
2593 }
2594 
2595 static void pmc_clk_gate_disable(struct clk_hw *hw)
2596 {
2597 	struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2598 
2599 	pmc_clk_set_state(gate->offs, gate->shift, 0);
2600 }
2601 
2602 static const struct clk_ops pmc_clk_gate_ops = {
2603 	.is_enabled = pmc_clk_gate_is_enabled,
2604 	.enable = pmc_clk_gate_enable,
2605 	.disable = pmc_clk_gate_disable,
2606 };
2607 
2608 static struct clk *
2609 tegra_pmc_clk_gate_register(struct tegra_pmc *pmc, const char *name,
2610 			    const char *parent_name, unsigned long offset,
2611 			    u32 shift)
2612 {
2613 	struct clk_init_data init;
2614 	struct pmc_clk_gate *gate;
2615 
2616 	gate = devm_kzalloc(pmc->dev, sizeof(*gate), GFP_KERNEL);
2617 	if (!gate)
2618 		return ERR_PTR(-ENOMEM);
2619 
2620 	init.name = name;
2621 	init.ops = &pmc_clk_gate_ops;
2622 	init.parent_names = &parent_name;
2623 	init.num_parents = 1;
2624 	init.flags = 0;
2625 
2626 	gate->hw.init = &init;
2627 	gate->offs = offset;
2628 	gate->shift = shift;
2629 
2630 	return clk_register(NULL, &gate->hw);
2631 }
2632 
2633 static void tegra_pmc_clock_register(struct tegra_pmc *pmc,
2634 				     struct device_node *np)
2635 {
2636 	struct clk *clk;
2637 	struct clk_onecell_data *clk_data;
2638 	unsigned int num_clks;
2639 	int i, err;
2640 
2641 	num_clks = pmc->soc->num_pmc_clks;
2642 	if (pmc->soc->has_blink_output)
2643 		num_clks += 1;
2644 
2645 	if (!num_clks)
2646 		return;
2647 
2648 	clk_data = devm_kmalloc(pmc->dev, sizeof(*clk_data), GFP_KERNEL);
2649 	if (!clk_data)
2650 		return;
2651 
2652 	clk_data->clks = devm_kcalloc(pmc->dev, TEGRA_PMC_CLK_MAX,
2653 				      sizeof(*clk_data->clks), GFP_KERNEL);
2654 	if (!clk_data->clks)
2655 		return;
2656 
2657 	clk_data->clk_num = TEGRA_PMC_CLK_MAX;
2658 
2659 	for (i = 0; i < TEGRA_PMC_CLK_MAX; i++)
2660 		clk_data->clks[i] = ERR_PTR(-ENOENT);
2661 
2662 	for (i = 0; i < pmc->soc->num_pmc_clks; i++) {
2663 		const struct pmc_clk_init_data *data;
2664 
2665 		data = pmc->soc->pmc_clks_data + i;
2666 
2667 		clk = tegra_pmc_clk_out_register(pmc, data, PMC_CLK_OUT_CNTRL);
2668 		if (IS_ERR(clk)) {
2669 			dev_warn(pmc->dev, "unable to register clock %s: %d\n",
2670 				 data->name, PTR_ERR_OR_ZERO(clk));
2671 			return;
2672 		}
2673 
2674 		err = clk_register_clkdev(clk, data->name, NULL);
2675 		if (err) {
2676 			dev_warn(pmc->dev,
2677 				 "unable to register %s clock lookup: %d\n",
2678 				 data->name, err);
2679 			return;
2680 		}
2681 
2682 		clk_data->clks[data->clk_id] = clk;
2683 	}
2684 
2685 	if (pmc->soc->has_blink_output) {
2686 		tegra_pmc_writel(pmc, 0x0, PMC_BLINK_TIMER);
2687 		clk = tegra_pmc_clk_gate_register(pmc,
2688 						  "pmc_blink_override",
2689 						  "clk_32k",
2690 						  PMC_DPD_PADS_ORIDE,
2691 						  PMC_DPD_PADS_ORIDE_BLINK);
2692 		if (IS_ERR(clk)) {
2693 			dev_warn(pmc->dev,
2694 				 "unable to register pmc_blink_override: %d\n",
2695 				 PTR_ERR_OR_ZERO(clk));
2696 			return;
2697 		}
2698 
2699 		clk = tegra_pmc_clk_gate_register(pmc, "pmc_blink",
2700 						  "pmc_blink_override",
2701 						  PMC_CNTRL,
2702 						  PMC_CNTRL_BLINK_EN);
2703 		if (IS_ERR(clk)) {
2704 			dev_warn(pmc->dev,
2705 				 "unable to register pmc_blink: %d\n",
2706 				 PTR_ERR_OR_ZERO(clk));
2707 			return;
2708 		}
2709 
2710 		err = clk_register_clkdev(clk, "pmc_blink", NULL);
2711 		if (err) {
2712 			dev_warn(pmc->dev,
2713 				 "unable to register pmc_blink lookup: %d\n",
2714 				 err);
2715 			return;
2716 		}
2717 
2718 		clk_data->clks[TEGRA_PMC_CLK_BLINK] = clk;
2719 	}
2720 
2721 	err = of_clk_add_provider(np, of_clk_src_onecell_get, clk_data);
2722 	if (err)
2723 		dev_warn(pmc->dev, "failed to add pmc clock provider: %d\n",
2724 			 err);
2725 }
2726 
2727 static const struct regmap_range pmc_usb_sleepwalk_ranges[] = {
2728 	regmap_reg_range(PMC_USB_DEBOUNCE_DEL, PMC_USB_AO),
2729 	regmap_reg_range(PMC_UTMIP_UHSIC_TRIGGERS, PMC_UTMIP_UHSIC_SAVED_STATE),
2730 	regmap_reg_range(PMC_UTMIP_TERM_PAD_CFG, PMC_UTMIP_UHSIC_FAKE),
2731 	regmap_reg_range(PMC_UTMIP_UHSIC_LINE_WAKEUP, PMC_UTMIP_UHSIC_LINE_WAKEUP),
2732 	regmap_reg_range(PMC_UTMIP_BIAS_MASTER_CNTRL, PMC_UTMIP_MASTER_CONFIG),
2733 	regmap_reg_range(PMC_UTMIP_UHSIC2_TRIGGERS, PMC_UTMIP_MASTER2_CONFIG),
2734 	regmap_reg_range(PMC_UTMIP_PAD_CFG0, PMC_UTMIP_UHSIC_SLEEP_CFG1),
2735 	regmap_reg_range(PMC_UTMIP_SLEEPWALK_P3, PMC_UTMIP_SLEEPWALK_P3),
2736 };
2737 
2738 static const struct regmap_access_table pmc_usb_sleepwalk_table = {
2739 	.yes_ranges = pmc_usb_sleepwalk_ranges,
2740 	.n_yes_ranges = ARRAY_SIZE(pmc_usb_sleepwalk_ranges),
2741 };
2742 
2743 static int tegra_pmc_regmap_readl(void *context, unsigned int offset, unsigned int *value)
2744 {
2745 	struct tegra_pmc *pmc = context;
2746 
2747 	*value = tegra_pmc_readl(pmc, offset);
2748 	return 0;
2749 }
2750 
2751 static int tegra_pmc_regmap_writel(void *context, unsigned int offset, unsigned int value)
2752 {
2753 	struct tegra_pmc *pmc = context;
2754 
2755 	tegra_pmc_writel(pmc, value, offset);
2756 	return 0;
2757 }
2758 
2759 static const struct regmap_config usb_sleepwalk_regmap_config = {
2760 	.name = "usb_sleepwalk",
2761 	.reg_bits = 32,
2762 	.val_bits = 32,
2763 	.reg_stride = 4,
2764 	.fast_io = true,
2765 	.rd_table = &pmc_usb_sleepwalk_table,
2766 	.wr_table = &pmc_usb_sleepwalk_table,
2767 	.reg_read = tegra_pmc_regmap_readl,
2768 	.reg_write = tegra_pmc_regmap_writel,
2769 };
2770 
2771 static int tegra_pmc_regmap_init(struct tegra_pmc *pmc)
2772 {
2773 	struct regmap *regmap;
2774 	int err;
2775 
2776 	if (pmc->soc->has_usb_sleepwalk) {
2777 		regmap = devm_regmap_init(pmc->dev, NULL, pmc, &usb_sleepwalk_regmap_config);
2778 		if (IS_ERR(regmap)) {
2779 			err = PTR_ERR(regmap);
2780 			dev_err(pmc->dev, "failed to allocate register map (%d)\n", err);
2781 			return err;
2782 		}
2783 	}
2784 
2785 	return 0;
2786 }
2787 
2788 static int tegra_pmc_probe(struct platform_device *pdev)
2789 {
2790 	void __iomem *base;
2791 	struct resource *res;
2792 	int err;
2793 
2794 	/*
2795 	 * Early initialisation should have configured an initial
2796 	 * register mapping and setup the soc data pointer. If these
2797 	 * are not valid then something went badly wrong!
2798 	 */
2799 	if (WARN_ON(!pmc->base || !pmc->soc))
2800 		return -ENODEV;
2801 
2802 	err = tegra_pmc_parse_dt(pmc, pdev->dev.of_node);
2803 	if (err < 0)
2804 		return err;
2805 
2806 	/* take over the memory region from the early initialization */
2807 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2808 	base = devm_ioremap_resource(&pdev->dev, res);
2809 	if (IS_ERR(base))
2810 		return PTR_ERR(base);
2811 
2812 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "wake");
2813 	if (res) {
2814 		pmc->wake = devm_ioremap_resource(&pdev->dev, res);
2815 		if (IS_ERR(pmc->wake))
2816 			return PTR_ERR(pmc->wake);
2817 	} else {
2818 		pmc->wake = base;
2819 	}
2820 
2821 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "aotag");
2822 	if (res) {
2823 		pmc->aotag = devm_ioremap_resource(&pdev->dev, res);
2824 		if (IS_ERR(pmc->aotag))
2825 			return PTR_ERR(pmc->aotag);
2826 	} else {
2827 		pmc->aotag = base;
2828 	}
2829 
2830 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "scratch");
2831 	if (res) {
2832 		pmc->scratch = devm_ioremap_resource(&pdev->dev, res);
2833 		if (IS_ERR(pmc->scratch))
2834 			return PTR_ERR(pmc->scratch);
2835 	} else {
2836 		pmc->scratch = base;
2837 	}
2838 
2839 	pmc->clk = devm_clk_get(&pdev->dev, "pclk");
2840 	if (IS_ERR(pmc->clk)) {
2841 		err = PTR_ERR(pmc->clk);
2842 
2843 		if (err != -ENOENT) {
2844 			dev_err(&pdev->dev, "failed to get pclk: %d\n", err);
2845 			return err;
2846 		}
2847 
2848 		pmc->clk = NULL;
2849 	}
2850 
2851 	/*
2852 	 * PCLK clock rate can't be retrieved using CLK API because it
2853 	 * causes lockup if CPU enters LP2 idle state from some other
2854 	 * CLK notifier, hence we're caching the rate's value locally.
2855 	 */
2856 	if (pmc->clk) {
2857 		pmc->clk_nb.notifier_call = tegra_pmc_clk_notify_cb;
2858 		err = clk_notifier_register(pmc->clk, &pmc->clk_nb);
2859 		if (err) {
2860 			dev_err(&pdev->dev,
2861 				"failed to register clk notifier\n");
2862 			return err;
2863 		}
2864 
2865 		pmc->rate = clk_get_rate(pmc->clk);
2866 	}
2867 
2868 	pmc->dev = &pdev->dev;
2869 
2870 	tegra_pmc_init(pmc);
2871 
2872 	tegra_pmc_init_tsense_reset(pmc);
2873 
2874 	tegra_pmc_reset_sysfs_init(pmc);
2875 
2876 	if (IS_ENABLED(CONFIG_DEBUG_FS)) {
2877 		err = tegra_powergate_debugfs_init();
2878 		if (err < 0)
2879 			goto cleanup_sysfs;
2880 	}
2881 
2882 	err = register_restart_handler(&tegra_pmc_restart_handler);
2883 	if (err) {
2884 		dev_err(&pdev->dev, "unable to register restart handler, %d\n",
2885 			err);
2886 		goto cleanup_debugfs;
2887 	}
2888 
2889 	err = tegra_pmc_pinctrl_init(pmc);
2890 	if (err)
2891 		goto cleanup_restart_handler;
2892 
2893 	err = tegra_pmc_regmap_init(pmc);
2894 	if (err < 0)
2895 		goto cleanup_restart_handler;
2896 
2897 	err = tegra_powergate_init(pmc, pdev->dev.of_node);
2898 	if (err < 0)
2899 		goto cleanup_powergates;
2900 
2901 	err = tegra_pmc_irq_init(pmc);
2902 	if (err < 0)
2903 		goto cleanup_powergates;
2904 
2905 	mutex_lock(&pmc->powergates_lock);
2906 	iounmap(pmc->base);
2907 	pmc->base = base;
2908 	mutex_unlock(&pmc->powergates_lock);
2909 
2910 	tegra_pmc_clock_register(pmc, pdev->dev.of_node);
2911 	platform_set_drvdata(pdev, pmc);
2912 
2913 	return 0;
2914 
2915 cleanup_powergates:
2916 	tegra_powergate_remove_all(pdev->dev.of_node);
2917 cleanup_restart_handler:
2918 	unregister_restart_handler(&tegra_pmc_restart_handler);
2919 cleanup_debugfs:
2920 	debugfs_remove(pmc->debugfs);
2921 cleanup_sysfs:
2922 	device_remove_file(&pdev->dev, &dev_attr_reset_reason);
2923 	device_remove_file(&pdev->dev, &dev_attr_reset_level);
2924 	clk_notifier_unregister(pmc->clk, &pmc->clk_nb);
2925 
2926 	return err;
2927 }
2928 
2929 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
2930 static int tegra_pmc_suspend(struct device *dev)
2931 {
2932 	struct tegra_pmc *pmc = dev_get_drvdata(dev);
2933 
2934 	tegra_pmc_writel(pmc, virt_to_phys(tegra_resume), PMC_SCRATCH41);
2935 
2936 	return 0;
2937 }
2938 
2939 static int tegra_pmc_resume(struct device *dev)
2940 {
2941 	struct tegra_pmc *pmc = dev_get_drvdata(dev);
2942 
2943 	tegra_pmc_writel(pmc, 0x0, PMC_SCRATCH41);
2944 
2945 	return 0;
2946 }
2947 
2948 static SIMPLE_DEV_PM_OPS(tegra_pmc_pm_ops, tegra_pmc_suspend, tegra_pmc_resume);
2949 
2950 #endif
2951 
2952 static const char * const tegra20_powergates[] = {
2953 	[TEGRA_POWERGATE_CPU] = "cpu",
2954 	[TEGRA_POWERGATE_3D] = "3d",
2955 	[TEGRA_POWERGATE_VENC] = "venc",
2956 	[TEGRA_POWERGATE_VDEC] = "vdec",
2957 	[TEGRA_POWERGATE_PCIE] = "pcie",
2958 	[TEGRA_POWERGATE_L2] = "l2",
2959 	[TEGRA_POWERGATE_MPE] = "mpe",
2960 };
2961 
2962 static const struct tegra_pmc_regs tegra20_pmc_regs = {
2963 	.scratch0 = 0x50,
2964 	.dpd_req = 0x1b8,
2965 	.dpd_status = 0x1bc,
2966 	.dpd2_req = 0x1c0,
2967 	.dpd2_status = 0x1c4,
2968 	.rst_status = 0x1b4,
2969 	.rst_source_shift = 0x0,
2970 	.rst_source_mask = 0x7,
2971 	.rst_level_shift = 0x0,
2972 	.rst_level_mask = 0x0,
2973 };
2974 
2975 static void tegra20_pmc_init(struct tegra_pmc *pmc)
2976 {
2977 	u32 value, osc, pmu, off;
2978 
2979 	/* Always enable CPU power request */
2980 	value = tegra_pmc_readl(pmc, PMC_CNTRL);
2981 	value |= PMC_CNTRL_CPU_PWRREQ_OE;
2982 	tegra_pmc_writel(pmc, value, PMC_CNTRL);
2983 
2984 	value = tegra_pmc_readl(pmc, PMC_CNTRL);
2985 
2986 	if (pmc->sysclkreq_high)
2987 		value &= ~PMC_CNTRL_SYSCLK_POLARITY;
2988 	else
2989 		value |= PMC_CNTRL_SYSCLK_POLARITY;
2990 
2991 	if (pmc->corereq_high)
2992 		value &= ~PMC_CNTRL_PWRREQ_POLARITY;
2993 	else
2994 		value |= PMC_CNTRL_PWRREQ_POLARITY;
2995 
2996 	/* configure the output polarity while the request is tristated */
2997 	tegra_pmc_writel(pmc, value, PMC_CNTRL);
2998 
2999 	/* now enable the request */
3000 	value = tegra_pmc_readl(pmc, PMC_CNTRL);
3001 	value |= PMC_CNTRL_SYSCLK_OE;
3002 	tegra_pmc_writel(pmc, value, PMC_CNTRL);
3003 
3004 	/* program core timings which are applicable only for suspend state */
3005 	if (pmc->suspend_mode != TEGRA_SUSPEND_NONE) {
3006 		osc = DIV_ROUND_UP(pmc->core_osc_time * 8192, 1000000);
3007 		pmu = DIV_ROUND_UP(pmc->core_pmu_time * 32768, 1000000);
3008 		off = DIV_ROUND_UP(pmc->core_off_time * 32768, 1000000);
3009 		tegra_pmc_writel(pmc, ((osc << 8) & 0xff00) | (pmu & 0xff),
3010 				 PMC_COREPWRGOOD_TIMER);
3011 		tegra_pmc_writel(pmc, off, PMC_COREPWROFF_TIMER);
3012 	}
3013 }
3014 
3015 static void tegra20_pmc_setup_irq_polarity(struct tegra_pmc *pmc,
3016 					   struct device_node *np,
3017 					   bool invert)
3018 {
3019 	u32 value;
3020 
3021 	value = tegra_pmc_readl(pmc, PMC_CNTRL);
3022 
3023 	if (invert)
3024 		value |= PMC_CNTRL_INTR_POLARITY;
3025 	else
3026 		value &= ~PMC_CNTRL_INTR_POLARITY;
3027 
3028 	tegra_pmc_writel(pmc, value, PMC_CNTRL);
3029 }
3030 
3031 static const struct tegra_pmc_soc tegra20_pmc_soc = {
3032 	.num_powergates = ARRAY_SIZE(tegra20_powergates),
3033 	.powergates = tegra20_powergates,
3034 	.num_cpu_powergates = 0,
3035 	.cpu_powergates = NULL,
3036 	.has_tsense_reset = false,
3037 	.has_gpu_clamps = false,
3038 	.needs_mbist_war = false,
3039 	.has_impl_33v_pwr = false,
3040 	.maybe_tz_only = false,
3041 	.num_io_pads = 0,
3042 	.io_pads = NULL,
3043 	.num_pin_descs = 0,
3044 	.pin_descs = NULL,
3045 	.regs = &tegra20_pmc_regs,
3046 	.init = tegra20_pmc_init,
3047 	.setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3048 	.powergate_set = tegra20_powergate_set,
3049 	.reset_sources = NULL,
3050 	.num_reset_sources = 0,
3051 	.reset_levels = NULL,
3052 	.num_reset_levels = 0,
3053 	.pmc_clks_data = NULL,
3054 	.num_pmc_clks = 0,
3055 	.has_blink_output = true,
3056 	.has_usb_sleepwalk = false,
3057 };
3058 
3059 static const char * const tegra30_powergates[] = {
3060 	[TEGRA_POWERGATE_CPU] = "cpu0",
3061 	[TEGRA_POWERGATE_3D] = "3d0",
3062 	[TEGRA_POWERGATE_VENC] = "venc",
3063 	[TEGRA_POWERGATE_VDEC] = "vdec",
3064 	[TEGRA_POWERGATE_PCIE] = "pcie",
3065 	[TEGRA_POWERGATE_L2] = "l2",
3066 	[TEGRA_POWERGATE_MPE] = "mpe",
3067 	[TEGRA_POWERGATE_HEG] = "heg",
3068 	[TEGRA_POWERGATE_SATA] = "sata",
3069 	[TEGRA_POWERGATE_CPU1] = "cpu1",
3070 	[TEGRA_POWERGATE_CPU2] = "cpu2",
3071 	[TEGRA_POWERGATE_CPU3] = "cpu3",
3072 	[TEGRA_POWERGATE_CELP] = "celp",
3073 	[TEGRA_POWERGATE_3D1] = "3d1",
3074 };
3075 
3076 static const u8 tegra30_cpu_powergates[] = {
3077 	TEGRA_POWERGATE_CPU,
3078 	TEGRA_POWERGATE_CPU1,
3079 	TEGRA_POWERGATE_CPU2,
3080 	TEGRA_POWERGATE_CPU3,
3081 };
3082 
3083 static const char * const tegra30_reset_sources[] = {
3084 	"POWER_ON_RESET",
3085 	"WATCHDOG",
3086 	"SENSOR",
3087 	"SW_MAIN",
3088 	"LP0"
3089 };
3090 
3091 static const struct tegra_pmc_soc tegra30_pmc_soc = {
3092 	.num_powergates = ARRAY_SIZE(tegra30_powergates),
3093 	.powergates = tegra30_powergates,
3094 	.num_cpu_powergates = ARRAY_SIZE(tegra30_cpu_powergates),
3095 	.cpu_powergates = tegra30_cpu_powergates,
3096 	.has_tsense_reset = true,
3097 	.has_gpu_clamps = false,
3098 	.needs_mbist_war = false,
3099 	.has_impl_33v_pwr = false,
3100 	.maybe_tz_only = false,
3101 	.num_io_pads = 0,
3102 	.io_pads = NULL,
3103 	.num_pin_descs = 0,
3104 	.pin_descs = NULL,
3105 	.regs = &tegra20_pmc_regs,
3106 	.init = tegra20_pmc_init,
3107 	.setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3108 	.powergate_set = tegra20_powergate_set,
3109 	.reset_sources = tegra30_reset_sources,
3110 	.num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3111 	.reset_levels = NULL,
3112 	.num_reset_levels = 0,
3113 	.pmc_clks_data = tegra_pmc_clks_data,
3114 	.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3115 	.has_blink_output = true,
3116 	.has_usb_sleepwalk = false,
3117 };
3118 
3119 static const char * const tegra114_powergates[] = {
3120 	[TEGRA_POWERGATE_CPU] = "crail",
3121 	[TEGRA_POWERGATE_3D] = "3d",
3122 	[TEGRA_POWERGATE_VENC] = "venc",
3123 	[TEGRA_POWERGATE_VDEC] = "vdec",
3124 	[TEGRA_POWERGATE_MPE] = "mpe",
3125 	[TEGRA_POWERGATE_HEG] = "heg",
3126 	[TEGRA_POWERGATE_CPU1] = "cpu1",
3127 	[TEGRA_POWERGATE_CPU2] = "cpu2",
3128 	[TEGRA_POWERGATE_CPU3] = "cpu3",
3129 	[TEGRA_POWERGATE_CELP] = "celp",
3130 	[TEGRA_POWERGATE_CPU0] = "cpu0",
3131 	[TEGRA_POWERGATE_C0NC] = "c0nc",
3132 	[TEGRA_POWERGATE_C1NC] = "c1nc",
3133 	[TEGRA_POWERGATE_DIS] = "dis",
3134 	[TEGRA_POWERGATE_DISB] = "disb",
3135 	[TEGRA_POWERGATE_XUSBA] = "xusba",
3136 	[TEGRA_POWERGATE_XUSBB] = "xusbb",
3137 	[TEGRA_POWERGATE_XUSBC] = "xusbc",
3138 };
3139 
3140 static const u8 tegra114_cpu_powergates[] = {
3141 	TEGRA_POWERGATE_CPU0,
3142 	TEGRA_POWERGATE_CPU1,
3143 	TEGRA_POWERGATE_CPU2,
3144 	TEGRA_POWERGATE_CPU3,
3145 };
3146 
3147 static const struct tegra_pmc_soc tegra114_pmc_soc = {
3148 	.num_powergates = ARRAY_SIZE(tegra114_powergates),
3149 	.powergates = tegra114_powergates,
3150 	.num_cpu_powergates = ARRAY_SIZE(tegra114_cpu_powergates),
3151 	.cpu_powergates = tegra114_cpu_powergates,
3152 	.has_tsense_reset = true,
3153 	.has_gpu_clamps = false,
3154 	.needs_mbist_war = false,
3155 	.has_impl_33v_pwr = false,
3156 	.maybe_tz_only = false,
3157 	.num_io_pads = 0,
3158 	.io_pads = NULL,
3159 	.num_pin_descs = 0,
3160 	.pin_descs = NULL,
3161 	.regs = &tegra20_pmc_regs,
3162 	.init = tegra20_pmc_init,
3163 	.setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3164 	.powergate_set = tegra114_powergate_set,
3165 	.reset_sources = tegra30_reset_sources,
3166 	.num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3167 	.reset_levels = NULL,
3168 	.num_reset_levels = 0,
3169 	.pmc_clks_data = tegra_pmc_clks_data,
3170 	.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3171 	.has_blink_output = true,
3172 	.has_usb_sleepwalk = false,
3173 };
3174 
3175 static const char * const tegra124_powergates[] = {
3176 	[TEGRA_POWERGATE_CPU] = "crail",
3177 	[TEGRA_POWERGATE_3D] = "3d",
3178 	[TEGRA_POWERGATE_VENC] = "venc",
3179 	[TEGRA_POWERGATE_PCIE] = "pcie",
3180 	[TEGRA_POWERGATE_VDEC] = "vdec",
3181 	[TEGRA_POWERGATE_MPE] = "mpe",
3182 	[TEGRA_POWERGATE_HEG] = "heg",
3183 	[TEGRA_POWERGATE_SATA] = "sata",
3184 	[TEGRA_POWERGATE_CPU1] = "cpu1",
3185 	[TEGRA_POWERGATE_CPU2] = "cpu2",
3186 	[TEGRA_POWERGATE_CPU3] = "cpu3",
3187 	[TEGRA_POWERGATE_CELP] = "celp",
3188 	[TEGRA_POWERGATE_CPU0] = "cpu0",
3189 	[TEGRA_POWERGATE_C0NC] = "c0nc",
3190 	[TEGRA_POWERGATE_C1NC] = "c1nc",
3191 	[TEGRA_POWERGATE_SOR] = "sor",
3192 	[TEGRA_POWERGATE_DIS] = "dis",
3193 	[TEGRA_POWERGATE_DISB] = "disb",
3194 	[TEGRA_POWERGATE_XUSBA] = "xusba",
3195 	[TEGRA_POWERGATE_XUSBB] = "xusbb",
3196 	[TEGRA_POWERGATE_XUSBC] = "xusbc",
3197 	[TEGRA_POWERGATE_VIC] = "vic",
3198 	[TEGRA_POWERGATE_IRAM] = "iram",
3199 };
3200 
3201 static const u8 tegra124_cpu_powergates[] = {
3202 	TEGRA_POWERGATE_CPU0,
3203 	TEGRA_POWERGATE_CPU1,
3204 	TEGRA_POWERGATE_CPU2,
3205 	TEGRA_POWERGATE_CPU3,
3206 };
3207 
3208 #define TEGRA_IO_PAD(_id, _dpd, _voltage, _name)	\
3209 	((struct tegra_io_pad_soc) {			\
3210 		.id	= (_id),			\
3211 		.dpd	= (_dpd),			\
3212 		.voltage = (_voltage),			\
3213 		.name	= (_name),			\
3214 	})
3215 
3216 #define TEGRA_IO_PIN_DESC(_id, _dpd, _voltage, _name)	\
3217 	((struct pinctrl_pin_desc) {			\
3218 		.number = (_id),			\
3219 		.name	= (_name)			\
3220 	})
3221 
3222 #define TEGRA124_IO_PAD_TABLE(_pad)                                   \
3223 	/* .id                          .dpd  .voltage  .name */      \
3224 	_pad(TEGRA_IO_PAD_AUDIO,        17,   UINT_MAX, "audio"),     \
3225 	_pad(TEGRA_IO_PAD_BB,           15,   UINT_MAX, "bb"),        \
3226 	_pad(TEGRA_IO_PAD_CAM,          36,   UINT_MAX, "cam"),       \
3227 	_pad(TEGRA_IO_PAD_COMP,         22,   UINT_MAX, "comp"),      \
3228 	_pad(TEGRA_IO_PAD_CSIA,         0,    UINT_MAX, "csia"),      \
3229 	_pad(TEGRA_IO_PAD_CSIB,         1,    UINT_MAX, "csb"),       \
3230 	_pad(TEGRA_IO_PAD_CSIE,         44,   UINT_MAX, "cse"),       \
3231 	_pad(TEGRA_IO_PAD_DSI,          2,    UINT_MAX, "dsi"),       \
3232 	_pad(TEGRA_IO_PAD_DSIB,         39,   UINT_MAX, "dsib"),      \
3233 	_pad(TEGRA_IO_PAD_DSIC,         40,   UINT_MAX, "dsic"),      \
3234 	_pad(TEGRA_IO_PAD_DSID,         41,   UINT_MAX, "dsid"),      \
3235 	_pad(TEGRA_IO_PAD_HDMI,         28,   UINT_MAX, "hdmi"),      \
3236 	_pad(TEGRA_IO_PAD_HSIC,         19,   UINT_MAX, "hsic"),      \
3237 	_pad(TEGRA_IO_PAD_HV,           38,   UINT_MAX, "hv"),        \
3238 	_pad(TEGRA_IO_PAD_LVDS,         57,   UINT_MAX, "lvds"),      \
3239 	_pad(TEGRA_IO_PAD_MIPI_BIAS,    3,    UINT_MAX, "mipi-bias"), \
3240 	_pad(TEGRA_IO_PAD_NAND,         13,   UINT_MAX, "nand"),      \
3241 	_pad(TEGRA_IO_PAD_PEX_BIAS,     4,    UINT_MAX, "pex-bias"),  \
3242 	_pad(TEGRA_IO_PAD_PEX_CLK1,     5,    UINT_MAX, "pex-clk1"),  \
3243 	_pad(TEGRA_IO_PAD_PEX_CLK2,     6,    UINT_MAX, "pex-clk2"),  \
3244 	_pad(TEGRA_IO_PAD_PEX_CNTRL,    32,   UINT_MAX, "pex-cntrl"), \
3245 	_pad(TEGRA_IO_PAD_SDMMC1,       33,   UINT_MAX, "sdmmc1"),    \
3246 	_pad(TEGRA_IO_PAD_SDMMC3,       34,   UINT_MAX, "sdmmc3"),    \
3247 	_pad(TEGRA_IO_PAD_SDMMC4,       35,   UINT_MAX, "sdmmc4"),    \
3248 	_pad(TEGRA_IO_PAD_SYS_DDC,      58,   UINT_MAX, "sys_ddc"),   \
3249 	_pad(TEGRA_IO_PAD_UART,         14,   UINT_MAX, "uart"),      \
3250 	_pad(TEGRA_IO_PAD_USB0,         9,    UINT_MAX, "usb0"),      \
3251 	_pad(TEGRA_IO_PAD_USB1,         10,   UINT_MAX, "usb1"),      \
3252 	_pad(TEGRA_IO_PAD_USB2,         11,   UINT_MAX, "usb2"),      \
3253 	_pad(TEGRA_IO_PAD_USB_BIAS,     12,   UINT_MAX, "usb_bias")
3254 
3255 static const struct tegra_io_pad_soc tegra124_io_pads[] = {
3256 	TEGRA124_IO_PAD_TABLE(TEGRA_IO_PAD)
3257 };
3258 
3259 static const struct pinctrl_pin_desc tegra124_pin_descs[] = {
3260 	TEGRA124_IO_PAD_TABLE(TEGRA_IO_PIN_DESC)
3261 };
3262 
3263 static const struct tegra_pmc_soc tegra124_pmc_soc = {
3264 	.num_powergates = ARRAY_SIZE(tegra124_powergates),
3265 	.powergates = tegra124_powergates,
3266 	.num_cpu_powergates = ARRAY_SIZE(tegra124_cpu_powergates),
3267 	.cpu_powergates = tegra124_cpu_powergates,
3268 	.has_tsense_reset = true,
3269 	.has_gpu_clamps = true,
3270 	.needs_mbist_war = false,
3271 	.has_impl_33v_pwr = false,
3272 	.maybe_tz_only = false,
3273 	.num_io_pads = ARRAY_SIZE(tegra124_io_pads),
3274 	.io_pads = tegra124_io_pads,
3275 	.num_pin_descs = ARRAY_SIZE(tegra124_pin_descs),
3276 	.pin_descs = tegra124_pin_descs,
3277 	.regs = &tegra20_pmc_regs,
3278 	.init = tegra20_pmc_init,
3279 	.setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3280 	.powergate_set = tegra114_powergate_set,
3281 	.reset_sources = tegra30_reset_sources,
3282 	.num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3283 	.reset_levels = NULL,
3284 	.num_reset_levels = 0,
3285 	.pmc_clks_data = tegra_pmc_clks_data,
3286 	.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3287 	.has_blink_output = true,
3288 	.has_usb_sleepwalk = true,
3289 };
3290 
3291 static const char * const tegra210_powergates[] = {
3292 	[TEGRA_POWERGATE_CPU] = "crail",
3293 	[TEGRA_POWERGATE_3D] = "3d",
3294 	[TEGRA_POWERGATE_VENC] = "venc",
3295 	[TEGRA_POWERGATE_PCIE] = "pcie",
3296 	[TEGRA_POWERGATE_MPE] = "mpe",
3297 	[TEGRA_POWERGATE_SATA] = "sata",
3298 	[TEGRA_POWERGATE_CPU1] = "cpu1",
3299 	[TEGRA_POWERGATE_CPU2] = "cpu2",
3300 	[TEGRA_POWERGATE_CPU3] = "cpu3",
3301 	[TEGRA_POWERGATE_CPU0] = "cpu0",
3302 	[TEGRA_POWERGATE_C0NC] = "c0nc",
3303 	[TEGRA_POWERGATE_SOR] = "sor",
3304 	[TEGRA_POWERGATE_DIS] = "dis",
3305 	[TEGRA_POWERGATE_DISB] = "disb",
3306 	[TEGRA_POWERGATE_XUSBA] = "xusba",
3307 	[TEGRA_POWERGATE_XUSBB] = "xusbb",
3308 	[TEGRA_POWERGATE_XUSBC] = "xusbc",
3309 	[TEGRA_POWERGATE_VIC] = "vic",
3310 	[TEGRA_POWERGATE_IRAM] = "iram",
3311 	[TEGRA_POWERGATE_NVDEC] = "nvdec",
3312 	[TEGRA_POWERGATE_NVJPG] = "nvjpg",
3313 	[TEGRA_POWERGATE_AUD] = "aud",
3314 	[TEGRA_POWERGATE_DFD] = "dfd",
3315 	[TEGRA_POWERGATE_VE2] = "ve2",
3316 };
3317 
3318 static const u8 tegra210_cpu_powergates[] = {
3319 	TEGRA_POWERGATE_CPU0,
3320 	TEGRA_POWERGATE_CPU1,
3321 	TEGRA_POWERGATE_CPU2,
3322 	TEGRA_POWERGATE_CPU3,
3323 };
3324 
3325 #define TEGRA210_IO_PAD_TABLE(_pad)                                        \
3326 	/*   .id                        .dpd     .voltage  .name */        \
3327 	_pad(TEGRA_IO_PAD_AUDIO,       17,       5,        "audio"),       \
3328 	_pad(TEGRA_IO_PAD_AUDIO_HV,    61,       18,       "audio-hv"),    \
3329 	_pad(TEGRA_IO_PAD_CAM,         36,       10,       "cam"),         \
3330 	_pad(TEGRA_IO_PAD_CSIA,        0,        UINT_MAX, "csia"),        \
3331 	_pad(TEGRA_IO_PAD_CSIB,        1,        UINT_MAX, "csib"),        \
3332 	_pad(TEGRA_IO_PAD_CSIC,        42,       UINT_MAX, "csic"),        \
3333 	_pad(TEGRA_IO_PAD_CSID,        43,       UINT_MAX, "csid"),        \
3334 	_pad(TEGRA_IO_PAD_CSIE,        44,       UINT_MAX, "csie"),        \
3335 	_pad(TEGRA_IO_PAD_CSIF,        45,       UINT_MAX, "csif"),        \
3336 	_pad(TEGRA_IO_PAD_DBG,         25,       19,       "dbg"),         \
3337 	_pad(TEGRA_IO_PAD_DEBUG_NONAO, 26,       UINT_MAX, "debug-nonao"), \
3338 	_pad(TEGRA_IO_PAD_DMIC,        50,       20,       "dmic"),        \
3339 	_pad(TEGRA_IO_PAD_DP,          51,       UINT_MAX, "dp"),          \
3340 	_pad(TEGRA_IO_PAD_DSI,         2,        UINT_MAX, "dsi"),         \
3341 	_pad(TEGRA_IO_PAD_DSIB,        39,       UINT_MAX, "dsib"),        \
3342 	_pad(TEGRA_IO_PAD_DSIC,        40,       UINT_MAX, "dsic"),        \
3343 	_pad(TEGRA_IO_PAD_DSID,        41,       UINT_MAX, "dsid"),        \
3344 	_pad(TEGRA_IO_PAD_EMMC,        35,       UINT_MAX, "emmc"),        \
3345 	_pad(TEGRA_IO_PAD_EMMC2,       37,       UINT_MAX, "emmc2"),       \
3346 	_pad(TEGRA_IO_PAD_GPIO,        27,       21,       "gpio"),        \
3347 	_pad(TEGRA_IO_PAD_HDMI,        28,       UINT_MAX, "hdmi"),        \
3348 	_pad(TEGRA_IO_PAD_HSIC,        19,       UINT_MAX, "hsic"),        \
3349 	_pad(TEGRA_IO_PAD_LVDS,        57,       UINT_MAX, "lvds"),        \
3350 	_pad(TEGRA_IO_PAD_MIPI_BIAS,   3,        UINT_MAX, "mipi-bias"),   \
3351 	_pad(TEGRA_IO_PAD_PEX_BIAS,    4,        UINT_MAX, "pex-bias"),    \
3352 	_pad(TEGRA_IO_PAD_PEX_CLK1,    5,        UINT_MAX, "pex-clk1"),    \
3353 	_pad(TEGRA_IO_PAD_PEX_CLK2,    6,        UINT_MAX, "pex-clk2"),    \
3354 	_pad(TEGRA_IO_PAD_PEX_CNTRL,   UINT_MAX, 11,       "pex-cntrl"),   \
3355 	_pad(TEGRA_IO_PAD_SDMMC1,      33,       12,       "sdmmc1"),      \
3356 	_pad(TEGRA_IO_PAD_SDMMC3,      34,       13,       "sdmmc3"),      \
3357 	_pad(TEGRA_IO_PAD_SPI,         46,       22,       "spi"),         \
3358 	_pad(TEGRA_IO_PAD_SPI_HV,      47,       23,       "spi-hv"),      \
3359 	_pad(TEGRA_IO_PAD_UART,        14,       2,        "uart"),        \
3360 	_pad(TEGRA_IO_PAD_USB0,        9,        UINT_MAX, "usb0"),        \
3361 	_pad(TEGRA_IO_PAD_USB1,        10,       UINT_MAX, "usb1"),        \
3362 	_pad(TEGRA_IO_PAD_USB2,        11,       UINT_MAX, "usb2"),        \
3363 	_pad(TEGRA_IO_PAD_USB3,        18,       UINT_MAX, "usb3"),        \
3364 	_pad(TEGRA_IO_PAD_USB_BIAS,    12,       UINT_MAX, "usb-bias")
3365 
3366 static const struct tegra_io_pad_soc tegra210_io_pads[] = {
3367 	TEGRA210_IO_PAD_TABLE(TEGRA_IO_PAD)
3368 };
3369 
3370 static const struct pinctrl_pin_desc tegra210_pin_descs[] = {
3371 	TEGRA210_IO_PAD_TABLE(TEGRA_IO_PIN_DESC)
3372 };
3373 
3374 static const char * const tegra210_reset_sources[] = {
3375 	"POWER_ON_RESET",
3376 	"WATCHDOG",
3377 	"SENSOR",
3378 	"SW_MAIN",
3379 	"LP0",
3380 	"AOTAG"
3381 };
3382 
3383 static const struct tegra_wake_event tegra210_wake_events[] = {
3384 	TEGRA_WAKE_IRQ("rtc", 16, 2),
3385 	TEGRA_WAKE_IRQ("pmu", 51, 86),
3386 };
3387 
3388 static const struct tegra_pmc_soc tegra210_pmc_soc = {
3389 	.num_powergates = ARRAY_SIZE(tegra210_powergates),
3390 	.powergates = tegra210_powergates,
3391 	.num_cpu_powergates = ARRAY_SIZE(tegra210_cpu_powergates),
3392 	.cpu_powergates = tegra210_cpu_powergates,
3393 	.has_tsense_reset = true,
3394 	.has_gpu_clamps = true,
3395 	.needs_mbist_war = true,
3396 	.has_impl_33v_pwr = false,
3397 	.maybe_tz_only = true,
3398 	.num_io_pads = ARRAY_SIZE(tegra210_io_pads),
3399 	.io_pads = tegra210_io_pads,
3400 	.num_pin_descs = ARRAY_SIZE(tegra210_pin_descs),
3401 	.pin_descs = tegra210_pin_descs,
3402 	.regs = &tegra20_pmc_regs,
3403 	.init = tegra20_pmc_init,
3404 	.setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3405 	.powergate_set = tegra114_powergate_set,
3406 	.irq_set_wake = tegra210_pmc_irq_set_wake,
3407 	.irq_set_type = tegra210_pmc_irq_set_type,
3408 	.reset_sources = tegra210_reset_sources,
3409 	.num_reset_sources = ARRAY_SIZE(tegra210_reset_sources),
3410 	.reset_levels = NULL,
3411 	.num_reset_levels = 0,
3412 	.num_wake_events = ARRAY_SIZE(tegra210_wake_events),
3413 	.wake_events = tegra210_wake_events,
3414 	.pmc_clks_data = tegra_pmc_clks_data,
3415 	.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3416 	.has_blink_output = true,
3417 	.has_usb_sleepwalk = true,
3418 };
3419 
3420 #define TEGRA186_IO_PAD_TABLE(_pad)                                          \
3421 	/*   .id                        .dpd      .voltage  .name */         \
3422 	_pad(TEGRA_IO_PAD_CSIA,         0,        UINT_MAX, "csia"),         \
3423 	_pad(TEGRA_IO_PAD_CSIB,         1,        UINT_MAX, "csib"),         \
3424 	_pad(TEGRA_IO_PAD_DSI,          2,        UINT_MAX, "dsi"),          \
3425 	_pad(TEGRA_IO_PAD_MIPI_BIAS,    3,        UINT_MAX, "mipi-bias"),    \
3426 	_pad(TEGRA_IO_PAD_PEX_CLK_BIAS, 4,        UINT_MAX, "pex-clk-bias"), \
3427 	_pad(TEGRA_IO_PAD_PEX_CLK3,     5,        UINT_MAX, "pex-clk3"),     \
3428 	_pad(TEGRA_IO_PAD_PEX_CLK2,     6,        UINT_MAX, "pex-clk2"),     \
3429 	_pad(TEGRA_IO_PAD_PEX_CLK1,     7,        UINT_MAX, "pex-clk1"),     \
3430 	_pad(TEGRA_IO_PAD_USB0,         9,        UINT_MAX, "usb0"),         \
3431 	_pad(TEGRA_IO_PAD_USB1,         10,       UINT_MAX, "usb1"),         \
3432 	_pad(TEGRA_IO_PAD_USB2,         11,       UINT_MAX, "usb2"),         \
3433 	_pad(TEGRA_IO_PAD_USB_BIAS,     12,       UINT_MAX, "usb-bias"),     \
3434 	_pad(TEGRA_IO_PAD_UART,         14,       UINT_MAX, "uart"),         \
3435 	_pad(TEGRA_IO_PAD_AUDIO,        17,       UINT_MAX, "audio"),        \
3436 	_pad(TEGRA_IO_PAD_HSIC,         19,       UINT_MAX, "hsic"),         \
3437 	_pad(TEGRA_IO_PAD_DBG,          25,       UINT_MAX, "dbg"),          \
3438 	_pad(TEGRA_IO_PAD_HDMI_DP0,     28,       UINT_MAX, "hdmi-dp0"),     \
3439 	_pad(TEGRA_IO_PAD_HDMI_DP1,     29,       UINT_MAX, "hdmi-dp1"),     \
3440 	_pad(TEGRA_IO_PAD_PEX_CNTRL,    32,       UINT_MAX, "pex-cntrl"),    \
3441 	_pad(TEGRA_IO_PAD_SDMMC2_HV,    34,       5,        "sdmmc2-hv"),    \
3442 	_pad(TEGRA_IO_PAD_SDMMC4,       36,       UINT_MAX, "sdmmc4"),       \
3443 	_pad(TEGRA_IO_PAD_CAM,          38,       UINT_MAX, "cam"),          \
3444 	_pad(TEGRA_IO_PAD_DSIB,         40,       UINT_MAX, "dsib"),         \
3445 	_pad(TEGRA_IO_PAD_DSIC,         41,       UINT_MAX, "dsic"),         \
3446 	_pad(TEGRA_IO_PAD_DSID,         42,       UINT_MAX, "dsid"),         \
3447 	_pad(TEGRA_IO_PAD_CSIC,         43,       UINT_MAX, "csic"),         \
3448 	_pad(TEGRA_IO_PAD_CSID,         44,       UINT_MAX, "csid"),         \
3449 	_pad(TEGRA_IO_PAD_CSIE,         45,       UINT_MAX, "csie"),         \
3450 	_pad(TEGRA_IO_PAD_CSIF,         46,       UINT_MAX, "csif"),         \
3451 	_pad(TEGRA_IO_PAD_SPI,          47,       UINT_MAX, "spi"),          \
3452 	_pad(TEGRA_IO_PAD_UFS,          49,       UINT_MAX, "ufs"),          \
3453 	_pad(TEGRA_IO_PAD_DMIC_HV,      52,       2,        "dmic-hv"),	     \
3454 	_pad(TEGRA_IO_PAD_EDP,          53,       UINT_MAX, "edp"),          \
3455 	_pad(TEGRA_IO_PAD_SDMMC1_HV,    55,       4,        "sdmmc1-hv"),    \
3456 	_pad(TEGRA_IO_PAD_SDMMC3_HV,    56,       6,        "sdmmc3-hv"),    \
3457 	_pad(TEGRA_IO_PAD_CONN,         60,       UINT_MAX, "conn"),         \
3458 	_pad(TEGRA_IO_PAD_AUDIO_HV,     61,       1,        "audio-hv"),     \
3459 	_pad(TEGRA_IO_PAD_AO_HV,        UINT_MAX, 0,        "ao-hv")
3460 
3461 static const struct tegra_io_pad_soc tegra186_io_pads[] = {
3462 	TEGRA186_IO_PAD_TABLE(TEGRA_IO_PAD)
3463 };
3464 
3465 static const struct pinctrl_pin_desc tegra186_pin_descs[] = {
3466 	TEGRA186_IO_PAD_TABLE(TEGRA_IO_PIN_DESC)
3467 };
3468 
3469 static const struct tegra_pmc_regs tegra186_pmc_regs = {
3470 	.scratch0 = 0x2000,
3471 	.dpd_req = 0x74,
3472 	.dpd_status = 0x78,
3473 	.dpd2_req = 0x7c,
3474 	.dpd2_status = 0x80,
3475 	.rst_status = 0x70,
3476 	.rst_source_shift = 0x2,
3477 	.rst_source_mask = 0x3c,
3478 	.rst_level_shift = 0x0,
3479 	.rst_level_mask = 0x3,
3480 };
3481 
3482 static void tegra186_pmc_setup_irq_polarity(struct tegra_pmc *pmc,
3483 					    struct device_node *np,
3484 					    bool invert)
3485 {
3486 	struct resource regs;
3487 	void __iomem *wake;
3488 	u32 value;
3489 	int index;
3490 
3491 	index = of_property_match_string(np, "reg-names", "wake");
3492 	if (index < 0) {
3493 		dev_err(pmc->dev, "failed to find PMC wake registers\n");
3494 		return;
3495 	}
3496 
3497 	of_address_to_resource(np, index, &regs);
3498 
3499 	wake = ioremap(regs.start, resource_size(&regs));
3500 	if (!wake) {
3501 		dev_err(pmc->dev, "failed to map PMC wake registers\n");
3502 		return;
3503 	}
3504 
3505 	value = readl(wake + WAKE_AOWAKE_CTRL);
3506 
3507 	if (invert)
3508 		value |= WAKE_AOWAKE_CTRL_INTR_POLARITY;
3509 	else
3510 		value &= ~WAKE_AOWAKE_CTRL_INTR_POLARITY;
3511 
3512 	writel(value, wake + WAKE_AOWAKE_CTRL);
3513 
3514 	iounmap(wake);
3515 }
3516 
3517 static const char * const tegra186_reset_sources[] = {
3518 	"SYS_RESET",
3519 	"AOWDT",
3520 	"MCCPLEXWDT",
3521 	"BPMPWDT",
3522 	"SCEWDT",
3523 	"SPEWDT",
3524 	"APEWDT",
3525 	"BCCPLEXWDT",
3526 	"SENSOR",
3527 	"AOTAG",
3528 	"VFSENSOR",
3529 	"SWREST",
3530 	"SC7",
3531 	"HSM",
3532 	"CORESIGHT"
3533 };
3534 
3535 static const char * const tegra186_reset_levels[] = {
3536 	"L0", "L1", "L2", "WARM"
3537 };
3538 
3539 static const struct tegra_wake_event tegra186_wake_events[] = {
3540 	TEGRA_WAKE_IRQ("pmu", 24, 209),
3541 	TEGRA_WAKE_GPIO("power", 29, 1, TEGRA186_AON_GPIO(FF, 0)),
3542 	TEGRA_WAKE_IRQ("rtc", 73, 10),
3543 };
3544 
3545 static const struct tegra_pmc_soc tegra186_pmc_soc = {
3546 	.num_powergates = 0,
3547 	.powergates = NULL,
3548 	.num_cpu_powergates = 0,
3549 	.cpu_powergates = NULL,
3550 	.has_tsense_reset = false,
3551 	.has_gpu_clamps = false,
3552 	.needs_mbist_war = false,
3553 	.has_impl_33v_pwr = true,
3554 	.maybe_tz_only = false,
3555 	.num_io_pads = ARRAY_SIZE(tegra186_io_pads),
3556 	.io_pads = tegra186_io_pads,
3557 	.num_pin_descs = ARRAY_SIZE(tegra186_pin_descs),
3558 	.pin_descs = tegra186_pin_descs,
3559 	.regs = &tegra186_pmc_regs,
3560 	.init = NULL,
3561 	.setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
3562 	.irq_set_wake = tegra186_pmc_irq_set_wake,
3563 	.irq_set_type = tegra186_pmc_irq_set_type,
3564 	.reset_sources = tegra186_reset_sources,
3565 	.num_reset_sources = ARRAY_SIZE(tegra186_reset_sources),
3566 	.reset_levels = tegra186_reset_levels,
3567 	.num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
3568 	.num_wake_events = ARRAY_SIZE(tegra186_wake_events),
3569 	.wake_events = tegra186_wake_events,
3570 	.pmc_clks_data = NULL,
3571 	.num_pmc_clks = 0,
3572 	.has_blink_output = false,
3573 	.has_usb_sleepwalk = false,
3574 };
3575 
3576 #define TEGRA194_IO_PAD_TABLE(_pad)                                              \
3577 	/*   .id                          .dpd      .voltage  .name */           \
3578 	_pad(TEGRA_IO_PAD_CSIA,           0,        UINT_MAX, "csia"),           \
3579 	_pad(TEGRA_IO_PAD_CSIB,           1,        UINT_MAX, "csib"),           \
3580 	_pad(TEGRA_IO_PAD_MIPI_BIAS,      3,        UINT_MAX, "mipi-bias"),      \
3581 	_pad(TEGRA_IO_PAD_PEX_CLK_BIAS,   4,        UINT_MAX, "pex-clk-bias"),   \
3582 	_pad(TEGRA_IO_PAD_PEX_CLK3,       5,        UINT_MAX, "pex-clk3"),       \
3583 	_pad(TEGRA_IO_PAD_PEX_CLK2,       6,        UINT_MAX, "pex-clk2"),       \
3584 	_pad(TEGRA_IO_PAD_PEX_CLK1,       7,        UINT_MAX, "pex-clk1"),       \
3585 	_pad(TEGRA_IO_PAD_EQOS,           8,        UINT_MAX, "eqos"),           \
3586 	_pad(TEGRA_IO_PAD_PEX_CLK_2_BIAS, 9,        UINT_MAX, "pex-clk-2-bias"), \
3587 	_pad(TEGRA_IO_PAD_PEX_CLK_2,      10,       UINT_MAX, "pex-clk-2"),      \
3588 	_pad(TEGRA_IO_PAD_DAP3,           11,       UINT_MAX, "dap3"),           \
3589 	_pad(TEGRA_IO_PAD_DAP5,           12,       UINT_MAX, "dap5"),           \
3590 	_pad(TEGRA_IO_PAD_UART,           14,       UINT_MAX, "uart"),           \
3591 	_pad(TEGRA_IO_PAD_PWR_CTL,        15,       UINT_MAX, "pwr-ctl"),        \
3592 	_pad(TEGRA_IO_PAD_SOC_GPIO53,     16,       UINT_MAX, "soc-gpio53"),     \
3593 	_pad(TEGRA_IO_PAD_AUDIO,          17,       UINT_MAX, "audio"),          \
3594 	_pad(TEGRA_IO_PAD_GP_PWM2,        18,       UINT_MAX, "gp-pwm2"),        \
3595 	_pad(TEGRA_IO_PAD_GP_PWM3,        19,       UINT_MAX, "gp-pwm3"),        \
3596 	_pad(TEGRA_IO_PAD_SOC_GPIO12,     20,       UINT_MAX, "soc-gpio12"),     \
3597 	_pad(TEGRA_IO_PAD_SOC_GPIO13,     21,       UINT_MAX, "soc-gpio13"),     \
3598 	_pad(TEGRA_IO_PAD_SOC_GPIO10,     22,       UINT_MAX, "soc-gpio10"),     \
3599 	_pad(TEGRA_IO_PAD_UART4,          23,       UINT_MAX, "uart4"),          \
3600 	_pad(TEGRA_IO_PAD_UART5,          24,       UINT_MAX, "uart5"),          \
3601 	_pad(TEGRA_IO_PAD_DBG,            25,       UINT_MAX, "dbg"),            \
3602 	_pad(TEGRA_IO_PAD_HDMI_DP3,       26,       UINT_MAX, "hdmi-dp3"),       \
3603 	_pad(TEGRA_IO_PAD_HDMI_DP2,       27,       UINT_MAX, "hdmi-dp2"),       \
3604 	_pad(TEGRA_IO_PAD_HDMI_DP0,       28,       UINT_MAX, "hdmi-dp0"),       \
3605 	_pad(TEGRA_IO_PAD_HDMI_DP1,       29,       UINT_MAX, "hdmi-dp1"),       \
3606 	_pad(TEGRA_IO_PAD_PEX_CNTRL,      32,       UINT_MAX, "pex-cntrl"),      \
3607 	_pad(TEGRA_IO_PAD_PEX_CTL2,       33,       UINT_MAX, "pex-ctl2"),       \
3608 	_pad(TEGRA_IO_PAD_PEX_L0_RST_N,   34,       UINT_MAX, "pex-l0-rst"),     \
3609 	_pad(TEGRA_IO_PAD_PEX_L1_RST_N,   35,       UINT_MAX, "pex-l1-rst"),     \
3610 	_pad(TEGRA_IO_PAD_SDMMC4,         36,       UINT_MAX, "sdmmc4"),         \
3611 	_pad(TEGRA_IO_PAD_PEX_L5_RST_N,   37,       UINT_MAX, "pex-l5-rst"),     \
3612 	_pad(TEGRA_IO_PAD_CAM,            38,       UINT_MAX, "cam"),            \
3613 	_pad(TEGRA_IO_PAD_CSIC,           43,       UINT_MAX, "csic"),           \
3614 	_pad(TEGRA_IO_PAD_CSID,           44,       UINT_MAX, "csid"),           \
3615 	_pad(TEGRA_IO_PAD_CSIE,           45,       UINT_MAX, "csie"),           \
3616 	_pad(TEGRA_IO_PAD_CSIF,           46,       UINT_MAX, "csif"),           \
3617 	_pad(TEGRA_IO_PAD_SPI,            47,       UINT_MAX, "spi"),            \
3618 	_pad(TEGRA_IO_PAD_UFS,            49,       UINT_MAX, "ufs"),            \
3619 	_pad(TEGRA_IO_PAD_CSIG,           50,       UINT_MAX, "csig"),           \
3620 	_pad(TEGRA_IO_PAD_CSIH,           51,       UINT_MAX, "csih"),           \
3621 	_pad(TEGRA_IO_PAD_EDP,            53,       UINT_MAX, "edp"),            \
3622 	_pad(TEGRA_IO_PAD_SDMMC1_HV,      55,       4,        "sdmmc1-hv"),      \
3623 	_pad(TEGRA_IO_PAD_SDMMC3_HV,      56,       6,        "sdmmc3-hv"),      \
3624 	_pad(TEGRA_IO_PAD_CONN,           60,       UINT_MAX, "conn"),           \
3625 	_pad(TEGRA_IO_PAD_AUDIO_HV,       61,       1,        "audio-hv"),       \
3626 	_pad(TEGRA_IO_PAD_AO_HV,          UINT_MAX, 0,        "ao-hv")
3627 
3628 static const struct tegra_io_pad_soc tegra194_io_pads[] = {
3629 	TEGRA194_IO_PAD_TABLE(TEGRA_IO_PAD)
3630 };
3631 
3632 static const struct pinctrl_pin_desc tegra194_pin_descs[] = {
3633 	TEGRA194_IO_PAD_TABLE(TEGRA_IO_PIN_DESC)
3634 };
3635 
3636 static const struct tegra_pmc_regs tegra194_pmc_regs = {
3637 	.scratch0 = 0x2000,
3638 	.dpd_req = 0x74,
3639 	.dpd_status = 0x78,
3640 	.dpd2_req = 0x7c,
3641 	.dpd2_status = 0x80,
3642 	.rst_status = 0x70,
3643 	.rst_source_shift = 0x2,
3644 	.rst_source_mask = 0x7c,
3645 	.rst_level_shift = 0x0,
3646 	.rst_level_mask = 0x3,
3647 };
3648 
3649 static const char * const tegra194_reset_sources[] = {
3650 	"SYS_RESET_N",
3651 	"AOWDT",
3652 	"BCCPLEXWDT",
3653 	"BPMPWDT",
3654 	"SCEWDT",
3655 	"SPEWDT",
3656 	"APEWDT",
3657 	"LCCPLEXWDT",
3658 	"SENSOR",
3659 	"AOTAG",
3660 	"VFSENSOR",
3661 	"MAINSWRST",
3662 	"SC7",
3663 	"HSM",
3664 	"CSITE",
3665 	"RCEWDT",
3666 	"PVA0WDT",
3667 	"PVA1WDT",
3668 	"L1A_ASYNC",
3669 	"BPMPBOOT",
3670 	"FUSECRC",
3671 };
3672 
3673 static const struct tegra_wake_event tegra194_wake_events[] = {
3674 	TEGRA_WAKE_IRQ("pmu", 24, 209),
3675 	TEGRA_WAKE_GPIO("power", 29, 1, TEGRA194_AON_GPIO(EE, 4)),
3676 	TEGRA_WAKE_IRQ("rtc", 73, 10),
3677 };
3678 
3679 static const struct tegra_pmc_soc tegra194_pmc_soc = {
3680 	.num_powergates = 0,
3681 	.powergates = NULL,
3682 	.num_cpu_powergates = 0,
3683 	.cpu_powergates = NULL,
3684 	.has_tsense_reset = false,
3685 	.has_gpu_clamps = false,
3686 	.needs_mbist_war = false,
3687 	.has_impl_33v_pwr = true,
3688 	.maybe_tz_only = false,
3689 	.num_io_pads = ARRAY_SIZE(tegra194_io_pads),
3690 	.io_pads = tegra194_io_pads,
3691 	.num_pin_descs = ARRAY_SIZE(tegra194_pin_descs),
3692 	.pin_descs = tegra194_pin_descs,
3693 	.regs = &tegra194_pmc_regs,
3694 	.init = NULL,
3695 	.setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
3696 	.irq_set_wake = tegra186_pmc_irq_set_wake,
3697 	.irq_set_type = tegra186_pmc_irq_set_type,
3698 	.reset_sources = tegra194_reset_sources,
3699 	.num_reset_sources = ARRAY_SIZE(tegra194_reset_sources),
3700 	.reset_levels = tegra186_reset_levels,
3701 	.num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
3702 	.num_wake_events = ARRAY_SIZE(tegra194_wake_events),
3703 	.wake_events = tegra194_wake_events,
3704 	.pmc_clks_data = NULL,
3705 	.num_pmc_clks = 0,
3706 	.has_blink_output = false,
3707 	.has_usb_sleepwalk = false,
3708 };
3709 
3710 static const struct tegra_pmc_regs tegra234_pmc_regs = {
3711 	.scratch0 = 0x2000,
3712 	.dpd_req = 0,
3713 	.dpd_status = 0,
3714 	.dpd2_req = 0,
3715 	.dpd2_status = 0,
3716 	.rst_status = 0x70,
3717 	.rst_source_shift = 0x2,
3718 	.rst_source_mask = 0xfc,
3719 	.rst_level_shift = 0x0,
3720 	.rst_level_mask = 0x3,
3721 };
3722 
3723 static const char * const tegra234_reset_sources[] = {
3724 	"SYS_RESET_N",
3725 	"AOWDT",
3726 	"BCCPLEXWDT",
3727 	"BPMPWDT",
3728 	"SCEWDT",
3729 	"SPEWDT",
3730 	"APEWDT",
3731 	"LCCPLEXWDT",
3732 	"SENSOR",
3733 	"AOTAG",
3734 	"VFSENSOR",
3735 	"MAINSWRST",
3736 	"SC7",
3737 	"HSM",
3738 	"CSITE",
3739 	"RCEWDT",
3740 	"PVA0WDT",
3741 	"PVA1WDT",
3742 	"L1A_ASYNC",
3743 	"BPMPBOOT",
3744 	"FUSECRC",
3745 };
3746 
3747 static const struct tegra_pmc_soc tegra234_pmc_soc = {
3748 	.num_powergates = 0,
3749 	.powergates = NULL,
3750 	.num_cpu_powergates = 0,
3751 	.cpu_powergates = NULL,
3752 	.has_tsense_reset = false,
3753 	.has_gpu_clamps = false,
3754 	.needs_mbist_war = false,
3755 	.has_impl_33v_pwr = true,
3756 	.maybe_tz_only = false,
3757 	.num_io_pads = 0,
3758 	.io_pads = NULL,
3759 	.num_pin_descs = 0,
3760 	.pin_descs = NULL,
3761 	.regs = &tegra234_pmc_regs,
3762 	.init = NULL,
3763 	.setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
3764 	.irq_set_wake = tegra186_pmc_irq_set_wake,
3765 	.irq_set_type = tegra186_pmc_irq_set_type,
3766 	.reset_sources = tegra234_reset_sources,
3767 	.num_reset_sources = ARRAY_SIZE(tegra234_reset_sources),
3768 	.reset_levels = tegra186_reset_levels,
3769 	.num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
3770 	.num_wake_events = 0,
3771 	.wake_events = NULL,
3772 	.pmc_clks_data = NULL,
3773 	.num_pmc_clks = 0,
3774 	.has_blink_output = false,
3775 };
3776 
3777 static const struct of_device_id tegra_pmc_match[] = {
3778 	{ .compatible = "nvidia,tegra234-pmc", .data = &tegra234_pmc_soc },
3779 	{ .compatible = "nvidia,tegra194-pmc", .data = &tegra194_pmc_soc },
3780 	{ .compatible = "nvidia,tegra186-pmc", .data = &tegra186_pmc_soc },
3781 	{ .compatible = "nvidia,tegra210-pmc", .data = &tegra210_pmc_soc },
3782 	{ .compatible = "nvidia,tegra132-pmc", .data = &tegra124_pmc_soc },
3783 	{ .compatible = "nvidia,tegra124-pmc", .data = &tegra124_pmc_soc },
3784 	{ .compatible = "nvidia,tegra114-pmc", .data = &tegra114_pmc_soc },
3785 	{ .compatible = "nvidia,tegra30-pmc", .data = &tegra30_pmc_soc },
3786 	{ .compatible = "nvidia,tegra20-pmc", .data = &tegra20_pmc_soc },
3787 	{ }
3788 };
3789 
3790 static void tegra_pmc_sync_state(struct device *dev)
3791 {
3792 	int err;
3793 
3794 	/*
3795 	 * Older device-trees don't have core PD, and thus, there are
3796 	 * no dependencies that will block the state syncing. We shouldn't
3797 	 * mark the domain as synced in this case.
3798 	 */
3799 	if (!pmc->core_domain_registered)
3800 		return;
3801 
3802 	pmc->core_domain_state_synced = true;
3803 
3804 	/* this is a no-op if core regulator isn't used */
3805 	mutex_lock(&pmc->powergates_lock);
3806 	err = dev_pm_opp_sync_regulators(dev);
3807 	mutex_unlock(&pmc->powergates_lock);
3808 
3809 	if (err)
3810 		dev_err(dev, "failed to sync regulators: %d\n", err);
3811 }
3812 
3813 static struct platform_driver tegra_pmc_driver = {
3814 	.driver = {
3815 		.name = "tegra-pmc",
3816 		.suppress_bind_attrs = true,
3817 		.of_match_table = tegra_pmc_match,
3818 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
3819 		.pm = &tegra_pmc_pm_ops,
3820 #endif
3821 		.sync_state = tegra_pmc_sync_state,
3822 	},
3823 	.probe = tegra_pmc_probe,
3824 };
3825 builtin_platform_driver(tegra_pmc_driver);
3826 
3827 static bool __init tegra_pmc_detect_tz_only(struct tegra_pmc *pmc)
3828 {
3829 	u32 value, saved;
3830 
3831 	saved = readl(pmc->base + pmc->soc->regs->scratch0);
3832 	value = saved ^ 0xffffffff;
3833 
3834 	if (value == 0xffffffff)
3835 		value = 0xdeadbeef;
3836 
3837 	/* write pattern and read it back */
3838 	writel(value, pmc->base + pmc->soc->regs->scratch0);
3839 	value = readl(pmc->base + pmc->soc->regs->scratch0);
3840 
3841 	/* if we read all-zeroes, access is restricted to TZ only */
3842 	if (value == 0) {
3843 		pr_info("access to PMC is restricted to TZ\n");
3844 		return true;
3845 	}
3846 
3847 	/* restore original value */
3848 	writel(saved, pmc->base + pmc->soc->regs->scratch0);
3849 
3850 	return false;
3851 }
3852 
3853 /*
3854  * Early initialization to allow access to registers in the very early boot
3855  * process.
3856  */
3857 static int __init tegra_pmc_early_init(void)
3858 {
3859 	const struct of_device_id *match;
3860 	struct device_node *np;
3861 	struct resource regs;
3862 	unsigned int i;
3863 	bool invert;
3864 
3865 	mutex_init(&pmc->powergates_lock);
3866 
3867 	np = of_find_matching_node_and_match(NULL, tegra_pmc_match, &match);
3868 	if (!np) {
3869 		/*
3870 		 * Fall back to legacy initialization for 32-bit ARM only. All
3871 		 * 64-bit ARM device tree files for Tegra are required to have
3872 		 * a PMC node.
3873 		 *
3874 		 * This is for backwards-compatibility with old device trees
3875 		 * that didn't contain a PMC node. Note that in this case the
3876 		 * SoC data can't be matched and therefore powergating is
3877 		 * disabled.
3878 		 */
3879 		if (IS_ENABLED(CONFIG_ARM) && soc_is_tegra()) {
3880 			pr_warn("DT node not found, powergating disabled\n");
3881 
3882 			regs.start = 0x7000e400;
3883 			regs.end = 0x7000e7ff;
3884 			regs.flags = IORESOURCE_MEM;
3885 
3886 			pr_warn("Using memory region %pR\n", &regs);
3887 		} else {
3888 			/*
3889 			 * At this point we're not running on Tegra, so play
3890 			 * nice with multi-platform kernels.
3891 			 */
3892 			return 0;
3893 		}
3894 	} else {
3895 		/*
3896 		 * Extract information from the device tree if we've found a
3897 		 * matching node.
3898 		 */
3899 		if (of_address_to_resource(np, 0, &regs) < 0) {
3900 			pr_err("failed to get PMC registers\n");
3901 			of_node_put(np);
3902 			return -ENXIO;
3903 		}
3904 	}
3905 
3906 	pmc->base = ioremap(regs.start, resource_size(&regs));
3907 	if (!pmc->base) {
3908 		pr_err("failed to map PMC registers\n");
3909 		of_node_put(np);
3910 		return -ENXIO;
3911 	}
3912 
3913 	if (np) {
3914 		pmc->soc = match->data;
3915 
3916 		if (pmc->soc->maybe_tz_only)
3917 			pmc->tz_only = tegra_pmc_detect_tz_only(pmc);
3918 
3919 		/* Create a bitmap of the available and valid partitions */
3920 		for (i = 0; i < pmc->soc->num_powergates; i++)
3921 			if (pmc->soc->powergates[i])
3922 				set_bit(i, pmc->powergates_available);
3923 
3924 		/*
3925 		 * Invert the interrupt polarity if a PMC device tree node
3926 		 * exists and contains the nvidia,invert-interrupt property.
3927 		 */
3928 		invert = of_property_read_bool(np, "nvidia,invert-interrupt");
3929 
3930 		pmc->soc->setup_irq_polarity(pmc, np, invert);
3931 
3932 		of_node_put(np);
3933 	}
3934 
3935 	return 0;
3936 }
3937 early_initcall(tegra_pmc_early_init);
3938