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