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