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