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