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