Linux 6.14-rc1
[linux-stable.git] / drivers / soc / tegra / pmc.c
bloba08c377933c5052f6a1a8081e05cb4905870d507
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * drivers/soc/tegra/pmc.c
5 * Copyright (c) 2010 Google, Inc
6 * Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.
8 * Author:
9 * Colin Cross <ccross@google.com>
12 #define pr_fmt(fmt) "tegra-pmc: " fmt
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>
52 #include <soc/tegra/common.h>
53 #include <soc/tegra/fuse.h>
54 #include <soc/tegra/pmc.h>
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>
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)
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
81 #define DPD_SAMPLE 0x020
82 #define DPD_SAMPLE_ENABLE BIT(0)
83 #define DPD_SAMPLE_DISABLE (0 << 0)
85 #define PWRGATE_TOGGLE 0x30
86 #define PWRGATE_TOGGLE_START BIT(8)
88 #define REMOVE_CLAMPING 0x34
90 #define PWRGATE_STATUS 0x38
92 #define PMC_BLINK_TIMER 0x40
93 #define PMC_IMPL_E_33V_PWR 0x40
95 #define PMC_PWR_DET 0x48
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)
104 #define PMC_CPUPWRGOOD_TIMER 0xc8
105 #define PMC_CPUPWROFF_TIMER 0xcc
106 #define PMC_COREPWRGOOD_TIMER 0x3c
107 #define PMC_COREPWROFF_TIMER 0xe0
109 #define PMC_PWR_DET_VALUE 0xe4
111 #define PMC_USB_DEBOUNCE_DEL 0xec
112 #define PMC_USB_AO 0xf0
114 #define PMC_SCRATCH37 0x130
115 #define PMC_SCRATCH41 0x140
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
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)
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
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)
141 #define IO_DPD_STATUS 0x1bc
142 #define IO_DPD2_REQ 0x1c0
143 #define IO_DPD2_STATUS 0x1c4
144 #define SEL_DPD_TIM 0x1c8
146 #define PMC_UTMIP_UHSIC_TRIGGERS 0x1ec
147 #define PMC_UTMIP_UHSIC_SAVED_STATE 0x1f0
149 #define PMC_UTMIP_TERM_PAD_CFG 0x1f8
150 #define PMC_UTMIP_UHSIC_SLEEP_CFG 0x1fc
151 #define PMC_UTMIP_UHSIC_FAKE 0x218
153 #define PMC_SCRATCH54 0x258
154 #define PMC_SCRATCH54_DATA_SHIFT 8
155 #define PMC_SCRATCH54_ADDR_SHIFT 0
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
165 #define PMC_UTMIP_UHSIC_LINE_WAKEUP 0x26c
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
172 #define GPU_RG_CNTRL 0x2d4
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
192 #define WAKE_AOWAKE_CTRL 0x4f4
193 #define WAKE_AOWAKE_CTRL_INTR_POLARITY BIT(0)
195 #define SW_WAKE_ID 83 /* wake83 */
197 /* for secure PMC */
198 #define TEGRA_SMC_PMC 0xc2fffe00
199 #define TEGRA_SMC_PMC_READ 0xaa
200 #define TEGRA_SMC_PMC_WRITE 0xbb
202 struct pmc_clk {
203 struct clk_hw hw;
204 unsigned long offs;
205 u32 mux_shift;
206 u32 force_en_shift;
209 #define to_pmc_clk(_hw) container_of(_hw, struct pmc_clk, hw)
211 struct pmc_clk_gate {
212 struct clk_hw hw;
213 unsigned long offs;
214 u32 shift;
217 #define to_pmc_clk_gate(_hw) container_of(_hw, struct pmc_clk_gate, hw)
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;
228 static const char * const clk_out1_parents[] = { "osc", "osc_div2",
229 "osc_div4", "extern1",
232 static const char * const clk_out2_parents[] = { "osc", "osc_div2",
233 "osc_div4", "extern2",
236 static const char * const clk_out3_parents[] = { "osc", "osc_div2",
237 "osc_div4", "extern3",
240 static const struct pmc_clk_init_data tegra_pmc_clks_data[] = {
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,
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,
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,
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;
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;
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;
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;
305 #define TEGRA_WAKE_SIMPLE(_name, _id) \
307 .name = _name, \
308 .id = _id, \
309 .irq = 0, \
310 .gpio = { \
311 .instance = UINT_MAX, \
312 .pin = UINT_MAX, \
313 }, \
316 #define TEGRA_WAKE_IRQ(_name, _id, _irq) \
318 .name = _name, \
319 .id = _id, \
320 .irq = _irq, \
321 .gpio = { \
322 .instance = UINT_MAX, \
323 .pin = UINT_MAX, \
324 }, \
327 #define TEGRA_WAKE_GPIO(_name, _id, _instance, _pin) \
329 .name = _name, \
330 .id = _id, \
331 .irq = 0, \
332 .gpio = { \
333 .instance = _instance, \
334 .pin = _pin, \
335 }, \
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;
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;
350 const struct tegra_io_pad_soc *io_pads;
351 unsigned int num_io_pads;
353 const struct pinctrl_pin_desc *pin_descs;
354 unsigned int num_pin_descs;
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);
367 const char * const *reset_sources;
368 unsigned int num_reset_sources;
369 const char * const *reset_levels;
370 unsigned int num_reset_levels;
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.
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;
382 const struct pmc_clk_init_data *pmc_clks_data;
383 unsigned int num_pmc_clks;
384 bool has_blink_output;
385 bool has_usb_sleepwalk;
386 bool supports_core_domain;
387 bool has_single_mmio_aperture;
391 * struct tegra_pmc - NVIDIA Tegra PMC
392 * @dev: pointer to PMC device structure
393 * @base: pointer to I/O remapped register region
394 * @wake: pointer to I/O remapped region for WAKE registers
395 * @aotag: pointer to I/O remapped region for AOTAG registers
396 * @scratch: pointer to I/O remapped region for scratch registers
397 * @clk: pointer to pclk clock
398 * @soc: pointer to SoC data structure
399 * @tz_only: flag specifying if the PMC can only be accessed via TrustZone
400 * @rate: currently configured rate of pclk
401 * @suspend_mode: lowest suspend mode available
402 * @cpu_good_time: CPU power good time (in microseconds)
403 * @cpu_off_time: CPU power off time (in microsecends)
404 * @core_osc_time: core power good OSC time (in microseconds)
405 * @core_pmu_time: core power good PMU time (in microseconds)
406 * @core_off_time: core power off time (in microseconds)
407 * @corereq_high: core power request is active-high
408 * @sysclkreq_high: system clock request is active-high
409 * @combined_req: combined power request for CPU & core
410 * @cpu_pwr_good_en: CPU power good signal is enabled
411 * @lp0_vec_phys: physical base address of the LP0 warm boot code
412 * @lp0_vec_size: size of the LP0 warm boot code
413 * @powergates_available: Bitmap of available power gates
414 * @powergates_lock: mutex for power gate register access
415 * @pctl_dev: pin controller exposed by the PMC
416 * @domain: IRQ domain provided by the PMC
417 * @irq: chip implementation for the IRQ domain
418 * @clk_nb: pclk clock changes handler
419 * @core_domain_state_synced: flag marking the core domain's state as synced
420 * @core_domain_registered: flag marking the core domain as registered
421 * @wake_type_level_map: Bitmap indicating level type for non-dual edge wakes
422 * @wake_type_dual_edge_map: Bitmap indicating if a wake is dual-edge or not
423 * @wake_sw_status_map: Bitmap to hold raw status of wakes without mask
424 * @wake_cntrl_level_map: Bitmap to hold wake levels to be programmed in
425 * cntrl register associated with each wake during system suspend.
427 struct tegra_pmc {
428 struct device *dev;
429 void __iomem *base;
430 void __iomem *wake;
431 void __iomem *aotag;
432 void __iomem *scratch;
433 struct clk *clk;
435 const struct tegra_pmc_soc *soc;
436 bool tz_only;
438 unsigned long rate;
440 enum tegra_suspend_mode suspend_mode;
441 u32 cpu_good_time;
442 u32 cpu_off_time;
443 u32 core_osc_time;
444 u32 core_pmu_time;
445 u32 core_off_time;
446 bool corereq_high;
447 bool sysclkreq_high;
448 bool combined_req;
449 bool cpu_pwr_good_en;
450 u32 lp0_vec_phys;
451 u32 lp0_vec_size;
452 DECLARE_BITMAP(powergates_available, TEGRA_POWERGATE_MAX);
454 struct mutex powergates_lock;
456 struct pinctrl_dev *pctl_dev;
458 struct irq_domain *domain;
459 struct irq_chip irq;
461 struct notifier_block clk_nb;
463 bool core_domain_state_synced;
464 bool core_domain_registered;
466 unsigned long *wake_type_level_map;
467 unsigned long *wake_type_dual_edge_map;
468 unsigned long *wake_sw_status_map;
469 unsigned long *wake_cntrl_level_map;
470 struct syscore_ops syscore;
473 static struct tegra_pmc *pmc = &(struct tegra_pmc) {
474 .base = NULL,
475 .suspend_mode = TEGRA_SUSPEND_NOT_READY,
478 static inline struct tegra_powergate *
479 to_powergate(struct generic_pm_domain *domain)
481 return container_of(domain, struct tegra_powergate, genpd);
484 static u32 tegra_pmc_readl(struct tegra_pmc *pmc, unsigned long offset)
486 struct arm_smccc_res res;
488 if (pmc->tz_only) {
489 arm_smccc_smc(TEGRA_SMC_PMC, TEGRA_SMC_PMC_READ, offset, 0, 0,
490 0, 0, 0, &res);
491 if (res.a0) {
492 if (pmc->dev)
493 dev_warn(pmc->dev, "%s(): SMC failed: %lu\n",
494 __func__, res.a0);
495 else
496 pr_warn("%s(): SMC failed: %lu\n", __func__,
497 res.a0);
500 return res.a1;
503 return readl(pmc->base + offset);
506 static void tegra_pmc_writel(struct tegra_pmc *pmc, u32 value,
507 unsigned long offset)
509 struct arm_smccc_res res;
511 if (pmc->tz_only) {
512 arm_smccc_smc(TEGRA_SMC_PMC, TEGRA_SMC_PMC_WRITE, offset,
513 value, 0, 0, 0, 0, &res);
514 if (res.a0) {
515 if (pmc->dev)
516 dev_warn(pmc->dev, "%s(): SMC failed: %lu\n",
517 __func__, res.a0);
518 else
519 pr_warn("%s(): SMC failed: %lu\n", __func__,
520 res.a0);
522 } else {
523 writel(value, pmc->base + offset);
527 static u32 tegra_pmc_scratch_readl(struct tegra_pmc *pmc, unsigned long offset)
529 if (pmc->tz_only)
530 return tegra_pmc_readl(pmc, offset);
532 return readl(pmc->scratch + offset);
535 static void tegra_pmc_scratch_writel(struct tegra_pmc *pmc, u32 value,
536 unsigned long offset)
538 if (pmc->tz_only)
539 tegra_pmc_writel(pmc, value, offset);
540 else
541 writel(value, pmc->scratch + offset);
545 * TODO Figure out a way to call this with the struct tegra_pmc * passed in.
546 * This currently doesn't work because readx_poll_timeout() can only operate
547 * on functions that take a single argument.
549 static inline bool tegra_powergate_state(int id)
551 if (id == TEGRA_POWERGATE_3D && pmc->soc->has_gpu_clamps)
552 return (tegra_pmc_readl(pmc, GPU_RG_CNTRL) & 0x1) == 0;
553 else
554 return (tegra_pmc_readl(pmc, PWRGATE_STATUS) & BIT(id)) != 0;
557 static inline bool tegra_powergate_is_valid(struct tegra_pmc *pmc, int id)
559 return (pmc->soc && pmc->soc->powergates[id]);
562 static inline bool tegra_powergate_is_available(struct tegra_pmc *pmc, int id)
564 return test_bit(id, pmc->powergates_available);
567 static int tegra_powergate_lookup(struct tegra_pmc *pmc, const char *name)
569 unsigned int i;
571 if (!pmc || !pmc->soc || !name)
572 return -EINVAL;
574 for (i = 0; i < pmc->soc->num_powergates; i++) {
575 if (!tegra_powergate_is_valid(pmc, i))
576 continue;
578 if (!strcmp(name, pmc->soc->powergates[i]))
579 return i;
582 return -ENODEV;
585 static int tegra20_powergate_set(struct tegra_pmc *pmc, unsigned int id,
586 bool new_state)
588 unsigned int retries = 100;
589 bool status;
590 int ret;
593 * As per TRM documentation, the toggle command will be dropped by PMC
594 * if there is contention with a HW-initiated toggling (i.e. CPU core
595 * power-gated), the command should be retried in that case.
597 do {
598 tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
600 /* wait for PMC to execute the command */
601 ret = readx_poll_timeout(tegra_powergate_state, id, status,
602 status == new_state, 1, 10);
603 } while (ret == -ETIMEDOUT && retries--);
605 return ret;
608 static inline bool tegra_powergate_toggle_ready(struct tegra_pmc *pmc)
610 return !(tegra_pmc_readl(pmc, PWRGATE_TOGGLE) & PWRGATE_TOGGLE_START);
613 static int tegra114_powergate_set(struct tegra_pmc *pmc, unsigned int id,
614 bool new_state)
616 bool status;
617 int err;
619 /* wait while PMC power gating is contended */
620 err = readx_poll_timeout(tegra_powergate_toggle_ready, pmc, status,
621 status == true, 1, 100);
622 if (err)
623 return err;
625 tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
627 /* wait for PMC to accept the command */
628 err = readx_poll_timeout(tegra_powergate_toggle_ready, pmc, status,
629 status == true, 1, 100);
630 if (err)
631 return err;
633 /* wait for PMC to execute the command */
634 err = readx_poll_timeout(tegra_powergate_state, id, status,
635 status == new_state, 10, 100000);
636 if (err)
637 return err;
639 return 0;
643 * tegra_powergate_set() - set the state of a partition
644 * @pmc: power management controller
645 * @id: partition ID
646 * @new_state: new state of the partition
648 static int tegra_powergate_set(struct tegra_pmc *pmc, unsigned int id,
649 bool new_state)
651 int err;
653 if (id == TEGRA_POWERGATE_3D && pmc->soc->has_gpu_clamps)
654 return -EINVAL;
656 mutex_lock(&pmc->powergates_lock);
658 if (tegra_powergate_state(id) == new_state) {
659 mutex_unlock(&pmc->powergates_lock);
660 return 0;
663 err = pmc->soc->powergate_set(pmc, id, new_state);
665 mutex_unlock(&pmc->powergates_lock);
667 return err;
670 static int __tegra_powergate_remove_clamping(struct tegra_pmc *pmc,
671 unsigned int id)
673 u32 mask;
675 mutex_lock(&pmc->powergates_lock);
678 * On Tegra124 and later, the clamps for the GPU are controlled by a
679 * separate register (with different semantics).
681 if (id == TEGRA_POWERGATE_3D) {
682 if (pmc->soc->has_gpu_clamps) {
683 tegra_pmc_writel(pmc, 0, GPU_RG_CNTRL);
684 goto out;
689 * Tegra 2 has a bug where PCIE and VDE clamping masks are
690 * swapped relatively to the partition ids
692 if (id == TEGRA_POWERGATE_VDEC)
693 mask = (1 << TEGRA_POWERGATE_PCIE);
694 else if (id == TEGRA_POWERGATE_PCIE)
695 mask = (1 << TEGRA_POWERGATE_VDEC);
696 else
697 mask = (1 << id);
699 tegra_pmc_writel(pmc, mask, REMOVE_CLAMPING);
701 out:
702 mutex_unlock(&pmc->powergates_lock);
704 return 0;
707 static int tegra_powergate_prepare_clocks(struct tegra_powergate *pg)
709 unsigned long safe_rate = 100 * 1000 * 1000;
710 unsigned int i;
711 int err;
713 for (i = 0; i < pg->num_clks; i++) {
714 pg->clk_rates[i] = clk_get_rate(pg->clks[i]);
716 if (!pg->clk_rates[i]) {
717 err = -EINVAL;
718 goto out;
721 if (pg->clk_rates[i] <= safe_rate)
722 continue;
725 * We don't know whether voltage state is okay for the
726 * current clock rate, hence it's better to temporally
727 * switch clock to a safe rate which is suitable for
728 * all voltages, before enabling the clock.
730 err = clk_set_rate(pg->clks[i], safe_rate);
731 if (err)
732 goto out;
735 return 0;
737 out:
738 while (i--)
739 clk_set_rate(pg->clks[i], pg->clk_rates[i]);
741 return err;
744 static int tegra_powergate_unprepare_clocks(struct tegra_powergate *pg)
746 unsigned int i;
747 int err;
749 for (i = 0; i < pg->num_clks; i++) {
750 err = clk_set_rate(pg->clks[i], pg->clk_rates[i]);
751 if (err)
752 return err;
755 return 0;
758 static void tegra_powergate_disable_clocks(struct tegra_powergate *pg)
760 unsigned int i;
762 for (i = 0; i < pg->num_clks; i++)
763 clk_disable_unprepare(pg->clks[i]);
766 static int tegra_powergate_enable_clocks(struct tegra_powergate *pg)
768 unsigned int i;
769 int err;
771 for (i = 0; i < pg->num_clks; i++) {
772 err = clk_prepare_enable(pg->clks[i]);
773 if (err)
774 goto out;
777 return 0;
779 out:
780 while (i--)
781 clk_disable_unprepare(pg->clks[i]);
783 return err;
786 static int tegra_powergate_power_up(struct tegra_powergate *pg,
787 bool disable_clocks)
789 int err;
791 err = reset_control_assert(pg->reset);
792 if (err)
793 return err;
795 usleep_range(10, 20);
797 err = tegra_powergate_set(pg->pmc, pg->id, true);
798 if (err < 0)
799 return err;
801 usleep_range(10, 20);
803 err = tegra_powergate_prepare_clocks(pg);
804 if (err)
805 goto powergate_off;
807 err = tegra_powergate_enable_clocks(pg);
808 if (err)
809 goto unprepare_clks;
811 usleep_range(10, 20);
813 err = __tegra_powergate_remove_clamping(pg->pmc, pg->id);
814 if (err)
815 goto disable_clks;
817 usleep_range(10, 20);
819 err = reset_control_deassert(pg->reset);
820 if (err)
821 goto disable_clks;
823 usleep_range(10, 20);
825 if (pg->pmc->soc->needs_mbist_war)
826 err = tegra210_clk_handle_mbist_war(pg->id);
827 if (err)
828 goto disable_clks;
830 if (disable_clocks)
831 tegra_powergate_disable_clocks(pg);
833 err = tegra_powergate_unprepare_clocks(pg);
834 if (err)
835 return err;
837 return 0;
839 disable_clks:
840 tegra_powergate_disable_clocks(pg);
841 usleep_range(10, 20);
843 unprepare_clks:
844 tegra_powergate_unprepare_clocks(pg);
846 powergate_off:
847 tegra_powergate_set(pg->pmc, pg->id, false);
849 return err;
852 static int tegra_powergate_power_down(struct tegra_powergate *pg)
854 int err;
856 err = tegra_powergate_prepare_clocks(pg);
857 if (err)
858 return err;
860 err = tegra_powergate_enable_clocks(pg);
861 if (err)
862 goto unprepare_clks;
864 usleep_range(10, 20);
866 err = reset_control_assert(pg->reset);
867 if (err)
868 goto disable_clks;
870 usleep_range(10, 20);
872 tegra_powergate_disable_clocks(pg);
874 usleep_range(10, 20);
876 err = tegra_powergate_set(pg->pmc, pg->id, false);
877 if (err)
878 goto assert_resets;
880 err = tegra_powergate_unprepare_clocks(pg);
881 if (err)
882 return err;
884 return 0;
886 assert_resets:
887 tegra_powergate_enable_clocks(pg);
888 usleep_range(10, 20);
889 reset_control_deassert(pg->reset);
890 usleep_range(10, 20);
892 disable_clks:
893 tegra_powergate_disable_clocks(pg);
895 unprepare_clks:
896 tegra_powergate_unprepare_clocks(pg);
898 return err;
901 static int tegra_genpd_power_on(struct generic_pm_domain *domain)
903 struct tegra_powergate *pg = to_powergate(domain);
904 struct device *dev = pg->pmc->dev;
905 int err;
907 err = tegra_powergate_power_up(pg, true);
908 if (err) {
909 dev_err(dev, "failed to turn on PM domain %s: %d\n",
910 pg->genpd.name, err);
911 goto out;
914 reset_control_release(pg->reset);
916 out:
917 return err;
920 static int tegra_genpd_power_off(struct generic_pm_domain *domain)
922 struct tegra_powergate *pg = to_powergate(domain);
923 struct device *dev = pg->pmc->dev;
924 int err;
926 err = reset_control_acquire(pg->reset);
927 if (err < 0) {
928 dev_err(dev, "failed to acquire resets for PM domain %s: %d\n",
929 pg->genpd.name, err);
930 return err;
933 err = tegra_powergate_power_down(pg);
934 if (err) {
935 dev_err(dev, "failed to turn off PM domain %s: %d\n",
936 pg->genpd.name, err);
937 reset_control_release(pg->reset);
940 return err;
944 * tegra_powergate_power_on() - power on partition
945 * @id: partition ID
947 int tegra_powergate_power_on(unsigned int id)
949 if (!tegra_powergate_is_available(pmc, id))
950 return -EINVAL;
952 return tegra_powergate_set(pmc, id, true);
954 EXPORT_SYMBOL(tegra_powergate_power_on);
957 * tegra_powergate_power_off() - power off partition
958 * @id: partition ID
960 int tegra_powergate_power_off(unsigned int id)
962 if (!tegra_powergate_is_available(pmc, id))
963 return -EINVAL;
965 return tegra_powergate_set(pmc, id, false);
967 EXPORT_SYMBOL(tegra_powergate_power_off);
970 * tegra_powergate_is_powered() - check if partition is powered
971 * @pmc: power management controller
972 * @id: partition ID
974 static int tegra_powergate_is_powered(struct tegra_pmc *pmc, unsigned int id)
976 if (!tegra_powergate_is_valid(pmc, id))
977 return -EINVAL;
979 return tegra_powergate_state(id);
983 * tegra_powergate_remove_clamping() - remove power clamps for partition
984 * @id: partition ID
986 int tegra_powergate_remove_clamping(unsigned int id)
988 if (!tegra_powergate_is_available(pmc, id))
989 return -EINVAL;
991 return __tegra_powergate_remove_clamping(pmc, id);
993 EXPORT_SYMBOL(tegra_powergate_remove_clamping);
996 * tegra_powergate_sequence_power_up() - power up partition
997 * @id: partition ID
998 * @clk: clock for partition
999 * @rst: reset for partition
1001 * Must be called with clk disabled, and returns with clk enabled.
1003 int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk,
1004 struct reset_control *rst)
1006 struct tegra_powergate *pg;
1007 int err;
1009 if (!tegra_powergate_is_available(pmc, id))
1010 return -EINVAL;
1012 pg = kzalloc(sizeof(*pg), GFP_KERNEL);
1013 if (!pg)
1014 return -ENOMEM;
1016 pg->clk_rates = kzalloc(sizeof(*pg->clk_rates), GFP_KERNEL);
1017 if (!pg->clk_rates) {
1018 kfree(pg->clks);
1019 return -ENOMEM;
1022 pg->id = id;
1023 pg->clks = &clk;
1024 pg->num_clks = 1;
1025 pg->reset = rst;
1026 pg->pmc = pmc;
1028 err = tegra_powergate_power_up(pg, false);
1029 if (err)
1030 dev_err(pmc->dev, "failed to turn on partition %d: %d\n", id,
1031 err);
1033 kfree(pg->clk_rates);
1034 kfree(pg);
1036 return err;
1038 EXPORT_SYMBOL(tegra_powergate_sequence_power_up);
1041 * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID
1042 * @pmc: power management controller
1043 * @cpuid: CPU partition ID
1045 * Returns the partition ID corresponding to the CPU partition ID or a
1046 * negative error code on failure.
1048 static int tegra_get_cpu_powergate_id(struct tegra_pmc *pmc,
1049 unsigned int cpuid)
1051 if (pmc->soc && cpuid < pmc->soc->num_cpu_powergates)
1052 return pmc->soc->cpu_powergates[cpuid];
1054 return -EINVAL;
1058 * tegra_pmc_cpu_is_powered() - check if CPU partition is powered
1059 * @cpuid: CPU partition ID
1061 bool tegra_pmc_cpu_is_powered(unsigned int cpuid)
1063 int id;
1065 id = tegra_get_cpu_powergate_id(pmc, cpuid);
1066 if (id < 0)
1067 return false;
1069 return tegra_powergate_is_powered(pmc, id);
1073 * tegra_pmc_cpu_power_on() - power on CPU partition
1074 * @cpuid: CPU partition ID
1076 int tegra_pmc_cpu_power_on(unsigned int cpuid)
1078 int id;
1080 id = tegra_get_cpu_powergate_id(pmc, cpuid);
1081 if (id < 0)
1082 return id;
1084 return tegra_powergate_set(pmc, id, true);
1088 * tegra_pmc_cpu_remove_clamping() - remove power clamps for CPU partition
1089 * @cpuid: CPU partition ID
1091 int tegra_pmc_cpu_remove_clamping(unsigned int cpuid)
1093 int id;
1095 id = tegra_get_cpu_powergate_id(pmc, cpuid);
1096 if (id < 0)
1097 return id;
1099 return tegra_powergate_remove_clamping(id);
1102 static void tegra_pmc_program_reboot_reason(const char *cmd)
1104 u32 value;
1106 value = tegra_pmc_scratch_readl(pmc, pmc->soc->regs->scratch0);
1107 value &= ~PMC_SCRATCH0_MODE_MASK;
1109 if (cmd) {
1110 if (strcmp(cmd, "recovery") == 0)
1111 value |= PMC_SCRATCH0_MODE_RECOVERY;
1113 if (strcmp(cmd, "bootloader") == 0)
1114 value |= PMC_SCRATCH0_MODE_BOOTLOADER;
1116 if (strcmp(cmd, "forced-recovery") == 0)
1117 value |= PMC_SCRATCH0_MODE_RCM;
1120 tegra_pmc_scratch_writel(pmc, value, pmc->soc->regs->scratch0);
1123 static int tegra_pmc_reboot_notify(struct notifier_block *this,
1124 unsigned long action, void *data)
1126 if (action == SYS_RESTART)
1127 tegra_pmc_program_reboot_reason(data);
1129 return NOTIFY_DONE;
1132 static struct notifier_block tegra_pmc_reboot_notifier = {
1133 .notifier_call = tegra_pmc_reboot_notify,
1136 static void tegra_pmc_restart(void)
1138 u32 value;
1140 /* reset everything but PMC_SCRATCH0 and PMC_RST_STATUS */
1141 value = tegra_pmc_readl(pmc, PMC_CNTRL);
1142 value |= PMC_CNTRL_MAIN_RST;
1143 tegra_pmc_writel(pmc, value, PMC_CNTRL);
1146 static int tegra_pmc_restart_handler(struct sys_off_data *data)
1148 tegra_pmc_restart();
1150 return NOTIFY_DONE;
1153 static int tegra_pmc_power_off_handler(struct sys_off_data *data)
1156 * Reboot Nexus 7 into special bootloader mode if USB cable is
1157 * connected in order to display battery status and power off.
1159 if (of_machine_is_compatible("asus,grouper") &&
1160 power_supply_is_system_supplied()) {
1161 const u32 go_to_charger_mode = 0xa5a55a5a;
1163 tegra_pmc_writel(pmc, go_to_charger_mode, PMC_SCRATCH37);
1164 tegra_pmc_restart();
1167 return NOTIFY_DONE;
1170 static int powergate_show(struct seq_file *s, void *data)
1172 unsigned int i;
1173 int status;
1175 seq_printf(s, " powergate powered\n");
1176 seq_printf(s, "------------------\n");
1178 for (i = 0; i < pmc->soc->num_powergates; i++) {
1179 status = tegra_powergate_is_powered(pmc, i);
1180 if (status < 0)
1181 continue;
1183 seq_printf(s, " %9s %7s\n", pmc->soc->powergates[i],
1184 status ? "yes" : "no");
1187 return 0;
1190 DEFINE_SHOW_ATTRIBUTE(powergate);
1192 static int tegra_powergate_of_get_clks(struct tegra_powergate *pg,
1193 struct device_node *np)
1195 struct clk *clk;
1196 unsigned int i, count;
1197 int err;
1199 count = of_clk_get_parent_count(np);
1200 if (count == 0)
1201 return -ENODEV;
1203 pg->clks = kcalloc(count, sizeof(clk), GFP_KERNEL);
1204 if (!pg->clks)
1205 return -ENOMEM;
1207 pg->clk_rates = kcalloc(count, sizeof(*pg->clk_rates), GFP_KERNEL);
1208 if (!pg->clk_rates) {
1209 kfree(pg->clks);
1210 return -ENOMEM;
1213 for (i = 0; i < count; i++) {
1214 pg->clks[i] = of_clk_get(np, i);
1215 if (IS_ERR(pg->clks[i])) {
1216 err = PTR_ERR(pg->clks[i]);
1217 goto err;
1221 pg->num_clks = count;
1223 return 0;
1225 err:
1226 while (i--)
1227 clk_put(pg->clks[i]);
1229 kfree(pg->clk_rates);
1230 kfree(pg->clks);
1232 return err;
1235 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
1236 struct device_node *np, bool off)
1238 struct device *dev = pg->pmc->dev;
1239 int err;
1241 pg->reset = of_reset_control_array_get_exclusive_released(np);
1242 if (IS_ERR(pg->reset)) {
1243 err = PTR_ERR(pg->reset);
1244 dev_err(dev, "failed to get device resets: %d\n", err);
1245 return err;
1248 err = reset_control_acquire(pg->reset);
1249 if (err < 0) {
1250 pr_err("failed to acquire resets: %d\n", err);
1251 goto out;
1254 if (off) {
1255 err = reset_control_assert(pg->reset);
1256 } else {
1257 err = reset_control_deassert(pg->reset);
1258 if (err < 0)
1259 goto out;
1261 reset_control_release(pg->reset);
1264 out:
1265 if (err) {
1266 reset_control_release(pg->reset);
1267 reset_control_put(pg->reset);
1270 return err;
1273 static int tegra_powergate_add(struct tegra_pmc *pmc, struct device_node *np)
1275 struct device *dev = pmc->dev;
1276 struct tegra_powergate *pg;
1277 int id, err = 0;
1278 bool off;
1280 pg = kzalloc(sizeof(*pg), GFP_KERNEL);
1281 if (!pg)
1282 return -ENOMEM;
1284 id = tegra_powergate_lookup(pmc, np->name);
1285 if (id < 0) {
1286 dev_err(dev, "powergate lookup failed for %pOFn: %d\n", np, id);
1287 err = -ENODEV;
1288 goto free_mem;
1292 * Clear the bit for this powergate so it cannot be managed
1293 * directly via the legacy APIs for controlling powergates.
1295 clear_bit(id, pmc->powergates_available);
1297 pg->id = id;
1298 pg->genpd.name = np->name;
1299 pg->genpd.power_off = tegra_genpd_power_off;
1300 pg->genpd.power_on = tegra_genpd_power_on;
1301 pg->pmc = pmc;
1303 off = !tegra_powergate_is_powered(pmc, pg->id);
1305 err = tegra_powergate_of_get_clks(pg, np);
1306 if (err < 0) {
1307 dev_err(dev, "failed to get clocks for %pOFn: %d\n", np, err);
1308 goto set_available;
1311 err = tegra_powergate_of_get_resets(pg, np, off);
1312 if (err < 0) {
1313 dev_err(dev, "failed to get resets for %pOFn: %d\n", np, err);
1314 goto remove_clks;
1317 if (!IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS)) {
1318 if (off)
1319 WARN_ON(tegra_powergate_power_up(pg, true));
1321 goto remove_resets;
1324 err = pm_genpd_init(&pg->genpd, NULL, off);
1325 if (err < 0) {
1326 dev_err(dev, "failed to initialise PM domain %pOFn: %d\n", np,
1327 err);
1328 goto remove_resets;
1331 err = of_genpd_add_provider_simple(np, &pg->genpd);
1332 if (err < 0) {
1333 dev_err(dev, "failed to add PM domain provider for %pOFn: %d\n",
1334 np, err);
1335 goto remove_genpd;
1338 dev_dbg(dev, "added PM domain %s\n", pg->genpd.name);
1340 return 0;
1342 remove_genpd:
1343 pm_genpd_remove(&pg->genpd);
1345 remove_resets:
1346 reset_control_put(pg->reset);
1348 remove_clks:
1349 while (pg->num_clks--)
1350 clk_put(pg->clks[pg->num_clks]);
1352 kfree(pg->clks);
1354 set_available:
1355 set_bit(id, pmc->powergates_available);
1357 free_mem:
1358 kfree(pg);
1360 return err;
1363 bool tegra_pmc_core_domain_state_synced(void)
1365 return pmc->core_domain_state_synced;
1368 static int
1369 tegra_pmc_core_pd_set_performance_state(struct generic_pm_domain *genpd,
1370 unsigned int level)
1372 struct dev_pm_opp *opp;
1373 int err;
1375 opp = dev_pm_opp_find_level_ceil(&genpd->dev, &level);
1376 if (IS_ERR(opp)) {
1377 dev_err(&genpd->dev, "failed to find OPP for level %u: %pe\n",
1378 level, opp);
1379 return PTR_ERR(opp);
1382 mutex_lock(&pmc->powergates_lock);
1383 err = dev_pm_opp_set_opp(pmc->dev, opp);
1384 mutex_unlock(&pmc->powergates_lock);
1386 dev_pm_opp_put(opp);
1388 if (err) {
1389 dev_err(&genpd->dev, "failed to set voltage to %duV: %d\n",
1390 level, err);
1391 return err;
1394 return 0;
1397 static int tegra_pmc_core_pd_add(struct tegra_pmc *pmc, struct device_node *np)
1399 struct generic_pm_domain *genpd;
1400 const char *rname[] = { "core", NULL};
1401 int err;
1403 genpd = devm_kzalloc(pmc->dev, sizeof(*genpd), GFP_KERNEL);
1404 if (!genpd)
1405 return -ENOMEM;
1407 genpd->name = "core";
1408 genpd->set_performance_state = tegra_pmc_core_pd_set_performance_state;
1410 err = devm_pm_opp_set_regulators(pmc->dev, rname);
1411 if (err)
1412 return dev_err_probe(pmc->dev, err,
1413 "failed to set core OPP regulator\n");
1415 err = pm_genpd_init(genpd, NULL, false);
1416 if (err) {
1417 dev_err(pmc->dev, "failed to init core genpd: %d\n", err);
1418 return err;
1421 err = of_genpd_add_provider_simple(np, genpd);
1422 if (err) {
1423 dev_err(pmc->dev, "failed to add core genpd: %d\n", err);
1424 goto remove_genpd;
1427 pmc->core_domain_registered = true;
1429 return 0;
1431 remove_genpd:
1432 pm_genpd_remove(genpd);
1434 return err;
1437 static int tegra_powergate_init(struct tegra_pmc *pmc,
1438 struct device_node *parent)
1440 struct of_phandle_args child_args, parent_args;
1441 struct device_node *np;
1442 int err = 0;
1445 * Core power domain is the parent of powergate domains, hence it
1446 * should be registered first.
1448 np = of_get_child_by_name(parent, "core-domain");
1449 if (np) {
1450 err = tegra_pmc_core_pd_add(pmc, np);
1451 of_node_put(np);
1452 if (err)
1453 return err;
1456 np = of_get_child_by_name(parent, "powergates");
1457 if (!np)
1458 return 0;
1460 for_each_child_of_node_scoped(np, child) {
1461 err = tegra_powergate_add(pmc, child);
1462 if (err < 0)
1463 break;
1465 if (of_parse_phandle_with_args(child, "power-domains",
1466 "#power-domain-cells",
1467 0, &parent_args))
1468 continue;
1470 child_args.np = child;
1471 child_args.args_count = 0;
1473 err = of_genpd_add_subdomain(&parent_args, &child_args);
1474 of_node_put(parent_args.np);
1475 if (err)
1476 break;
1479 of_node_put(np);
1481 return err;
1484 static void tegra_powergate_remove(struct generic_pm_domain *genpd)
1486 struct tegra_powergate *pg = to_powergate(genpd);
1488 reset_control_put(pg->reset);
1490 while (pg->num_clks--)
1491 clk_put(pg->clks[pg->num_clks]);
1493 kfree(pg->clks);
1495 set_bit(pg->id, pmc->powergates_available);
1497 kfree(pg);
1500 static void tegra_powergate_remove_all(struct device_node *parent)
1502 struct generic_pm_domain *genpd;
1503 struct device_node *np, *child;
1505 np = of_get_child_by_name(parent, "powergates");
1506 if (!np)
1507 return;
1509 for_each_child_of_node(np, child) {
1510 of_genpd_del_provider(child);
1512 genpd = of_genpd_remove_last(child);
1513 if (IS_ERR(genpd))
1514 continue;
1516 tegra_powergate_remove(genpd);
1519 of_node_put(np);
1521 np = of_get_child_by_name(parent, "core-domain");
1522 if (np) {
1523 of_genpd_del_provider(np);
1524 of_genpd_remove_last(np);
1528 static const struct tegra_io_pad_soc *
1529 tegra_io_pad_find(struct tegra_pmc *pmc, enum tegra_io_pad id)
1531 unsigned int i;
1533 for (i = 0; i < pmc->soc->num_io_pads; i++)
1534 if (pmc->soc->io_pads[i].id == id)
1535 return &pmc->soc->io_pads[i];
1537 return NULL;
1540 static int tegra_io_pad_prepare(struct tegra_pmc *pmc,
1541 const struct tegra_io_pad_soc *pad,
1542 unsigned long *request,
1543 unsigned long *status,
1544 u32 *mask)
1546 unsigned long rate, value;
1548 if (pad->dpd == UINT_MAX)
1549 return -EINVAL;
1551 *request = pad->request;
1552 *status = pad->status;
1553 *mask = BIT(pad->dpd);
1555 if (pmc->clk) {
1556 rate = pmc->rate;
1557 if (!rate) {
1558 dev_err(pmc->dev, "failed to get clock rate\n");
1559 return -ENODEV;
1562 tegra_pmc_writel(pmc, DPD_SAMPLE_ENABLE, DPD_SAMPLE);
1564 /* must be at least 200 ns, in APB (PCLK) clock cycles */
1565 value = DIV_ROUND_UP(1000000000, rate);
1566 value = DIV_ROUND_UP(200, value);
1567 tegra_pmc_writel(pmc, value, SEL_DPD_TIM);
1570 return 0;
1573 static int tegra_io_pad_poll(struct tegra_pmc *pmc, unsigned long offset,
1574 u32 mask, u32 val, unsigned long timeout)
1576 u32 value;
1578 timeout = jiffies + msecs_to_jiffies(timeout);
1580 while (time_after(timeout, jiffies)) {
1581 value = tegra_pmc_readl(pmc, offset);
1582 if ((value & mask) == val)
1583 return 0;
1585 usleep_range(250, 1000);
1588 return -ETIMEDOUT;
1591 static void tegra_io_pad_unprepare(struct tegra_pmc *pmc)
1593 if (pmc->clk)
1594 tegra_pmc_writel(pmc, DPD_SAMPLE_DISABLE, DPD_SAMPLE);
1598 * tegra_io_pad_power_enable() - enable power to I/O pad
1599 * @id: Tegra I/O pad ID for which to enable power
1601 * Returns: 0 on success or a negative error code on failure.
1603 int tegra_io_pad_power_enable(enum tegra_io_pad id)
1605 const struct tegra_io_pad_soc *pad;
1606 unsigned long request, status;
1607 u32 mask;
1608 int err;
1610 pad = tegra_io_pad_find(pmc, id);
1611 if (!pad) {
1612 dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1613 return -ENOENT;
1616 mutex_lock(&pmc->powergates_lock);
1618 err = tegra_io_pad_prepare(pmc, pad, &request, &status, &mask);
1619 if (err < 0) {
1620 dev_err(pmc->dev, "failed to prepare I/O pad: %d\n", err);
1621 goto unlock;
1624 tegra_pmc_writel(pmc, IO_DPD_REQ_CODE_OFF | mask, request);
1626 err = tegra_io_pad_poll(pmc, status, mask, 0, 250);
1627 if (err < 0) {
1628 dev_err(pmc->dev, "failed to enable I/O pad: %d\n", err);
1629 goto unlock;
1632 tegra_io_pad_unprepare(pmc);
1634 unlock:
1635 mutex_unlock(&pmc->powergates_lock);
1636 return err;
1638 EXPORT_SYMBOL(tegra_io_pad_power_enable);
1641 * tegra_io_pad_power_disable() - disable power to I/O pad
1642 * @id: Tegra I/O pad ID for which to disable power
1644 * Returns: 0 on success or a negative error code on failure.
1646 int tegra_io_pad_power_disable(enum tegra_io_pad id)
1648 const struct tegra_io_pad_soc *pad;
1649 unsigned long request, status;
1650 u32 mask;
1651 int err;
1653 pad = tegra_io_pad_find(pmc, id);
1654 if (!pad) {
1655 dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1656 return -ENOENT;
1659 mutex_lock(&pmc->powergates_lock);
1661 err = tegra_io_pad_prepare(pmc, pad, &request, &status, &mask);
1662 if (err < 0) {
1663 dev_err(pmc->dev, "failed to prepare I/O pad: %d\n", err);
1664 goto unlock;
1667 tegra_pmc_writel(pmc, IO_DPD_REQ_CODE_ON | mask, request);
1669 err = tegra_io_pad_poll(pmc, status, mask, mask, 250);
1670 if (err < 0) {
1671 dev_err(pmc->dev, "failed to disable I/O pad: %d\n", err);
1672 goto unlock;
1675 tegra_io_pad_unprepare(pmc);
1677 unlock:
1678 mutex_unlock(&pmc->powergates_lock);
1679 return err;
1681 EXPORT_SYMBOL(tegra_io_pad_power_disable);
1683 static int tegra_io_pad_is_powered(struct tegra_pmc *pmc, enum tegra_io_pad id)
1685 const struct tegra_io_pad_soc *pad;
1686 unsigned long status;
1687 u32 mask, value;
1689 pad = tegra_io_pad_find(pmc, id);
1690 if (!pad) {
1691 dev_err(pmc->dev, "invalid I/O pad ID %u\n", id);
1692 return -ENOENT;
1695 if (pad->dpd == UINT_MAX)
1696 return -EINVAL;
1698 status = pad->status;
1699 mask = BIT(pad->dpd);
1701 value = tegra_pmc_readl(pmc, status);
1703 return !(value & mask);
1706 static int tegra_io_pad_set_voltage(struct tegra_pmc *pmc, enum tegra_io_pad id,
1707 int voltage)
1709 const struct tegra_io_pad_soc *pad;
1710 u32 value;
1712 pad = tegra_io_pad_find(pmc, id);
1713 if (!pad)
1714 return -ENOENT;
1716 if (pad->voltage == UINT_MAX)
1717 return -ENOTSUPP;
1719 mutex_lock(&pmc->powergates_lock);
1721 if (pmc->soc->has_impl_33v_pwr) {
1722 value = tegra_pmc_readl(pmc, PMC_IMPL_E_33V_PWR);
1724 if (voltage == TEGRA_IO_PAD_VOLTAGE_1V8)
1725 value &= ~BIT(pad->voltage);
1726 else
1727 value |= BIT(pad->voltage);
1729 tegra_pmc_writel(pmc, value, PMC_IMPL_E_33V_PWR);
1730 } else {
1731 /* write-enable PMC_PWR_DET_VALUE[pad->voltage] */
1732 value = tegra_pmc_readl(pmc, PMC_PWR_DET);
1733 value |= BIT(pad->voltage);
1734 tegra_pmc_writel(pmc, value, PMC_PWR_DET);
1736 /* update I/O voltage */
1737 value = tegra_pmc_readl(pmc, PMC_PWR_DET_VALUE);
1739 if (voltage == TEGRA_IO_PAD_VOLTAGE_1V8)
1740 value &= ~BIT(pad->voltage);
1741 else
1742 value |= BIT(pad->voltage);
1744 tegra_pmc_writel(pmc, value, PMC_PWR_DET_VALUE);
1747 mutex_unlock(&pmc->powergates_lock);
1749 usleep_range(100, 250);
1751 return 0;
1754 static int tegra_io_pad_get_voltage(struct tegra_pmc *pmc, enum tegra_io_pad id)
1756 const struct tegra_io_pad_soc *pad;
1757 u32 value;
1759 pad = tegra_io_pad_find(pmc, id);
1760 if (!pad)
1761 return -ENOENT;
1763 if (pad->voltage == UINT_MAX)
1764 return -ENOTSUPP;
1766 if (pmc->soc->has_impl_33v_pwr)
1767 value = tegra_pmc_readl(pmc, PMC_IMPL_E_33V_PWR);
1768 else
1769 value = tegra_pmc_readl(pmc, PMC_PWR_DET_VALUE);
1771 if ((value & BIT(pad->voltage)) == 0)
1772 return TEGRA_IO_PAD_VOLTAGE_1V8;
1774 return TEGRA_IO_PAD_VOLTAGE_3V3;
1777 #ifdef CONFIG_PM_SLEEP
1778 enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)
1780 return pmc->suspend_mode;
1783 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode)
1785 if (mode < TEGRA_SUSPEND_NONE || mode >= TEGRA_MAX_SUSPEND_MODE)
1786 return;
1788 pmc->suspend_mode = mode;
1791 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode)
1793 unsigned long long rate = 0;
1794 u64 ticks;
1795 u32 value;
1797 switch (mode) {
1798 case TEGRA_SUSPEND_LP1:
1799 rate = 32768;
1800 break;
1802 case TEGRA_SUSPEND_LP2:
1803 rate = pmc->rate;
1804 break;
1806 default:
1807 break;
1810 if (WARN_ON_ONCE(rate == 0))
1811 rate = 100000000;
1813 ticks = pmc->cpu_good_time * rate + USEC_PER_SEC - 1;
1814 do_div(ticks, USEC_PER_SEC);
1815 tegra_pmc_writel(pmc, ticks, PMC_CPUPWRGOOD_TIMER);
1817 ticks = pmc->cpu_off_time * rate + USEC_PER_SEC - 1;
1818 do_div(ticks, USEC_PER_SEC);
1819 tegra_pmc_writel(pmc, ticks, PMC_CPUPWROFF_TIMER);
1821 value = tegra_pmc_readl(pmc, PMC_CNTRL);
1822 value &= ~PMC_CNTRL_SIDE_EFFECT_LP0;
1823 value |= PMC_CNTRL_CPU_PWRREQ_OE;
1824 tegra_pmc_writel(pmc, value, PMC_CNTRL);
1826 #endif
1828 static int tegra_pmc_parse_dt(struct tegra_pmc *pmc, struct device_node *np)
1830 u32 value, values[2];
1832 if (of_property_read_u32(np, "nvidia,suspend-mode", &value)) {
1833 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1834 } else {
1835 switch (value) {
1836 case 0:
1837 pmc->suspend_mode = TEGRA_SUSPEND_LP0;
1838 break;
1840 case 1:
1841 pmc->suspend_mode = TEGRA_SUSPEND_LP1;
1842 break;
1844 case 2:
1845 pmc->suspend_mode = TEGRA_SUSPEND_LP2;
1846 break;
1848 default:
1849 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1850 break;
1854 pmc->suspend_mode = tegra_pm_validate_suspend_mode(pmc->suspend_mode);
1856 if (of_property_read_u32(np, "nvidia,cpu-pwr-good-time", &value))
1857 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1859 pmc->cpu_good_time = value;
1861 if (of_property_read_u32(np, "nvidia,cpu-pwr-off-time", &value))
1862 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1864 pmc->cpu_off_time = value;
1866 if (of_property_read_u32_array(np, "nvidia,core-pwr-good-time",
1867 values, ARRAY_SIZE(values)))
1868 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1870 pmc->core_osc_time = values[0];
1871 pmc->core_pmu_time = values[1];
1873 if (of_property_read_u32(np, "nvidia,core-pwr-off-time", &value))
1874 pmc->suspend_mode = TEGRA_SUSPEND_NONE;
1876 pmc->core_off_time = value;
1878 pmc->corereq_high = of_property_read_bool(np,
1879 "nvidia,core-power-req-active-high");
1881 pmc->sysclkreq_high = of_property_read_bool(np,
1882 "nvidia,sys-clock-req-active-high");
1884 pmc->combined_req = of_property_read_bool(np,
1885 "nvidia,combined-power-req");
1887 pmc->cpu_pwr_good_en = of_property_read_bool(np,
1888 "nvidia,cpu-pwr-good-en");
1890 if (of_property_read_u32_array(np, "nvidia,lp0-vec", values,
1891 ARRAY_SIZE(values)))
1892 if (pmc->suspend_mode == TEGRA_SUSPEND_LP0)
1893 pmc->suspend_mode = TEGRA_SUSPEND_LP1;
1895 pmc->lp0_vec_phys = values[0];
1896 pmc->lp0_vec_size = values[1];
1898 return 0;
1901 static int tegra_pmc_init(struct tegra_pmc *pmc)
1903 if (pmc->soc->max_wake_events > 0) {
1904 pmc->wake_type_level_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1905 if (!pmc->wake_type_level_map)
1906 return -ENOMEM;
1908 pmc->wake_type_dual_edge_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1909 if (!pmc->wake_type_dual_edge_map)
1910 return -ENOMEM;
1912 pmc->wake_sw_status_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1913 if (!pmc->wake_sw_status_map)
1914 return -ENOMEM;
1916 pmc->wake_cntrl_level_map = bitmap_zalloc(pmc->soc->max_wake_events, GFP_KERNEL);
1917 if (!pmc->wake_cntrl_level_map)
1918 return -ENOMEM;
1921 if (pmc->soc->init)
1922 pmc->soc->init(pmc);
1924 return 0;
1927 static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
1929 static const char disabled[] = "emergency thermal reset disabled";
1930 u32 pmu_addr, ctrl_id, reg_addr, reg_data, pinmux;
1931 struct device *dev = pmc->dev;
1932 struct device_node *np;
1933 u32 value, checksum;
1935 if (!pmc->soc->has_tsense_reset)
1936 return;
1938 np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
1939 if (!np) {
1940 dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
1941 return;
1944 if (of_property_read_u32(np, "nvidia,i2c-controller-id", &ctrl_id)) {
1945 dev_err(dev, "I2C controller ID missing, %s.\n", disabled);
1946 goto out;
1949 if (of_property_read_u32(np, "nvidia,bus-addr", &pmu_addr)) {
1950 dev_err(dev, "nvidia,bus-addr missing, %s.\n", disabled);
1951 goto out;
1954 if (of_property_read_u32(np, "nvidia,reg-addr", &reg_addr)) {
1955 dev_err(dev, "nvidia,reg-addr missing, %s.\n", disabled);
1956 goto out;
1959 if (of_property_read_u32(np, "nvidia,reg-data", &reg_data)) {
1960 dev_err(dev, "nvidia,reg-data missing, %s.\n", disabled);
1961 goto out;
1964 if (of_property_read_u32(np, "nvidia,pinmux-id", &pinmux))
1965 pinmux = 0;
1967 value = tegra_pmc_readl(pmc, PMC_SENSOR_CTRL);
1968 value |= PMC_SENSOR_CTRL_SCRATCH_WRITE;
1969 tegra_pmc_writel(pmc, value, PMC_SENSOR_CTRL);
1971 value = (reg_data << PMC_SCRATCH54_DATA_SHIFT) |
1972 (reg_addr << PMC_SCRATCH54_ADDR_SHIFT);
1973 tegra_pmc_writel(pmc, value, PMC_SCRATCH54);
1975 value = PMC_SCRATCH55_RESET_TEGRA;
1976 value |= ctrl_id << PMC_SCRATCH55_CNTRL_ID_SHIFT;
1977 value |= pinmux << PMC_SCRATCH55_PINMUX_SHIFT;
1978 value |= pmu_addr << PMC_SCRATCH55_I2CSLV1_SHIFT;
1981 * Calculate checksum of SCRATCH54, SCRATCH55 fields. Bits 23:16 will
1982 * contain the checksum and are currently zero, so they are not added.
1984 checksum = reg_addr + reg_data + (value & 0xff) + ((value >> 8) & 0xff)
1985 + ((value >> 24) & 0xff);
1986 checksum &= 0xff;
1987 checksum = 0x100 - checksum;
1989 value |= checksum << PMC_SCRATCH55_CHECKSUM_SHIFT;
1991 tegra_pmc_writel(pmc, value, PMC_SCRATCH55);
1993 value = tegra_pmc_readl(pmc, PMC_SENSOR_CTRL);
1994 value |= PMC_SENSOR_CTRL_ENABLE_RST;
1995 tegra_pmc_writel(pmc, value, PMC_SENSOR_CTRL);
1997 dev_info(pmc->dev, "emergency thermal reset enabled\n");
1999 out:
2000 of_node_put(np);
2003 static int tegra_io_pad_pinctrl_get_groups_count(struct pinctrl_dev *pctl_dev)
2005 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2007 return pmc->soc->num_io_pads;
2010 static const char *tegra_io_pad_pinctrl_get_group_name(struct pinctrl_dev *pctl,
2011 unsigned int group)
2013 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl);
2015 return pmc->soc->io_pads[group].name;
2018 static int tegra_io_pad_pinctrl_get_group_pins(struct pinctrl_dev *pctl_dev,
2019 unsigned int group,
2020 const unsigned int **pins,
2021 unsigned int *num_pins)
2023 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2025 *pins = &pmc->soc->io_pads[group].id;
2026 *num_pins = 1;
2028 return 0;
2031 static const struct pinctrl_ops tegra_io_pad_pinctrl_ops = {
2032 .get_groups_count = tegra_io_pad_pinctrl_get_groups_count,
2033 .get_group_name = tegra_io_pad_pinctrl_get_group_name,
2034 .get_group_pins = tegra_io_pad_pinctrl_get_group_pins,
2035 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
2036 .dt_free_map = pinconf_generic_dt_free_map,
2039 static int tegra_io_pad_pinconf_get(struct pinctrl_dev *pctl_dev,
2040 unsigned int pin, unsigned long *config)
2042 enum pin_config_param param = pinconf_to_config_param(*config);
2043 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2044 const struct tegra_io_pad_soc *pad;
2045 int ret;
2046 u32 arg;
2048 pad = tegra_io_pad_find(pmc, pin);
2049 if (!pad)
2050 return -EINVAL;
2052 switch (param) {
2053 case PIN_CONFIG_POWER_SOURCE:
2054 ret = tegra_io_pad_get_voltage(pmc, pad->id);
2055 if (ret < 0)
2056 return ret;
2058 arg = ret;
2059 break;
2061 case PIN_CONFIG_MODE_LOW_POWER:
2062 ret = tegra_io_pad_is_powered(pmc, pad->id);
2063 if (ret < 0)
2064 return ret;
2066 arg = !ret;
2067 break;
2069 default:
2070 return -EINVAL;
2073 *config = pinconf_to_config_packed(param, arg);
2075 return 0;
2078 static int tegra_io_pad_pinconf_set(struct pinctrl_dev *pctl_dev,
2079 unsigned int pin, unsigned long *configs,
2080 unsigned int num_configs)
2082 struct tegra_pmc *pmc = pinctrl_dev_get_drvdata(pctl_dev);
2083 const struct tegra_io_pad_soc *pad;
2084 enum pin_config_param param;
2085 unsigned int i;
2086 int err;
2087 u32 arg;
2089 pad = tegra_io_pad_find(pmc, pin);
2090 if (!pad)
2091 return -EINVAL;
2093 for (i = 0; i < num_configs; ++i) {
2094 param = pinconf_to_config_param(configs[i]);
2095 arg = pinconf_to_config_argument(configs[i]);
2097 switch (param) {
2098 case PIN_CONFIG_MODE_LOW_POWER:
2099 if (arg)
2100 err = tegra_io_pad_power_disable(pad->id);
2101 else
2102 err = tegra_io_pad_power_enable(pad->id);
2103 if (err)
2104 return err;
2105 break;
2106 case PIN_CONFIG_POWER_SOURCE:
2107 if (arg != TEGRA_IO_PAD_VOLTAGE_1V8 &&
2108 arg != TEGRA_IO_PAD_VOLTAGE_3V3)
2109 return -EINVAL;
2110 err = tegra_io_pad_set_voltage(pmc, pad->id, arg);
2111 if (err)
2112 return err;
2113 break;
2114 default:
2115 return -EINVAL;
2119 return 0;
2122 static const struct pinconf_ops tegra_io_pad_pinconf_ops = {
2123 .pin_config_get = tegra_io_pad_pinconf_get,
2124 .pin_config_set = tegra_io_pad_pinconf_set,
2125 .is_generic = true,
2128 static struct pinctrl_desc tegra_pmc_pctl_desc = {
2129 .pctlops = &tegra_io_pad_pinctrl_ops,
2130 .confops = &tegra_io_pad_pinconf_ops,
2133 static int tegra_pmc_pinctrl_init(struct tegra_pmc *pmc)
2135 int err;
2137 if (!pmc->soc->num_pin_descs)
2138 return 0;
2140 tegra_pmc_pctl_desc.name = dev_name(pmc->dev);
2141 tegra_pmc_pctl_desc.pins = pmc->soc->pin_descs;
2142 tegra_pmc_pctl_desc.npins = pmc->soc->num_pin_descs;
2144 pmc->pctl_dev = devm_pinctrl_register(pmc->dev, &tegra_pmc_pctl_desc,
2145 pmc);
2146 if (IS_ERR(pmc->pctl_dev)) {
2147 err = PTR_ERR(pmc->pctl_dev);
2148 dev_err(pmc->dev, "failed to register pin controller: %d\n",
2149 err);
2150 return err;
2153 return 0;
2156 static ssize_t reset_reason_show(struct device *dev,
2157 struct device_attribute *attr, char *buf)
2159 u32 value;
2161 value = tegra_pmc_readl(pmc, pmc->soc->regs->rst_status);
2162 value &= pmc->soc->regs->rst_source_mask;
2163 value >>= pmc->soc->regs->rst_source_shift;
2165 if (WARN_ON(value >= pmc->soc->num_reset_sources))
2166 return sprintf(buf, "%s\n", "UNKNOWN");
2168 return sprintf(buf, "%s\n", pmc->soc->reset_sources[value]);
2171 static DEVICE_ATTR_RO(reset_reason);
2173 static ssize_t reset_level_show(struct device *dev,
2174 struct device_attribute *attr, char *buf)
2176 u32 value;
2178 value = tegra_pmc_readl(pmc, pmc->soc->regs->rst_status);
2179 value &= pmc->soc->regs->rst_level_mask;
2180 value >>= pmc->soc->regs->rst_level_shift;
2182 if (WARN_ON(value >= pmc->soc->num_reset_levels))
2183 return sprintf(buf, "%s\n", "UNKNOWN");
2185 return sprintf(buf, "%s\n", pmc->soc->reset_levels[value]);
2188 static DEVICE_ATTR_RO(reset_level);
2190 static void tegra_pmc_reset_sysfs_init(struct tegra_pmc *pmc)
2192 struct device *dev = pmc->dev;
2193 int err = 0;
2195 if (pmc->soc->reset_sources) {
2196 err = device_create_file(dev, &dev_attr_reset_reason);
2197 if (err < 0)
2198 dev_warn(dev,
2199 "failed to create attr \"reset_reason\": %d\n",
2200 err);
2203 if (pmc->soc->reset_levels) {
2204 err = device_create_file(dev, &dev_attr_reset_level);
2205 if (err < 0)
2206 dev_warn(dev,
2207 "failed to create attr \"reset_level\": %d\n",
2208 err);
2212 static int tegra_pmc_irq_translate(struct irq_domain *domain,
2213 struct irq_fwspec *fwspec,
2214 unsigned long *hwirq,
2215 unsigned int *type)
2217 if (WARN_ON(fwspec->param_count < 2))
2218 return -EINVAL;
2220 *hwirq = fwspec->param[0];
2221 *type = fwspec->param[1];
2223 return 0;
2226 static int tegra_pmc_irq_alloc(struct irq_domain *domain, unsigned int virq,
2227 unsigned int num_irqs, void *data)
2229 struct tegra_pmc *pmc = domain->host_data;
2230 const struct tegra_pmc_soc *soc = pmc->soc;
2231 struct irq_fwspec *fwspec = data;
2232 unsigned int i;
2233 int err = 0;
2235 if (WARN_ON(num_irqs > 1))
2236 return -EINVAL;
2238 for (i = 0; i < soc->num_wake_events; i++) {
2239 const struct tegra_wake_event *event = &soc->wake_events[i];
2241 /* IRQ and simple wake events */
2242 if (fwspec->param_count == 2) {
2243 struct irq_fwspec spec;
2245 if (event->id != fwspec->param[0])
2246 continue;
2248 err = irq_domain_set_hwirq_and_chip(domain, virq,
2249 event->id,
2250 &pmc->irq, pmc);
2251 if (err < 0)
2252 break;
2254 /* simple hierarchies stop at the PMC level */
2255 if (event->irq == 0) {
2256 err = irq_domain_disconnect_hierarchy(domain->parent, virq);
2257 break;
2260 spec.fwnode = &pmc->dev->of_node->fwnode;
2261 spec.param_count = 3;
2262 spec.param[0] = GIC_SPI;
2263 spec.param[1] = event->irq;
2264 spec.param[2] = fwspec->param[1];
2266 err = irq_domain_alloc_irqs_parent(domain, virq,
2267 num_irqs, &spec);
2269 break;
2272 /* GPIO wake events */
2273 if (fwspec->param_count == 3) {
2274 if (event->gpio.instance != fwspec->param[0] ||
2275 event->gpio.pin != fwspec->param[1])
2276 continue;
2278 err = irq_domain_set_hwirq_and_chip(domain, virq,
2279 event->id,
2280 &pmc->irq, pmc);
2282 /* GPIO hierarchies stop at the PMC level */
2283 if (!err && domain->parent)
2284 err = irq_domain_disconnect_hierarchy(domain->parent,
2285 virq);
2286 break;
2290 /* If there is no wake-up event, there is no PMC mapping */
2291 if (i == soc->num_wake_events)
2292 err = irq_domain_disconnect_hierarchy(domain, virq);
2294 return err;
2297 static const struct irq_domain_ops tegra_pmc_irq_domain_ops = {
2298 .translate = tegra_pmc_irq_translate,
2299 .alloc = tegra_pmc_irq_alloc,
2302 static int tegra210_pmc_irq_set_wake(struct irq_data *data, unsigned int on)
2304 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2305 unsigned int offset, bit;
2306 u32 value;
2308 offset = data->hwirq / 32;
2309 bit = data->hwirq % 32;
2311 /* clear wake status */
2312 tegra_pmc_writel(pmc, 0, PMC_SW_WAKE_STATUS);
2313 tegra_pmc_writel(pmc, 0, PMC_SW_WAKE2_STATUS);
2315 tegra_pmc_writel(pmc, 0, PMC_WAKE_STATUS);
2316 tegra_pmc_writel(pmc, 0, PMC_WAKE2_STATUS);
2318 /* enable PMC wake */
2319 if (data->hwirq >= 32)
2320 offset = PMC_WAKE2_MASK;
2321 else
2322 offset = PMC_WAKE_MASK;
2324 value = tegra_pmc_readl(pmc, offset);
2326 if (on)
2327 value |= BIT(bit);
2328 else
2329 value &= ~BIT(bit);
2331 tegra_pmc_writel(pmc, value, offset);
2333 return 0;
2336 static int tegra210_pmc_irq_set_type(struct irq_data *data, unsigned int type)
2338 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2339 unsigned int offset, bit;
2340 u32 value;
2342 offset = data->hwirq / 32;
2343 bit = data->hwirq % 32;
2345 if (data->hwirq >= 32)
2346 offset = PMC_WAKE2_LEVEL;
2347 else
2348 offset = PMC_WAKE_LEVEL;
2350 value = tegra_pmc_readl(pmc, offset);
2352 switch (type) {
2353 case IRQ_TYPE_EDGE_RISING:
2354 case IRQ_TYPE_LEVEL_HIGH:
2355 value |= BIT(bit);
2356 break;
2358 case IRQ_TYPE_EDGE_FALLING:
2359 case IRQ_TYPE_LEVEL_LOW:
2360 value &= ~BIT(bit);
2361 break;
2363 case IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING:
2364 value ^= BIT(bit);
2365 break;
2367 default:
2368 return -EINVAL;
2371 tegra_pmc_writel(pmc, value, offset);
2373 return 0;
2376 static void tegra186_pmc_set_wake_filters(struct tegra_pmc *pmc)
2378 u32 value;
2380 /* SW Wake (wake83) needs SR_CAPTURE filter to be enabled */
2381 value = readl(pmc->wake + WAKE_AOWAKE_CNTRL(SW_WAKE_ID));
2382 value |= WAKE_AOWAKE_CNTRL_SR_CAPTURE_EN;
2383 writel(value, pmc->wake + WAKE_AOWAKE_CNTRL(SW_WAKE_ID));
2384 dev_dbg(pmc->dev, "WAKE_AOWAKE_CNTRL_83 = 0x%x\n", value);
2387 static int tegra186_pmc_irq_set_wake(struct irq_data *data, unsigned int on)
2389 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2390 unsigned int offset, bit;
2391 u32 value;
2393 offset = data->hwirq / 32;
2394 bit = data->hwirq % 32;
2396 /* clear wake status */
2397 writel(0x1, pmc->wake + WAKE_AOWAKE_STATUS_W(data->hwirq));
2399 /* route wake to tier 2 */
2400 value = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(offset));
2402 if (!on)
2403 value &= ~(1 << bit);
2404 else
2405 value |= 1 << bit;
2407 writel(value, pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(offset));
2409 /* enable wakeup event */
2410 writel(!!on, pmc->wake + WAKE_AOWAKE_MASK_W(data->hwirq));
2412 return 0;
2415 static int tegra186_pmc_irq_set_type(struct irq_data *data, unsigned int type)
2417 struct tegra_pmc *pmc = irq_data_get_irq_chip_data(data);
2418 u32 value;
2420 value = readl(pmc->wake + WAKE_AOWAKE_CNTRL(data->hwirq));
2422 switch (type) {
2423 case IRQ_TYPE_EDGE_RISING:
2424 case IRQ_TYPE_LEVEL_HIGH:
2425 value |= WAKE_AOWAKE_CNTRL_LEVEL;
2426 set_bit(data->hwirq, pmc->wake_type_level_map);
2427 clear_bit(data->hwirq, pmc->wake_type_dual_edge_map);
2428 break;
2430 case IRQ_TYPE_EDGE_FALLING:
2431 case IRQ_TYPE_LEVEL_LOW:
2432 value &= ~WAKE_AOWAKE_CNTRL_LEVEL;
2433 clear_bit(data->hwirq, pmc->wake_type_level_map);
2434 clear_bit(data->hwirq, pmc->wake_type_dual_edge_map);
2435 break;
2437 case IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING:
2438 value ^= WAKE_AOWAKE_CNTRL_LEVEL;
2439 clear_bit(data->hwirq, pmc->wake_type_level_map);
2440 set_bit(data->hwirq, pmc->wake_type_dual_edge_map);
2441 break;
2443 default:
2444 return -EINVAL;
2447 writel(value, pmc->wake + WAKE_AOWAKE_CNTRL(data->hwirq));
2449 return 0;
2452 static void tegra_irq_mask_parent(struct irq_data *data)
2454 if (data->parent_data)
2455 irq_chip_mask_parent(data);
2458 static void tegra_irq_unmask_parent(struct irq_data *data)
2460 if (data->parent_data)
2461 irq_chip_unmask_parent(data);
2464 static void tegra_irq_eoi_parent(struct irq_data *data)
2466 if (data->parent_data)
2467 irq_chip_eoi_parent(data);
2470 static int tegra_irq_set_affinity_parent(struct irq_data *data,
2471 const struct cpumask *dest,
2472 bool force)
2474 if (data->parent_data)
2475 return irq_chip_set_affinity_parent(data, dest, force);
2477 return -EINVAL;
2480 static int tegra_pmc_irq_init(struct tegra_pmc *pmc)
2482 struct irq_domain *parent = NULL;
2483 struct device_node *np;
2485 np = of_irq_find_parent(pmc->dev->of_node);
2486 if (np) {
2487 parent = irq_find_host(np);
2488 of_node_put(np);
2491 if (!parent)
2492 return 0;
2494 pmc->irq.name = dev_name(pmc->dev);
2495 pmc->irq.irq_mask = tegra_irq_mask_parent;
2496 pmc->irq.irq_unmask = tegra_irq_unmask_parent;
2497 pmc->irq.irq_eoi = tegra_irq_eoi_parent;
2498 pmc->irq.irq_set_affinity = tegra_irq_set_affinity_parent;
2499 pmc->irq.irq_set_type = pmc->soc->irq_set_type;
2500 pmc->irq.irq_set_wake = pmc->soc->irq_set_wake;
2502 pmc->domain = irq_domain_add_hierarchy(parent, 0, 96, pmc->dev->of_node,
2503 &tegra_pmc_irq_domain_ops, pmc);
2504 if (!pmc->domain) {
2505 dev_err(pmc->dev, "failed to allocate domain\n");
2506 return -ENOMEM;
2509 return 0;
2512 static int tegra_pmc_clk_notify_cb(struct notifier_block *nb,
2513 unsigned long action, void *ptr)
2515 struct tegra_pmc *pmc = container_of(nb, struct tegra_pmc, clk_nb);
2516 struct clk_notifier_data *data = ptr;
2518 switch (action) {
2519 case PRE_RATE_CHANGE:
2520 mutex_lock(&pmc->powergates_lock);
2521 break;
2523 case POST_RATE_CHANGE:
2524 pmc->rate = data->new_rate;
2525 fallthrough;
2527 case ABORT_RATE_CHANGE:
2528 mutex_unlock(&pmc->powergates_lock);
2529 break;
2531 default:
2532 WARN_ON_ONCE(1);
2533 return notifier_from_errno(-EINVAL);
2536 return NOTIFY_OK;
2539 static void pmc_clk_fence_udelay(u32 offset)
2541 tegra_pmc_readl(pmc, offset);
2542 /* pmc clk propagation delay 2 us */
2543 udelay(2);
2546 static u8 pmc_clk_mux_get_parent(struct clk_hw *hw)
2548 struct pmc_clk *clk = to_pmc_clk(hw);
2549 u32 val;
2551 val = tegra_pmc_readl(pmc, clk->offs) >> clk->mux_shift;
2552 val &= PMC_CLK_OUT_MUX_MASK;
2554 return val;
2557 static int pmc_clk_mux_set_parent(struct clk_hw *hw, u8 index)
2559 struct pmc_clk *clk = to_pmc_clk(hw);
2560 u32 val;
2562 val = tegra_pmc_readl(pmc, clk->offs);
2563 val &= ~(PMC_CLK_OUT_MUX_MASK << clk->mux_shift);
2564 val |= index << clk->mux_shift;
2565 tegra_pmc_writel(pmc, val, clk->offs);
2566 pmc_clk_fence_udelay(clk->offs);
2568 return 0;
2571 static int pmc_clk_is_enabled(struct clk_hw *hw)
2573 struct pmc_clk *clk = to_pmc_clk(hw);
2574 u32 val;
2576 val = tegra_pmc_readl(pmc, clk->offs) & BIT(clk->force_en_shift);
2578 return val ? 1 : 0;
2581 static void pmc_clk_set_state(unsigned long offs, u32 shift, int state)
2583 u32 val;
2585 val = tegra_pmc_readl(pmc, offs);
2586 val = state ? (val | BIT(shift)) : (val & ~BIT(shift));
2587 tegra_pmc_writel(pmc, val, offs);
2588 pmc_clk_fence_udelay(offs);
2591 static int pmc_clk_enable(struct clk_hw *hw)
2593 struct pmc_clk *clk = to_pmc_clk(hw);
2595 pmc_clk_set_state(clk->offs, clk->force_en_shift, 1);
2597 return 0;
2600 static void pmc_clk_disable(struct clk_hw *hw)
2602 struct pmc_clk *clk = to_pmc_clk(hw);
2604 pmc_clk_set_state(clk->offs, clk->force_en_shift, 0);
2607 static const struct clk_ops pmc_clk_ops = {
2608 .get_parent = pmc_clk_mux_get_parent,
2609 .set_parent = pmc_clk_mux_set_parent,
2610 .determine_rate = __clk_mux_determine_rate,
2611 .is_enabled = pmc_clk_is_enabled,
2612 .enable = pmc_clk_enable,
2613 .disable = pmc_clk_disable,
2616 static struct clk *
2617 tegra_pmc_clk_out_register(struct tegra_pmc *pmc,
2618 const struct pmc_clk_init_data *data,
2619 unsigned long offset)
2621 struct clk_init_data init;
2622 struct pmc_clk *pmc_clk;
2624 pmc_clk = devm_kzalloc(pmc->dev, sizeof(*pmc_clk), GFP_KERNEL);
2625 if (!pmc_clk)
2626 return ERR_PTR(-ENOMEM);
2628 init.name = data->name;
2629 init.ops = &pmc_clk_ops;
2630 init.parent_names = data->parents;
2631 init.num_parents = data->num_parents;
2632 init.flags = CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT |
2633 CLK_SET_PARENT_GATE;
2635 pmc_clk->hw.init = &init;
2636 pmc_clk->offs = offset;
2637 pmc_clk->mux_shift = data->mux_shift;
2638 pmc_clk->force_en_shift = data->force_en_shift;
2640 return clk_register(NULL, &pmc_clk->hw);
2643 static int pmc_clk_gate_is_enabled(struct clk_hw *hw)
2645 struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2647 return tegra_pmc_readl(pmc, gate->offs) & BIT(gate->shift) ? 1 : 0;
2650 static int pmc_clk_gate_enable(struct clk_hw *hw)
2652 struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2654 pmc_clk_set_state(gate->offs, gate->shift, 1);
2656 return 0;
2659 static void pmc_clk_gate_disable(struct clk_hw *hw)
2661 struct pmc_clk_gate *gate = to_pmc_clk_gate(hw);
2663 pmc_clk_set_state(gate->offs, gate->shift, 0);
2666 static const struct clk_ops pmc_clk_gate_ops = {
2667 .is_enabled = pmc_clk_gate_is_enabled,
2668 .enable = pmc_clk_gate_enable,
2669 .disable = pmc_clk_gate_disable,
2672 static struct clk *
2673 tegra_pmc_clk_gate_register(struct tegra_pmc *pmc, const char *name,
2674 const char *parent_name, unsigned long offset,
2675 u32 shift)
2677 struct clk_init_data init;
2678 struct pmc_clk_gate *gate;
2680 gate = devm_kzalloc(pmc->dev, sizeof(*gate), GFP_KERNEL);
2681 if (!gate)
2682 return ERR_PTR(-ENOMEM);
2684 init.name = name;
2685 init.ops = &pmc_clk_gate_ops;
2686 init.parent_names = &parent_name;
2687 init.num_parents = 1;
2688 init.flags = 0;
2690 gate->hw.init = &init;
2691 gate->offs = offset;
2692 gate->shift = shift;
2694 return clk_register(NULL, &gate->hw);
2697 static void tegra_pmc_clock_register(struct tegra_pmc *pmc,
2698 struct device_node *np)
2700 struct clk *clk;
2701 struct clk_onecell_data *clk_data;
2702 unsigned int num_clks;
2703 int i, err;
2705 num_clks = pmc->soc->num_pmc_clks;
2706 if (pmc->soc->has_blink_output)
2707 num_clks += 1;
2709 if (!num_clks)
2710 return;
2712 clk_data = devm_kmalloc(pmc->dev, sizeof(*clk_data), GFP_KERNEL);
2713 if (!clk_data)
2714 return;
2716 clk_data->clks = devm_kcalloc(pmc->dev, TEGRA_PMC_CLK_MAX,
2717 sizeof(*clk_data->clks), GFP_KERNEL);
2718 if (!clk_data->clks)
2719 return;
2721 clk_data->clk_num = TEGRA_PMC_CLK_MAX;
2723 for (i = 0; i < TEGRA_PMC_CLK_MAX; i++)
2724 clk_data->clks[i] = ERR_PTR(-ENOENT);
2726 for (i = 0; i < pmc->soc->num_pmc_clks; i++) {
2727 const struct pmc_clk_init_data *data;
2729 data = pmc->soc->pmc_clks_data + i;
2731 clk = tegra_pmc_clk_out_register(pmc, data, PMC_CLK_OUT_CNTRL);
2732 if (IS_ERR(clk)) {
2733 dev_warn(pmc->dev, "unable to register clock %s: %d\n",
2734 data->name, PTR_ERR_OR_ZERO(clk));
2735 return;
2738 err = clk_register_clkdev(clk, data->name, NULL);
2739 if (err) {
2740 dev_warn(pmc->dev,
2741 "unable to register %s clock lookup: %d\n",
2742 data->name, err);
2743 return;
2746 clk_data->clks[data->clk_id] = clk;
2749 if (pmc->soc->has_blink_output) {
2750 tegra_pmc_writel(pmc, 0x0, PMC_BLINK_TIMER);
2751 clk = tegra_pmc_clk_gate_register(pmc,
2752 "pmc_blink_override",
2753 "clk_32k",
2754 PMC_DPD_PADS_ORIDE,
2755 PMC_DPD_PADS_ORIDE_BLINK);
2756 if (IS_ERR(clk)) {
2757 dev_warn(pmc->dev,
2758 "unable to register pmc_blink_override: %d\n",
2759 PTR_ERR_OR_ZERO(clk));
2760 return;
2763 clk = tegra_pmc_clk_gate_register(pmc, "pmc_blink",
2764 "pmc_blink_override",
2765 PMC_CNTRL,
2766 PMC_CNTRL_BLINK_EN);
2767 if (IS_ERR(clk)) {
2768 dev_warn(pmc->dev,
2769 "unable to register pmc_blink: %d\n",
2770 PTR_ERR_OR_ZERO(clk));
2771 return;
2774 err = clk_register_clkdev(clk, "pmc_blink", NULL);
2775 if (err) {
2776 dev_warn(pmc->dev,
2777 "unable to register pmc_blink lookup: %d\n",
2778 err);
2779 return;
2782 clk_data->clks[TEGRA_PMC_CLK_BLINK] = clk;
2785 err = of_clk_add_provider(np, of_clk_src_onecell_get, clk_data);
2786 if (err)
2787 dev_warn(pmc->dev, "failed to add pmc clock provider: %d\n",
2788 err);
2791 static const struct regmap_range pmc_usb_sleepwalk_ranges[] = {
2792 regmap_reg_range(PMC_USB_DEBOUNCE_DEL, PMC_USB_AO),
2793 regmap_reg_range(PMC_UTMIP_UHSIC_TRIGGERS, PMC_UTMIP_UHSIC_SAVED_STATE),
2794 regmap_reg_range(PMC_UTMIP_TERM_PAD_CFG, PMC_UTMIP_UHSIC_FAKE),
2795 regmap_reg_range(PMC_UTMIP_UHSIC_LINE_WAKEUP, PMC_UTMIP_UHSIC_LINE_WAKEUP),
2796 regmap_reg_range(PMC_UTMIP_BIAS_MASTER_CNTRL, PMC_UTMIP_MASTER_CONFIG),
2797 regmap_reg_range(PMC_UTMIP_UHSIC2_TRIGGERS, PMC_UTMIP_MASTER2_CONFIG),
2798 regmap_reg_range(PMC_UTMIP_PAD_CFG0, PMC_UTMIP_UHSIC_SLEEP_CFG1),
2799 regmap_reg_range(PMC_UTMIP_SLEEPWALK_P3, PMC_UTMIP_SLEEPWALK_P3),
2802 static const struct regmap_access_table pmc_usb_sleepwalk_table = {
2803 .yes_ranges = pmc_usb_sleepwalk_ranges,
2804 .n_yes_ranges = ARRAY_SIZE(pmc_usb_sleepwalk_ranges),
2807 static int tegra_pmc_regmap_readl(void *context, unsigned int offset, unsigned int *value)
2809 struct tegra_pmc *pmc = context;
2811 *value = tegra_pmc_readl(pmc, offset);
2812 return 0;
2815 static int tegra_pmc_regmap_writel(void *context, unsigned int offset, unsigned int value)
2817 struct tegra_pmc *pmc = context;
2819 tegra_pmc_writel(pmc, value, offset);
2820 return 0;
2823 static const struct regmap_config usb_sleepwalk_regmap_config = {
2824 .name = "usb_sleepwalk",
2825 .reg_bits = 32,
2826 .val_bits = 32,
2827 .reg_stride = 4,
2828 .fast_io = true,
2829 .rd_table = &pmc_usb_sleepwalk_table,
2830 .wr_table = &pmc_usb_sleepwalk_table,
2831 .reg_read = tegra_pmc_regmap_readl,
2832 .reg_write = tegra_pmc_regmap_writel,
2835 static int tegra_pmc_regmap_init(struct tegra_pmc *pmc)
2837 struct regmap *regmap;
2838 int err;
2840 if (pmc->soc->has_usb_sleepwalk) {
2841 regmap = devm_regmap_init(pmc->dev, NULL, pmc, &usb_sleepwalk_regmap_config);
2842 if (IS_ERR(regmap)) {
2843 err = PTR_ERR(regmap);
2844 dev_err(pmc->dev, "failed to allocate register map (%d)\n", err);
2845 return err;
2849 return 0;
2852 static void tegra_pmc_reset_suspend_mode(void *data)
2854 pmc->suspend_mode = TEGRA_SUSPEND_NOT_READY;
2857 static int tegra_pmc_probe(struct platform_device *pdev)
2859 void __iomem *base;
2860 struct resource *res;
2861 int err;
2864 * Early initialisation should have configured an initial
2865 * register mapping and setup the soc data pointer. If these
2866 * are not valid then something went badly wrong!
2868 if (WARN_ON(!pmc->base || !pmc->soc))
2869 return -ENODEV;
2871 err = tegra_pmc_parse_dt(pmc, pdev->dev.of_node);
2872 if (err < 0)
2873 return err;
2875 err = devm_add_action_or_reset(&pdev->dev, tegra_pmc_reset_suspend_mode,
2876 NULL);
2877 if (err)
2878 return err;
2880 /* take over the memory region from the early initialization */
2881 base = devm_platform_ioremap_resource(pdev, 0);
2882 if (IS_ERR(base))
2883 return PTR_ERR(base);
2885 if (pmc->soc->has_single_mmio_aperture) {
2886 pmc->wake = base;
2887 pmc->aotag = base;
2888 pmc->scratch = base;
2889 } else {
2890 pmc->wake = devm_platform_ioremap_resource_byname(pdev, "wake");
2891 if (IS_ERR(pmc->wake))
2892 return PTR_ERR(pmc->wake);
2894 pmc->aotag = devm_platform_ioremap_resource_byname(pdev, "aotag");
2895 if (IS_ERR(pmc->aotag))
2896 return PTR_ERR(pmc->aotag);
2898 /* "scratch" is an optional aperture */
2899 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
2900 "scratch");
2901 if (res) {
2902 pmc->scratch = devm_ioremap_resource(&pdev->dev, res);
2903 if (IS_ERR(pmc->scratch))
2904 return PTR_ERR(pmc->scratch);
2905 } else {
2906 pmc->scratch = NULL;
2910 pmc->clk = devm_clk_get_optional(&pdev->dev, "pclk");
2911 if (IS_ERR(pmc->clk))
2912 return dev_err_probe(&pdev->dev, PTR_ERR(pmc->clk),
2913 "failed to get pclk\n");
2916 * PMC should be last resort for restarting since it soft-resets
2917 * CPU without resetting everything else.
2919 if (pmc->scratch) {
2920 err = devm_register_reboot_notifier(&pdev->dev,
2921 &tegra_pmc_reboot_notifier);
2922 if (err) {
2923 dev_err(&pdev->dev,
2924 "unable to register reboot notifier, %d\n",
2925 err);
2926 return err;
2930 err = devm_register_sys_off_handler(&pdev->dev,
2931 SYS_OFF_MODE_RESTART,
2932 SYS_OFF_PRIO_LOW,
2933 tegra_pmc_restart_handler, NULL);
2934 if (err) {
2935 dev_err(&pdev->dev, "failed to register sys-off handler: %d\n",
2936 err);
2937 return err;
2941 * PMC should be primary power-off method if it soft-resets CPU,
2942 * asking bootloader to shutdown hardware.
2944 err = devm_register_sys_off_handler(&pdev->dev,
2945 SYS_OFF_MODE_POWER_OFF,
2946 SYS_OFF_PRIO_FIRMWARE,
2947 tegra_pmc_power_off_handler, NULL);
2948 if (err) {
2949 dev_err(&pdev->dev, "failed to register sys-off handler: %d\n",
2950 err);
2951 return err;
2955 * PCLK clock rate can't be retrieved using CLK API because it
2956 * causes lockup if CPU enters LP2 idle state from some other
2957 * CLK notifier, hence we're caching the rate's value locally.
2959 if (pmc->clk) {
2960 pmc->clk_nb.notifier_call = tegra_pmc_clk_notify_cb;
2961 err = devm_clk_notifier_register(&pdev->dev, pmc->clk,
2962 &pmc->clk_nb);
2963 if (err) {
2964 dev_err(&pdev->dev,
2965 "failed to register clk notifier\n");
2966 return err;
2969 pmc->rate = clk_get_rate(pmc->clk);
2972 pmc->dev = &pdev->dev;
2974 err = tegra_pmc_init(pmc);
2975 if (err < 0) {
2976 dev_err(&pdev->dev, "failed to initialize PMC: %d\n", err);
2977 return err;
2980 tegra_pmc_init_tsense_reset(pmc);
2982 tegra_pmc_reset_sysfs_init(pmc);
2984 err = tegra_pmc_pinctrl_init(pmc);
2985 if (err)
2986 goto cleanup_sysfs;
2988 err = tegra_pmc_regmap_init(pmc);
2989 if (err < 0)
2990 goto cleanup_sysfs;
2992 err = tegra_powergate_init(pmc, pdev->dev.of_node);
2993 if (err < 0)
2994 goto cleanup_powergates;
2996 err = tegra_pmc_irq_init(pmc);
2997 if (err < 0)
2998 goto cleanup_powergates;
3000 mutex_lock(&pmc->powergates_lock);
3001 iounmap(pmc->base);
3002 pmc->base = base;
3003 mutex_unlock(&pmc->powergates_lock);
3005 tegra_pmc_clock_register(pmc, pdev->dev.of_node);
3006 platform_set_drvdata(pdev, pmc);
3007 tegra_pm_init_suspend();
3009 /* Some wakes require specific filter configuration */
3010 if (pmc->soc->set_wake_filters)
3011 pmc->soc->set_wake_filters(pmc);
3013 debugfs_create_file("powergate", 0444, NULL, NULL, &powergate_fops);
3015 return 0;
3017 cleanup_powergates:
3018 tegra_powergate_remove_all(pdev->dev.of_node);
3019 cleanup_sysfs:
3020 device_remove_file(&pdev->dev, &dev_attr_reset_reason);
3021 device_remove_file(&pdev->dev, &dev_attr_reset_level);
3023 return err;
3027 * Ensures that sufficient time is passed for a register write to
3028 * serialize into the 32KHz domain.
3030 static void wke_32kwritel(struct tegra_pmc *pmc, u32 value, unsigned int offset)
3032 writel(value, pmc->wake + offset);
3033 udelay(130);
3036 static void wke_write_wake_level(struct tegra_pmc *pmc, int wake, int level)
3038 unsigned int offset = WAKE_AOWAKE_CNTRL(wake);
3039 u32 value;
3041 value = readl(pmc->wake + offset);
3042 if (level)
3043 value |= WAKE_AOWAKE_CNTRL_LEVEL;
3044 else
3045 value &= ~WAKE_AOWAKE_CNTRL_LEVEL;
3047 writel(value, pmc->wake + offset);
3050 static void wke_write_wake_levels(struct tegra_pmc *pmc)
3052 unsigned int i;
3054 for (i = 0; i < pmc->soc->max_wake_events; i++)
3055 wke_write_wake_level(pmc, i, test_bit(i, pmc->wake_cntrl_level_map));
3058 static void wke_clear_sw_wake_status(struct tegra_pmc *pmc)
3060 wke_32kwritel(pmc, 1, WAKE_AOWAKE_SW_STATUS_W_0);
3063 static void wke_read_sw_wake_status(struct tegra_pmc *pmc)
3065 unsigned long status;
3066 unsigned int wake, i;
3068 for (i = 0; i < pmc->soc->max_wake_events; i++)
3069 wke_write_wake_level(pmc, i, 0);
3071 wke_clear_sw_wake_status(pmc);
3073 wke_32kwritel(pmc, 1, WAKE_LATCH_SW);
3076 * WAKE_AOWAKE_SW_STATUS is edge triggered, so in order to
3077 * obtain the current status of the input wake signals, change
3078 * the polarity of the wake level from 0->1 while latching to force
3079 * a positive edge if the sampled signal is '1'.
3081 for (i = 0; i < pmc->soc->max_wake_events; i++)
3082 wke_write_wake_level(pmc, i, 1);
3085 * Wait for the update to be synced into the 32kHz domain,
3086 * and let enough time lapse, so that the wake signals have time to
3087 * be sampled.
3089 udelay(300);
3091 wke_32kwritel(pmc, 0, WAKE_LATCH_SW);
3093 bitmap_zero(pmc->wake_sw_status_map, pmc->soc->max_wake_events);
3095 for (i = 0; i < pmc->soc->max_wake_vectors; i++) {
3096 status = readl(pmc->wake + WAKE_AOWAKE_SW_STATUS(i));
3098 for_each_set_bit(wake, &status, 32)
3099 set_bit(wake + (i * 32), pmc->wake_sw_status_map);
3103 static void wke_clear_wake_status(struct tegra_pmc *pmc)
3105 unsigned long status;
3106 unsigned int i, wake;
3107 u32 mask;
3109 for (i = 0; i < pmc->soc->max_wake_vectors; i++) {
3110 mask = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(i));
3111 status = readl(pmc->wake + WAKE_AOWAKE_STATUS_R(i)) & mask;
3113 for_each_set_bit(wake, &status, 32)
3114 wke_32kwritel(pmc, 0x1, WAKE_AOWAKE_STATUS_W((i * 32) + wake));
3118 /* translate sc7 wake sources back into IRQs to catch edge triggered wakeups */
3119 static void tegra186_pmc_process_wake_events(struct tegra_pmc *pmc, unsigned int index,
3120 unsigned long status)
3122 unsigned int wake;
3124 dev_dbg(pmc->dev, "Wake[%d:%d] status=%#lx\n", (index * 32) + 31, index * 32, status);
3126 for_each_set_bit(wake, &status, 32) {
3127 irq_hw_number_t hwirq = wake + 32 * index;
3128 struct irq_desc *desc;
3129 unsigned int irq;
3131 irq = irq_find_mapping(pmc->domain, hwirq);
3133 desc = irq_to_desc(irq);
3134 if (!desc || !desc->action || !desc->action->name) {
3135 dev_dbg(pmc->dev, "Resume caused by WAKE%ld, IRQ %d\n", hwirq, irq);
3136 continue;
3139 dev_dbg(pmc->dev, "Resume caused by WAKE%ld, %s\n", hwirq, desc->action->name);
3140 generic_handle_irq(irq);
3144 static void tegra186_pmc_wake_syscore_resume(void)
3146 u32 status, mask;
3147 unsigned int i;
3149 for (i = 0; i < pmc->soc->max_wake_vectors; i++) {
3150 mask = readl(pmc->wake + WAKE_AOWAKE_TIER2_ROUTING(i));
3151 status = readl(pmc->wake + WAKE_AOWAKE_STATUS_R(i)) & mask;
3153 tegra186_pmc_process_wake_events(pmc, i, status);
3157 static int tegra186_pmc_wake_syscore_suspend(void)
3159 wke_read_sw_wake_status(pmc);
3161 /* flip the wakeup trigger for dual-edge triggered pads
3162 * which are currently asserting as wakeups
3164 bitmap_andnot(pmc->wake_cntrl_level_map, pmc->wake_type_dual_edge_map,
3165 pmc->wake_sw_status_map, pmc->soc->max_wake_events);
3166 bitmap_or(pmc->wake_cntrl_level_map, pmc->wake_cntrl_level_map,
3167 pmc->wake_type_level_map, pmc->soc->max_wake_events);
3169 /* Clear PMC Wake Status registers while going to suspend */
3170 wke_clear_wake_status(pmc);
3171 wke_write_wake_levels(pmc);
3173 return 0;
3176 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
3177 static int tegra_pmc_suspend(struct device *dev)
3179 struct tegra_pmc *pmc = dev_get_drvdata(dev);
3181 tegra_pmc_writel(pmc, virt_to_phys(tegra_resume), PMC_SCRATCH41);
3183 return 0;
3186 static int tegra_pmc_resume(struct device *dev)
3188 struct tegra_pmc *pmc = dev_get_drvdata(dev);
3190 tegra_pmc_writel(pmc, 0x0, PMC_SCRATCH41);
3192 return 0;
3195 static SIMPLE_DEV_PM_OPS(tegra_pmc_pm_ops, tegra_pmc_suspend, tegra_pmc_resume);
3197 #endif
3199 static const char * const tegra20_powergates[] = {
3200 [TEGRA_POWERGATE_CPU] = "cpu",
3201 [TEGRA_POWERGATE_3D] = "td",
3202 [TEGRA_POWERGATE_VENC] = "venc",
3203 [TEGRA_POWERGATE_VDEC] = "vdec",
3204 [TEGRA_POWERGATE_PCIE] = "pcie",
3205 [TEGRA_POWERGATE_L2] = "l2",
3206 [TEGRA_POWERGATE_MPE] = "mpe",
3209 static const struct tegra_pmc_regs tegra20_pmc_regs = {
3210 .scratch0 = 0x50,
3211 .rst_status = 0x1b4,
3212 .rst_source_shift = 0x0,
3213 .rst_source_mask = 0x7,
3214 .rst_level_shift = 0x0,
3215 .rst_level_mask = 0x0,
3218 static void tegra20_pmc_init(struct tegra_pmc *pmc)
3220 u32 value, osc, pmu, off;
3222 /* Always enable CPU power request */
3223 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3224 value |= PMC_CNTRL_CPU_PWRREQ_OE;
3225 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3227 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3229 if (pmc->sysclkreq_high)
3230 value &= ~PMC_CNTRL_SYSCLK_POLARITY;
3231 else
3232 value |= PMC_CNTRL_SYSCLK_POLARITY;
3234 if (pmc->corereq_high)
3235 value &= ~PMC_CNTRL_PWRREQ_POLARITY;
3236 else
3237 value |= PMC_CNTRL_PWRREQ_POLARITY;
3239 /* configure the output polarity while the request is tristated */
3240 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3242 /* now enable the request */
3243 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3244 value |= PMC_CNTRL_SYSCLK_OE;
3245 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3247 /* program core timings which are applicable only for suspend state */
3248 if (pmc->suspend_mode != TEGRA_SUSPEND_NONE) {
3249 osc = DIV_ROUND_UP(pmc->core_osc_time * 8192, 1000000);
3250 pmu = DIV_ROUND_UP(pmc->core_pmu_time * 32768, 1000000);
3251 off = DIV_ROUND_UP(pmc->core_off_time * 32768, 1000000);
3252 tegra_pmc_writel(pmc, ((osc << 8) & 0xff00) | (pmu & 0xff),
3253 PMC_COREPWRGOOD_TIMER);
3254 tegra_pmc_writel(pmc, off, PMC_COREPWROFF_TIMER);
3258 static void tegra20_pmc_setup_irq_polarity(struct tegra_pmc *pmc,
3259 struct device_node *np,
3260 bool invert)
3262 u32 value;
3264 value = tegra_pmc_readl(pmc, PMC_CNTRL);
3266 if (invert)
3267 value |= PMC_CNTRL_INTR_POLARITY;
3268 else
3269 value &= ~PMC_CNTRL_INTR_POLARITY;
3271 tegra_pmc_writel(pmc, value, PMC_CNTRL);
3274 static const struct tegra_pmc_soc tegra20_pmc_soc = {
3275 .supports_core_domain = true,
3276 .num_powergates = ARRAY_SIZE(tegra20_powergates),
3277 .powergates = tegra20_powergates,
3278 .num_cpu_powergates = 0,
3279 .cpu_powergates = NULL,
3280 .has_tsense_reset = false,
3281 .has_gpu_clamps = false,
3282 .needs_mbist_war = false,
3283 .has_impl_33v_pwr = false,
3284 .maybe_tz_only = false,
3285 .num_io_pads = 0,
3286 .io_pads = NULL,
3287 .num_pin_descs = 0,
3288 .pin_descs = NULL,
3289 .regs = &tegra20_pmc_regs,
3290 .init = tegra20_pmc_init,
3291 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3292 .powergate_set = tegra20_powergate_set,
3293 .reset_sources = NULL,
3294 .num_reset_sources = 0,
3295 .reset_levels = NULL,
3296 .num_reset_levels = 0,
3297 .pmc_clks_data = NULL,
3298 .num_pmc_clks = 0,
3299 .has_blink_output = true,
3300 .has_usb_sleepwalk = true,
3301 .has_single_mmio_aperture = true,
3304 static const char * const tegra30_powergates[] = {
3305 [TEGRA_POWERGATE_CPU] = "cpu0",
3306 [TEGRA_POWERGATE_3D] = "td",
3307 [TEGRA_POWERGATE_VENC] = "venc",
3308 [TEGRA_POWERGATE_VDEC] = "vdec",
3309 [TEGRA_POWERGATE_PCIE] = "pcie",
3310 [TEGRA_POWERGATE_L2] = "l2",
3311 [TEGRA_POWERGATE_MPE] = "mpe",
3312 [TEGRA_POWERGATE_HEG] = "heg",
3313 [TEGRA_POWERGATE_SATA] = "sata",
3314 [TEGRA_POWERGATE_CPU1] = "cpu1",
3315 [TEGRA_POWERGATE_CPU2] = "cpu2",
3316 [TEGRA_POWERGATE_CPU3] = "cpu3",
3317 [TEGRA_POWERGATE_CELP] = "celp",
3318 [TEGRA_POWERGATE_3D1] = "td2",
3321 static const u8 tegra30_cpu_powergates[] = {
3322 TEGRA_POWERGATE_CPU,
3323 TEGRA_POWERGATE_CPU1,
3324 TEGRA_POWERGATE_CPU2,
3325 TEGRA_POWERGATE_CPU3,
3328 static const char * const tegra30_reset_sources[] = {
3329 "POWER_ON_RESET",
3330 "WATCHDOG",
3331 "SENSOR",
3332 "SW_MAIN",
3333 "LP0"
3336 static const struct tegra_pmc_soc tegra30_pmc_soc = {
3337 .supports_core_domain = true,
3338 .num_powergates = ARRAY_SIZE(tegra30_powergates),
3339 .powergates = tegra30_powergates,
3340 .num_cpu_powergates = ARRAY_SIZE(tegra30_cpu_powergates),
3341 .cpu_powergates = tegra30_cpu_powergates,
3342 .has_tsense_reset = true,
3343 .has_gpu_clamps = false,
3344 .needs_mbist_war = false,
3345 .has_impl_33v_pwr = false,
3346 .maybe_tz_only = false,
3347 .num_io_pads = 0,
3348 .io_pads = NULL,
3349 .num_pin_descs = 0,
3350 .pin_descs = NULL,
3351 .regs = &tegra20_pmc_regs,
3352 .init = tegra20_pmc_init,
3353 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3354 .powergate_set = tegra20_powergate_set,
3355 .reset_sources = tegra30_reset_sources,
3356 .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3357 .reset_levels = NULL,
3358 .num_reset_levels = 0,
3359 .pmc_clks_data = tegra_pmc_clks_data,
3360 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3361 .has_blink_output = true,
3362 .has_usb_sleepwalk = true,
3363 .has_single_mmio_aperture = true,
3366 static const char * const tegra114_powergates[] = {
3367 [TEGRA_POWERGATE_CPU] = "crail",
3368 [TEGRA_POWERGATE_3D] = "td",
3369 [TEGRA_POWERGATE_VENC] = "venc",
3370 [TEGRA_POWERGATE_VDEC] = "vdec",
3371 [TEGRA_POWERGATE_MPE] = "mpe",
3372 [TEGRA_POWERGATE_HEG] = "heg",
3373 [TEGRA_POWERGATE_CPU1] = "cpu1",
3374 [TEGRA_POWERGATE_CPU2] = "cpu2",
3375 [TEGRA_POWERGATE_CPU3] = "cpu3",
3376 [TEGRA_POWERGATE_CELP] = "celp",
3377 [TEGRA_POWERGATE_CPU0] = "cpu0",
3378 [TEGRA_POWERGATE_C0NC] = "c0nc",
3379 [TEGRA_POWERGATE_C1NC] = "c1nc",
3380 [TEGRA_POWERGATE_DIS] = "dis",
3381 [TEGRA_POWERGATE_DISB] = "disb",
3382 [TEGRA_POWERGATE_XUSBA] = "xusba",
3383 [TEGRA_POWERGATE_XUSBB] = "xusbb",
3384 [TEGRA_POWERGATE_XUSBC] = "xusbc",
3387 static const u8 tegra114_cpu_powergates[] = {
3388 TEGRA_POWERGATE_CPU0,
3389 TEGRA_POWERGATE_CPU1,
3390 TEGRA_POWERGATE_CPU2,
3391 TEGRA_POWERGATE_CPU3,
3394 static const struct tegra_pmc_soc tegra114_pmc_soc = {
3395 .supports_core_domain = false,
3396 .num_powergates = ARRAY_SIZE(tegra114_powergates),
3397 .powergates = tegra114_powergates,
3398 .num_cpu_powergates = ARRAY_SIZE(tegra114_cpu_powergates),
3399 .cpu_powergates = tegra114_cpu_powergates,
3400 .has_tsense_reset = true,
3401 .has_gpu_clamps = false,
3402 .needs_mbist_war = false,
3403 .has_impl_33v_pwr = false,
3404 .maybe_tz_only = false,
3405 .num_io_pads = 0,
3406 .io_pads = NULL,
3407 .num_pin_descs = 0,
3408 .pin_descs = NULL,
3409 .regs = &tegra20_pmc_regs,
3410 .init = tegra20_pmc_init,
3411 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3412 .powergate_set = tegra114_powergate_set,
3413 .reset_sources = tegra30_reset_sources,
3414 .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3415 .reset_levels = NULL,
3416 .num_reset_levels = 0,
3417 .pmc_clks_data = tegra_pmc_clks_data,
3418 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3419 .has_blink_output = true,
3420 .has_usb_sleepwalk = true,
3421 .has_single_mmio_aperture = true,
3424 static const char * const tegra124_powergates[] = {
3425 [TEGRA_POWERGATE_CPU] = "crail",
3426 [TEGRA_POWERGATE_3D] = "3d",
3427 [TEGRA_POWERGATE_VENC] = "venc",
3428 [TEGRA_POWERGATE_PCIE] = "pcie",
3429 [TEGRA_POWERGATE_VDEC] = "vdec",
3430 [TEGRA_POWERGATE_MPE] = "mpe",
3431 [TEGRA_POWERGATE_HEG] = "heg",
3432 [TEGRA_POWERGATE_SATA] = "sata",
3433 [TEGRA_POWERGATE_CPU1] = "cpu1",
3434 [TEGRA_POWERGATE_CPU2] = "cpu2",
3435 [TEGRA_POWERGATE_CPU3] = "cpu3",
3436 [TEGRA_POWERGATE_CELP] = "celp",
3437 [TEGRA_POWERGATE_CPU0] = "cpu0",
3438 [TEGRA_POWERGATE_C0NC] = "c0nc",
3439 [TEGRA_POWERGATE_C1NC] = "c1nc",
3440 [TEGRA_POWERGATE_SOR] = "sor",
3441 [TEGRA_POWERGATE_DIS] = "dis",
3442 [TEGRA_POWERGATE_DISB] = "disb",
3443 [TEGRA_POWERGATE_XUSBA] = "xusba",
3444 [TEGRA_POWERGATE_XUSBB] = "xusbb",
3445 [TEGRA_POWERGATE_XUSBC] = "xusbc",
3446 [TEGRA_POWERGATE_VIC] = "vic",
3447 [TEGRA_POWERGATE_IRAM] = "iram",
3450 static const u8 tegra124_cpu_powergates[] = {
3451 TEGRA_POWERGATE_CPU0,
3452 TEGRA_POWERGATE_CPU1,
3453 TEGRA_POWERGATE_CPU2,
3454 TEGRA_POWERGATE_CPU3,
3457 #define TEGRA_IO_PAD(_id, _dpd, _request, _status, _voltage, _name) \
3458 ((struct tegra_io_pad_soc) { \
3459 .id = (_id), \
3460 .dpd = (_dpd), \
3461 .request = (_request), \
3462 .status = (_status), \
3463 .voltage = (_voltage), \
3464 .name = (_name), \
3467 #define TEGRA_IO_PIN_DESC(_id, _name) \
3468 ((struct pinctrl_pin_desc) { \
3469 .number = (_id), \
3470 .name = (_name), \
3473 static const struct tegra_io_pad_soc tegra124_io_pads[] = {
3474 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x1b8, 0x1bc, UINT_MAX, "audio"),
3475 TEGRA_IO_PAD(TEGRA_IO_PAD_BB, 15, 0x1b8, 0x1bc, UINT_MAX, "bb"),
3476 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 4, 0x1c0, 0x1c4, UINT_MAX, "cam"),
3477 TEGRA_IO_PAD(TEGRA_IO_PAD_COMP, 22, 0x1b8, 0x1bc, UINT_MAX, "comp"),
3478 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x1b8, 0x1bc, UINT_MAX, "csia"),
3479 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x1b8, 0x1bc, UINT_MAX, "csib"),
3480 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 12, 0x1c0, 0x1c4, UINT_MAX, "csie"),
3481 TEGRA_IO_PAD(TEGRA_IO_PAD_DSI, 2, 0x1b8, 0x1bc, UINT_MAX, "dsi"),
3482 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIB, 7, 0x1c0, 0x1c4, UINT_MAX, "dsib"),
3483 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIC, 8, 0x1c0, 0x1c4, UINT_MAX, "dsic"),
3484 TEGRA_IO_PAD(TEGRA_IO_PAD_DSID, 9, 0x1c0, 0x1c4, UINT_MAX, "dsid"),
3485 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI, 28, 0x1b8, 0x1bc, UINT_MAX, "hdmi"),
3486 TEGRA_IO_PAD(TEGRA_IO_PAD_HSIC, 19, 0x1b8, 0x1bc, UINT_MAX, "hsic"),
3487 TEGRA_IO_PAD(TEGRA_IO_PAD_HV, 6, 0x1c0, 0x1c4, UINT_MAX, "hv"),
3488 TEGRA_IO_PAD(TEGRA_IO_PAD_LVDS, 25, 0x1c0, 0x1c4, UINT_MAX, "lvds"),
3489 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x1b8, 0x1bc, UINT_MAX, "mipi-bias"),
3490 TEGRA_IO_PAD(TEGRA_IO_PAD_NAND, 13, 0x1b8, 0x1bc, UINT_MAX, "nand"),
3491 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_BIAS, 4, 0x1b8, 0x1bc, UINT_MAX, "pex-bias"),
3492 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 5, 0x1b8, 0x1bc, UINT_MAX, "pex-clk1"),
3493 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x1b8, 0x1bc, UINT_MAX, "pex-clk2"),
3494 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, 0, 0x1c0, 0x1c4, UINT_MAX, "pex-cntrl"),
3495 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1, 1, 0x1c0, 0x1c4, UINT_MAX, "sdmmc1"),
3496 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3, 2, 0x1c0, 0x1c4, UINT_MAX, "sdmmc3"),
3497 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC4, 3, 0x1c0, 0x1c4, UINT_MAX, "sdmmc4"),
3498 TEGRA_IO_PAD(TEGRA_IO_PAD_SYS_DDC, 26, 0x1c0, 0x1c4, UINT_MAX, "sys_ddc"),
3499 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x1b8, 0x1bc, UINT_MAX, "uart"),
3500 TEGRA_IO_PAD(TEGRA_IO_PAD_USB0, 9, 0x1b8, 0x1bc, UINT_MAX, "usb0"),
3501 TEGRA_IO_PAD(TEGRA_IO_PAD_USB1, 10, 0x1b8, 0x1bc, UINT_MAX, "usb1"),
3502 TEGRA_IO_PAD(TEGRA_IO_PAD_USB2, 11, 0x1b8, 0x1bc, UINT_MAX, "usb2"),
3503 TEGRA_IO_PAD(TEGRA_IO_PAD_USB_BIAS, 12, 0x1b8, 0x1bc, UINT_MAX, "usb_bias"),
3506 static const struct pinctrl_pin_desc tegra124_pin_descs[] = {
3507 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
3508 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_BB, "bb"),
3509 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
3510 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_COMP, "comp"),
3511 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3512 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3513 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
3514 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSI, "dsi"),
3515 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIB, "dsib"),
3516 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIC, "dsic"),
3517 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSID, "dsid"),
3518 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI, "hdmi"),
3519 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HSIC, "hsic"),
3520 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HV, "hv"),
3521 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_LVDS, "lvds"),
3522 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3523 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_NAND, "nand"),
3524 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_BIAS, "pex-bias"),
3525 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3526 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3527 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
3528 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1, "sdmmc1"),
3529 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3, "sdmmc3"),
3530 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC4, "sdmmc4"),
3531 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SYS_DDC, "sys_ddc"),
3532 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3533 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB0, "usb0"),
3534 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB1, "usb1"),
3535 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB2, "usb2"),
3536 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB_BIAS, "usb_bias"),
3539 static const struct tegra_pmc_soc tegra124_pmc_soc = {
3540 .supports_core_domain = false,
3541 .num_powergates = ARRAY_SIZE(tegra124_powergates),
3542 .powergates = tegra124_powergates,
3543 .num_cpu_powergates = ARRAY_SIZE(tegra124_cpu_powergates),
3544 .cpu_powergates = tegra124_cpu_powergates,
3545 .has_tsense_reset = true,
3546 .has_gpu_clamps = true,
3547 .needs_mbist_war = false,
3548 .has_impl_33v_pwr = false,
3549 .maybe_tz_only = false,
3550 .num_io_pads = ARRAY_SIZE(tegra124_io_pads),
3551 .io_pads = tegra124_io_pads,
3552 .num_pin_descs = ARRAY_SIZE(tegra124_pin_descs),
3553 .pin_descs = tegra124_pin_descs,
3554 .regs = &tegra20_pmc_regs,
3555 .init = tegra20_pmc_init,
3556 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3557 .powergate_set = tegra114_powergate_set,
3558 .reset_sources = tegra30_reset_sources,
3559 .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
3560 .reset_levels = NULL,
3561 .num_reset_levels = 0,
3562 .pmc_clks_data = tegra_pmc_clks_data,
3563 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3564 .has_blink_output = true,
3565 .has_usb_sleepwalk = true,
3566 .has_single_mmio_aperture = true,
3569 static const char * const tegra210_powergates[] = {
3570 [TEGRA_POWERGATE_CPU] = "crail",
3571 [TEGRA_POWERGATE_3D] = "3d",
3572 [TEGRA_POWERGATE_VENC] = "venc",
3573 [TEGRA_POWERGATE_PCIE] = "pcie",
3574 [TEGRA_POWERGATE_MPE] = "mpe",
3575 [TEGRA_POWERGATE_SATA] = "sata",
3576 [TEGRA_POWERGATE_CPU1] = "cpu1",
3577 [TEGRA_POWERGATE_CPU2] = "cpu2",
3578 [TEGRA_POWERGATE_CPU3] = "cpu3",
3579 [TEGRA_POWERGATE_CPU0] = "cpu0",
3580 [TEGRA_POWERGATE_C0NC] = "c0nc",
3581 [TEGRA_POWERGATE_SOR] = "sor",
3582 [TEGRA_POWERGATE_DIS] = "dis",
3583 [TEGRA_POWERGATE_DISB] = "disb",
3584 [TEGRA_POWERGATE_XUSBA] = "xusba",
3585 [TEGRA_POWERGATE_XUSBB] = "xusbb",
3586 [TEGRA_POWERGATE_XUSBC] = "xusbc",
3587 [TEGRA_POWERGATE_VIC] = "vic",
3588 [TEGRA_POWERGATE_IRAM] = "iram",
3589 [TEGRA_POWERGATE_NVDEC] = "nvdec",
3590 [TEGRA_POWERGATE_NVJPG] = "nvjpg",
3591 [TEGRA_POWERGATE_AUD] = "aud",
3592 [TEGRA_POWERGATE_DFD] = "dfd",
3593 [TEGRA_POWERGATE_VE2] = "ve2",
3596 static const u8 tegra210_cpu_powergates[] = {
3597 TEGRA_POWERGATE_CPU0,
3598 TEGRA_POWERGATE_CPU1,
3599 TEGRA_POWERGATE_CPU2,
3600 TEGRA_POWERGATE_CPU3,
3603 static const struct tegra_io_pad_soc tegra210_io_pads[] = {
3604 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x1b8, 0x1bc, 5, "audio"),
3605 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, 29, 0x1c0, 0x1c4, 18, "audio-hv"),
3606 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 4, 0x1c0, 0x1c4, 10, "cam"),
3607 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x1b8, 0x1bc, UINT_MAX, "csia"),
3608 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x1b8, 0x1bc, UINT_MAX, "csib"),
3609 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 10, 0x1c0, 0x1c4, UINT_MAX, "csic"),
3610 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 11, 0x1c0, 0x1c4, UINT_MAX, "csid"),
3611 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 12, 0x1c0, 0x1c4, UINT_MAX, "csie"),
3612 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 13, 0x1c0, 0x1c4, UINT_MAX, "csif"),
3613 TEGRA_IO_PAD(TEGRA_IO_PAD_DBG, 25, 0x1b8, 0x1bc, 19, "dbg"),
3614 TEGRA_IO_PAD(TEGRA_IO_PAD_DEBUG_NONAO, 26, 0x1b8, 0x1bc, UINT_MAX, "debug-nonao"),
3615 TEGRA_IO_PAD(TEGRA_IO_PAD_DMIC, 18, 0x1c0, 0x1c4, 20, "dmic"),
3616 TEGRA_IO_PAD(TEGRA_IO_PAD_DP, 19, 0x1c0, 0x1c4, UINT_MAX, "dp"),
3617 TEGRA_IO_PAD(TEGRA_IO_PAD_DSI, 2, 0x1b8, 0x1bc, UINT_MAX, "dsi"),
3618 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIB, 7, 0x1c0, 0x1c4, UINT_MAX, "dsib"),
3619 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIC, 8, 0x1c0, 0x1c4, UINT_MAX, "dsic"),
3620 TEGRA_IO_PAD(TEGRA_IO_PAD_DSID, 9, 0x1c0, 0x1c4, UINT_MAX, "dsid"),
3621 TEGRA_IO_PAD(TEGRA_IO_PAD_EMMC, 3, 0x1c0, 0x1c4, UINT_MAX, "emmc"),
3622 TEGRA_IO_PAD(TEGRA_IO_PAD_EMMC2, 5, 0x1c0, 0x1c4, UINT_MAX, "emmc2"),
3623 TEGRA_IO_PAD(TEGRA_IO_PAD_GPIO, 27, 0x1b8, 0x1bc, 21, "gpio"),
3624 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI, 28, 0x1b8, 0x1bc, UINT_MAX, "hdmi"),
3625 TEGRA_IO_PAD(TEGRA_IO_PAD_HSIC, 19, 0x1b8, 0x1bc, UINT_MAX, "hsic"),
3626 TEGRA_IO_PAD(TEGRA_IO_PAD_LVDS, 25, 0x1c0, 0x1c4, UINT_MAX, "lvds"),
3627 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x1b8, 0x1bc, UINT_MAX, "mipi-bias"),
3628 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_BIAS, 4, 0x1b8, 0x1bc, UINT_MAX, "pex-bias"),
3629 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 5, 0x1b8, 0x1bc, UINT_MAX, "pex-clk1"),
3630 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x1b8, 0x1bc, UINT_MAX, "pex-clk2"),
3631 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, UINT_MAX, UINT_MAX, UINT_MAX, 11, "pex-cntrl"),
3632 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1, 1, 0x1c0, 0x1c4, 12, "sdmmc1"),
3633 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3, 2, 0x1c0, 0x1c4, 13, "sdmmc3"),
3634 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI, 14, 0x1c0, 0x1c4, 22, "spi"),
3635 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI_HV, 15, 0x1c0, 0x1c4, 23, "spi-hv"),
3636 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x1b8, 0x1bc, 2, "uart"),
3637 TEGRA_IO_PAD(TEGRA_IO_PAD_USB0, 9, 0x1b8, 0x1bc, UINT_MAX, "usb0"),
3638 TEGRA_IO_PAD(TEGRA_IO_PAD_USB1, 10, 0x1b8, 0x1bc, UINT_MAX, "usb1"),
3639 TEGRA_IO_PAD(TEGRA_IO_PAD_USB2, 11, 0x1b8, 0x1bc, UINT_MAX, "usb2"),
3640 TEGRA_IO_PAD(TEGRA_IO_PAD_USB3, 18, 0x1b8, 0x1bc, UINT_MAX, "usb3"),
3641 TEGRA_IO_PAD(TEGRA_IO_PAD_USB_BIAS, 12, 0x1b8, 0x1bc, UINT_MAX, "usb-bias"),
3644 static const struct pinctrl_pin_desc tegra210_pin_descs[] = {
3645 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
3646 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
3647 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
3648 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3649 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3650 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
3651 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
3652 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
3653 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
3654 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DBG, "dbg"),
3655 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DEBUG_NONAO, "debug-nonao"),
3656 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DMIC, "dmic"),
3657 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DP, "dp"),
3658 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSI, "dsi"),
3659 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIB, "dsib"),
3660 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIC, "dsic"),
3661 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSID, "dsid"),
3662 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EMMC, "emmc"),
3663 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EMMC2, "emmc2"),
3664 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_GPIO, "gpio"),
3665 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI, "hdmi"),
3666 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HSIC, "hsic"),
3667 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_LVDS, "lvds"),
3668 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3669 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_BIAS, "pex-bias"),
3670 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3671 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3672 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
3673 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1, "sdmmc1"),
3674 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3, "sdmmc3"),
3675 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI, "spi"),
3676 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI_HV, "spi-hv"),
3677 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3678 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB0, "usb0"),
3679 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB1, "usb1"),
3680 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB2, "usb2"),
3681 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB3, "usb3"),
3682 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB_BIAS, "usb-bias"),
3685 static const char * const tegra210_reset_sources[] = {
3686 "POWER_ON_RESET",
3687 "WATCHDOG",
3688 "SENSOR",
3689 "SW_MAIN",
3690 "LP0",
3691 "AOTAG"
3694 static const struct tegra_wake_event tegra210_wake_events[] = {
3695 TEGRA_WAKE_IRQ("rtc", 16, 2),
3696 TEGRA_WAKE_IRQ("pmu", 51, 86),
3699 static const struct tegra_pmc_soc tegra210_pmc_soc = {
3700 .supports_core_domain = false,
3701 .num_powergates = ARRAY_SIZE(tegra210_powergates),
3702 .powergates = tegra210_powergates,
3703 .num_cpu_powergates = ARRAY_SIZE(tegra210_cpu_powergates),
3704 .cpu_powergates = tegra210_cpu_powergates,
3705 .has_tsense_reset = true,
3706 .has_gpu_clamps = true,
3707 .needs_mbist_war = true,
3708 .has_impl_33v_pwr = false,
3709 .maybe_tz_only = true,
3710 .num_io_pads = ARRAY_SIZE(tegra210_io_pads),
3711 .io_pads = tegra210_io_pads,
3712 .num_pin_descs = ARRAY_SIZE(tegra210_pin_descs),
3713 .pin_descs = tegra210_pin_descs,
3714 .regs = &tegra20_pmc_regs,
3715 .init = tegra20_pmc_init,
3716 .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
3717 .powergate_set = tegra114_powergate_set,
3718 .irq_set_wake = tegra210_pmc_irq_set_wake,
3719 .irq_set_type = tegra210_pmc_irq_set_type,
3720 .reset_sources = tegra210_reset_sources,
3721 .num_reset_sources = ARRAY_SIZE(tegra210_reset_sources),
3722 .reset_levels = NULL,
3723 .num_reset_levels = 0,
3724 .num_wake_events = ARRAY_SIZE(tegra210_wake_events),
3725 .wake_events = tegra210_wake_events,
3726 .pmc_clks_data = tegra_pmc_clks_data,
3727 .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
3728 .has_blink_output = true,
3729 .has_usb_sleepwalk = true,
3730 .has_single_mmio_aperture = true,
3733 static const struct tegra_io_pad_soc tegra186_io_pads[] = {
3734 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x74, 0x78, UINT_MAX, "csia"),
3735 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x74, 0x78, UINT_MAX, "csib"),
3736 TEGRA_IO_PAD(TEGRA_IO_PAD_DSI, 2, 0x74, 0x78, UINT_MAX, "dsi"),
3737 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x74, 0x78, UINT_MAX, "mipi-bias"),
3738 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_BIAS, 4, 0x74, 0x78, UINT_MAX, "pex-clk-bias"),
3739 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK3, 5, 0x74, 0x78, UINT_MAX, "pex-clk3"),
3740 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x74, 0x78, UINT_MAX, "pex-clk2"),
3741 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 7, 0x74, 0x78, UINT_MAX, "pex-clk1"),
3742 TEGRA_IO_PAD(TEGRA_IO_PAD_USB0, 9, 0x74, 0x78, UINT_MAX, "usb0"),
3743 TEGRA_IO_PAD(TEGRA_IO_PAD_USB1, 10, 0x74, 0x78, UINT_MAX, "usb1"),
3744 TEGRA_IO_PAD(TEGRA_IO_PAD_USB2, 11, 0x74, 0x78, UINT_MAX, "usb2"),
3745 TEGRA_IO_PAD(TEGRA_IO_PAD_USB_BIAS, 12, 0x74, 0x78, UINT_MAX, "usb-bias"),
3746 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x74, 0x78, UINT_MAX, "uart"),
3747 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x74, 0x78, UINT_MAX, "audio"),
3748 TEGRA_IO_PAD(TEGRA_IO_PAD_HSIC, 19, 0x74, 0x78, UINT_MAX, "hsic"),
3749 TEGRA_IO_PAD(TEGRA_IO_PAD_DBG, 25, 0x74, 0x78, UINT_MAX, "dbg"),
3750 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP0, 28, 0x74, 0x78, UINT_MAX, "hdmi-dp0"),
3751 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP1, 29, 0x74, 0x78, UINT_MAX, "hdmi-dp1"),
3752 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, 0, 0x7c, 0x80, UINT_MAX, "pex-cntrl"),
3753 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC2_HV, 2, 0x7c, 0x80, 5, "sdmmc2-hv"),
3754 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC4, 4, 0x7c, 0x80, UINT_MAX, "sdmmc4"),
3755 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 6, 0x7c, 0x80, UINT_MAX, "cam"),
3756 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIB, 8, 0x7c, 0x80, UINT_MAX, "dsib"),
3757 TEGRA_IO_PAD(TEGRA_IO_PAD_DSIC, 9, 0x7c, 0x80, UINT_MAX, "dsic"),
3758 TEGRA_IO_PAD(TEGRA_IO_PAD_DSID, 10, 0x7c, 0x80, UINT_MAX, "dsid"),
3759 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 11, 0x7c, 0x80, UINT_MAX, "csic"),
3760 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 12, 0x7c, 0x80, UINT_MAX, "csid"),
3761 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 13, 0x7c, 0x80, UINT_MAX, "csie"),
3762 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 14, 0x7c, 0x80, UINT_MAX, "csif"),
3763 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI, 15, 0x7c, 0x80, UINT_MAX, "spi"),
3764 TEGRA_IO_PAD(TEGRA_IO_PAD_UFS, 17, 0x7c, 0x80, UINT_MAX, "ufs"),
3765 TEGRA_IO_PAD(TEGRA_IO_PAD_DMIC_HV, 20, 0x7c, 0x80, 2, "dmic-hv"),
3766 TEGRA_IO_PAD(TEGRA_IO_PAD_EDP, 21, 0x7c, 0x80, UINT_MAX, "edp"),
3767 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1_HV, 23, 0x7c, 0x80, 4, "sdmmc1-hv"),
3768 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3_HV, 24, 0x7c, 0x80, 6, "sdmmc3-hv"),
3769 TEGRA_IO_PAD(TEGRA_IO_PAD_CONN, 28, 0x7c, 0x80, UINT_MAX, "conn"),
3770 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, 29, 0x7c, 0x80, 1, "audio-hv"),
3771 TEGRA_IO_PAD(TEGRA_IO_PAD_AO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 0, "ao-hv"),
3774 static const struct pinctrl_pin_desc tegra186_pin_descs[] = {
3775 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3776 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3777 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSI, "dsi"),
3778 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3779 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_BIAS, "pex-clk-bias"),
3780 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK3, "pex-clk3"),
3781 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3782 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3783 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB0, "usb0"),
3784 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB1, "usb1"),
3785 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB2, "usb2"),
3786 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_USB_BIAS, "usb-bias"),
3787 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3788 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
3789 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HSIC, "hsic"),
3790 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DBG, "dbg"),
3791 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP0, "hdmi-dp0"),
3792 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP1, "hdmi-dp1"),
3793 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
3794 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC2_HV, "sdmmc2-hv"),
3795 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC4, "sdmmc4"),
3796 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
3797 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIB, "dsib"),
3798 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSIC, "dsic"),
3799 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DSID, "dsid"),
3800 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
3801 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
3802 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
3803 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
3804 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI, "spi"),
3805 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UFS, "ufs"),
3806 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DMIC_HV, "dmic-hv"),
3807 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EDP, "edp"),
3808 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1_HV, "sdmmc1-hv"),
3809 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3_HV, "sdmmc3-hv"),
3810 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CONN, "conn"),
3811 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
3812 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AO_HV, "ao-hv"),
3815 static const struct tegra_pmc_regs tegra186_pmc_regs = {
3816 .scratch0 = 0x2000,
3817 .rst_status = 0x70,
3818 .rst_source_shift = 0x2,
3819 .rst_source_mask = 0x3c,
3820 .rst_level_shift = 0x0,
3821 .rst_level_mask = 0x3,
3824 static void tegra186_pmc_init(struct tegra_pmc *pmc)
3826 pmc->syscore.suspend = tegra186_pmc_wake_syscore_suspend;
3827 pmc->syscore.resume = tegra186_pmc_wake_syscore_resume;
3829 register_syscore_ops(&pmc->syscore);
3832 static void tegra186_pmc_setup_irq_polarity(struct tegra_pmc *pmc,
3833 struct device_node *np,
3834 bool invert)
3836 struct resource regs;
3837 void __iomem *wake;
3838 u32 value;
3839 int index;
3841 index = of_property_match_string(np, "reg-names", "wake");
3842 if (index < 0) {
3843 dev_err(pmc->dev, "failed to find PMC wake registers\n");
3844 return;
3847 of_address_to_resource(np, index, &regs);
3849 wake = ioremap(regs.start, resource_size(&regs));
3850 if (!wake) {
3851 dev_err(pmc->dev, "failed to map PMC wake registers\n");
3852 return;
3855 value = readl(wake + WAKE_AOWAKE_CTRL);
3857 if (invert)
3858 value |= WAKE_AOWAKE_CTRL_INTR_POLARITY;
3859 else
3860 value &= ~WAKE_AOWAKE_CTRL_INTR_POLARITY;
3862 writel(value, wake + WAKE_AOWAKE_CTRL);
3864 iounmap(wake);
3867 static const char * const tegra186_reset_sources[] = {
3868 "SYS_RESET",
3869 "AOWDT",
3870 "MCCPLEXWDT",
3871 "BPMPWDT",
3872 "SCEWDT",
3873 "SPEWDT",
3874 "APEWDT",
3875 "BCCPLEXWDT",
3876 "SENSOR",
3877 "AOTAG",
3878 "VFSENSOR",
3879 "SWREST",
3880 "SC7",
3881 "HSM",
3882 "CORESIGHT"
3885 static const char * const tegra186_reset_levels[] = {
3886 "L0", "L1", "L2", "WARM"
3889 static const struct tegra_wake_event tegra186_wake_events[] = {
3890 TEGRA_WAKE_IRQ("pmu", 24, 209),
3891 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA186_AON_GPIO(FF, 0)),
3892 TEGRA_WAKE_IRQ("rtc", 73, 10),
3895 static const struct tegra_pmc_soc tegra186_pmc_soc = {
3896 .supports_core_domain = false,
3897 .num_powergates = 0,
3898 .powergates = NULL,
3899 .num_cpu_powergates = 0,
3900 .cpu_powergates = NULL,
3901 .has_tsense_reset = false,
3902 .has_gpu_clamps = false,
3903 .needs_mbist_war = false,
3904 .has_impl_33v_pwr = true,
3905 .maybe_tz_only = false,
3906 .num_io_pads = ARRAY_SIZE(tegra186_io_pads),
3907 .io_pads = tegra186_io_pads,
3908 .num_pin_descs = ARRAY_SIZE(tegra186_pin_descs),
3909 .pin_descs = tegra186_pin_descs,
3910 .regs = &tegra186_pmc_regs,
3911 .init = tegra186_pmc_init,
3912 .setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
3913 .set_wake_filters = tegra186_pmc_set_wake_filters,
3914 .irq_set_wake = tegra186_pmc_irq_set_wake,
3915 .irq_set_type = tegra186_pmc_irq_set_type,
3916 .reset_sources = tegra186_reset_sources,
3917 .num_reset_sources = ARRAY_SIZE(tegra186_reset_sources),
3918 .reset_levels = tegra186_reset_levels,
3919 .num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
3920 .num_wake_events = ARRAY_SIZE(tegra186_wake_events),
3921 .wake_events = tegra186_wake_events,
3922 .max_wake_events = 96,
3923 .max_wake_vectors = 3,
3924 .pmc_clks_data = NULL,
3925 .num_pmc_clks = 0,
3926 .has_blink_output = false,
3927 .has_usb_sleepwalk = false,
3928 .has_single_mmio_aperture = false,
3931 static const struct tegra_io_pad_soc tegra194_io_pads[] = {
3932 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0x74, 0x78, UINT_MAX, "csia"),
3933 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0x74, 0x78, UINT_MAX, "csib"),
3934 TEGRA_IO_PAD(TEGRA_IO_PAD_MIPI_BIAS, 3, 0x74, 0x78, UINT_MAX, "mipi-bias"),
3935 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_BIAS, 4, 0x74, 0x78, UINT_MAX, "pex-clk-bias"),
3936 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK3, 5, 0x74, 0x78, UINT_MAX, "pex-clk3"),
3937 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK2, 6, 0x74, 0x78, UINT_MAX, "pex-clk2"),
3938 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK1, 7, 0x74, 0x78, UINT_MAX, "pex-clk1"),
3939 TEGRA_IO_PAD(TEGRA_IO_PAD_EQOS, 8, 0x74, 0x78, UINT_MAX, "eqos"),
3940 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_2_BIAS, 9, 0x74, 0x78, UINT_MAX, "pex-clk-2-bias"),
3941 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CLK_2, 10, 0x74, 0x78, UINT_MAX, "pex-clk-2"),
3942 TEGRA_IO_PAD(TEGRA_IO_PAD_DAP3, 11, 0x74, 0x78, UINT_MAX, "dap3"),
3943 TEGRA_IO_PAD(TEGRA_IO_PAD_DAP5, 12, 0x74, 0x78, UINT_MAX, "dap5"),
3944 TEGRA_IO_PAD(TEGRA_IO_PAD_UART, 14, 0x74, 0x78, UINT_MAX, "uart"),
3945 TEGRA_IO_PAD(TEGRA_IO_PAD_PWR_CTL, 15, 0x74, 0x78, UINT_MAX, "pwr-ctl"),
3946 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO53, 16, 0x74, 0x78, UINT_MAX, "soc-gpio53"),
3947 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO, 17, 0x74, 0x78, UINT_MAX, "audio"),
3948 TEGRA_IO_PAD(TEGRA_IO_PAD_GP_PWM2, 18, 0x74, 0x78, UINT_MAX, "gp-pwm2"),
3949 TEGRA_IO_PAD(TEGRA_IO_PAD_GP_PWM3, 19, 0x74, 0x78, UINT_MAX, "gp-pwm3"),
3950 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO12, 20, 0x74, 0x78, UINT_MAX, "soc-gpio12"),
3951 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO13, 21, 0x74, 0x78, UINT_MAX, "soc-gpio13"),
3952 TEGRA_IO_PAD(TEGRA_IO_PAD_SOC_GPIO10, 22, 0x74, 0x78, UINT_MAX, "soc-gpio10"),
3953 TEGRA_IO_PAD(TEGRA_IO_PAD_UART4, 23, 0x74, 0x78, UINT_MAX, "uart4"),
3954 TEGRA_IO_PAD(TEGRA_IO_PAD_UART5, 24, 0x74, 0x78, UINT_MAX, "uart5"),
3955 TEGRA_IO_PAD(TEGRA_IO_PAD_DBG, 25, 0x74, 0x78, UINT_MAX, "dbg"),
3956 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP3, 26, 0x74, 0x78, UINT_MAX, "hdmi-dp3"),
3957 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP2, 27, 0x74, 0x78, UINT_MAX, "hdmi-dp2"),
3958 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP0, 28, 0x74, 0x78, UINT_MAX, "hdmi-dp0"),
3959 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP1, 29, 0x74, 0x78, UINT_MAX, "hdmi-dp1"),
3960 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CNTRL, 0, 0x7c, 0x80, UINT_MAX, "pex-cntrl"),
3961 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_CTL2, 1, 0x7c, 0x80, UINT_MAX, "pex-ctl2"),
3962 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_L0_RST, 2, 0x7c, 0x80, UINT_MAX, "pex-l0-rst"),
3963 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_L1_RST, 3, 0x7c, 0x80, UINT_MAX, "pex-l1-rst"),
3964 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC4, 4, 0x7c, 0x80, UINT_MAX, "sdmmc4"),
3965 TEGRA_IO_PAD(TEGRA_IO_PAD_PEX_L5_RST, 5, 0x7c, 0x80, UINT_MAX, "pex-l5-rst"),
3966 TEGRA_IO_PAD(TEGRA_IO_PAD_CAM, 6, 0x7c, 0x80, UINT_MAX, "cam"),
3967 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 11, 0x7c, 0x80, UINT_MAX, "csic"),
3968 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 12, 0x7c, 0x80, UINT_MAX, "csid"),
3969 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 13, 0x7c, 0x80, UINT_MAX, "csie"),
3970 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 14, 0x7c, 0x80, UINT_MAX, "csif"),
3971 TEGRA_IO_PAD(TEGRA_IO_PAD_SPI, 15, 0x7c, 0x80, UINT_MAX, "spi"),
3972 TEGRA_IO_PAD(TEGRA_IO_PAD_UFS, 17, 0x7c, 0x80, UINT_MAX, "ufs"),
3973 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIG, 18, 0x7c, 0x80, UINT_MAX, "csig"),
3974 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIH, 19, 0x7c, 0x80, UINT_MAX, "csih"),
3975 TEGRA_IO_PAD(TEGRA_IO_PAD_EDP, 21, 0x7c, 0x80, UINT_MAX, "edp"),
3976 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1_HV, 23, 0x7c, 0x80, 4, "sdmmc1-hv"),
3977 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3_HV, 24, 0x7c, 0x80, 6, "sdmmc3-hv"),
3978 TEGRA_IO_PAD(TEGRA_IO_PAD_CONN, 28, 0x7c, 0x80, UINT_MAX, "conn"),
3979 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, 29, 0x7c, 0x80, 1, "audio-hv"),
3980 TEGRA_IO_PAD(TEGRA_IO_PAD_AO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 0, "ao-hv"),
3983 static const struct pinctrl_pin_desc tegra194_pin_descs[] = {
3984 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
3985 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
3986 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_MIPI_BIAS, "mipi-bias"),
3987 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_BIAS, "pex-clk-bias"),
3988 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK3, "pex-clk3"),
3989 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK2, "pex-clk2"),
3990 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK1, "pex-clk1"),
3991 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EQOS, "eqos"),
3992 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_2_BIAS, "pex-clk-2-bias"),
3993 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CLK_2, "pex-clk-2"),
3994 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DAP3, "dap3"),
3995 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DAP5, "dap5"),
3996 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART, "uart"),
3997 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PWR_CTL, "pwr-ctl"),
3998 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO53, "soc-gpio53"),
3999 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO, "audio"),
4000 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_GP_PWM2, "gp-pwm2"),
4001 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_GP_PWM3, "gp-pwm3"),
4002 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO12, "soc-gpio12"),
4003 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO13, "soc-gpio13"),
4004 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SOC_GPIO10, "soc-gpio10"),
4005 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART4, "uart4"),
4006 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UART5, "uart5"),
4007 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_DBG, "dbg"),
4008 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP3, "hdmi-dp3"),
4009 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP2, "hdmi-dp2"),
4010 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP0, "hdmi-dp0"),
4011 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP1, "hdmi-dp1"),
4012 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CNTRL, "pex-cntrl"),
4013 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_CTL2, "pex-ctl2"),
4014 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_L0_RST, "pex-l0-rst"),
4015 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_L1_RST, "pex-l1-rst"),
4016 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC4, "sdmmc4"),
4017 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_PEX_L5_RST, "pex-l5-rst"),
4018 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CAM, "cam"),
4019 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
4020 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
4021 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
4022 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
4023 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SPI, "spi"),
4024 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UFS, "ufs"),
4025 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIG, "csig"),
4026 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIH, "csih"),
4027 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EDP, "edp"),
4028 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1_HV, "sdmmc1-hv"),
4029 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3_HV, "sdmmc3-hv"),
4030 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CONN, "conn"),
4031 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
4032 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AO_HV, "ao-hv"),
4035 static const struct tegra_pmc_regs tegra194_pmc_regs = {
4036 .scratch0 = 0x2000,
4037 .rst_status = 0x70,
4038 .rst_source_shift = 0x2,
4039 .rst_source_mask = 0x7c,
4040 .rst_level_shift = 0x0,
4041 .rst_level_mask = 0x3,
4044 static const char * const tegra194_reset_sources[] = {
4045 "SYS_RESET_N",
4046 "AOWDT",
4047 "BCCPLEXWDT",
4048 "BPMPWDT",
4049 "SCEWDT",
4050 "SPEWDT",
4051 "APEWDT",
4052 "LCCPLEXWDT",
4053 "SENSOR",
4054 "AOTAG",
4055 "VFSENSOR",
4056 "MAINSWRST",
4057 "SC7",
4058 "HSM",
4059 "CSITE",
4060 "RCEWDT",
4061 "PVA0WDT",
4062 "PVA1WDT",
4063 "L1A_ASYNC",
4064 "BPMPBOOT",
4065 "FUSECRC",
4068 static const struct tegra_wake_event tegra194_wake_events[] = {
4069 TEGRA_WAKE_GPIO("eqos", 20, 0, TEGRA194_MAIN_GPIO(G, 4)),
4070 TEGRA_WAKE_IRQ("pmu", 24, 209),
4071 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA194_AON_GPIO(EE, 4)),
4072 TEGRA_WAKE_IRQ("rtc", 73, 10),
4073 TEGRA_WAKE_SIMPLE("usb3-port-0", 76),
4074 TEGRA_WAKE_SIMPLE("usb3-port-1", 77),
4075 TEGRA_WAKE_SIMPLE("usb3-port-2-3", 78),
4076 TEGRA_WAKE_SIMPLE("usb2-port-0", 79),
4077 TEGRA_WAKE_SIMPLE("usb2-port-1", 80),
4078 TEGRA_WAKE_SIMPLE("usb2-port-2", 81),
4079 TEGRA_WAKE_SIMPLE("usb2-port-3", 82),
4082 static const struct tegra_pmc_soc tegra194_pmc_soc = {
4083 .supports_core_domain = false,
4084 .num_powergates = 0,
4085 .powergates = NULL,
4086 .num_cpu_powergates = 0,
4087 .cpu_powergates = NULL,
4088 .has_tsense_reset = false,
4089 .has_gpu_clamps = false,
4090 .needs_mbist_war = false,
4091 .has_impl_33v_pwr = true,
4092 .maybe_tz_only = false,
4093 .num_io_pads = ARRAY_SIZE(tegra194_io_pads),
4094 .io_pads = tegra194_io_pads,
4095 .num_pin_descs = ARRAY_SIZE(tegra194_pin_descs),
4096 .pin_descs = tegra194_pin_descs,
4097 .regs = &tegra194_pmc_regs,
4098 .init = tegra186_pmc_init,
4099 .setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
4100 .set_wake_filters = tegra186_pmc_set_wake_filters,
4101 .irq_set_wake = tegra186_pmc_irq_set_wake,
4102 .irq_set_type = tegra186_pmc_irq_set_type,
4103 .reset_sources = tegra194_reset_sources,
4104 .num_reset_sources = ARRAY_SIZE(tegra194_reset_sources),
4105 .reset_levels = tegra186_reset_levels,
4106 .num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
4107 .num_wake_events = ARRAY_SIZE(tegra194_wake_events),
4108 .wake_events = tegra194_wake_events,
4109 .max_wake_events = 96,
4110 .max_wake_vectors = 3,
4111 .pmc_clks_data = NULL,
4112 .num_pmc_clks = 0,
4113 .has_blink_output = false,
4114 .has_usb_sleepwalk = false,
4115 .has_single_mmio_aperture = false,
4118 static const struct tegra_io_pad_soc tegra234_io_pads[] = {
4119 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIA, 0, 0xe0c0, 0xe0c4, UINT_MAX, "csia"),
4120 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIB, 1, 0xe0c0, 0xe0c4, UINT_MAX, "csib"),
4121 TEGRA_IO_PAD(TEGRA_IO_PAD_HDMI_DP0, 0, 0xe0d0, 0xe0d4, UINT_MAX, "hdmi-dp0"),
4122 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIC, 2, 0xe0c0, 0xe0c4, UINT_MAX, "csic"),
4123 TEGRA_IO_PAD(TEGRA_IO_PAD_CSID, 3, 0xe0c0, 0xe0c4, UINT_MAX, "csid"),
4124 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIE, 4, 0xe0c0, 0xe0c4, UINT_MAX, "csie"),
4125 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIF, 5, 0xe0c0, 0xe0c4, UINT_MAX, "csif"),
4126 TEGRA_IO_PAD(TEGRA_IO_PAD_UFS, 0, 0xe064, 0xe068, UINT_MAX, "ufs"),
4127 TEGRA_IO_PAD(TEGRA_IO_PAD_EDP, 1, 0xe05c, 0xe060, UINT_MAX, "edp"),
4128 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC1_HV, 0, 0xe054, 0xe058, 4, "sdmmc1-hv"),
4129 TEGRA_IO_PAD(TEGRA_IO_PAD_SDMMC3_HV, UINT_MAX, UINT_MAX, UINT_MAX, 6, "sdmmc3-hv"),
4130 TEGRA_IO_PAD(TEGRA_IO_PAD_AUDIO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 1, "audio-hv"),
4131 TEGRA_IO_PAD(TEGRA_IO_PAD_AO_HV, UINT_MAX, UINT_MAX, UINT_MAX, 0, "ao-hv"),
4132 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIG, 6, 0xe0c0, 0xe0c4, UINT_MAX, "csig"),
4133 TEGRA_IO_PAD(TEGRA_IO_PAD_CSIH, 7, 0xe0c0, 0xe0c4, UINT_MAX, "csih"),
4136 static const struct pinctrl_pin_desc tegra234_pin_descs[] = {
4137 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIA, "csia"),
4138 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIB, "csib"),
4139 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_HDMI_DP0, "hdmi-dp0"),
4140 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIC, "csic"),
4141 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSID, "csid"),
4142 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIE, "csie"),
4143 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIF, "csif"),
4144 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_UFS, "ufs"),
4145 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_EDP, "edp"),
4146 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC1_HV, "sdmmc1-hv"),
4147 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_SDMMC3_HV, "sdmmc3-hv"),
4148 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AUDIO_HV, "audio-hv"),
4149 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_AO_HV, "ao-hv"),
4150 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIG, "csig"),
4151 TEGRA_IO_PIN_DESC(TEGRA_IO_PAD_CSIH, "csih"),
4154 static const struct tegra_pmc_regs tegra234_pmc_regs = {
4155 .scratch0 = 0x2000,
4156 .rst_status = 0x70,
4157 .rst_source_shift = 0x2,
4158 .rst_source_mask = 0xfc,
4159 .rst_level_shift = 0x0,
4160 .rst_level_mask = 0x3,
4163 static const char * const tegra234_reset_sources[] = {
4164 "SYS_RESET_N", /* 0x0 */
4165 "AOWDT",
4166 "BCCPLEXWDT",
4167 "BPMPWDT",
4168 "SCEWDT",
4169 "SPEWDT",
4170 "APEWDT",
4171 "LCCPLEXWDT",
4172 "SENSOR", /* 0x8 */
4173 NULL,
4174 NULL,
4175 "MAINSWRST",
4176 "SC7",
4177 "HSM",
4178 NULL,
4179 "RCEWDT",
4180 NULL, /* 0x10 */
4181 NULL,
4182 NULL,
4183 "BPMPBOOT",
4184 "FUSECRC",
4185 "DCEWDT",
4186 "PSCWDT",
4187 "PSC",
4188 "CSITE_SW", /* 0x18 */
4189 "POD",
4190 "SCPM",
4191 "VREFRO_POWERBAD",
4192 "VMON",
4193 "FMON",
4194 "FSI_R5WDT",
4195 "FSI_THERM",
4196 "FSI_R52C0WDT", /* 0x20 */
4197 "FSI_R52C1WDT",
4198 "FSI_R52C2WDT",
4199 "FSI_R52C3WDT",
4200 "FSI_FMON",
4201 "FSI_VMON", /* 0x25 */
4204 static const struct tegra_wake_event tegra234_wake_events[] = {
4205 TEGRA_WAKE_GPIO("sd-wake", 8, 0, TEGRA234_MAIN_GPIO(G, 7)),
4206 TEGRA_WAKE_GPIO("eqos", 20, 0, TEGRA234_MAIN_GPIO(G, 4)),
4207 TEGRA_WAKE_IRQ("pmu", 24, 209),
4208 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA234_AON_GPIO(EE, 4)),
4209 TEGRA_WAKE_GPIO("mgbe", 56, 0, TEGRA234_MAIN_GPIO(Y, 3)),
4210 TEGRA_WAKE_IRQ("rtc", 73, 10),
4211 TEGRA_WAKE_IRQ("sw-wake", SW_WAKE_ID, 179),
4214 static const struct tegra_pmc_soc tegra234_pmc_soc = {
4215 .supports_core_domain = false,
4216 .num_powergates = 0,
4217 .powergates = NULL,
4218 .num_cpu_powergates = 0,
4219 .cpu_powergates = NULL,
4220 .has_tsense_reset = false,
4221 .has_gpu_clamps = false,
4222 .needs_mbist_war = false,
4223 .has_impl_33v_pwr = true,
4224 .maybe_tz_only = false,
4225 .num_io_pads = ARRAY_SIZE(tegra234_io_pads),
4226 .io_pads = tegra234_io_pads,
4227 .num_pin_descs = ARRAY_SIZE(tegra234_pin_descs),
4228 .pin_descs = tegra234_pin_descs,
4229 .regs = &tegra234_pmc_regs,
4230 .init = tegra186_pmc_init,
4231 .setup_irq_polarity = tegra186_pmc_setup_irq_polarity,
4232 .set_wake_filters = tegra186_pmc_set_wake_filters,
4233 .irq_set_wake = tegra186_pmc_irq_set_wake,
4234 .irq_set_type = tegra186_pmc_irq_set_type,
4235 .reset_sources = tegra234_reset_sources,
4236 .num_reset_sources = ARRAY_SIZE(tegra234_reset_sources),
4237 .reset_levels = tegra186_reset_levels,
4238 .num_reset_levels = ARRAY_SIZE(tegra186_reset_levels),
4239 .num_wake_events = ARRAY_SIZE(tegra234_wake_events),
4240 .wake_events = tegra234_wake_events,
4241 .max_wake_events = 96,
4242 .max_wake_vectors = 3,
4243 .pmc_clks_data = NULL,
4244 .num_pmc_clks = 0,
4245 .has_blink_output = false,
4246 .has_single_mmio_aperture = false,
4249 static const struct of_device_id tegra_pmc_match[] = {
4250 { .compatible = "nvidia,tegra234-pmc", .data = &tegra234_pmc_soc },
4251 { .compatible = "nvidia,tegra194-pmc", .data = &tegra194_pmc_soc },
4252 { .compatible = "nvidia,tegra186-pmc", .data = &tegra186_pmc_soc },
4253 { .compatible = "nvidia,tegra210-pmc", .data = &tegra210_pmc_soc },
4254 { .compatible = "nvidia,tegra132-pmc", .data = &tegra124_pmc_soc },
4255 { .compatible = "nvidia,tegra124-pmc", .data = &tegra124_pmc_soc },
4256 { .compatible = "nvidia,tegra114-pmc", .data = &tegra114_pmc_soc },
4257 { .compatible = "nvidia,tegra30-pmc", .data = &tegra30_pmc_soc },
4258 { .compatible = "nvidia,tegra20-pmc", .data = &tegra20_pmc_soc },
4262 static void tegra_pmc_sync_state(struct device *dev)
4264 int err;
4267 * Newer device-trees have power domains, but we need to prepare all
4268 * device drivers with runtime PM and OPP support first, otherwise
4269 * state syncing is unsafe.
4271 if (!pmc->soc->supports_core_domain)
4272 return;
4275 * Older device-trees don't have core PD, and thus, there are
4276 * no dependencies that will block the state syncing. We shouldn't
4277 * mark the domain as synced in this case.
4279 if (!pmc->core_domain_registered)
4280 return;
4282 pmc->core_domain_state_synced = true;
4284 /* this is a no-op if core regulator isn't used */
4285 mutex_lock(&pmc->powergates_lock);
4286 err = dev_pm_opp_sync_regulators(dev);
4287 mutex_unlock(&pmc->powergates_lock);
4289 if (err)
4290 dev_err(dev, "failed to sync regulators: %d\n", err);
4293 static struct platform_driver tegra_pmc_driver = {
4294 .driver = {
4295 .name = "tegra-pmc",
4296 .suppress_bind_attrs = true,
4297 .of_match_table = tegra_pmc_match,
4298 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
4299 .pm = &tegra_pmc_pm_ops,
4300 #endif
4301 .sync_state = tegra_pmc_sync_state,
4303 .probe = tegra_pmc_probe,
4305 builtin_platform_driver(tegra_pmc_driver);
4307 static bool __init tegra_pmc_detect_tz_only(struct tegra_pmc *pmc)
4309 u32 value, saved;
4311 saved = readl(pmc->base + pmc->soc->regs->scratch0);
4312 value = saved ^ 0xffffffff;
4314 if (value == 0xffffffff)
4315 value = 0xdeadbeef;
4317 /* write pattern and read it back */
4318 writel(value, pmc->base + pmc->soc->regs->scratch0);
4319 value = readl(pmc->base + pmc->soc->regs->scratch0);
4321 /* if we read all-zeroes, access is restricted to TZ only */
4322 if (value == 0) {
4323 pr_info("access to PMC is restricted to TZ\n");
4324 return true;
4327 /* restore original value */
4328 writel(saved, pmc->base + pmc->soc->regs->scratch0);
4330 return false;
4334 * Early initialization to allow access to registers in the very early boot
4335 * process.
4337 static int __init tegra_pmc_early_init(void)
4339 const struct of_device_id *match;
4340 struct device_node *np;
4341 struct resource regs;
4342 unsigned int i;
4343 bool invert;
4345 mutex_init(&pmc->powergates_lock);
4347 np = of_find_matching_node_and_match(NULL, tegra_pmc_match, &match);
4348 if (!np) {
4350 * Fall back to legacy initialization for 32-bit ARM only. All
4351 * 64-bit ARM device tree files for Tegra are required to have
4352 * a PMC node.
4354 * This is for backwards-compatibility with old device trees
4355 * that didn't contain a PMC node. Note that in this case the
4356 * SoC data can't be matched and therefore powergating is
4357 * disabled.
4359 if (IS_ENABLED(CONFIG_ARM) && soc_is_tegra()) {
4360 pr_warn("DT node not found, powergating disabled\n");
4362 regs.start = 0x7000e400;
4363 regs.end = 0x7000e7ff;
4364 regs.flags = IORESOURCE_MEM;
4366 pr_warn("Using memory region %pR\n", &regs);
4367 } else {
4369 * At this point we're not running on Tegra, so play
4370 * nice with multi-platform kernels.
4372 return 0;
4374 } else {
4376 * Extract information from the device tree if we've found a
4377 * matching node.
4379 if (of_address_to_resource(np, 0, &regs) < 0) {
4380 pr_err("failed to get PMC registers\n");
4381 of_node_put(np);
4382 return -ENXIO;
4386 pmc->base = ioremap(regs.start, resource_size(&regs));
4387 if (!pmc->base) {
4388 pr_err("failed to map PMC registers\n");
4389 of_node_put(np);
4390 return -ENXIO;
4393 if (of_device_is_available(np)) {
4394 pmc->soc = match->data;
4396 if (pmc->soc->maybe_tz_only)
4397 pmc->tz_only = tegra_pmc_detect_tz_only(pmc);
4399 /* Create a bitmap of the available and valid partitions */
4400 for (i = 0; i < pmc->soc->num_powergates; i++)
4401 if (pmc->soc->powergates[i])
4402 set_bit(i, pmc->powergates_available);
4405 * Invert the interrupt polarity if a PMC device tree node
4406 * exists and contains the nvidia,invert-interrupt property.
4408 invert = of_property_read_bool(np, "nvidia,invert-interrupt");
4410 pmc->soc->setup_irq_polarity(pmc, np, invert);
4412 of_node_put(np);
4415 return 0;
4417 early_initcall(tegra_pmc_early_init);