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