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