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