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