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)1235 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
1236 struct device_node *np)
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 reset_control_put(pg->reset);
1252 }
1253
1254 return err;
1255 }
1256
tegra_powergate_add(struct tegra_pmc * pmc,struct device_node * np)1257 static int tegra_powergate_add(struct tegra_pmc *pmc, struct device_node *np)
1258 {
1259 struct device *dev = pmc->dev;
1260 struct tegra_powergate *pg;
1261 int id, err = 0;
1262 bool off;
1263
1264 pg = kzalloc(sizeof(*pg), GFP_KERNEL);
1265 if (!pg)
1266 return -ENOMEM;
1267
1268 id = tegra_powergate_lookup(pmc, np->name);
1269 if (id < 0) {
1270 dev_err(dev, "powergate lookup failed for %pOFn: %d\n", np, id);
1271 err = -ENODEV;
1272 goto free_mem;
1273 }
1274
1275 /*
1276 * Clear the bit for this powergate so it cannot be managed
1277 * directly via the legacy APIs for controlling powergates.
1278 */
1279 clear_bit(id, pmc->powergates_available);
1280
1281 pg->id = id;
1282 pg->genpd.name = np->name;
1283 pg->genpd.power_off = tegra_genpd_power_off;
1284 pg->genpd.power_on = tegra_genpd_power_on;
1285 pg->pmc = pmc;
1286
1287 off = !tegra_powergate_is_powered(pmc, pg->id);
1288
1289 err = tegra_powergate_of_get_clks(pg, np);
1290 if (err < 0) {
1291 dev_err(dev, "failed to get clocks for %pOFn: %d\n", np, err);
1292 goto set_available;
1293 }
1294
1295 err = tegra_powergate_of_get_resets(pg, np);
1296 if (err < 0) {
1297 dev_err(dev, "failed to get resets for %pOFn: %d\n", np, err);
1298 goto remove_clks;
1299 }
1300
1301 /*
1302 * If the power-domain is off, then ensure the resets are asserted.
1303 * If the power-domain is on, then power down to ensure that when is
1304 * it turned on the power-domain, clocks and resets are all in the
1305 * expected state.
1306 */
1307 if (off) {
1308 err = reset_control_assert(pg->reset);
1309 if (err) {
1310 pr_err("failed to assert resets: %d\n", err);
1311 goto remove_resets;
1312 }
1313 } else {
1314 err = tegra_powergate_power_down(pg);
1315 if (err) {
1316 dev_err(dev, "failed to turn off PM domain %s: %d\n",
1317 pg->genpd.name, err);
1318 goto remove_resets;
1319 }
1320 }
1321
1322 /*
1323 * If PM_GENERIC_DOMAINS is not enabled, power-on
1324 * the domain and skip the genpd registration.
1325 */
1326 if (!IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS)) {
1327 WARN_ON(tegra_powergate_power_up(pg, true));
1328 goto remove_resets;
1329 }
1330
1331 err = pm_genpd_init(&pg->genpd, NULL, true);
1332 if (err < 0) {
1333 dev_err(dev, "failed to initialise PM domain %pOFn: %d\n", np,
1334 err);
1335 goto remove_resets;
1336 }
1337
1338 err = of_genpd_add_provider_simple(np, &pg->genpd);
1339 if (err < 0) {
1340 dev_err(dev, "failed to add PM domain provider for %pOFn: %d\n",
1341 np, err);
1342 goto remove_genpd;
1343 }
1344
1345 dev_dbg(dev, "added PM domain %s\n", pg->genpd.name);
1346
1347 return 0;
1348
1349 remove_genpd:
1350 pm_genpd_remove(&pg->genpd);
1351
1352 remove_resets:
1353 reset_control_put(pg->reset);
1354
1355 remove_clks:
1356 while (pg->num_clks--)
1357 clk_put(pg->clks[pg->num_clks]);
1358
1359 kfree(pg->clks);
1360
1361 set_available:
1362 set_bit(id, pmc->powergates_available);
1363
1364 free_mem:
1365 kfree(pg);
1366
1367 return err;
1368 }
1369
tegra_pmc_core_domain_state_synced(void)1370 bool tegra_pmc_core_domain_state_synced(void)
1371 {
1372 return pmc->core_domain_state_synced;
1373 }
1374
1375 static int
tegra_pmc_core_pd_set_performance_state(struct generic_pm_domain * genpd,unsigned int level)1376 tegra_pmc_core_pd_set_performance_state(struct generic_pm_domain *genpd,
1377 unsigned int level)
1378 {
1379 struct dev_pm_opp *opp;
1380 int err;
1381
1382 opp = dev_pm_opp_find_level_ceil(&genpd->dev, &level);
1383 if (IS_ERR(opp)) {
1384 dev_err(&genpd->dev, "failed to find OPP for level %u: %pe\n",
1385 level, opp);
1386 return PTR_ERR(opp);
1387 }
1388
1389 mutex_lock(&pmc->powergates_lock);
1390 err = dev_pm_opp_set_opp(pmc->dev, opp);
1391 mutex_unlock(&pmc->powergates_lock);
1392
1393 dev_pm_opp_put(opp);
1394
1395 if (err) {
1396 dev_err(&genpd->dev, "failed to set voltage to %duV: %d\n",
1397 level, err);
1398 return err;
1399 }
1400
1401 return 0;
1402 }
1403
tegra_pmc_core_pd_add(struct tegra_pmc * pmc,struct device_node * np)1404 static int tegra_pmc_core_pd_add(struct tegra_pmc *pmc, struct device_node *np)
1405 {
1406 struct generic_pm_domain *genpd;
1407 const char *rname[] = { "core", NULL};
1408 int err;
1409
1410 genpd = devm_kzalloc(pmc->dev, sizeof(*genpd), GFP_KERNEL);
1411 if (!genpd)
1412 return -ENOMEM;
1413
1414 genpd->name = "core";
1415 genpd->set_performance_state = tegra_pmc_core_pd_set_performance_state;
1416
1417 err = devm_pm_opp_set_regulators(pmc->dev, rname);
1418 if (err)
1419 return dev_err_probe(pmc->dev, err,
1420 "failed to set core OPP regulator\n");
1421
1422 err = pm_genpd_init(genpd, NULL, false);
1423 if (err) {
1424 dev_err(pmc->dev, "failed to init core genpd: %d\n", err);
1425 return err;
1426 }
1427
1428 err = of_genpd_add_provider_simple(np, genpd);
1429 if (err) {
1430 dev_err(pmc->dev, "failed to add core genpd: %d\n", err);
1431 goto remove_genpd;
1432 }
1433
1434 pmc->core_domain_registered = true;
1435
1436 return 0;
1437
1438 remove_genpd:
1439 pm_genpd_remove(genpd);
1440
1441 return err;
1442 }
1443
tegra_powergate_init(struct tegra_pmc * pmc,struct device_node * parent)1444 static int tegra_powergate_init(struct tegra_pmc *pmc,
1445 struct device_node *parent)
1446 {
1447 struct of_phandle_args child_args, parent_args;
1448 struct device_node *np;
1449 int err = 0;
1450
1451 /*
1452 * Core power domain is the parent of powergate domains, hence it
1453 * should be registered first.
1454 */
1455 np = of_get_child_by_name(parent, "core-domain");
1456 if (np) {
1457 err = tegra_pmc_core_pd_add(pmc, np);
1458 of_node_put(np);
1459 if (err)
1460 return err;
1461 }
1462
1463 np = of_get_child_by_name(parent, "powergates");
1464 if (!np)
1465 return 0;
1466
1467 for_each_child_of_node_scoped(np, child) {
1468 err = tegra_powergate_add(pmc, child);
1469 if (err < 0)
1470 break;
1471
1472 if (of_parse_phandle_with_args(child, "power-domains",
1473 "#power-domain-cells",
1474 0, &parent_args))
1475 continue;
1476
1477 child_args.np = child;
1478 child_args.args_count = 0;
1479
1480 err = of_genpd_add_subdomain(&parent_args, &child_args);
1481 of_node_put(parent_args.np);
1482 if (err)
1483 break;
1484 }
1485
1486 of_node_put(np);
1487
1488 return err;
1489 }
1490
tegra_powergate_remove(struct generic_pm_domain * genpd)1491 static void tegra_powergate_remove(struct generic_pm_domain *genpd)
1492 {
1493 struct tegra_powergate *pg = to_powergate(genpd);
1494
1495 reset_control_put(pg->reset);
1496
1497 while (pg->num_clks--)
1498 clk_put(pg->clks[pg->num_clks]);
1499
1500 kfree(pg->clks);
1501
1502 set_bit(pg->id, pmc->powergates_available);
1503
1504 kfree(pg);
1505 }
1506
tegra_powergate_remove_all(struct device_node * parent)1507 static void tegra_powergate_remove_all(struct device_node *parent)
1508 {
1509 struct generic_pm_domain *genpd;
1510 struct device_node *np, *child;
1511
1512 np = of_get_child_by_name(parent, "powergates");
1513 if (!np)
1514 return;
1515
1516 for_each_child_of_node(np, child) {
1517 of_genpd_del_provider(child);
1518
1519 genpd = of_genpd_remove_last(child);
1520 if (IS_ERR(genpd))
1521 continue;
1522
1523 tegra_powergate_remove(genpd);
1524 }
1525
1526 of_node_put(np);
1527
1528 np = of_get_child_by_name(parent, "core-domain");
1529 if (np) {
1530 of_genpd_del_provider(np);
1531 of_genpd_remove_last(np);
1532 }
1533 }
1534
1535 static const struct tegra_io_pad_soc *
tegra_io_pad_find(struct tegra_pmc * pmc,enum tegra_io_pad id)1536 tegra_io_pad_find(struct tegra_pmc *pmc, enum tegra_io_pad id)
1537 {
1538 unsigned int i;
1539
1540 for (i = 0; i < pmc->soc->num_io_pads; i++)
1541 if (pmc->soc->io_pads[i].id == id)
1542 return &pmc->soc->io_pads[i];
1543
1544 return NULL;
1545 }
1546
tegra_io_pad_prepare(struct tegra_pmc * pmc,const struct tegra_io_pad_soc * pad,unsigned long * request,unsigned long * status,u32 * mask)1547 static int tegra_io_pad_prepare(struct tegra_pmc *pmc,
1548 const struct tegra_io_pad_soc *pad,
1549 unsigned long *request,
1550 unsigned long *status,
1551 u32 *mask)
1552 {
1553 unsigned long rate, value;
1554
1555 if (pad->dpd == UINT_MAX)
1556 return -EINVAL;
1557
1558 *request = pad->request;
1559 *status = pad->status;
1560 *mask = BIT(pad->dpd);
1561
1562 if (pmc->clk) {
1563 rate = pmc->rate;
1564 if (!rate) {
1565 dev_err(pmc->dev, "failed to get clock rate\n");
1566 return -ENODEV;
1567 }
1568
1569 tegra_pmc_writel(pmc, DPD_SAMPLE_ENABLE, DPD_SAMPLE);
1570
1571 /* must be at least 200 ns, in APB (PCLK) clock cycles */
1572 value = DIV_ROUND_UP(1000000000, rate);
1573 value = DIV_ROUND_UP(200, value);
1574 tegra_pmc_writel(pmc, value, SEL_DPD_TIM);
1575 }
1576
1577 return 0;
1578 }
1579
tegra_io_pad_poll(struct tegra_pmc * pmc,unsigned long offset,u32 mask,u32 val,unsigned long timeout)1580 static int tegra_io_pad_poll(struct tegra_pmc *pmc, unsigned long offset,
1581 u32 mask, u32 val, unsigned long timeout)
1582 {
1583 u32 value;
1584
1585 timeout = jiffies + msecs_to_jiffies(timeout);
1586
1587 while (time_after(timeout, jiffies)) {
1588 value = tegra_pmc_readl(pmc, offset);
1589 if ((value & mask) == val)
1590 return 0;
1591
1592 usleep_range(250, 1000);
1593 }
1594
1595 return -ETIMEDOUT;
1596 }
1597
tegra_io_pad_unprepare(struct tegra_pmc * pmc)1598 static void tegra_io_pad_unprepare(struct tegra_pmc *pmc)
1599 {
1600 if (pmc->clk)
1601 tegra_pmc_writel(pmc, DPD_SAMPLE_DISABLE, DPD_SAMPLE);
1602 }
1603
1604 /**
1605 * tegra_io_pad_power_enable() - enable power to I/O pad
1606 * @id: Tegra I/O pad ID for which to enable power
1607 *
1608 * Returns: 0 on success or a negative error code on failure.
1609 */
tegra_io_pad_power_enable(enum tegra_io_pad id)1610 int tegra_io_pad_power_enable(enum tegra_io_pad id)
1611 {
1612 const struct tegra_io_pad_soc *pad;
1613 unsigned long request, status;
1614 u32 mask;
1615 int err;
1616
1617 pad = tegra_io_pad_find(pmc, id);
1618 if (!pad) {
1619 dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1620 return -ENOENT;
1621 }
1622
1623 mutex_lock(&pmc->powergates_lock);
1624
1625 err = tegra_io_pad_prepare(pmc, pad, &request, &status, &mask);
1626 if (err < 0) {
1627 dev_err(pmc->dev, "failed to prepare I/O pad: %d\n", err);
1628 goto unlock;
1629 }
1630
1631 tegra_pmc_writel(pmc, IO_DPD_REQ_CODE_OFF | mask, request);
1632
1633 err = tegra_io_pad_poll(pmc, status, mask, 0, 250);
1634 if (err < 0) {
1635 dev_err(pmc->dev, "failed to enable I/O pad: %d\n", err);
1636 goto unlock;
1637 }
1638
1639 tegra_io_pad_unprepare(pmc);
1640
1641 unlock:
1642 mutex_unlock(&pmc->powergates_lock);
1643 return err;
1644 }
1645 EXPORT_SYMBOL(tegra_io_pad_power_enable);
1646
1647 /**
1648 * tegra_io_pad_power_disable() - disable power to I/O pad
1649 * @id: Tegra I/O pad ID for which to disable power
1650 *
1651 * Returns: 0 on success or a negative error code on failure.
1652 */
tegra_io_pad_power_disable(enum tegra_io_pad id)1653 int tegra_io_pad_power_disable(enum tegra_io_pad id)
1654 {
1655 const struct tegra_io_pad_soc *pad;
1656 unsigned long request, status;
1657 u32 mask;
1658 int err;
1659
1660 pad = tegra_io_pad_find(pmc, id);
1661 if (!pad) {
1662 dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1663 return -ENOENT;
1664 }
1665
1666 mutex_lock(&pmc->powergates_lock);
1667
1668 err = tegra_io_pad_prepare(pmc, pad, &request, &status, &mask);
1669 if (err < 0) {
1670 dev_err(pmc->dev, "failed to prepare I/O pad: %d\n", err);
1671 goto unlock;
1672 }
1673
1674 tegra_pmc_writel(pmc, IO_DPD_REQ_CODE_ON | mask, request);
1675
1676 err = tegra_io_pad_poll(pmc, status, mask, mask, 250);
1677 if (err < 0) {
1678 dev_err(pmc->dev, "failed to disable I/O pad: %d\n", err);
1679 goto unlock;
1680 }
1681
1682 tegra_io_pad_unprepare(pmc);
1683
1684 unlock:
1685 mutex_unlock(&pmc->powergates_lock);
1686 return err;
1687 }
1688 EXPORT_SYMBOL(tegra_io_pad_power_disable);
1689
tegra_io_pad_is_powered(struct tegra_pmc * pmc,enum tegra_io_pad id)1690 static int tegra_io_pad_is_powered(struct tegra_pmc *pmc, enum tegra_io_pad id)
1691 {
1692 const struct tegra_io_pad_soc *pad;
1693 unsigned long status;
1694 u32 mask, value;
1695
1696 pad = tegra_io_pad_find(pmc, id);
1697 if (!pad) {
1698 dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1699 return -ENOENT;
1700 }
1701
1702 if (pad->dpd == UINT_MAX)
1703 return -EINVAL;
1704
1705 status = pad->status;
1706 mask = BIT(pad->dpd);
1707
1708 value = tegra_pmc_readl(pmc, status);
1709
1710 return !(value & mask);
1711 }
1712
tegra_io_pad_set_voltage(struct tegra_pmc * pmc,enum tegra_io_pad id,int voltage)1713 static int tegra_io_pad_set_voltage(struct tegra_pmc *pmc, enum tegra_io_pad id,
1714 int voltage)
1715 {
1716 const struct tegra_io_pad_soc *pad;
1717 u32 value;
1718
1719 pad = tegra_io_pad_find(pmc, id);
1720 if (!pad)
1721 return -ENOENT;
1722
1723 if (pad->voltage == UINT_MAX)
1724 return -ENOTSUPP;
1725
1726 mutex_lock(&pmc->powergates_lock);
1727
1728 if (pmc->soc->has_impl_33v_pwr) {
1729 value = tegra_pmc_readl(pmc, PMC_IMPL_E_33V_PWR);
1730
1731 if (voltage == TEGRA_IO_PAD_VOLTAGE_1V8)
1732 value &= ~BIT(pad->voltage);
1733 else
1734 value |= BIT(pad->voltage);
1735
1736 tegra_pmc_writel(pmc, value, PMC_IMPL_E_33V_PWR);
1737 } else {
1738 /* write-enable PMC_PWR_DET_VALUE[pad->voltage] */
1739 value = tegra_pmc_readl(pmc, PMC_PWR_DET);
1740 value |= BIT(pad->voltage);
1741 tegra_pmc_writel(pmc, value, PMC_PWR_DET);
1742
1743 /* update I/O voltage */
1744 value = tegra_pmc_readl(pmc, PMC_PWR_DET_VALUE);
1745
1746 if (voltage == TEGRA_IO_PAD_VOLTAGE_1V8)
1747 value &= ~BIT(pad->voltage);
1748 else
1749 value |= BIT(pad->voltage);
1750
1751 tegra_pmc_writel(pmc, value, PMC_PWR_DET_VALUE);
1752 }
1753
1754 mutex_unlock(&pmc->powergates_lock);
1755
1756 usleep_range(100, 250);
1757
1758 return 0;
1759 }
1760
tegra_io_pad_get_voltage(struct tegra_pmc * pmc,enum tegra_io_pad id)1761 static int tegra_io_pad_get_voltage(struct tegra_pmc *pmc, enum tegra_io_pad id)
1762 {
1763 const struct tegra_io_pad_soc *pad;
1764 u32 value;
1765
1766 pad = tegra_io_pad_find(pmc, id);
1767 if (!pad)
1768 return -ENOENT;
1769
1770 if (pad->voltage == UINT_MAX)
1771 return -ENOTSUPP;
1772
1773 if (pmc->soc->has_impl_33v_pwr)
1774 value = tegra_pmc_readl(pmc, PMC_IMPL_E_33V_PWR);
1775 else
1776 value = tegra_pmc_readl(pmc, PMC_PWR_DET_VALUE);
1777
1778 if ((value & BIT(pad->voltage)) == 0)
1779 return TEGRA_IO_PAD_VOLTAGE_1V8;
1780
1781 return TEGRA_IO_PAD_VOLTAGE_3V3;
1782 }
1783
1784 #ifdef CONFIG_PM_SLEEP
tegra_pmc_get_suspend_mode(void)1785 enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)
1786 {
1787 return pmc->suspend_mode;
1788 }
1789
tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode)1790 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode)
1791 {
1792 if (mode < TEGRA_SUSPEND_NONE || mode >= TEGRA_MAX_SUSPEND_MODE)
1793 return;
1794
1795 pmc->suspend_mode = mode;
1796 }
1797
tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode)1798 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode)
1799 {
1800 unsigned long long rate = 0;
1801 u64 ticks;
1802 u32 value;
1803
1804 switch (mode) {
1805 case TEGRA_SUSPEND_LP1:
1806 rate = 32768;
1807 break;
1808
1809 case TEGRA_SUSPEND_LP2:
1810 rate = pmc->rate;
1811 break;
1812
1813 default:
1814 break;
1815 }
1816
1817 if (WARN_ON_ONCE(rate == 0))
1818 rate = 100000000;
1819
1820 ticks = pmc->cpu_good_time * rate + USEC_PER_SEC - 1;
1821 do_div(ticks, USEC_PER_SEC);
1822 tegra_pmc_writel(pmc, ticks, PMC_CPUPWRGOOD_TIMER);
1823
1824 ticks = pmc->cpu_off_time * rate + USEC_PER_SEC - 1;
1825 do_div(ticks, USEC_PER_SEC);
1826 tegra_pmc_writel(pmc, ticks, PMC_CPUPWROFF_TIMER);
1827
1828 value = tegra_pmc_readl(pmc, PMC_CNTRL);
1829 value &= ~PMC_CNTRL_SIDE_EFFECT_LP0;
1830 value |= PMC_CNTRL_CPU_PWRREQ_OE;
1831 tegra_pmc_writel(pmc, value, PMC_CNTRL);
1832 }
1833 #endif
1834
tegra_pmc_parse_dt(struct tegra_pmc * pmc,struct device_node * np)1835 static int tegra_pmc_parse_dt(struct tegra_pmc *pmc, struct device_node *np)
1836 {
1837 u32 value, values[2];
1838
1839 if (of_property_read_u32(np, "nvidia,suspend-mode", &value)) {
1840 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1841 } else {
1842 switch (value) {
1843 case 0:
1844 pmc->suspend_mode = TEGRA_SUSPEND_LP0;
1845 break;
1846
1847 case 1:
1848 pmc->suspend_mode = TEGRA_SUSPEND_LP1;
1849 break;
1850
1851 case 2:
1852 pmc->suspend_mode = TEGRA_SUSPEND_LP2;
1853 break;
1854
1855 default:
1856 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1857 break;
1858 }
1859 }
1860
1861 pmc->suspend_mode = tegra_pm_validate_suspend_mode(pmc->suspend_mode);
1862
1863 if (of_property_read_u32(np, "nvidia,cpu-pwr-good-time", &value))
1864 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1865
1866 pmc->cpu_good_time = value;
1867
1868 if (of_property_read_u32(np, "nvidia,cpu-pwr-off-time", &value))
1869 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1870
1871 pmc->cpu_off_time = value;
1872
1873 if (of_property_read_u32_array(np, "nvidia,core-pwr-good-time",
1874 values, ARRAY_SIZE(values)))
1875 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1876
1877 pmc->core_osc_time = values[0];
1878 pmc->core_pmu_time = values[1];
1879
1880 if (of_property_read_u32(np, "nvidia,core-pwr-off-time", &value))
1881 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1882
1883 pmc->core_off_time = value;
1884
1885 pmc->corereq_high = of_property_read_bool(np,
1886 "nvidia,core-power-req-active-high");
1887
1888 pmc->sysclkreq_high = of_property_read_bool(np,
1889 "nvidia,sys-clock-req-active-high");
1890
1891 pmc->combined_req = of_property_read_bool(np,
1892 "nvidia,combined-power-req");
1893
1894 pmc->cpu_pwr_good_en = of_property_read_bool(np,
1895 "nvidia,cpu-pwr-good-en");
1896
1897 if (of_property_read_u32_array(np, "nvidia,lp0-vec", values,
1898 ARRAY_SIZE(values)))
1899 if (pmc->suspend_mode == TEGRA_SUSPEND_LP0)
1900 pmc->suspend_mode = TEGRA_SUSPEND_LP1;
1901
1902 pmc->lp0_vec_phys = values[0];
1903 pmc->lp0_vec_size = values[1];
1904
1905 return 0;
1906 }
1907
tegra_pmc_init(struct tegra_pmc * pmc)1908 static int tegra_pmc_init(struct tegra_pmc *pmc)
1909 {
1910 if (pmc->soc->max_wake_events > 0) {
1911 pmc->wake_type_level_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1912 if (!pmc->wake_type_level_map)
1913 return -ENOMEM;
1914
1915 pmc->wake_type_dual_edge_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1916 if (!pmc->wake_type_dual_edge_map)
1917 return -ENOMEM;
1918
1919 pmc->wake_sw_status_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1920 if (!pmc->wake_sw_status_map)
1921 return -ENOMEM;
1922
1923 pmc->wake_cntrl_level_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1924 if (!pmc->wake_cntrl_level_map)
1925 return -ENOMEM;
1926 }
1927
1928 if (pmc->soc->init)
1929 pmc->soc->init(pmc);
1930
1931 return 0;
1932 }
1933
tegra_pmc_init_tsense_reset(struct tegra_pmc * pmc)1934 static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
1935 {
1936 static const char disabled[] = "emergency thermal reset disabled";
1937 u32 pmu_addr, ctrl_id, reg_addr, reg_data, pinmux;
1938 struct device *dev = pmc->dev;
1939 struct device_node *np;
1940 u32 value, checksum;
1941
1942 if (!pmc->soc->has_tsense_reset)
1943 return;
1944
1945 np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
1946 if (!np) {
1947 dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
1948 return;
1949 }
1950
1951 if (of_property_read_u32(np, "nvidia,i2c-controller-id", &ctrl_id)) {
1952 dev_err(dev, "I2C controller ID missing, %s.\n", disabled);
1953 goto out;
1954 }
1955
1956 if (of_property_read_u32(np, "nvidia,bus-addr", &pmu_addr)) {
1957 dev_err(dev, "nvidia,bus-addr missing, %s.\n", disabled);
1958 goto out;
1959 }
1960
1961 if (of_property_read_u32(np, "nvidia,reg-addr", ®_addr)) {
1962 dev_err(dev, "nvidia,reg-addr missing, %s.\n", disabled);
1963 goto out;
1964 }
1965
1966 if (of_property_read_u32(np, "nvidia,reg-data", ®_data)) {
1967 dev_err(dev, "nvidia,reg-data missing, %s.\n", disabled);
1968 goto out;
1969 }
1970
1971 if (of_property_read_u32(np, "nvidia,pinmux-id", &pinmux))
1972 pinmux = 0;
1973
1974 value = tegra_pmc_readl(pmc, PMC_SENSOR_CTRL);
1975 value |= PMC_SENSOR_CTRL_SCRATCH_WRITE;
1976 tegra_pmc_writel(pmc, value, PMC_SENSOR_CTRL);
1977
1978 value = (reg_data << PMC_SCRATCH54_DATA_SHIFT) |
1979 (reg_addr << PMC_SCRATCH54_ADDR_SHIFT);
1980 tegra_pmc_writel(pmc, value, PMC_SCRATCH54);
1981
1982 value = PMC_SCRATCH55_RESET_TEGRA;
1983 value |= ctrl_id << PMC_SCRATCH55_CNTRL_ID_SHIFT;
1984 value |= pinmux << PMC_SCRATCH55_PINMUX_SHIFT;
1985 value |= pmu_addr << PMC_SCRATCH55_I2CSLV1_SHIFT;
1986
1987 /*
1988 * Calculate checksum of SCRATCH54, SCRATCH55 fields. Bits 23:16 will
1989 * contain the checksum and are currently zero, so they are not added.
1990 */
1991 checksum = reg_addr + reg_data + (value & 0xff) + ((value >> 8) & 0xff)
1992 + ((value >> 24) & 0xff);
1993 checksum &= 0xff;
1994 checksum = 0x100 - checksum;
1995
1996 value |= checksum << PMC_SCRATCH55_CHECKSUM_SHIFT;
1997
1998 tegra_pmc_writel(pmc, value, PMC_SCRATCH55);
1999
2000 value = tegra_pmc_readl(pmc, PMC_SENSOR_CTRL);
2001 value |= PMC_SENSOR_CTRL_ENABLE_RST;
2002 tegra_pmc_writel(pmc, value, PMC_SENSOR_CTRL);
2003
2004 dev_info(pmc->dev, "emergency thermal reset enabled\n");
2005
2006 out:
2007 of_node_put(np);
2008 }
2009
tegra_io_pad_pinctrl_get_groups_count(struct pinctrl_dev * pctl_dev)2010 static int tegra_io_pad_pinctrl_get_groups_count(struct pinctrl_dev *pctl_dev)
2011 {
2012 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2013
2014 return pmc->soc->num_io_pads;
2015 }
2016
tegra_io_pad_pinctrl_get_group_name(struct pinctrl_dev * pctl,unsigned int group)2017 static const char *tegra_io_pad_pinctrl_get_group_name(struct pinctrl_dev *pctl,
2018 unsigned int group)
2019 {
2020 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl);
2021
2022 return pmc->soc->io_pads[group].name;
2023 }
2024
tegra_io_pad_pinctrl_get_group_pins(struct pinctrl_dev * pctl_dev,unsigned int group,const unsigned int ** pins,unsigned int * num_pins)2025 static int tegra_io_pad_pinctrl_get_group_pins(struct pinctrl_dev *pctl_dev,
2026 unsigned int group,
2027 const unsigned int **pins,
2028 unsigned int *num_pins)
2029 {
2030 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2031
2032 *pins = &pmc->soc->io_pads[group].id;
2033 *num_pins = 1;
2034
2035 return 0;
2036 }
2037
2038 static const struct pinctrl_ops tegra_io_pad_pinctrl_ops = {
2039 .get_groups_count = tegra_io_pad_pinctrl_get_groups_count,
2040 .get_group_name = tegra_io_pad_pinctrl_get_group_name,
2041 .get_group_pins = tegra_io_pad_pinctrl_get_group_pins,
2042 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
2043 .dt_free_map = pinconf_generic_dt_free_map,
2044 };
2045
tegra_io_pad_pinconf_get(struct pinctrl_dev * pctl_dev,unsigned int pin,unsigned long * config)2046 static int tegra_io_pad_pinconf_get(struct pinctrl_dev *pctl_dev,
2047 unsigned int pin, unsigned long *config)
2048 {
2049 enum pin_config_param param = pinconf_to_config_param(*config);
2050 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2051 const struct tegra_io_pad_soc *pad;
2052 int ret;
2053 u32 arg;
2054
2055 pad = tegra_io_pad_find(pmc, pin);
2056 if (!pad)
2057 return -EINVAL;
2058
2059 switch (param) {
2060 case PIN_CONFIG_POWER_SOURCE:
2061 ret = tegra_io_pad_get_voltage(pmc, pad->id);
2062 if (ret < 0)
2063 return ret;
2064
2065 arg = ret;
2066 break;
2067
2068 case PIN_CONFIG_MODE_LOW_POWER:
2069 ret = tegra_io_pad_is_powered(pmc, pad->id);
2070 if (ret < 0)
2071 return ret;
2072
2073 arg = !ret;
2074 break;
2075
2076 default:
2077 return -EINVAL;
2078 }
2079
2080 *config = pinconf_to_config_packed(param, arg);
2081
2082 return 0;
2083 }
2084
tegra_io_pad_pinconf_set(struct pinctrl_dev * pctl_dev,unsigned int pin,unsigned long * configs,unsigned int num_configs)2085 static int tegra_io_pad_pinconf_set(struct pinctrl_dev *pctl_dev,
2086 unsigned int pin, unsigned long *configs,
2087 unsigned int num_configs)
2088 {
2089 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2090 const struct tegra_io_pad_soc *pad;
2091 enum pin_config_param param;
2092 unsigned int i;
2093 int err;
2094 u32 arg;
2095
2096 pad = tegra_io_pad_find(pmc, pin);
2097 if (!pad)
2098 return -EINVAL;
2099
2100 for (i = 0; i < num_configs; ++i) {
2101 param = pinconf_to_config_param(configs[i]);
2102 arg = pinconf_to_config_argument(configs[i]);
2103
2104 switch (param) {
2105 case PIN_CONFIG_MODE_LOW_POWER:
2106 if (arg)
2107 err = tegra_io_pad_power_disable(pad->id);
2108 else
2109 err = tegra_io_pad_power_enable(pad->id);
2110 if (err)
2111 return err;
2112 break;
2113 case PIN_CONFIG_POWER_SOURCE:
2114 if (arg != TEGRA_IO_PAD_VOLTAGE_1V8 &&
2115 arg != TEGRA_IO_PAD_VOLTAGE_3V3)
2116 return -EINVAL;
2117 err = tegra_io_pad_set_voltage(pmc, pad->id, arg);
2118 if (err)
2119 return err;
2120 break;
2121 default:
2122 return -EINVAL;
2123 }
2124 }
2125
2126 return 0;
2127 }
2128
2129 static const struct pinconf_ops tegra_io_pad_pinconf_ops = {
2130 .pin_config_get = tegra_io_pad_pinconf_get,
2131 .pin_config_set = tegra_io_pad_pinconf_set,
2132 .is_generic = true,
2133 };
2134
2135 static struct pinctrl_desc tegra_pmc_pctl_desc = {
2136 .pctlops = &tegra_io_pad_pinctrl_ops,
2137 .confops = &tegra_io_pad_pinconf_ops,
2138 };
2139
tegra_pmc_pinctrl_init(struct tegra_pmc * pmc)2140 static int tegra_pmc_pinctrl_init(struct tegra_pmc *pmc)
2141 {
2142 int err;
2143
2144 if (!pmc->soc->num_pin_descs)
2145 return 0;
2146
2147 tegra_pmc_pctl_desc.name = dev_name(pmc->dev);
2148 tegra_pmc_pctl_desc.pins = pmc->soc->pin_descs;
2149 tegra_pmc_pctl_desc.npins = pmc->soc->num_pin_descs;
2150
2151 pmc->pctl_dev = devm_pinctrl_register(pmc->dev, &tegra_pmc_pctl_desc,
2152 pmc);
2153 if (IS_ERR(pmc->pctl_dev)) {
2154 err = PTR_ERR(pmc->pctl_dev);
2155 dev_err(pmc->dev, "failed to register pin controller: %d\n",
2156 err);
2157 return err;
2158 }
2159
2160 return 0;
2161 }
2162
reset_reason_show(struct device * dev,struct device_attribute * attr,char * buf)2163 static ssize_t reset_reason_show(struct device *dev,
2164 struct device_attribute *attr, char *buf)
2165 {
2166 u32 value;
2167
2168 value = tegra_pmc_readl(pmc, pmc->soc->regs->rst_status);
2169 value &= pmc->soc->regs->rst_source_mask;
2170 value >>= pmc->soc->regs->rst_source_shift;
2171
2172 if (WARN_ON(value >= pmc->soc->num_reset_sources))
2173 return sprintf(buf, "%s\n", "UNKNOWN");
2174
2175 return sprintf(buf, "%s\n", pmc->soc->reset_sources[value]);
2176 }
2177
2178 static DEVICE_ATTR_RO(reset_reason);
2179
reset_level_show(struct device * dev,struct device_attribute * attr,char * buf)2180 static ssize_t reset_level_show(struct device *dev,
2181 struct device_attribute *attr, char *buf)
2182 {
2183 u32 value;
2184
2185 value = tegra_pmc_readl(pmc, pmc->soc->regs->rst_status);
2186 value &= pmc->soc->regs->rst_level_mask;
2187 value >>= pmc->soc->regs->rst_level_shift;
2188
2189 if (WARN_ON(value >= pmc->soc->num_reset_levels))
2190 return sprintf(buf, "%s\n", "UNKNOWN");
2191
2192 return sprintf(buf, "%s\n", pmc->soc->reset_levels[value]);
2193 }
2194
2195 static DEVICE_ATTR_RO(reset_level);
2196
tegra_pmc_reset_sysfs_init(struct tegra_pmc * pmc)2197 static void tegra_pmc_reset_sysfs_init(struct tegra_pmc *pmc)
2198 {
2199 struct device *dev = pmc->dev;
2200 int err = 0;
2201
2202 if (pmc->soc->reset_sources) {
2203 err = device_create_file(dev, &dev_attr_reset_reason);
2204 if (err < 0)
2205 dev_warn(dev,
2206 "failed to create attr \"reset_reason\": %d\n",
2207 err);
2208 }
2209
2210 if (pmc->soc->reset_levels) {
2211 err = device_create_file(dev, &dev_attr_reset_level);
2212 if (err < 0)
2213 dev_warn(dev,
2214 "failed to create attr \"reset_level\": %d\n",
2215 err);
2216 }
2217 }
2218
tegra_pmc_irq_translate(struct irq_domain * domain,struct irq_fwspec * fwspec,unsigned long * hwirq,unsigned int * type)2219 static int tegra_pmc_irq_translate(struct irq_domain *domain,
2220 struct irq_fwspec *fwspec,
2221 unsigned long *hwirq,
2222 unsigned int *type)
2223 {
2224 if (WARN_ON(fwspec->param_count < 2))
2225 return -EINVAL;
2226
2227 *hwirq = fwspec->param[0];
2228 *type = fwspec->param[1];
2229
2230 return 0;
2231 }
2232
tegra_pmc_irq_alloc(struct irq_domain * domain,unsigned int virq,unsigned int num_irqs,void * data)2233 static int tegra_pmc_irq_alloc(struct irq_domain *domain, unsigned int virq,
2234 unsigned int num_irqs, void *data)
2235 {
2236 struct tegra_pmc *pmc = domain->host_data;
2237 const struct tegra_pmc_soc *soc = pmc->soc;
2238 struct irq_fwspec *fwspec = data;
2239 unsigned int i;
2240 int err = 0;
2241
2242 if (WARN_ON(num_irqs > 1))
2243 return -EINVAL;
2244
2245 for (i = 0; i < soc->num_wake_events; i++) {
2246 const struct tegra_wake_event *event = &soc->wake_events[i];
2247
2248 /* IRQ and simple wake events */
2249 if (fwspec->param_count == 2) {
2250 struct irq_fwspec spec;
2251
2252 if (event->id != fwspec->param[0])
2253 continue;
2254
2255 err = irq_domain_set_hwirq_and_chip(domain, virq,
2256 event->id,
2257 &pmc->irq, pmc);
2258 if (err < 0)
2259 break;
2260
2261 /* simple hierarchies stop at the PMC level */
2262 if (event->irq == 0) {
2263 err = irq_domain_disconnect_hierarchy(domain->parent, virq);
2264 break;
2265 }
2266
2267 spec.fwnode = &pmc->dev->of_node->fwnode;
2268 spec.param_count = 3;
2269 spec.param[0] = GIC_SPI;
2270 spec.param[1] = event->irq;
2271 spec.param[2] = fwspec->param[1];
2272
2273 err = irq_domain_alloc_irqs_parent(domain, virq,
2274 num_irqs, &spec);
2275
2276 break;
2277 }
2278
2279 /* GPIO wake events */
2280 if (fwspec->param_count == 3) {
2281 if (event->gpio.instance != fwspec->param[0] ||
2282 event->gpio.pin != fwspec->param[1])
2283 continue;
2284
2285 err = irq_domain_set_hwirq_and_chip(domain, virq,
2286 event->id,
2287 &pmc->irq, pmc);
2288
2289 /* GPIO hierarchies stop at the PMC level */
2290 if (!err && domain->parent)
2291 err = irq_domain_disconnect_hierarchy(domain->parent,
2292 virq);
2293 break;
2294 }
2295 }
2296
2297 /* If there is no wake-up event, there is no PMC mapping */
2298 if (i == soc->num_wake_events)
2299 err = irq_domain_disconnect_hierarchy(domain, virq);
2300
2301 return err;
2302 }
2303
2304 static const struct irq_domain_ops tegra_pmc_irq_domain_ops = {
2305 .translate = tegra_pmc_irq_translate,
2306 .alloc = tegra_pmc_irq_alloc,
2307 };
2308
tegra210_pmc_irq_set_wake(struct irq_data * data,unsigned int on)2309 static int tegra210_pmc_irq_set_wake(struct irq_data *data, unsigned int on)
2310 {
2311 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2312 unsigned int offset, bit;
2313 u32 value;
2314
2315 offset = data->hwirq / 32;
2316 bit = data->hwirq % 32;
2317
2318 /* clear wake status */
2319 tegra_pmc_writel(pmc, 0, PMC_SW_WAKE_STATUS);
2320 tegra_pmc_writel(pmc, 0, PMC_SW_WAKE2_STATUS);
2321
2322 tegra_pmc_writel(pmc, 0, PMC_WAKE_STATUS);
2323 tegra_pmc_writel(pmc, 0, PMC_WAKE2_STATUS);
2324
2325 /* enable PMC wake */
2326 if (data->hwirq >= 32)
2327 offset = PMC_WAKE2_MASK;
2328 else
2329 offset = PMC_WAKE_MASK;
2330
2331 value = tegra_pmc_readl(pmc, offset);
2332
2333 if (on)
2334 value |= BIT(bit);
2335 else
2336 value &= ~BIT(bit);
2337
2338 tegra_pmc_writel(pmc, value, offset);
2339
2340 return 0;
2341 }
2342
tegra210_pmc_irq_set_type(struct irq_data * data,unsigned int type)2343 static int tegra210_pmc_irq_set_type(struct irq_data *data, unsigned int type)
2344 {
2345 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2346 unsigned int offset, bit;
2347 u32 value;
2348
2349 offset = data->hwirq / 32;
2350 bit = data->hwirq % 32;
2351
2352 if (data->hwirq >= 32)
2353 offset = PMC_WAKE2_LEVEL;
2354 else
2355 offset = PMC_WAKE_LEVEL;
2356
2357 value = tegra_pmc_readl(pmc, offset);
2358
2359 switch (type) {
2360 case IRQ_TYPE_EDGE_RISING:
2361 case IRQ_TYPE_LEVEL_HIGH:
2362 value |= BIT(bit);
2363 break;
2364
2365 case IRQ_TYPE_EDGE_FALLING:
2366 case IRQ_TYPE_LEVEL_LOW:
2367 value &= ~BIT(bit);
2368 break;
2369
2370 case IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING:
2371 value ^= BIT(bit);
2372 break;
2373
2374 default:
2375 return -EINVAL;
2376 }
2377
2378 tegra_pmc_writel(pmc, value, offset);
2379
2380 return 0;
2381 }
2382
tegra186_pmc_set_wake_filters(struct tegra_pmc * pmc)2383 static void tegra186_pmc_set_wake_filters(struct tegra_pmc *pmc)
2384 {
2385 u32 value;
2386
2387 /* SW Wake (wake83) needs SR_CAPTURE filter to be enabled */
2388 value = readl(pmc->wake + WAKE_AOWAKE_CNTRL(SW_WAKE_ID));
2389 value |= WAKE_AOWAKE_CNTRL_SR_CAPTURE_EN;
2390 writel(value, pmc->wake + WAKE_AOWAKE_CNTRL(SW_WAKE_ID));
2391 dev_dbg(pmc->dev, "WAKE_AOWAKE_CNTRL_83 = 0x%x\n", value);
2392 }
2393
tegra186_pmc_irq_set_wake(struct irq_data * data,unsigned int on)2394 static int tegra186_pmc_irq_set_wake(struct irq_data *data, unsigned int on)
2395 {
2396 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2397 unsigned int offset, bit;
2398 u32 value;
2399
2400 offset = data->hwirq / 32;
2401 bit = data->hwirq % 32;
2402
2403 /* clear wake status */
2404 writel(0x1, pmc->wake + WAKE_AOWAKE_STATUS_W(data->hwirq));
2405
2406 /* route wake to tier 2 */
2407 value = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(offset));
2408
2409 if (!on)
2410 value &= ~(1 << bit);
2411 else
2412 value |= 1 << bit;
2413
2414 writel(value, pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(offset));
2415
2416 /* enable wakeup event */
2417 writel(!!on, pmc->wake + WAKE_AOWAKE_MASK_W(data->hwirq));
2418
2419 return 0;
2420 }
2421
tegra186_pmc_irq_set_type(struct irq_data * data,unsigned int type)2422 static int tegra186_pmc_irq_set_type(struct irq_data *data, unsigned int type)
2423 {
2424 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2425 u32 value;
2426
2427 value = readl(pmc->wake + WAKE_AOWAKE_CNTRL(data->hwirq));
2428
2429 switch (type) {
2430 case IRQ_TYPE_EDGE_RISING:
2431 case IRQ_TYPE_LEVEL_HIGH:
2432 value |= WAKE_AOWAKE_CNTRL_LEVEL;
2433 set_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_FALLING:
2438 case IRQ_TYPE_LEVEL_LOW:
2439 value &= ~WAKE_AOWAKE_CNTRL_LEVEL;
2440 clear_bit(data->hwirq, pmc->wake_type_level_map);
2441 clear_bit(data->hwirq, pmc->wake_type_dual_edge_map);
2442 break;
2443
2444 case IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING:
2445 value ^= WAKE_AOWAKE_CNTRL_LEVEL;
2446 clear_bit(data->hwirq, pmc->wake_type_level_map);
2447 set_bit(data->hwirq, pmc->wake_type_dual_edge_map);
2448 break;
2449
2450 default:
2451 return -EINVAL;
2452 }
2453
2454 writel(value, pmc->wake + WAKE_AOWAKE_CNTRL(data->hwirq));
2455
2456 return 0;
2457 }
2458
tegra_irq_mask_parent(struct irq_data * data)2459 static void tegra_irq_mask_parent(struct irq_data *data)
2460 {
2461 if (data->parent_data)
2462 irq_chip_mask_parent(data);
2463 }
2464
tegra_irq_unmask_parent(struct irq_data * data)2465 static void tegra_irq_unmask_parent(struct irq_data *data)
2466 {
2467 if (data->parent_data)
2468 irq_chip_unmask_parent(data);
2469 }
2470
tegra_irq_eoi_parent(struct irq_data * data)2471 static void tegra_irq_eoi_parent(struct irq_data *data)
2472 {
2473 if (data->parent_data)
2474 irq_chip_eoi_parent(data);
2475 }
2476
tegra_irq_set_affinity_parent(struct irq_data * data,const struct cpumask * dest,bool force)2477 static int tegra_irq_set_affinity_parent(struct irq_data *data,
2478 const struct cpumask *dest,
2479 bool force)
2480 {
2481 if (data->parent_data)
2482 return irq_chip_set_affinity_parent(data, dest, force);
2483
2484 return -EINVAL;
2485 }
2486
tegra_pmc_irq_init(struct tegra_pmc * pmc)2487 static int tegra_pmc_irq_init(struct tegra_pmc *pmc)
2488 {
2489 struct irq_domain *parent = NULL;
2490 struct device_node *np;
2491
2492 np = of_irq_find_parent(pmc->dev->of_node);
2493 if (np) {
2494 parent = irq_find_host(np);
2495 of_node_put(np);
2496 }
2497
2498 if (!parent)
2499 return 0;
2500
2501 pmc->irq.name = dev_name(pmc->dev);
2502 pmc->irq.irq_mask = tegra_irq_mask_parent;
2503 pmc->irq.irq_unmask = tegra_irq_unmask_parent;
2504 pmc->irq.irq_eoi = tegra_irq_eoi_parent;
2505 pmc->irq.irq_set_affinity = tegra_irq_set_affinity_parent;
2506 pmc->irq.irq_set_type = pmc->soc->irq_set_type;
2507 pmc->irq.irq_set_wake = pmc->soc->irq_set_wake;
2508
2509 pmc->domain = irq_domain_add_hierarchy(parent, 0, 96, pmc->dev->of_node,
2510 &tegra_pmc_irq_domain_ops, pmc);
2511 if (!pmc->domain) {
2512 dev_err(pmc->dev, "failed to allocate domain\n");
2513 return -ENOMEM;
2514 }
2515
2516 return 0;
2517 }
2518
tegra_pmc_clk_notify_cb(struct notifier_block * nb,unsigned long action,void * ptr)2519 static int tegra_pmc_clk_notify_cb(struct notifier_block *nb,
2520 unsigned long action, void *ptr)
2521 {
2522 struct tegra_pmc *pmc = container_of(nb, struct tegra_pmc, clk_nb);
2523 struct clk_notifier_data *data = ptr;
2524
2525 switch (action) {
2526 case PRE_RATE_CHANGE:
2527 mutex_lock(&pmc->powergates_lock);
2528 break;
2529
2530 case POST_RATE_CHANGE:
2531 pmc->rate = data->new_rate;
2532 fallthrough;
2533
2534 case ABORT_RATE_CHANGE:
2535 mutex_unlock(&pmc->powergates_lock);
2536 break;
2537
2538 default:
2539 WARN_ON_ONCE(1);
2540 return notifier_from_errno(-EINVAL);
2541 }
2542
2543 return NOTIFY_OK;
2544 }
2545
pmc_clk_fence_udelay(u32 offset)2546 static void pmc_clk_fence_udelay(u32 offset)
2547 {
2548 tegra_pmc_readl(pmc, offset);
2549 /* pmc clk propagation delay 2 us */
2550 udelay(2);
2551 }
2552
pmc_clk_mux_get_parent(struct clk_hw * hw)2553 static u8 pmc_clk_mux_get_parent(struct clk_hw *hw)
2554 {
2555 struct pmc_clk *clk = to_pmc_clk(hw);
2556 u32 val;
2557
2558 val = tegra_pmc_readl(pmc, clk->offs) >> clk->mux_shift;
2559 val &= PMC_CLK_OUT_MUX_MASK;
2560
2561 return val;
2562 }
2563
pmc_clk_mux_set_parent(struct clk_hw * hw,u8 index)2564 static int pmc_clk_mux_set_parent(struct clk_hw *hw, u8 index)
2565 {
2566 struct pmc_clk *clk = to_pmc_clk(hw);
2567 u32 val;
2568
2569 val = tegra_pmc_readl(pmc, clk->offs);
2570 val &= ~(PMC_CLK_OUT_MUX_MASK << clk->mux_shift);
2571 val |= index << clk->mux_shift;
2572 tegra_pmc_writel(pmc, val, clk->offs);
2573 pmc_clk_fence_udelay(clk->offs);
2574
2575 return 0;
2576 }
2577
pmc_clk_is_enabled(struct clk_hw * hw)2578 static int pmc_clk_is_enabled(struct clk_hw *hw)
2579 {
2580 struct pmc_clk *clk = to_pmc_clk(hw);
2581 u32 val;
2582
2583 val = tegra_pmc_readl(pmc, clk->offs) & BIT(clk->force_en_shift);
2584
2585 return val ? 1 : 0;
2586 }
2587
pmc_clk_set_state(unsigned long offs,u32 shift,int state)2588 static void pmc_clk_set_state(unsigned long offs, u32 shift, int state)
2589 {
2590 u32 val;
2591
2592 val = tegra_pmc_readl(pmc, offs);
2593 val = state ? (val | BIT(shift)) : (val & ~BIT(shift));
2594 tegra_pmc_writel(pmc, val, offs);
2595 pmc_clk_fence_udelay(offs);
2596 }
2597
pmc_clk_enable(struct clk_hw * hw)2598 static int pmc_clk_enable(struct clk_hw *hw)
2599 {
2600 struct pmc_clk *clk = to_pmc_clk(hw);
2601
2602 pmc_clk_set_state(clk->offs, clk->force_en_shift, 1);
2603
2604 return 0;
2605 }
2606
pmc_clk_disable(struct clk_hw * hw)2607 static void pmc_clk_disable(struct clk_hw *hw)
2608 {
2609 struct pmc_clk *clk = to_pmc_clk(hw);
2610
2611 pmc_clk_set_state(clk->offs, clk->force_en_shift, 0);
2612 }
2613
2614 static const struct clk_ops pmc_clk_ops = {
2615 .get_parent = pmc_clk_mux_get_parent,
2616 .set_parent = pmc_clk_mux_set_parent,
2617 .determine_rate = __clk_mux_determine_rate,
2618 .is_enabled = pmc_clk_is_enabled,
2619 .enable = pmc_clk_enable,
2620 .disable = pmc_clk_disable,
2621 };
2622
2623 static struct clk *
tegra_pmc_clk_out_register(struct tegra_pmc * pmc,const struct pmc_clk_init_data * data,unsigned long offset)2624 tegra_pmc_clk_out_register(struct tegra_pmc *pmc,
2625 const struct pmc_clk_init_data *data,
2626 unsigned long offset)
2627 {
2628 struct clk_init_data init;
2629 struct pmc_clk *pmc_clk;
2630
2631 pmc_clk = devm_kzalloc(pmc->dev, sizeof(*pmc_clk), GFP_KERNEL);
2632 if (!pmc_clk)
2633 return ERR_PTR(-ENOMEM);
2634
2635 init.name = data->name;
2636 init.ops = &pmc_clk_ops;
2637 init.parent_names = data->parents;
2638 init.num_parents = data->num_parents;
2639 init.flags = CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT |
2640 CLK_SET_PARENT_GATE;
2641
2642 pmc_clk->hw.init = &init;
2643 pmc_clk->offs = offset;
2644 pmc_clk->mux_shift = data->mux_shift;
2645 pmc_clk->force_en_shift = data->force_en_shift;
2646
2647 return clk_register(NULL, &pmc_clk->hw);
2648 }
2649
pmc_clk_gate_is_enabled(struct clk_hw * hw)2650 static int pmc_clk_gate_is_enabled(struct clk_hw *hw)
2651 {
2652 struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2653
2654 return tegra_pmc_readl(pmc, gate->offs) & BIT(gate->shift) ? 1 : 0;
2655 }
2656
pmc_clk_gate_enable(struct clk_hw * hw)2657 static int pmc_clk_gate_enable(struct clk_hw *hw)
2658 {
2659 struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2660
2661 pmc_clk_set_state(gate->offs, gate->shift, 1);
2662
2663 return 0;
2664 }
2665
pmc_clk_gate_disable(struct clk_hw * hw)2666 static void pmc_clk_gate_disable(struct clk_hw *hw)
2667 {
2668 struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2669
2670 pmc_clk_set_state(gate->offs, gate->shift, 0);
2671 }
2672
2673 static const struct clk_ops pmc_clk_gate_ops = {
2674 .is_enabled = pmc_clk_gate_is_enabled,
2675 .enable = pmc_clk_gate_enable,
2676 .disable = pmc_clk_gate_disable,
2677 };
2678
2679 static struct clk *
tegra_pmc_clk_gate_register(struct tegra_pmc * pmc,const char * name,const char * parent_name,unsigned long offset,u32 shift)2680 tegra_pmc_clk_gate_register(struct tegra_pmc *pmc, const char *name,
2681 const char *parent_name, unsigned long offset,
2682 u32 shift)
2683 {
2684 struct clk_init_data init;
2685 struct pmc_clk_gate *gate;
2686
2687 gate = devm_kzalloc(pmc->dev, sizeof(*gate), GFP_KERNEL);
2688 if (!gate)
2689 return ERR_PTR(-ENOMEM);
2690
2691 init.name = name;
2692 init.ops = &pmc_clk_gate_ops;
2693 init.parent_names = &parent_name;
2694 init.num_parents = 1;
2695 init.flags = 0;
2696
2697 gate->hw.init = &init;
2698 gate->offs = offset;
2699 gate->shift = shift;
2700
2701 return clk_register(NULL, &gate->hw);
2702 }
2703
tegra_pmc_clock_register(struct tegra_pmc * pmc,struct device_node * np)2704 static void tegra_pmc_clock_register(struct tegra_pmc *pmc,
2705 struct device_node *np)
2706 {
2707 struct clk *clk;
2708 struct clk_onecell_data *clk_data;
2709 unsigned int num_clks;
2710 int i, err;
2711
2712 num_clks = pmc->soc->num_pmc_clks;
2713 if (pmc->soc->has_blink_output)
2714 num_clks += 1;
2715
2716 if (!num_clks)
2717 return;
2718
2719 clk_data = devm_kmalloc(pmc->dev, sizeof(*clk_data), GFP_KERNEL);
2720 if (!clk_data)
2721 return;
2722
2723 clk_data->clks = devm_kcalloc(pmc->dev, TEGRA_PMC_CLK_MAX,
2724 sizeof(*clk_data->clks), GFP_KERNEL);
2725 if (!clk_data->clks)
2726 return;
2727
2728 clk_data->clk_num = TEGRA_PMC_CLK_MAX;
2729
2730 for (i = 0; i < TEGRA_PMC_CLK_MAX; i++)
2731 clk_data->clks[i] = ERR_PTR(-ENOENT);
2732
2733 for (i = 0; i < pmc->soc->num_pmc_clks; i++) {
2734 const struct pmc_clk_init_data *data;
2735
2736 data = pmc->soc->pmc_clks_data + i;
2737
2738 clk = tegra_pmc_clk_out_register(pmc, data, PMC_CLK_OUT_CNTRL);
2739 if (IS_ERR(clk)) {
2740 dev_warn(pmc->dev, "unable to register clock %s: %d\n",
2741 data->name, PTR_ERR_OR_ZERO(clk));
2742 return;
2743 }
2744
2745 err = clk_register_clkdev(clk, data->name, NULL);
2746 if (err) {
2747 dev_warn(pmc->dev,
2748 "unable to register %s clock lookup: %d\n",
2749 data->name, err);
2750 return;
2751 }
2752
2753 clk_data->clks[data->clk_id] = clk;
2754 }
2755
2756 if (pmc->soc->has_blink_output) {
2757 tegra_pmc_writel(pmc, 0x0, PMC_BLINK_TIMER);
2758 clk = tegra_pmc_clk_gate_register(pmc,
2759 "pmc_blink_override",
2760 "clk_32k",
2761 PMC_DPD_PADS_ORIDE,
2762 PMC_DPD_PADS_ORIDE_BLINK);
2763 if (IS_ERR(clk)) {
2764 dev_warn(pmc->dev,
2765 "unable to register pmc_blink_override: %d\n",
2766 PTR_ERR_OR_ZERO(clk));
2767 return;
2768 }
2769
2770 clk = tegra_pmc_clk_gate_register(pmc, "pmc_blink",
2771 "pmc_blink_override",
2772 PMC_CNTRL,
2773 PMC_CNTRL_BLINK_EN);
2774 if (IS_ERR(clk)) {
2775 dev_warn(pmc->dev,
2776 "unable to register pmc_blink: %d\n",
2777 PTR_ERR_OR_ZERO(clk));
2778 return;
2779 }
2780
2781 err = clk_register_clkdev(clk, "pmc_blink", NULL);
2782 if (err) {
2783 dev_warn(pmc->dev,
2784 "unable to register pmc_blink lookup: %d\n",
2785 err);
2786 return;
2787 }
2788
2789 clk_data->clks[TEGRA_PMC_CLK_BLINK] = clk;
2790 }
2791
2792 err = of_clk_add_provider(np, of_clk_src_onecell_get, clk_data);
2793 if (err)
2794 dev_warn(pmc->dev, "failed to add pmc clock provider: %d\n",
2795 err);
2796 }
2797
2798 static const struct regmap_range pmc_usb_sleepwalk_ranges[] = {
2799 regmap_reg_range(PMC_USB_DEBOUNCE_DEL, PMC_USB_AO),
2800 regmap_reg_range(PMC_UTMIP_UHSIC_TRIGGERS, PMC_UTMIP_UHSIC_SAVED_STATE),
2801 regmap_reg_range(PMC_UTMIP_TERM_PAD_CFG, PMC_UTMIP_UHSIC_FAKE),
2802 regmap_reg_range(PMC_UTMIP_UHSIC_LINE_WAKEUP, PMC_UTMIP_UHSIC_LINE_WAKEUP),
2803 regmap_reg_range(PMC_UTMIP_BIAS_MASTER_CNTRL, PMC_UTMIP_MASTER_CONFIG),
2804 regmap_reg_range(PMC_UTMIP_UHSIC2_TRIGGERS, PMC_UTMIP_MASTER2_CONFIG),
2805 regmap_reg_range(PMC_UTMIP_PAD_CFG0, PMC_UTMIP_UHSIC_SLEEP_CFG1),
2806 regmap_reg_range(PMC_UTMIP_SLEEPWALK_P3, PMC_UTMIP_SLEEPWALK_P3),
2807 };
2808
2809 static const struct regmap_access_table pmc_usb_sleepwalk_table = {
2810 .yes_ranges = pmc_usb_sleepwalk_ranges,
2811 .n_yes_ranges = ARRAY_SIZE(pmc_usb_sleepwalk_ranges),
2812 };
2813
tegra_pmc_regmap_readl(void * context,unsigned int offset,unsigned int * value)2814 static int tegra_pmc_regmap_readl(void *context, unsigned int offset, unsigned int *value)
2815 {
2816 struct tegra_pmc *pmc = context;
2817
2818 *value = tegra_pmc_readl(pmc, offset);
2819 return 0;
2820 }
2821
tegra_pmc_regmap_writel(void * context,unsigned int offset,unsigned int value)2822 static int tegra_pmc_regmap_writel(void *context, unsigned int offset, unsigned int value)
2823 {
2824 struct tegra_pmc *pmc = context;
2825
2826 tegra_pmc_writel(pmc, value, offset);
2827 return 0;
2828 }
2829
2830 static const struct regmap_config usb_sleepwalk_regmap_config = {
2831 .name = "usb_sleepwalk",
2832 .reg_bits = 32,
2833 .val_bits = 32,
2834 .reg_stride = 4,
2835 .fast_io = true,
2836 .rd_table = &pmc_usb_sleepwalk_table,
2837 .wr_table = &pmc_usb_sleepwalk_table,
2838 .reg_read = tegra_pmc_regmap_readl,
2839 .reg_write = tegra_pmc_regmap_writel,
2840 };
2841
tegra_pmc_regmap_init(struct tegra_pmc * pmc)2842 static int tegra_pmc_regmap_init(struct tegra_pmc *pmc)
2843 {
2844 struct regmap *regmap;
2845 int err;
2846
2847 if (pmc->soc->has_usb_sleepwalk) {
2848 regmap = devm_regmap_init(pmc->dev, NULL, pmc, &usb_sleepwalk_regmap_config);
2849 if (IS_ERR(regmap)) {
2850 err = PTR_ERR(regmap);
2851 dev_err(pmc->dev, "failed to allocate register map (%d)\n", err);
2852 return err;
2853 }
2854 }
2855
2856 return 0;
2857 }
2858
tegra_pmc_reset_suspend_mode(void * data)2859 static void tegra_pmc_reset_suspend_mode(void *data)
2860 {
2861 pmc->suspend_mode = TEGRA_SUSPEND_NOT_READY;
2862 }
2863
tegra_pmc_probe(struct platform_device * pdev)2864 static int tegra_pmc_probe(struct platform_device *pdev)
2865 {
2866 void __iomem *base;
2867 struct resource *res;
2868 int err;
2869
2870 /*
2871 * Early initialisation should have configured an initial
2872 * register mapping and setup the soc data pointer. If these
2873 * are not valid then something went badly wrong!
2874 */
2875 if (WARN_ON(!pmc->base || !pmc->soc))
2876 return -ENODEV;
2877
2878 err = tegra_pmc_parse_dt(pmc, pdev->dev.of_node);
2879 if (err < 0)
2880 return err;
2881
2882 err = devm_add_action_or_reset(&pdev->dev, tegra_pmc_reset_suspend_mode,
2883 NULL);
2884 if (err)
2885 return err;
2886
2887 /* take over the memory region from the early initialization */
2888 base = devm_platform_ioremap_resource(pdev, 0);
2889 if (IS_ERR(base))
2890 return PTR_ERR(base);
2891
2892 if (pmc->soc->has_single_mmio_aperture) {
2893 pmc->wake = base;
2894 pmc->aotag = base;
2895 pmc->scratch = base;
2896 } else {
2897 pmc->wake = devm_platform_ioremap_resource_byname(pdev, "wake");
2898 if (IS_ERR(pmc->wake))
2899 return PTR_ERR(pmc->wake);
2900
2901 pmc->aotag = devm_platform_ioremap_resource_byname(pdev, "aotag");
2902 if (IS_ERR(pmc->aotag))
2903 return PTR_ERR(pmc->aotag);
2904
2905 /* "scratch" is an optional aperture */
2906 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
2907 "scratch");
2908 if (res) {
2909 pmc->scratch = devm_ioremap_resource(&pdev->dev, res);
2910 if (IS_ERR(pmc->scratch))
2911 return PTR_ERR(pmc->scratch);
2912 } else {
2913 pmc->scratch = NULL;
2914 }
2915 }
2916
2917 pmc->clk = devm_clk_get_optional(&pdev->dev, "pclk");
2918 if (IS_ERR(pmc->clk))
2919 return dev_err_probe(&pdev->dev, PTR_ERR(pmc->clk),
2920 "failed to get pclk\n");
2921
2922 /*
2923 * PMC should be last resort for restarting since it soft-resets
2924 * CPU without resetting everything else.
2925 */
2926 if (pmc->scratch) {
2927 err = devm_register_reboot_notifier(&pdev->dev,
2928 &tegra_pmc_reboot_notifier);
2929 if (err) {
2930 dev_err(&pdev->dev,
2931 "unable to register reboot notifier, %d\n",
2932 err);
2933 return err;
2934 }
2935 }
2936
2937 err = devm_register_sys_off_handler(&pdev->dev,
2938 SYS_OFF_MODE_RESTART,
2939 SYS_OFF_PRIO_LOW,
2940 tegra_pmc_restart_handler, NULL);
2941 if (err) {
2942 dev_err(&pdev->dev, "failed to register sys-off handler: %d\n",
2943 err);
2944 return err;
2945 }
2946
2947 /*
2948 * PMC should be primary power-off method if it soft-resets CPU,
2949 * asking bootloader to shutdown hardware.
2950 */
2951 err = devm_register_sys_off_handler(&pdev->dev,
2952 SYS_OFF_MODE_POWER_OFF,
2953 SYS_OFF_PRIO_FIRMWARE,
2954 tegra_pmc_power_off_handler, NULL);
2955 if (err) {
2956 dev_err(&pdev->dev, "failed to register sys-off handler: %d\n",
2957 err);
2958 return err;
2959 }
2960
2961 /*
2962 * PCLK clock rate can't be retrieved using CLK API because it
2963 * causes lockup if CPU enters LP2 idle state from some other
2964 * CLK notifier, hence we're caching the rate's value locally.
2965 */
2966 if (pmc->clk) {
2967 pmc->clk_nb.notifier_call = tegra_pmc_clk_notify_cb;
2968 err = devm_clk_notifier_register(&pdev->dev, pmc->clk,
2969 &pmc->clk_nb);
2970 if (err) {
2971 dev_err(&pdev->dev,
2972 "failed to register clk notifier\n");
2973 return err;
2974 }
2975
2976 pmc->rate = clk_get_rate(pmc->clk);
2977 }
2978
2979 pmc->dev = &pdev->dev;
2980
2981 err = tegra_pmc_init(pmc);
2982 if (err < 0) {
2983 dev_err(&pdev->dev, "failed to initialize PMC: %d\n", err);
2984 return err;
2985 }
2986
2987 tegra_pmc_init_tsense_reset(pmc);
2988
2989 tegra_pmc_reset_sysfs_init(pmc);
2990
2991 err = tegra_pmc_pinctrl_init(pmc);
2992 if (err)
2993 goto cleanup_sysfs;
2994
2995 err = tegra_pmc_regmap_init(pmc);
2996 if (err < 0)
2997 goto cleanup_sysfs;
2998
2999 err = tegra_powergate_init(pmc, pdev->dev.of_node);
3000 if (err < 0)
3001 goto cleanup_powergates;
3002
3003 err = tegra_pmc_irq_init(pmc);
3004 if (err < 0)
3005 goto cleanup_powergates;
3006
3007 mutex_lock(&pmc->powergates_lock);
3008 iounmap(pmc->base);
3009 pmc->base = base;
3010 mutex_unlock(&pmc->powergates_lock);
3011
3012 tegra_pmc_clock_register(pmc, pdev->dev.of_node);
3013 platform_set_drvdata(pdev, pmc);
3014 tegra_pm_init_suspend();
3015
3016 /* Some wakes require specific filter configuration */
3017 if (pmc->soc->set_wake_filters)
3018 pmc->soc->set_wake_filters(pmc);
3019
3020 debugfs_create_file("powergate", 0444, NULL, NULL, &powergate_fops);
3021
3022 return 0;
3023
3024 cleanup_powergates:
3025 tegra_powergate_remove_all(pdev->dev.of_node);
3026 cleanup_sysfs:
3027 device_remove_file(&pdev->dev, &dev_attr_reset_reason);
3028 device_remove_file(&pdev->dev, &dev_attr_reset_level);
3029
3030 return err;
3031 }
3032
3033 /*
3034 * Ensures that sufficient time is passed for a register write to
3035 * serialize into the 32KHz domain.
3036 */
wke_32kwritel(struct tegra_pmc * pmc,u32 value,unsigned int offset)3037 static void wke_32kwritel(struct tegra_pmc *pmc, u32 value, unsigned int offset)
3038 {
3039 writel(value, pmc->wake + offset);
3040 udelay(130);
3041 }
3042
wke_write_wake_level(struct tegra_pmc * pmc,int wake,int level)3043 static void wke_write_wake_level(struct tegra_pmc *pmc, int wake, int level)
3044 {
3045 unsigned int offset = WAKE_AOWAKE_CNTRL(wake);
3046 u32 value;
3047
3048 value = readl(pmc->wake + offset);
3049 if (level)
3050 value |= WAKE_AOWAKE_CNTRL_LEVEL;
3051 else
3052 value &= ~WAKE_AOWAKE_CNTRL_LEVEL;
3053
3054 writel(value, pmc->wake + offset);
3055 }
3056
wke_write_wake_levels(struct tegra_pmc * pmc)3057 static void wke_write_wake_levels(struct tegra_pmc *pmc)
3058 {
3059 unsigned int i;
3060
3061 for (i = 0; i < pmc->soc->max_wake_events; i++)
3062 wke_write_wake_level(pmc, i, test_bit(i, pmc->wake_cntrl_level_map));
3063 }
3064
wke_clear_sw_wake_status(struct tegra_pmc * pmc)3065 static void wke_clear_sw_wake_status(struct tegra_pmc *pmc)
3066 {
3067 wke_32kwritel(pmc, 1, WAKE_AOWAKE_SW_STATUS_W_0);
3068 }
3069
wke_read_sw_wake_status(struct tegra_pmc * pmc)3070 static void wke_read_sw_wake_status(struct tegra_pmc *pmc)
3071 {
3072 unsigned long status;
3073 unsigned int wake, i;
3074
3075 for (i = 0; i < pmc->soc->max_wake_events; i++)
3076 wke_write_wake_level(pmc, i, 0);
3077
3078 wke_clear_sw_wake_status(pmc);
3079
3080 wke_32kwritel(pmc, 1, WAKE_LATCH_SW);
3081
3082 /*
3083 * WAKE_AOWAKE_SW_STATUS is edge triggered, so in order to
3084 * obtain the current status of the input wake signals, change
3085 * the polarity of the wake level from 0->1 while latching to force
3086 * a positive edge if the sampled signal is '1'.
3087 */
3088 for (i = 0; i < pmc->soc->max_wake_events; i++)
3089 wke_write_wake_level(pmc, i, 1);
3090
3091 /*
3092 * Wait for the update to be synced into the 32kHz domain,
3093 * and let enough time lapse, so that the wake signals have time to
3094 * be sampled.
3095 */
3096 udelay(300);
3097
3098 wke_32kwritel(pmc, 0, WAKE_LATCH_SW);
3099
3100 bitmap_zero(pmc->wake_sw_status_map, pmc->soc->max_wake_events);
3101
3102 for (i = 0; i < pmc->soc->max_wake_vectors; i++) {
3103 status = readl(pmc->wake + WAKE_AOWAKE_SW_STATUS(i));
3104
3105 for_each_set_bit(wake, &status, 32)
3106 set_bit(wake + (i * 32), pmc->wake_sw_status_map);
3107 }
3108 }
3109
wke_clear_wake_status(struct tegra_pmc * pmc)3110 static void wke_clear_wake_status(struct tegra_pmc *pmc)
3111 {
3112 unsigned long status;
3113 unsigned int i, wake;
3114 u32 mask;
3115
3116 for (i = 0; i < pmc->soc->max_wake_vectors; i++) {
3117 mask = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(i));
3118 status = readl(pmc->wake + WAKE_AOWAKE_STATUS_R(i)) & mask;
3119
3120 for_each_set_bit(wake, &status, 32)
3121 wke_32kwritel(pmc, 0x1, WAKE_AOWAKE_STATUS_W((i * 32) + wake));
3122 }
3123 }
3124
3125 /* 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)3126 static void tegra186_pmc_process_wake_events(struct tegra_pmc *pmc, unsigned int index,
3127 unsigned long status)
3128 {
3129 unsigned int wake;
3130
3131 dev_dbg(pmc->dev, "Wake[%d:%d] status=%#lx\n", (index * 32) + 31, index * 32, status);
3132
3133 for_each_set_bit(wake, &status, 32) {
3134 irq_hw_number_t hwirq = wake + 32 * index;
3135 struct irq_desc *desc;
3136 unsigned int irq;
3137
3138 irq = irq_find_mapping(pmc->domain, hwirq);
3139
3140 desc = irq_to_desc(irq);
3141 if (!desc || !desc->action || !desc->action->name) {
3142 dev_dbg(pmc->dev, "Resume caused by WAKE%ld, IRQ %d\n", hwirq, irq);
3143 continue;
3144 }
3145
3146 dev_dbg(pmc->dev, "Resume caused by WAKE%ld, %s\n", hwirq, desc->action->name);
3147 generic_handle_irq(irq);
3148 }
3149 }
3150
tegra186_pmc_wake_syscore_resume(void)3151 static void tegra186_pmc_wake_syscore_resume(void)
3152 {
3153 u32 status, mask;
3154 unsigned int i;
3155
3156 for (i = 0; i < pmc->soc->max_wake_vectors; i++) {
3157 mask = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(i));
3158 status = readl(pmc->wake + WAKE_AOWAKE_STATUS_R(i)) & mask;
3159
3160 tegra186_pmc_process_wake_events(pmc, i, status);
3161 }
3162 }
3163
tegra186_pmc_wake_syscore_suspend(void)3164 static int tegra186_pmc_wake_syscore_suspend(void)
3165 {
3166 wke_read_sw_wake_status(pmc);
3167
3168 /* flip the wakeup trigger for dual-edge triggered pads
3169 * which are currently asserting as wakeups
3170 */
3171 bitmap_andnot(pmc->wake_cntrl_level_map, pmc->wake_type_dual_edge_map,
3172 pmc->wake_sw_status_map, pmc->soc->max_wake_events);
3173 bitmap_or(pmc->wake_cntrl_level_map, pmc->wake_cntrl_level_map,
3174 pmc->wake_type_level_map, pmc->soc->max_wake_events);
3175
3176 /* Clear PMC Wake Status registers while going to suspend */
3177 wke_clear_wake_status(pmc);
3178 wke_write_wake_levels(pmc);
3179
3180 return 0;
3181 }
3182
3183 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
tegra_pmc_suspend(struct device * dev)3184 static int tegra_pmc_suspend(struct device *dev)
3185 {
3186 struct tegra_pmc *pmc = dev_get_drvdata(dev);
3187
3188 tegra_pmc_writel(pmc, virt_to_phys(tegra_resume), PMC_SCRATCH41);
3189
3190 return 0;
3191 }
3192
tegra_pmc_resume(struct device * dev)3193 static int tegra_pmc_resume(struct device *dev)
3194 {
3195 struct tegra_pmc *pmc = dev_get_drvdata(dev);
3196
3197 tegra_pmc_writel(pmc, 0x0, PMC_SCRATCH41);
3198
3199 return 0;
3200 }
3201
3202 static SIMPLE_DEV_PM_OPS(tegra_pmc_pm_ops, tegra_pmc_suspend, tegra_pmc_resume);
3203
3204 #endif
3205
3206 static const char * const tegra20_powergates[] = {
3207 [TEGRA_POWERGATE_CPU] = "cpu",
3208 [TEGRA_POWERGATE_3D] = "td",
3209 [TEGRA_POWERGATE_VENC] = "venc",
3210 [TEGRA_POWERGATE_VDEC] = "vdec",
3211 [TEGRA_POWERGATE_PCIE] = "pcie",
3212 [TEGRA_POWERGATE_L2] = "l2",
3213 [TEGRA_POWERGATE_MPE] = "mpe",
3214 };
3215
3216 static const struct tegra_pmc_regs tegra20_pmc_regs = {
3217 .scratch0 = 0x50,
3218 .rst_status = 0x1b4,
3219 .rst_source_shift = 0x0,
3220 .rst_source_mask = 0x7,
3221 .rst_level_shift = 0x0,
3222 .rst_level_mask = 0x0,
3223 };
3224
tegra20_pmc_init(struct tegra_pmc * pmc)3225 static void tegra20_pmc_init(struct tegra_pmc *pmc)
3226 {
3227 u32 value, osc, pmu, off;
3228
3229 /* Always enable CPU power request */
3230 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3231 value |= PMC_CNTRL_CPU_PWRREQ_OE;
3232 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3233
3234 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3235
3236 if (pmc->sysclkreq_high)
3237 value &= ~PMC_CNTRL_SYSCLK_POLARITY;
3238 else
3239 value |= PMC_CNTRL_SYSCLK_POLARITY;
3240
3241 if (pmc->corereq_high)
3242 value &= ~PMC_CNTRL_PWRREQ_POLARITY;
3243 else
3244 value |= PMC_CNTRL_PWRREQ_POLARITY;
3245
3246 /* configure the output polarity while the request is tristated */
3247 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3248
3249 /* now enable the request */
3250 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3251 value |= PMC_CNTRL_SYSCLK_OE;
3252 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3253
3254 /* program core timings which are applicable only for suspend state */
3255 if (pmc->suspend_mode != TEGRA_SUSPEND_NONE) {
3256 osc = DIV_ROUND_UP(pmc->core_osc_time * 8192, 1000000);
3257 pmu = DIV_ROUND_UP(pmc->core_pmu_time * 32768, 1000000);
3258 off = DIV_ROUND_UP(pmc->core_off_time * 32768, 1000000);
3259 tegra_pmc_writel(pmc, ((osc << 8) & 0xff00) | (pmu & 0xff),
3260 PMC_COREPWRGOOD_TIMER);
3261 tegra_pmc_writel(pmc, off, PMC_COREPWROFF_TIMER);
3262 }
3263 }
3264
tegra20_pmc_setup_irq_polarity(struct tegra_pmc * pmc,struct device_node * np,bool invert)3265 static void tegra20_pmc_setup_irq_polarity(struct tegra_pmc *pmc,
3266 struct device_node *np,
3267 bool invert)
3268 {
3269 u32 value;
3270
3271 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3272
3273 if (invert)
3274 value |= PMC_CNTRL_INTR_POLARITY;
3275 else
3276 value &= ~PMC_CNTRL_INTR_POLARITY;
3277
3278 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3279 }
3280
3281 static const struct tegra_pmc_soc tegra20_pmc_soc = {
3282 .supports_core_domain = true,
3283 .num_powergates = ARRAY_SIZE(tegra20_powergates),
3284 .powergates = tegra20_powergates,
3285 .num_cpu_powergates = 0,
3286 .cpu_powergates = NULL,
3287 .has_tsense_reset = false,
3288 .has_gpu_clamps = false,
3289 .needs_mbist_war = false,
3290 .has_impl_33v_pwr = false,
3291 .maybe_tz_only = false,
3292 .num_io_pads = 0,
3293 .io_pads = NULL,
3294 .num_pin_descs = 0,
3295 .pin_descs = NULL,
3296 .regs = &tegra20_pmc_regs,
3297 .init = tegra20_pmc_init,
3298 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3299 .powergate_set = tegra20_powergate_set,
3300 .reset_sources = NULL,
3301 .num_reset_sources = 0,
3302 .reset_levels = NULL,
3303 .num_reset_levels = 0,
3304 .pmc_clks_data = NULL,
3305 .num_pmc_clks = 0,
3306 .has_blink_output = true,
3307 .has_usb_sleepwalk = true,
3308 .has_single_mmio_aperture = true,
3309 };
3310
3311 static const char * const tegra30_powergates[] = {
3312 [TEGRA_POWERGATE_CPU] = "cpu0",
3313 [TEGRA_POWERGATE_3D] = "td",
3314 [TEGRA_POWERGATE_VENC] = "venc",
3315 [TEGRA_POWERGATE_VDEC] = "vdec",
3316 [TEGRA_POWERGATE_PCIE] = "pcie",
3317 [TEGRA_POWERGATE_L2] = "l2",
3318 [TEGRA_POWERGATE_MPE] = "mpe",
3319 [TEGRA_POWERGATE_HEG] = "heg",
3320 [TEGRA_POWERGATE_SATA] = "sata",
3321 [TEGRA_POWERGATE_CPU1] = "cpu1",
3322 [TEGRA_POWERGATE_CPU2] = "cpu2",
3323 [TEGRA_POWERGATE_CPU3] = "cpu3",
3324 [TEGRA_POWERGATE_CELP] = "celp",
3325 [TEGRA_POWERGATE_3D1] = "td2",
3326 };
3327
3328 static const u8 tegra30_cpu_powergates[] = {
3329 TEGRA_POWERGATE_CPU,
3330 TEGRA_POWERGATE_CPU1,
3331 TEGRA_POWERGATE_CPU2,
3332 TEGRA_POWERGATE_CPU3,
3333 };
3334
3335 static const char * const tegra30_reset_sources[] = {
3336 "POWER_ON_RESET",
3337 "WATCHDOG",
3338 "SENSOR",
3339 "SW_MAIN",
3340 "LP0"
3341 };
3342
3343 static const struct tegra_pmc_soc tegra30_pmc_soc = {
3344 .supports_core_domain = true,
3345 .num_powergates = ARRAY_SIZE(tegra30_powergates),
3346 .powergates = tegra30_powergates,
3347 .num_cpu_powergates = ARRAY_SIZE(tegra30_cpu_powergates),
3348 .cpu_powergates = tegra30_cpu_powergates,
3349 .has_tsense_reset = true,
3350 .has_gpu_clamps = false,
3351 .needs_mbist_war = false,
3352 .has_impl_33v_pwr = false,
3353 .maybe_tz_only = false,
3354 .num_io_pads = 0,
3355 .io_pads = NULL,
3356 .num_pin_descs = 0,
3357 .pin_descs = NULL,
3358 .regs = &tegra20_pmc_regs,
3359 .init = tegra20_pmc_init,
3360 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3361 .powergate_set = tegra20_powergate_set,
3362 .reset_sources = tegra30_reset_sources,
3363 .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3364 .reset_levels = NULL,
3365 .num_reset_levels = 0,
3366 .pmc_clks_data = tegra_pmc_clks_data,
3367 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3368 .has_blink_output = true,
3369 .has_usb_sleepwalk = true,
3370 .has_single_mmio_aperture = true,
3371 };
3372
3373 static const char * const tegra114_powergates[] = {
3374 [TEGRA_POWERGATE_CPU] = "crail",
3375 [TEGRA_POWERGATE_3D] = "td",
3376 [TEGRA_POWERGATE_VENC] = "venc",
3377 [TEGRA_POWERGATE_VDEC] = "vdec",
3378 [TEGRA_POWERGATE_MPE] = "mpe",
3379 [TEGRA_POWERGATE_HEG] = "heg",
3380 [TEGRA_POWERGATE_CPU1] = "cpu1",
3381 [TEGRA_POWERGATE_CPU2] = "cpu2",
3382 [TEGRA_POWERGATE_CPU3] = "cpu3",
3383 [TEGRA_POWERGATE_CELP] = "celp",
3384 [TEGRA_POWERGATE_CPU0] = "cpu0",
3385 [TEGRA_POWERGATE_C0NC] = "c0nc",
3386 [TEGRA_POWERGATE_C1NC] = "c1nc",
3387 [TEGRA_POWERGATE_DIS] = "dis",
3388 [TEGRA_POWERGATE_DISB] = "disb",
3389 [TEGRA_POWERGATE_XUSBA] = "xusba",
3390 [TEGRA_POWERGATE_XUSBB] = "xusbb",
3391 [TEGRA_POWERGATE_XUSBC] = "xusbc",
3392 };
3393
3394 static const u8 tegra114_cpu_powergates[] = {
3395 TEGRA_POWERGATE_CPU0,
3396 TEGRA_POWERGATE_CPU1,
3397 TEGRA_POWERGATE_CPU2,
3398 TEGRA_POWERGATE_CPU3,
3399 };
3400
3401 static const struct tegra_pmc_soc tegra114_pmc_soc = {
3402 .supports_core_domain = false,
3403 .num_powergates = ARRAY_SIZE(tegra114_powergates),
3404 .powergates = tegra114_powergates,
3405 .num_cpu_powergates = ARRAY_SIZE(tegra114_cpu_powergates),
3406 .cpu_powergates = tegra114_cpu_powergates,
3407 .has_tsense_reset = true,
3408 .has_gpu_clamps = false,
3409 .needs_mbist_war = false,
3410 .has_impl_33v_pwr = false,
3411 .maybe_tz_only = false,
3412 .num_io_pads = 0,
3413 .io_pads = NULL,
3414 .num_pin_descs = 0,
3415 .pin_descs = NULL,
3416 .regs = &tegra20_pmc_regs,
3417 .init = tegra20_pmc_init,
3418 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3419 .powergate_set = tegra114_powergate_set,
3420 .reset_sources = tegra30_reset_sources,
3421 .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3422 .reset_levels = NULL,
3423 .num_reset_levels = 0,
3424 .pmc_clks_data = tegra_pmc_clks_data,
3425 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3426 .has_blink_output = true,
3427 .has_usb_sleepwalk = true,
3428 .has_single_mmio_aperture = true,
3429 };
3430
3431 static const char * const tegra124_powergates[] = {
3432 [TEGRA_POWERGATE_CPU] = "crail",
3433 [TEGRA_POWERGATE_3D] = "3d",
3434 [TEGRA_POWERGATE_VENC] = "venc",
3435 [TEGRA_POWERGATE_PCIE] = "pcie",
3436 [TEGRA_POWERGATE_VDEC] = "vdec",
3437 [TEGRA_POWERGATE_MPE] = "mpe",
3438 [TEGRA_POWERGATE_HEG] = "heg",
3439 [TEGRA_POWERGATE_SATA] = "sata",
3440 [TEGRA_POWERGATE_CPU1] = "cpu1",
3441 [TEGRA_POWERGATE_CPU2] = "cpu2",
3442 [TEGRA_POWERGATE_CPU3] = "cpu3",
3443 [TEGRA_POWERGATE_CELP] = "celp",
3444 [TEGRA_POWERGATE_CPU0] = "cpu0",
3445 [TEGRA_POWERGATE_C0NC] = "c0nc",
3446 [TEGRA_POWERGATE_C1NC] = "c1nc",
3447 [TEGRA_POWERGATE_SOR] = "sor",
3448 [TEGRA_POWERGATE_DIS] = "dis",
3449 [TEGRA_POWERGATE_DISB] = "disb",
3450 [TEGRA_POWERGATE_XUSBA] = "xusba",
3451 [TEGRA_POWERGATE_XUSBB] = "xusbb",
3452 [TEGRA_POWERGATE_XUSBC] = "xusbc",
3453 [TEGRA_POWERGATE_VIC] = "vic",
3454 [TEGRA_POWERGATE_IRAM] = "iram",
3455 };
3456
3457 static const u8 tegra124_cpu_powergates[] = {
3458 TEGRA_POWERGATE_CPU0,
3459 TEGRA_POWERGATE_CPU1,
3460 TEGRA_POWERGATE_CPU2,
3461 TEGRA_POWERGATE_CPU3,
3462 };
3463
3464 #define TEGRA_IO_PAD(_id, _dpd, _request, _status, _voltage, _name) \
3465 ((struct tegra_io_pad_soc) { \
3466 .id = (_id), \
3467 .dpd = (_dpd), \
3468 .request = (_request), \
3469 .status = (_status), \
3470 .voltage = (_voltage), \
3471 .name = (_name), \
3472 })
3473
3474 #define TEGRA_IO_PIN_DESC(_id, _name) \
3475 ((struct pinctrl_pin_desc) { \
3476 .number = (_id), \
3477 .name = (_name), \
3478 })
3479
3480 static const struct tegra_io_pad_soc tegra124_io_pads[] = {
3481 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x1b8, 0x1bc, UINT_MAX, "audio"),
3482 TEGRA_IO_PAD(TEGRA_IO_PAD_BB, 15, 0x1b8, 0x1bc, UINT_MAX, "bb"),
3483 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 4, 0x1c0, 0x1c4, UINT_MAX, "cam"),
3484 TEGRA_IO_PAD(TEGRA_IO_PAD_COMP, 22, 0x1b8, 0x1bc, UINT_MAX, "comp"),
3485 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x1b8, 0x1bc, UINT_MAX, "csia"),
3486 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x1b8, 0x1bc, UINT_MAX, "csib"),
3487 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 12, 0x1c0, 0x1c4, UINT_MAX, "csie"),
3488 TEGRA_IO_PAD(TEGRA_IO_PAD_DSI, 2, 0x1b8, 0x1bc, UINT_MAX, "dsi"),
3489 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIB, 7, 0x1c0, 0x1c4, UINT_MAX, "dsib"),
3490 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIC, 8, 0x1c0, 0x1c4, UINT_MAX, "dsic"),
3491 TEGRA_IO_PAD(TEGRA_IO_PAD_DSID, 9, 0x1c0, 0x1c4, UINT_MAX, "dsid"),
3492 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI, 28, 0x1b8, 0x1bc, UINT_MAX, "hdmi"),
3493 TEGRA_IO_PAD(TEGRA_IO_PAD_HSIC, 19, 0x1b8, 0x1bc, UINT_MAX, "hsic"),
3494 TEGRA_IO_PAD(TEGRA_IO_PAD_HV, 6, 0x1c0, 0x1c4, UINT_MAX, "hv"),
3495 TEGRA_IO_PAD(TEGRA_IO_PAD_LVDS, 25, 0x1c0, 0x1c4, UINT_MAX, "lvds"),
3496 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x1b8, 0x1bc, UINT_MAX, "mipi-bias"),
3497 TEGRA_IO_PAD(TEGRA_IO_PAD_NAND, 13, 0x1b8, 0x1bc, UINT_MAX, "nand"),
3498 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_BIAS, 4, 0x1b8, 0x1bc, UINT_MAX, "pex-bias"),
3499 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 5, 0x1b8, 0x1bc, UINT_MAX, "pex-clk1"),
3500 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x1b8, 0x1bc, UINT_MAX, "pex-clk2"),
3501 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, 0, 0x1c0, 0x1c4, UINT_MAX, "pex-cntrl"),
3502 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1, 1, 0x1c0, 0x1c4, UINT_MAX, "sdmmc1"),
3503 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3, 2, 0x1c0, 0x1c4, UINT_MAX, "sdmmc3"),
3504 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC4, 3, 0x1c0, 0x1c4, UINT_MAX, "sdmmc4"),
3505 TEGRA_IO_PAD(TEGRA_IO_PAD_SYS_DDC, 26, 0x1c0, 0x1c4, UINT_MAX, "sys_ddc"),
3506 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x1b8, 0x1bc, UINT_MAX, "uart"),
3507 TEGRA_IO_PAD(TEGRA_IO_PAD_USB0, 9, 0x1b8, 0x1bc, UINT_MAX, "usb0"),
3508 TEGRA_IO_PAD(TEGRA_IO_PAD_USB1, 10, 0x1b8, 0x1bc, UINT_MAX, "usb1"),
3509 TEGRA_IO_PAD(TEGRA_IO_PAD_USB2, 11, 0x1b8, 0x1bc, UINT_MAX, "usb2"),
3510 TEGRA_IO_PAD(TEGRA_IO_PAD_USB_BIAS, 12, 0x1b8, 0x1bc, UINT_MAX, "usb_bias"),
3511 };
3512
3513 static const struct pinctrl_pin_desc tegra124_pin_descs[] = {
3514 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
3515 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_BB, "bb"),
3516 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
3517 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_COMP, "comp"),
3518 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3519 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3520 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
3521 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSI, "dsi"),
3522 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIB, "dsib"),
3523 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIC, "dsic"),
3524 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSID, "dsid"),
3525 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI, "hdmi"),
3526 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HSIC, "hsic"),
3527 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HV, "hv"),
3528 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_LVDS, "lvds"),
3529 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3530 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_NAND, "nand"),
3531 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_BIAS, "pex-bias"),
3532 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3533 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3534 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
3535 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1, "sdmmc1"),
3536 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3, "sdmmc3"),
3537 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC4, "sdmmc4"),
3538 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SYS_DDC, "sys_ddc"),
3539 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3540 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB0, "usb0"),
3541 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB1, "usb1"),
3542 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB2, "usb2"),
3543 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB_BIAS, "usb_bias"),
3544 };
3545
3546 static const struct tegra_pmc_soc tegra124_pmc_soc = {
3547 .supports_core_domain = false,
3548 .num_powergates = ARRAY_SIZE(tegra124_powergates),
3549 .powergates = tegra124_powergates,
3550 .num_cpu_powergates = ARRAY_SIZE(tegra124_cpu_powergates),
3551 .cpu_powergates = tegra124_cpu_powergates,
3552 .has_tsense_reset = true,
3553 .has_gpu_clamps = true,
3554 .needs_mbist_war = false,
3555 .has_impl_33v_pwr = false,
3556 .maybe_tz_only = false,
3557 .num_io_pads = ARRAY_SIZE(tegra124_io_pads),
3558 .io_pads = tegra124_io_pads,
3559 .num_pin_descs = ARRAY_SIZE(tegra124_pin_descs),
3560 .pin_descs = tegra124_pin_descs,
3561 .regs = &tegra20_pmc_regs,
3562 .init = tegra20_pmc_init,
3563 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3564 .powergate_set = tegra114_powergate_set,
3565 .reset_sources = tegra30_reset_sources,
3566 .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3567 .reset_levels = NULL,
3568 .num_reset_levels = 0,
3569 .pmc_clks_data = tegra_pmc_clks_data,
3570 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3571 .has_blink_output = true,
3572 .has_usb_sleepwalk = true,
3573 .has_single_mmio_aperture = true,
3574 };
3575
3576 static const char * const tegra210_powergates[] = {
3577 [TEGRA_POWERGATE_CPU] = "crail",
3578 [TEGRA_POWERGATE_3D] = "3d",
3579 [TEGRA_POWERGATE_VENC] = "venc",
3580 [TEGRA_POWERGATE_PCIE] = "pcie",
3581 [TEGRA_POWERGATE_MPE] = "mpe",
3582 [TEGRA_POWERGATE_SATA] = "sata",
3583 [TEGRA_POWERGATE_CPU1] = "cpu1",
3584 [TEGRA_POWERGATE_CPU2] = "cpu2",
3585 [TEGRA_POWERGATE_CPU3] = "cpu3",
3586 [TEGRA_POWERGATE_CPU0] = "cpu0",
3587 [TEGRA_POWERGATE_C0NC] = "c0nc",
3588 [TEGRA_POWERGATE_SOR] = "sor",
3589 [TEGRA_POWERGATE_DIS] = "dis",
3590 [TEGRA_POWERGATE_DISB] = "disb",
3591 [TEGRA_POWERGATE_XUSBA] = "xusba",
3592 [TEGRA_POWERGATE_XUSBB] = "xusbb",
3593 [TEGRA_POWERGATE_XUSBC] = "xusbc",
3594 [TEGRA_POWERGATE_VIC] = "vic",
3595 [TEGRA_POWERGATE_IRAM] = "iram",
3596 [TEGRA_POWERGATE_NVDEC] = "nvdec",
3597 [TEGRA_POWERGATE_NVJPG] = "nvjpg",
3598 [TEGRA_POWERGATE_AUD] = "aud",
3599 [TEGRA_POWERGATE_DFD] = "dfd",
3600 [TEGRA_POWERGATE_VE2] = "ve2",
3601 };
3602
3603 static const u8 tegra210_cpu_powergates[] = {
3604 TEGRA_POWERGATE_CPU0,
3605 TEGRA_POWERGATE_CPU1,
3606 TEGRA_POWERGATE_CPU2,
3607 TEGRA_POWERGATE_CPU3,
3608 };
3609
3610 static const struct tegra_io_pad_soc tegra210_io_pads[] = {
3611 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x1b8, 0x1bc, 5, "audio"),
3612 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, 29, 0x1c0, 0x1c4, 18, "audio-hv"),
3613 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 4, 0x1c0, 0x1c4, 10, "cam"),
3614 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x1b8, 0x1bc, UINT_MAX, "csia"),
3615 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x1b8, 0x1bc, UINT_MAX, "csib"),
3616 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 10, 0x1c0, 0x1c4, UINT_MAX, "csic"),
3617 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 11, 0x1c0, 0x1c4, UINT_MAX, "csid"),
3618 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 12, 0x1c0, 0x1c4, UINT_MAX, "csie"),
3619 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 13, 0x1c0, 0x1c4, UINT_MAX, "csif"),
3620 TEGRA_IO_PAD(TEGRA_IO_PAD_DBG, 25, 0x1b8, 0x1bc, 19, "dbg"),
3621 TEGRA_IO_PAD(TEGRA_IO_PAD_DEBUG_NONAO, 26, 0x1b8, 0x1bc, UINT_MAX, "debug-nonao"),
3622 TEGRA_IO_PAD(TEGRA_IO_PAD_DMIC, 18, 0x1c0, 0x1c4, 20, "dmic"),
3623 TEGRA_IO_PAD(TEGRA_IO_PAD_DP, 19, 0x1c0, 0x1c4, UINT_MAX, "dp"),
3624 TEGRA_IO_PAD(TEGRA_IO_PAD_DSI, 2, 0x1b8, 0x1bc, UINT_MAX, "dsi"),
3625 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIB, 7, 0x1c0, 0x1c4, UINT_MAX, "dsib"),
3626 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIC, 8, 0x1c0, 0x1c4, UINT_MAX, "dsic"),
3627 TEGRA_IO_PAD(TEGRA_IO_PAD_DSID, 9, 0x1c0, 0x1c4, UINT_MAX, "dsid"),
3628 TEGRA_IO_PAD(TEGRA_IO_PAD_EMMC, 3, 0x1c0, 0x1c4, UINT_MAX, "emmc"),
3629 TEGRA_IO_PAD(TEGRA_IO_PAD_EMMC2, 5, 0x1c0, 0x1c4, UINT_MAX, "emmc2"),
3630 TEGRA_IO_PAD(TEGRA_IO_PAD_GPIO, 27, 0x1b8, 0x1bc, 21, "gpio"),
3631 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI, 28, 0x1b8, 0x1bc, UINT_MAX, "hdmi"),
3632 TEGRA_IO_PAD(TEGRA_IO_PAD_HSIC, 19, 0x1b8, 0x1bc, UINT_MAX, "hsic"),
3633 TEGRA_IO_PAD(TEGRA_IO_PAD_LVDS, 25, 0x1c0, 0x1c4, UINT_MAX, "lvds"),
3634 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x1b8, 0x1bc, UINT_MAX, "mipi-bias"),
3635 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_BIAS, 4, 0x1b8, 0x1bc, UINT_MAX, "pex-bias"),
3636 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 5, 0x1b8, 0x1bc, UINT_MAX, "pex-clk1"),
3637 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x1b8, 0x1bc, UINT_MAX, "pex-clk2"),
3638 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, UINT_MAX, UINT_MAX, UINT_MAX, 11, "pex-cntrl"),
3639 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1, 1, 0x1c0, 0x1c4, 12, "sdmmc1"),
3640 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3, 2, 0x1c0, 0x1c4, 13, "sdmmc3"),
3641 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI, 14, 0x1c0, 0x1c4, 22, "spi"),
3642 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI_HV, 15, 0x1c0, 0x1c4, 23, "spi-hv"),
3643 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x1b8, 0x1bc, 2, "uart"),
3644 TEGRA_IO_PAD(TEGRA_IO_PAD_USB0, 9, 0x1b8, 0x1bc, UINT_MAX, "usb0"),
3645 TEGRA_IO_PAD(TEGRA_IO_PAD_USB1, 10, 0x1b8, 0x1bc, UINT_MAX, "usb1"),
3646 TEGRA_IO_PAD(TEGRA_IO_PAD_USB2, 11, 0x1b8, 0x1bc, UINT_MAX, "usb2"),
3647 TEGRA_IO_PAD(TEGRA_IO_PAD_USB3, 18, 0x1b8, 0x1bc, UINT_MAX, "usb3"),
3648 TEGRA_IO_PAD(TEGRA_IO_PAD_USB_BIAS, 12, 0x1b8, 0x1bc, UINT_MAX, "usb-bias"),
3649 };
3650
3651 static const struct pinctrl_pin_desc tegra210_pin_descs[] = {
3652 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
3653 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
3654 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
3655 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3656 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3657 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
3658 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
3659 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
3660 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
3661 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DBG, "dbg"),
3662 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DEBUG_NONAO, "debug-nonao"),
3663 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DMIC, "dmic"),
3664 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DP, "dp"),
3665 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSI, "dsi"),
3666 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIB, "dsib"),
3667 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIC, "dsic"),
3668 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSID, "dsid"),
3669 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EMMC, "emmc"),
3670 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EMMC2, "emmc2"),
3671 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_GPIO, "gpio"),
3672 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI, "hdmi"),
3673 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HSIC, "hsic"),
3674 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_LVDS, "lvds"),
3675 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3676 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_BIAS, "pex-bias"),
3677 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3678 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3679 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
3680 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1, "sdmmc1"),
3681 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3, "sdmmc3"),
3682 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI, "spi"),
3683 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI_HV, "spi-hv"),
3684 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3685 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB0, "usb0"),
3686 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB1, "usb1"),
3687 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB2, "usb2"),
3688 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB3, "usb3"),
3689 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB_BIAS, "usb-bias"),
3690 };
3691
3692 static const char * const tegra210_reset_sources[] = {
3693 "POWER_ON_RESET",
3694 "WATCHDOG",
3695 "SENSOR",
3696 "SW_MAIN",
3697 "LP0",
3698 "AOTAG"
3699 };
3700
3701 static const struct tegra_wake_event tegra210_wake_events[] = {
3702 TEGRA_WAKE_IRQ("rtc", 16, 2),
3703 TEGRA_WAKE_IRQ("pmu", 51, 86),
3704 };
3705
3706 static const struct tegra_pmc_soc tegra210_pmc_soc = {
3707 .supports_core_domain = false,
3708 .num_powergates = ARRAY_SIZE(tegra210_powergates),
3709 .powergates = tegra210_powergates,
3710 .num_cpu_powergates = ARRAY_SIZE(tegra210_cpu_powergates),
3711 .cpu_powergates = tegra210_cpu_powergates,
3712 .has_tsense_reset = true,
3713 .has_gpu_clamps = true,
3714 .needs_mbist_war = true,
3715 .has_impl_33v_pwr = false,
3716 .maybe_tz_only = true,
3717 .num_io_pads = ARRAY_SIZE(tegra210_io_pads),
3718 .io_pads = tegra210_io_pads,
3719 .num_pin_descs = ARRAY_SIZE(tegra210_pin_descs),
3720 .pin_descs = tegra210_pin_descs,
3721 .regs = &tegra20_pmc_regs,
3722 .init = tegra20_pmc_init,
3723 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3724 .powergate_set = tegra114_powergate_set,
3725 .irq_set_wake = tegra210_pmc_irq_set_wake,
3726 .irq_set_type = tegra210_pmc_irq_set_type,
3727 .reset_sources = tegra210_reset_sources,
3728 .num_reset_sources = ARRAY_SIZE(tegra210_reset_sources),
3729 .reset_levels = NULL,
3730 .num_reset_levels = 0,
3731 .num_wake_events = ARRAY_SIZE(tegra210_wake_events),
3732 .wake_events = tegra210_wake_events,
3733 .pmc_clks_data = tegra_pmc_clks_data,
3734 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3735 .has_blink_output = true,
3736 .has_usb_sleepwalk = true,
3737 .has_single_mmio_aperture = true,
3738 };
3739
3740 static const struct tegra_io_pad_soc tegra186_io_pads[] = {
3741 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x74, 0x78, UINT_MAX, "csia"),
3742 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x74, 0x78, UINT_MAX, "csib"),
3743 TEGRA_IO_PAD(TEGRA_IO_PAD_DSI, 2, 0x74, 0x78, UINT_MAX, "dsi"),
3744 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x74, 0x78, UINT_MAX, "mipi-bias"),
3745 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_BIAS, 4, 0x74, 0x78, UINT_MAX, "pex-clk-bias"),
3746 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK3, 5, 0x74, 0x78, UINT_MAX, "pex-clk3"),
3747 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x74, 0x78, UINT_MAX, "pex-clk2"),
3748 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 7, 0x74, 0x78, UINT_MAX, "pex-clk1"),
3749 TEGRA_IO_PAD(TEGRA_IO_PAD_USB0, 9, 0x74, 0x78, UINT_MAX, "usb0"),
3750 TEGRA_IO_PAD(TEGRA_IO_PAD_USB1, 10, 0x74, 0x78, UINT_MAX, "usb1"),
3751 TEGRA_IO_PAD(TEGRA_IO_PAD_USB2, 11, 0x74, 0x78, UINT_MAX, "usb2"),
3752 TEGRA_IO_PAD(TEGRA_IO_PAD_USB_BIAS, 12, 0x74, 0x78, UINT_MAX, "usb-bias"),
3753 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x74, 0x78, UINT_MAX, "uart"),
3754 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x74, 0x78, UINT_MAX, "audio"),
3755 TEGRA_IO_PAD(TEGRA_IO_PAD_HSIC, 19, 0x74, 0x78, UINT_MAX, "hsic"),
3756 TEGRA_IO_PAD(TEGRA_IO_PAD_DBG, 25, 0x74, 0x78, UINT_MAX, "dbg"),
3757 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP0, 28, 0x74, 0x78, UINT_MAX, "hdmi-dp0"),
3758 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP1, 29, 0x74, 0x78, UINT_MAX, "hdmi-dp1"),
3759 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, 0, 0x7c, 0x80, UINT_MAX, "pex-cntrl"),
3760 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC2_HV, 2, 0x7c, 0x80, 5, "sdmmc2-hv"),
3761 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC4, 4, 0x7c, 0x80, UINT_MAX, "sdmmc4"),
3762 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 6, 0x7c, 0x80, UINT_MAX, "cam"),
3763 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIB, 8, 0x7c, 0x80, UINT_MAX, "dsib"),
3764 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIC, 9, 0x7c, 0x80, UINT_MAX, "dsic"),
3765 TEGRA_IO_PAD(TEGRA_IO_PAD_DSID, 10, 0x7c, 0x80, UINT_MAX, "dsid"),
3766 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 11, 0x7c, 0x80, UINT_MAX, "csic"),
3767 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 12, 0x7c, 0x80, UINT_MAX, "csid"),
3768 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 13, 0x7c, 0x80, UINT_MAX, "csie"),
3769 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 14, 0x7c, 0x80, UINT_MAX, "csif"),
3770 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI, 15, 0x7c, 0x80, UINT_MAX, "spi"),
3771 TEGRA_IO_PAD(TEGRA_IO_PAD_UFS, 17, 0x7c, 0x80, UINT_MAX, "ufs"),
3772 TEGRA_IO_PAD(TEGRA_IO_PAD_DMIC_HV, 20, 0x7c, 0x80, 2, "dmic-hv"),
3773 TEGRA_IO_PAD(TEGRA_IO_PAD_EDP, 21, 0x7c, 0x80, UINT_MAX, "edp"),
3774 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1_HV, 23, 0x7c, 0x80, 4, "sdmmc1-hv"),
3775 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3_HV, 24, 0x7c, 0x80, 6, "sdmmc3-hv"),
3776 TEGRA_IO_PAD(TEGRA_IO_PAD_CONN, 28, 0x7c, 0x80, UINT_MAX, "conn"),
3777 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, 29, 0x7c, 0x80, 1, "audio-hv"),
3778 TEGRA_IO_PAD(TEGRA_IO_PAD_AO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 0, "ao-hv"),
3779 };
3780
3781 static const struct pinctrl_pin_desc tegra186_pin_descs[] = {
3782 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3783 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3784 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSI, "dsi"),
3785 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3786 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_BIAS, "pex-clk-bias"),
3787 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK3, "pex-clk3"),
3788 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3789 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3790 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB0, "usb0"),
3791 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB1, "usb1"),
3792 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB2, "usb2"),
3793 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB_BIAS, "usb-bias"),
3794 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3795 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
3796 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HSIC, "hsic"),
3797 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DBG, "dbg"),
3798 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP0, "hdmi-dp0"),
3799 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP1, "hdmi-dp1"),
3800 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
3801 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC2_HV, "sdmmc2-hv"),
3802 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC4, "sdmmc4"),
3803 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
3804 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIB, "dsib"),
3805 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIC, "dsic"),
3806 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSID, "dsid"),
3807 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
3808 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
3809 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
3810 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
3811 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI, "spi"),
3812 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UFS, "ufs"),
3813 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DMIC_HV, "dmic-hv"),
3814 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EDP, "edp"),
3815 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1_HV, "sdmmc1-hv"),
3816 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3_HV, "sdmmc3-hv"),
3817 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CONN, "conn"),
3818 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
3819 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AO_HV, "ao-hv"),
3820 };
3821
3822 static const struct tegra_pmc_regs tegra186_pmc_regs = {
3823 .scratch0 = 0x2000,
3824 .rst_status = 0x70,
3825 .rst_source_shift = 0x2,
3826 .rst_source_mask = 0x3c,
3827 .rst_level_shift = 0x0,
3828 .rst_level_mask = 0x3,
3829 };
3830
tegra186_pmc_init(struct tegra_pmc * pmc)3831 static void tegra186_pmc_init(struct tegra_pmc *pmc)
3832 {
3833 pmc->syscore.suspend = tegra186_pmc_wake_syscore_suspend;
3834 pmc->syscore.resume = tegra186_pmc_wake_syscore_resume;
3835
3836 register_syscore_ops(&pmc->syscore);
3837 }
3838
tegra186_pmc_setup_irq_polarity(struct tegra_pmc * pmc,struct device_node * np,bool invert)3839 static void tegra186_pmc_setup_irq_polarity(struct tegra_pmc *pmc,
3840 struct device_node *np,
3841 bool invert)
3842 {
3843 struct resource regs;
3844 void __iomem *wake;
3845 u32 value;
3846 int index;
3847
3848 index = of_property_match_string(np, "reg-names", "wake");
3849 if (index < 0) {
3850 dev_err(pmc->dev, "failed to find PMC wake registers\n");
3851 return;
3852 }
3853
3854 of_address_to_resource(np, index, ®s);
3855
3856 wake = ioremap(regs.start, resource_size(®s));
3857 if (!wake) {
3858 dev_err(pmc->dev, "failed to map PMC wake registers\n");
3859 return;
3860 }
3861
3862 value = readl(wake + WAKE_AOWAKE_CTRL);
3863
3864 if (invert)
3865 value |= WAKE_AOWAKE_CTRL_INTR_POLARITY;
3866 else
3867 value &= ~WAKE_AOWAKE_CTRL_INTR_POLARITY;
3868
3869 writel(value, wake + WAKE_AOWAKE_CTRL);
3870
3871 iounmap(wake);
3872 }
3873
3874 static const char * const tegra186_reset_sources[] = {
3875 "SYS_RESET",
3876 "AOWDT",
3877 "MCCPLEXWDT",
3878 "BPMPWDT",
3879 "SCEWDT",
3880 "SPEWDT",
3881 "APEWDT",
3882 "BCCPLEXWDT",
3883 "SENSOR",
3884 "AOTAG",
3885 "VFSENSOR",
3886 "SWREST",
3887 "SC7",
3888 "HSM",
3889 "CORESIGHT"
3890 };
3891
3892 static const char * const tegra186_reset_levels[] = {
3893 "L0", "L1", "L2", "WARM"
3894 };
3895
3896 static const struct tegra_wake_event tegra186_wake_events[] = {
3897 TEGRA_WAKE_IRQ("pmu", 24, 209),
3898 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA186_AON_GPIO(FF, 0)),
3899 TEGRA_WAKE_IRQ("rtc", 73, 10),
3900 };
3901
3902 static const struct tegra_pmc_soc tegra186_pmc_soc = {
3903 .supports_core_domain = false,
3904 .num_powergates = 0,
3905 .powergates = NULL,
3906 .num_cpu_powergates = 0,
3907 .cpu_powergates = NULL,
3908 .has_tsense_reset = false,
3909 .has_gpu_clamps = false,
3910 .needs_mbist_war = false,
3911 .has_impl_33v_pwr = true,
3912 .maybe_tz_only = false,
3913 .num_io_pads = ARRAY_SIZE(tegra186_io_pads),
3914 .io_pads = tegra186_io_pads,
3915 .num_pin_descs = ARRAY_SIZE(tegra186_pin_descs),
3916 .pin_descs = tegra186_pin_descs,
3917 .regs = &tegra186_pmc_regs,
3918 .init = tegra186_pmc_init,
3919 .setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
3920 .set_wake_filters = tegra186_pmc_set_wake_filters,
3921 .irq_set_wake = tegra186_pmc_irq_set_wake,
3922 .irq_set_type = tegra186_pmc_irq_set_type,
3923 .reset_sources = tegra186_reset_sources,
3924 .num_reset_sources = ARRAY_SIZE(tegra186_reset_sources),
3925 .reset_levels = tegra186_reset_levels,
3926 .num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
3927 .num_wake_events = ARRAY_SIZE(tegra186_wake_events),
3928 .wake_events = tegra186_wake_events,
3929 .max_wake_events = 96,
3930 .max_wake_vectors = 3,
3931 .pmc_clks_data = NULL,
3932 .num_pmc_clks = 0,
3933 .has_blink_output = false,
3934 .has_usb_sleepwalk = false,
3935 .has_single_mmio_aperture = false,
3936 };
3937
3938 static const struct tegra_io_pad_soc tegra194_io_pads[] = {
3939 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x74, 0x78, UINT_MAX, "csia"),
3940 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x74, 0x78, UINT_MAX, "csib"),
3941 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x74, 0x78, UINT_MAX, "mipi-bias"),
3942 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_BIAS, 4, 0x74, 0x78, UINT_MAX, "pex-clk-bias"),
3943 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK3, 5, 0x74, 0x78, UINT_MAX, "pex-clk3"),
3944 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x74, 0x78, UINT_MAX, "pex-clk2"),
3945 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 7, 0x74, 0x78, UINT_MAX, "pex-clk1"),
3946 TEGRA_IO_PAD(TEGRA_IO_PAD_EQOS, 8, 0x74, 0x78, UINT_MAX, "eqos"),
3947 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_2_BIAS, 9, 0x74, 0x78, UINT_MAX, "pex-clk-2-bias"),
3948 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_2, 10, 0x74, 0x78, UINT_MAX, "pex-clk-2"),
3949 TEGRA_IO_PAD(TEGRA_IO_PAD_DAP3, 11, 0x74, 0x78, UINT_MAX, "dap3"),
3950 TEGRA_IO_PAD(TEGRA_IO_PAD_DAP5, 12, 0x74, 0x78, UINT_MAX, "dap5"),
3951 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x74, 0x78, UINT_MAX, "uart"),
3952 TEGRA_IO_PAD(TEGRA_IO_PAD_PWR_CTL, 15, 0x74, 0x78, UINT_MAX, "pwr-ctl"),
3953 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO53, 16, 0x74, 0x78, UINT_MAX, "soc-gpio53"),
3954 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x74, 0x78, UINT_MAX, "audio"),
3955 TEGRA_IO_PAD(TEGRA_IO_PAD_GP_PWM2, 18, 0x74, 0x78, UINT_MAX, "gp-pwm2"),
3956 TEGRA_IO_PAD(TEGRA_IO_PAD_GP_PWM3, 19, 0x74, 0x78, UINT_MAX, "gp-pwm3"),
3957 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO12, 20, 0x74, 0x78, UINT_MAX, "soc-gpio12"),
3958 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO13, 21, 0x74, 0x78, UINT_MAX, "soc-gpio13"),
3959 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO10, 22, 0x74, 0x78, UINT_MAX, "soc-gpio10"),
3960 TEGRA_IO_PAD(TEGRA_IO_PAD_UART4, 23, 0x74, 0x78, UINT_MAX, "uart4"),
3961 TEGRA_IO_PAD(TEGRA_IO_PAD_UART5, 24, 0x74, 0x78, UINT_MAX, "uart5"),
3962 TEGRA_IO_PAD(TEGRA_IO_PAD_DBG, 25, 0x74, 0x78, UINT_MAX, "dbg"),
3963 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP3, 26, 0x74, 0x78, UINT_MAX, "hdmi-dp3"),
3964 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP2, 27, 0x74, 0x78, UINT_MAX, "hdmi-dp2"),
3965 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP0, 28, 0x74, 0x78, UINT_MAX, "hdmi-dp0"),
3966 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP1, 29, 0x74, 0x78, UINT_MAX, "hdmi-dp1"),
3967 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, 0, 0x7c, 0x80, UINT_MAX, "pex-cntrl"),
3968 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CTL2, 1, 0x7c, 0x80, UINT_MAX, "pex-ctl2"),
3969 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_L0_RST, 2, 0x7c, 0x80, UINT_MAX, "pex-l0-rst"),
3970 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_L1_RST, 3, 0x7c, 0x80, UINT_MAX, "pex-l1-rst"),
3971 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC4, 4, 0x7c, 0x80, UINT_MAX, "sdmmc4"),
3972 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_L5_RST, 5, 0x7c, 0x80, UINT_MAX, "pex-l5-rst"),
3973 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 6, 0x7c, 0x80, UINT_MAX, "cam"),
3974 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 11, 0x7c, 0x80, UINT_MAX, "csic"),
3975 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 12, 0x7c, 0x80, UINT_MAX, "csid"),
3976 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 13, 0x7c, 0x80, UINT_MAX, "csie"),
3977 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 14, 0x7c, 0x80, UINT_MAX, "csif"),
3978 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI, 15, 0x7c, 0x80, UINT_MAX, "spi"),
3979 TEGRA_IO_PAD(TEGRA_IO_PAD_UFS, 17, 0x7c, 0x80, UINT_MAX, "ufs"),
3980 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIG, 18, 0x7c, 0x80, UINT_MAX, "csig"),
3981 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIH, 19, 0x7c, 0x80, UINT_MAX, "csih"),
3982 TEGRA_IO_PAD(TEGRA_IO_PAD_EDP, 21, 0x7c, 0x80, UINT_MAX, "edp"),
3983 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1_HV, 23, 0x7c, 0x80, 4, "sdmmc1-hv"),
3984 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3_HV, 24, 0x7c, 0x80, 6, "sdmmc3-hv"),
3985 TEGRA_IO_PAD(TEGRA_IO_PAD_CONN, 28, 0x7c, 0x80, UINT_MAX, "conn"),
3986 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, 29, 0x7c, 0x80, 1, "audio-hv"),
3987 TEGRA_IO_PAD(TEGRA_IO_PAD_AO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 0, "ao-hv"),
3988 };
3989
3990 static const struct pinctrl_pin_desc tegra194_pin_descs[] = {
3991 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3992 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3993 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3994 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_BIAS, "pex-clk-bias"),
3995 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK3, "pex-clk3"),
3996 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3997 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3998 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EQOS, "eqos"),
3999 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_2_BIAS, "pex-clk-2-bias"),
4000 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_2, "pex-clk-2"),
4001 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DAP3, "dap3"),
4002 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DAP5, "dap5"),
4003 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
4004 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PWR_CTL, "pwr-ctl"),
4005 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO53, "soc-gpio53"),
4006 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
4007 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_GP_PWM2, "gp-pwm2"),
4008 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_GP_PWM3, "gp-pwm3"),
4009 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO12, "soc-gpio12"),
4010 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO13, "soc-gpio13"),
4011 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO10, "soc-gpio10"),
4012 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART4, "uart4"),
4013 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART5, "uart5"),
4014 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DBG, "dbg"),
4015 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP3, "hdmi-dp3"),
4016 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP2, "hdmi-dp2"),
4017 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP0, "hdmi-dp0"),
4018 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP1, "hdmi-dp1"),
4019 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
4020 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CTL2, "pex-ctl2"),
4021 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_L0_RST, "pex-l0-rst"),
4022 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_L1_RST, "pex-l1-rst"),
4023 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC4, "sdmmc4"),
4024 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_L5_RST, "pex-l5-rst"),
4025 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
4026 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
4027 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
4028 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
4029 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
4030 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI, "spi"),
4031 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UFS, "ufs"),
4032 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIG, "csig"),
4033 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIH, "csih"),
4034 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EDP, "edp"),
4035 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1_HV, "sdmmc1-hv"),
4036 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3_HV, "sdmmc3-hv"),
4037 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CONN, "conn"),
4038 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
4039 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AO_HV, "ao-hv"),
4040 };
4041
4042 static const struct tegra_pmc_regs tegra194_pmc_regs = {
4043 .scratch0 = 0x2000,
4044 .rst_status = 0x70,
4045 .rst_source_shift = 0x2,
4046 .rst_source_mask = 0x7c,
4047 .rst_level_shift = 0x0,
4048 .rst_level_mask = 0x3,
4049 };
4050
4051 static const char * const tegra194_reset_sources[] = {
4052 "SYS_RESET_N",
4053 "AOWDT",
4054 "BCCPLEXWDT",
4055 "BPMPWDT",
4056 "SCEWDT",
4057 "SPEWDT",
4058 "APEWDT",
4059 "LCCPLEXWDT",
4060 "SENSOR",
4061 "AOTAG",
4062 "VFSENSOR",
4063 "MAINSWRST",
4064 "SC7",
4065 "HSM",
4066 "CSITE",
4067 "RCEWDT",
4068 "PVA0WDT",
4069 "PVA1WDT",
4070 "L1A_ASYNC",
4071 "BPMPBOOT",
4072 "FUSECRC",
4073 };
4074
4075 static const struct tegra_wake_event tegra194_wake_events[] = {
4076 TEGRA_WAKE_GPIO("eqos", 20, 0, TEGRA194_MAIN_GPIO(G, 4)),
4077 TEGRA_WAKE_IRQ("pmu", 24, 209),
4078 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA194_AON_GPIO(EE, 4)),
4079 TEGRA_WAKE_IRQ("rtc", 73, 10),
4080 TEGRA_WAKE_SIMPLE("usb3-port-0", 76),
4081 TEGRA_WAKE_SIMPLE("usb3-port-1", 77),
4082 TEGRA_WAKE_SIMPLE("usb3-port-2-3", 78),
4083 TEGRA_WAKE_SIMPLE("usb2-port-0", 79),
4084 TEGRA_WAKE_SIMPLE("usb2-port-1", 80),
4085 TEGRA_WAKE_SIMPLE("usb2-port-2", 81),
4086 TEGRA_WAKE_SIMPLE("usb2-port-3", 82),
4087 };
4088
4089 static const struct tegra_pmc_soc tegra194_pmc_soc = {
4090 .supports_core_domain = false,
4091 .num_powergates = 0,
4092 .powergates = NULL,
4093 .num_cpu_powergates = 0,
4094 .cpu_powergates = NULL,
4095 .has_tsense_reset = false,
4096 .has_gpu_clamps = false,
4097 .needs_mbist_war = false,
4098 .has_impl_33v_pwr = true,
4099 .maybe_tz_only = false,
4100 .num_io_pads = ARRAY_SIZE(tegra194_io_pads),
4101 .io_pads = tegra194_io_pads,
4102 .num_pin_descs = ARRAY_SIZE(tegra194_pin_descs),
4103 .pin_descs = tegra194_pin_descs,
4104 .regs = &tegra194_pmc_regs,
4105 .init = tegra186_pmc_init,
4106 .setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
4107 .set_wake_filters = tegra186_pmc_set_wake_filters,
4108 .irq_set_wake = tegra186_pmc_irq_set_wake,
4109 .irq_set_type = tegra186_pmc_irq_set_type,
4110 .reset_sources = tegra194_reset_sources,
4111 .num_reset_sources = ARRAY_SIZE(tegra194_reset_sources),
4112 .reset_levels = tegra186_reset_levels,
4113 .num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
4114 .num_wake_events = ARRAY_SIZE(tegra194_wake_events),
4115 .wake_events = tegra194_wake_events,
4116 .max_wake_events = 96,
4117 .max_wake_vectors = 3,
4118 .pmc_clks_data = NULL,
4119 .num_pmc_clks = 0,
4120 .has_blink_output = false,
4121 .has_usb_sleepwalk = false,
4122 .has_single_mmio_aperture = false,
4123 };
4124
4125 static const struct tegra_io_pad_soc tegra234_io_pads[] = {
4126 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0xe0c0, 0xe0c4, UINT_MAX, "csia"),
4127 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0xe0c0, 0xe0c4, UINT_MAX, "csib"),
4128 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP0, 0, 0xe0d0, 0xe0d4, UINT_MAX, "hdmi-dp0"),
4129 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 2, 0xe0c0, 0xe0c4, UINT_MAX, "csic"),
4130 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 3, 0xe0c0, 0xe0c4, UINT_MAX, "csid"),
4131 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 4, 0xe0c0, 0xe0c4, UINT_MAX, "csie"),
4132 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 5, 0xe0c0, 0xe0c4, UINT_MAX, "csif"),
4133 TEGRA_IO_PAD(TEGRA_IO_PAD_UFS, 0, 0xe064, 0xe068, UINT_MAX, "ufs"),
4134 TEGRA_IO_PAD(TEGRA_IO_PAD_EDP, 1, 0xe05c, 0xe060, UINT_MAX, "edp"),
4135 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1_HV, 0, 0xe054, 0xe058, 4, "sdmmc1-hv"),
4136 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3_HV, UINT_MAX, UINT_MAX, UINT_MAX, 6, "sdmmc3-hv"),
4137 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 1, "audio-hv"),
4138 TEGRA_IO_PAD(TEGRA_IO_PAD_AO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 0, "ao-hv"),
4139 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIG, 6, 0xe0c0, 0xe0c4, UINT_MAX, "csig"),
4140 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIH, 7, 0xe0c0, 0xe0c4, UINT_MAX, "csih"),
4141 };
4142
4143 static const struct pinctrl_pin_desc tegra234_pin_descs[] = {
4144 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
4145 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
4146 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP0, "hdmi-dp0"),
4147 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
4148 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
4149 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
4150 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
4151 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UFS, "ufs"),
4152 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EDP, "edp"),
4153 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1_HV, "sdmmc1-hv"),
4154 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3_HV, "sdmmc3-hv"),
4155 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
4156 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AO_HV, "ao-hv"),
4157 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIG, "csig"),
4158 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIH, "csih"),
4159 };
4160
4161 static const struct tegra_pmc_regs tegra234_pmc_regs = {
4162 .scratch0 = 0x2000,
4163 .rst_status = 0x70,
4164 .rst_source_shift = 0x2,
4165 .rst_source_mask = 0xfc,
4166 .rst_level_shift = 0x0,
4167 .rst_level_mask = 0x3,
4168 };
4169
4170 static const char * const tegra234_reset_sources[] = {
4171 "SYS_RESET_N", /* 0x0 */
4172 "AOWDT",
4173 "BCCPLEXWDT",
4174 "BPMPWDT",
4175 "SCEWDT",
4176 "SPEWDT",
4177 "APEWDT",
4178 "LCCPLEXWDT",
4179 "SENSOR", /* 0x8 */
4180 NULL,
4181 NULL,
4182 "MAINSWRST",
4183 "SC7",
4184 "HSM",
4185 NULL,
4186 "RCEWDT",
4187 NULL, /* 0x10 */
4188 NULL,
4189 NULL,
4190 "BPMPBOOT",
4191 "FUSECRC",
4192 "DCEWDT",
4193 "PSCWDT",
4194 "PSC",
4195 "CSITE_SW", /* 0x18 */
4196 "POD",
4197 "SCPM",
4198 "VREFRO_POWERBAD",
4199 "VMON",
4200 "FMON",
4201 "FSI_R5WDT",
4202 "FSI_THERM",
4203 "FSI_R52C0WDT", /* 0x20 */
4204 "FSI_R52C1WDT",
4205 "FSI_R52C2WDT",
4206 "FSI_R52C3WDT",
4207 "FSI_FMON",
4208 "FSI_VMON", /* 0x25 */
4209 };
4210
4211 static const struct tegra_wake_event tegra234_wake_events[] = {
4212 TEGRA_WAKE_GPIO("sd-wake", 8, 0, TEGRA234_MAIN_GPIO(G, 7)),
4213 TEGRA_WAKE_GPIO("eqos", 20, 0, TEGRA234_MAIN_GPIO(G, 4)),
4214 TEGRA_WAKE_IRQ("pmu", 24, 209),
4215 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA234_AON_GPIO(EE, 4)),
4216 TEGRA_WAKE_GPIO("mgbe", 56, 0, TEGRA234_MAIN_GPIO(Y, 3)),
4217 TEGRA_WAKE_IRQ("rtc", 73, 10),
4218 TEGRA_WAKE_IRQ("sw-wake", SW_WAKE_ID, 179),
4219 };
4220
4221 static const struct tegra_pmc_soc tegra234_pmc_soc = {
4222 .supports_core_domain = false,
4223 .num_powergates = 0,
4224 .powergates = NULL,
4225 .num_cpu_powergates = 0,
4226 .cpu_powergates = NULL,
4227 .has_tsense_reset = false,
4228 .has_gpu_clamps = false,
4229 .needs_mbist_war = false,
4230 .has_impl_33v_pwr = true,
4231 .maybe_tz_only = false,
4232 .num_io_pads = ARRAY_SIZE(tegra234_io_pads),
4233 .io_pads = tegra234_io_pads,
4234 .num_pin_descs = ARRAY_SIZE(tegra234_pin_descs),
4235 .pin_descs = tegra234_pin_descs,
4236 .regs = &tegra234_pmc_regs,
4237 .init = tegra186_pmc_init,
4238 .setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
4239 .set_wake_filters = tegra186_pmc_set_wake_filters,
4240 .irq_set_wake = tegra186_pmc_irq_set_wake,
4241 .irq_set_type = tegra186_pmc_irq_set_type,
4242 .reset_sources = tegra234_reset_sources,
4243 .num_reset_sources = ARRAY_SIZE(tegra234_reset_sources),
4244 .reset_levels = tegra186_reset_levels,
4245 .num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
4246 .num_wake_events = ARRAY_SIZE(tegra234_wake_events),
4247 .wake_events = tegra234_wake_events,
4248 .max_wake_events = 96,
4249 .max_wake_vectors = 3,
4250 .pmc_clks_data = NULL,
4251 .num_pmc_clks = 0,
4252 .has_blink_output = false,
4253 .has_single_mmio_aperture = false,
4254 };
4255
4256 static const struct of_device_id tegra_pmc_match[] = {
4257 { .compatible = "nvidia,tegra234-pmc", .data = &tegra234_pmc_soc },
4258 { .compatible = "nvidia,tegra194-pmc", .data = &tegra194_pmc_soc },
4259 { .compatible = "nvidia,tegra186-pmc", .data = &tegra186_pmc_soc },
4260 { .compatible = "nvidia,tegra210-pmc", .data = &tegra210_pmc_soc },
4261 { .compatible = "nvidia,tegra132-pmc", .data = &tegra124_pmc_soc },
4262 { .compatible = "nvidia,tegra124-pmc", .data = &tegra124_pmc_soc },
4263 { .compatible = "nvidia,tegra114-pmc", .data = &tegra114_pmc_soc },
4264 { .compatible = "nvidia,tegra30-pmc", .data = &tegra30_pmc_soc },
4265 { .compatible = "nvidia,tegra20-pmc", .data = &tegra20_pmc_soc },
4266 { }
4267 };
4268
tegra_pmc_sync_state(struct device * dev)4269 static void tegra_pmc_sync_state(struct device *dev)
4270 {
4271 int err;
4272
4273 /*
4274 * Newer device-trees have power domains, but we need to prepare all
4275 * device drivers with runtime PM and OPP support first, otherwise
4276 * state syncing is unsafe.
4277 */
4278 if (!pmc->soc->supports_core_domain)
4279 return;
4280
4281 /*
4282 * Older device-trees don't have core PD, and thus, there are
4283 * no dependencies that will block the state syncing. We shouldn't
4284 * mark the domain as synced in this case.
4285 */
4286 if (!pmc->core_domain_registered)
4287 return;
4288
4289 pmc->core_domain_state_synced = true;
4290
4291 /* this is a no-op if core regulator isn't used */
4292 mutex_lock(&pmc->powergates_lock);
4293 err = dev_pm_opp_sync_regulators(dev);
4294 mutex_unlock(&pmc->powergates_lock);
4295
4296 if (err)
4297 dev_err(dev, "failed to sync regulators: %d\n", err);
4298 }
4299
4300 static struct platform_driver tegra_pmc_driver = {
4301 .driver = {
4302 .name = "tegra-pmc",
4303 .suppress_bind_attrs = true,
4304 .of_match_table = tegra_pmc_match,
4305 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
4306 .pm = &tegra_pmc_pm_ops,
4307 #endif
4308 .sync_state = tegra_pmc_sync_state,
4309 },
4310 .probe = tegra_pmc_probe,
4311 };
4312 builtin_platform_driver(tegra_pmc_driver);
4313
tegra_pmc_detect_tz_only(struct tegra_pmc * pmc)4314 static bool __init tegra_pmc_detect_tz_only(struct tegra_pmc *pmc)
4315 {
4316 u32 value, saved;
4317
4318 saved = readl(pmc->base + pmc->soc->regs->scratch0);
4319 value = saved ^ 0xffffffff;
4320
4321 if (value == 0xffffffff)
4322 value = 0xdeadbeef;
4323
4324 /* write pattern and read it back */
4325 writel(value, pmc->base + pmc->soc->regs->scratch0);
4326 value = readl(pmc->base + pmc->soc->regs->scratch0);
4327
4328 /* if we read all-zeroes, access is restricted to TZ only */
4329 if (value == 0) {
4330 pr_info("access to PMC is restricted to TZ\n");
4331 return true;
4332 }
4333
4334 /* restore original value */
4335 writel(saved, pmc->base + pmc->soc->regs->scratch0);
4336
4337 return false;
4338 }
4339
4340 /*
4341 * Early initialization to allow access to registers in the very early boot
4342 * process.
4343 */
tegra_pmc_early_init(void)4344 static int __init tegra_pmc_early_init(void)
4345 {
4346 const struct of_device_id *match;
4347 struct device_node *np;
4348 struct resource regs;
4349 unsigned int i;
4350 bool invert;
4351
4352 mutex_init(&pmc->powergates_lock);
4353
4354 np = of_find_matching_node_and_match(NULL, tegra_pmc_match, &match);
4355 if (!np) {
4356 /*
4357 * Fall back to legacy initialization for 32-bit ARM only. All
4358 * 64-bit ARM device tree files for Tegra are required to have
4359 * a PMC node.
4360 *
4361 * This is for backwards-compatibility with old device trees
4362 * that didn't contain a PMC node. Note that in this case the
4363 * SoC data can't be matched and therefore powergating is
4364 * disabled.
4365 */
4366 if (IS_ENABLED(CONFIG_ARM) && soc_is_tegra()) {
4367 pr_warn("DT node not found, powergating disabled\n");
4368
4369 regs.start = 0x7000e400;
4370 regs.end = 0x7000e7ff;
4371 regs.flags = IORESOURCE_MEM;
4372
4373 pr_warn("Using memory region %pR\n", ®s);
4374 } else {
4375 /*
4376 * At this point we're not running on Tegra, so play
4377 * nice with multi-platform kernels.
4378 */
4379 return 0;
4380 }
4381 } else {
4382 /*
4383 * Extract information from the device tree if we've found a
4384 * matching node.
4385 */
4386 if (of_address_to_resource(np, 0, ®s) < 0) {
4387 pr_err("failed to get PMC registers\n");
4388 of_node_put(np);
4389 return -ENXIO;
4390 }
4391 }
4392
4393 pmc->base = ioremap(regs.start, resource_size(®s));
4394 if (!pmc->base) {
4395 pr_err("failed to map PMC registers\n");
4396 of_node_put(np);
4397 return -ENXIO;
4398 }
4399
4400 if (of_device_is_available(np)) {
4401 pmc->soc = match->data;
4402
4403 if (pmc->soc->maybe_tz_only)
4404 pmc->tz_only = tegra_pmc_detect_tz_only(pmc);
4405
4406 /* Create a bitmap of the available and valid partitions */
4407 for (i = 0; i < pmc->soc->num_powergates; i++)
4408 if (pmc->soc->powergates[i])
4409 set_bit(i, pmc->powergates_available);
4410
4411 /*
4412 * Invert the interrupt polarity if a PMC device tree node
4413 * exists and contains the nvidia,invert-interrupt property.
4414 */
4415 invert = of_property_read_bool(np, "nvidia,invert-interrupt");
4416
4417 pmc->soc->setup_irq_polarity(pmc, np, invert);
4418
4419 of_node_put(np);
4420 }
4421
4422 return 0;
4423 }
4424 early_initcall(tegra_pmc_early_init);
4425