2 * drivers/soc/tegra/pmc.c
4 * Copyright (c) 2010 Google, Inc
5 * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
8 * Colin Cross <ccross@google.com>
10 * This software is licensed under the terms of the GNU General Public
11 * License version 2, as published by the Free Software Foundation, and
12 * may be copied, distributed, and modified under those terms.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
21 #define pr_fmt(fmt) "tegra-pmc: " fmt
23 #include <linux/arm-smccc.h>
24 #include <linux/clk.h>
25 #include <linux/clk/tegra.h>
26 #include <linux/debugfs.h>
27 #include <linux/delay.h>
28 #include <linux/err.h>
29 #include <linux/export.h>
30 #include <linux/init.h>
32 #include <linux/iopoll.h>
33 #include <linux/irqdomain.h>
34 #include <linux/irq.h>
35 #include <linux/kernel.h>
36 #include <linux/of_address.h>
37 #include <linux/of_clk.h>
39 #include <linux/of_irq.h>
40 #include <linux/of_platform.h>
41 #include <linux/pinctrl/pinconf-generic.h>
42 #include <linux/pinctrl/pinconf.h>
43 #include <linux/pinctrl/pinctrl.h>
44 #include <linux/platform_device.h>
45 #include <linux/pm_domain.h>
46 #include <linux/reboot.h>
47 #include <linux/reset.h>
48 #include <linux/seq_file.h>
49 #include <linux/slab.h>
50 #include <linux/spinlock.h>
52 #include <soc/tegra/common.h>
53 #include <soc/tegra/fuse.h>
54 #include <soc/tegra/pmc.h>
56 #include <dt-bindings/interrupt-controller/arm-gic.h>
57 #include <dt-bindings/pinctrl/pinctrl-tegra-io-pad.h>
58 #include <dt-bindings/gpio/tegra186-gpio.h>
59 #include <dt-bindings/gpio/tegra194-gpio.h>
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_MAIN_RST BIT(4)
70 #define DPD_SAMPLE 0x020
71 #define DPD_SAMPLE_ENABLE BIT(0)
72 #define DPD_SAMPLE_DISABLE (0 << 0)
74 #define PWRGATE_TOGGLE 0x30
75 #define PWRGATE_TOGGLE_START BIT(8)
77 #define REMOVE_CLAMPING 0x34
79 #define PWRGATE_STATUS 0x38
81 #define PMC_IMPL_E_33V_PWR 0x40
83 #define PMC_PWR_DET 0x48
85 #define PMC_SCRATCH0_MODE_RECOVERY BIT(31)
86 #define PMC_SCRATCH0_MODE_BOOTLOADER BIT(30)
87 #define PMC_SCRATCH0_MODE_RCM BIT(1)
88 #define PMC_SCRATCH0_MODE_MASK (PMC_SCRATCH0_MODE_RECOVERY | \
89 PMC_SCRATCH0_MODE_BOOTLOADER | \
90 PMC_SCRATCH0_MODE_RCM)
92 #define PMC_CPUPWRGOOD_TIMER 0xc8
93 #define PMC_CPUPWROFF_TIMER 0xcc
95 #define PMC_PWR_DET_VALUE 0xe4
97 #define PMC_SCRATCH41 0x140
99 #define PMC_SENSOR_CTRL 0x1b0
100 #define PMC_SENSOR_CTRL_SCRATCH_WRITE BIT(2)
101 #define PMC_SENSOR_CTRL_ENABLE_RST BIT(1)
103 #define PMC_RST_STATUS_POR 0
104 #define PMC_RST_STATUS_WATCHDOG 1
105 #define PMC_RST_STATUS_SENSOR 2
106 #define PMC_RST_STATUS_SW_MAIN 3
107 #define PMC_RST_STATUS_LP0 4
108 #define PMC_RST_STATUS_AOTAG 5
110 #define IO_DPD_REQ 0x1b8
111 #define IO_DPD_REQ_CODE_IDLE (0U << 30)
112 #define IO_DPD_REQ_CODE_OFF (1U << 30)
113 #define IO_DPD_REQ_CODE_ON (2U << 30)
114 #define IO_DPD_REQ_CODE_MASK (3U << 30)
116 #define IO_DPD_STATUS 0x1bc
117 #define IO_DPD2_REQ 0x1c0
118 #define IO_DPD2_STATUS 0x1c4
119 #define SEL_DPD_TIM 0x1c8
121 #define PMC_SCRATCH54 0x258
122 #define PMC_SCRATCH54_DATA_SHIFT 8
123 #define PMC_SCRATCH54_ADDR_SHIFT 0
125 #define PMC_SCRATCH55 0x25c
126 #define PMC_SCRATCH55_RESET_TEGRA BIT(31)
127 #define PMC_SCRATCH55_CNTRL_ID_SHIFT 27
128 #define PMC_SCRATCH55_PINMUX_SHIFT 24
129 #define PMC_SCRATCH55_16BITOP BIT(15)
130 #define PMC_SCRATCH55_CHECKSUM_SHIFT 16
131 #define PMC_SCRATCH55_I2CSLV1_SHIFT 0
133 #define GPU_RG_CNTRL 0x2d4
135 /* Tegra186 and later */
136 #define WAKE_AOWAKE_CNTRL(x) (0x000 + ((x) << 2))
137 #define WAKE_AOWAKE_CNTRL_LEVEL (1 << 3)
138 #define WAKE_AOWAKE_MASK_W(x) (0x180 + ((x) << 2))
139 #define WAKE_AOWAKE_MASK_R(x) (0x300 + ((x) << 2))
140 #define WAKE_AOWAKE_STATUS_W(x) (0x30c + ((x) << 2))
141 #define WAKE_AOWAKE_STATUS_R(x) (0x48c + ((x) << 2))
142 #define WAKE_AOWAKE_TIER0_ROUTING(x) (0x4b4 + ((x) << 2))
143 #define WAKE_AOWAKE_TIER1_ROUTING(x) (0x4c0 + ((x) << 2))
144 #define WAKE_AOWAKE_TIER2_ROUTING(x) (0x4cc + ((x) << 2))
146 #define WAKE_AOWAKE_CTRL 0x4f4
147 #define WAKE_AOWAKE_CTRL_INTR_POLARITY BIT(0)
150 #define TEGRA_SMC_PMC 0xc2fffe00
151 #define TEGRA_SMC_PMC_READ 0xaa
152 #define TEGRA_SMC_PMC_WRITE 0xbb
154 struct tegra_powergate
{
155 struct generic_pm_domain genpd
;
156 struct tegra_pmc
*pmc
;
159 unsigned int num_clks
;
160 struct reset_control
*reset
;
163 struct tegra_io_pad_soc
{
164 enum tegra_io_pad id
;
166 unsigned int voltage
;
170 struct tegra_pmc_regs
{
171 unsigned int scratch0
;
172 unsigned int dpd_req
;
173 unsigned int dpd_status
;
174 unsigned int dpd2_req
;
175 unsigned int dpd2_status
;
176 unsigned int rst_status
;
177 unsigned int rst_source_shift
;
178 unsigned int rst_source_mask
;
179 unsigned int rst_level_shift
;
180 unsigned int rst_level_mask
;
183 struct tegra_wake_event
{
188 unsigned int instance
;
193 #define TEGRA_WAKE_IRQ(_name, _id, _irq) \
199 .instance = UINT_MAX, \
204 #define TEGRA_WAKE_GPIO(_name, _id, _instance, _pin) \
210 .instance = _instance, \
215 struct tegra_pmc_soc
{
216 unsigned int num_powergates
;
217 const char *const *powergates
;
218 unsigned int num_cpu_powergates
;
219 const u8
*cpu_powergates
;
221 bool has_tsense_reset
;
223 bool needs_mbist_war
;
224 bool has_impl_33v_pwr
;
227 const struct tegra_io_pad_soc
*io_pads
;
228 unsigned int num_io_pads
;
230 const struct pinctrl_pin_desc
*pin_descs
;
231 unsigned int num_pin_descs
;
233 const struct tegra_pmc_regs
*regs
;
234 void (*init
)(struct tegra_pmc
*pmc
);
235 void (*setup_irq_polarity
)(struct tegra_pmc
*pmc
,
236 struct device_node
*np
,
239 const char * const *reset_sources
;
240 unsigned int num_reset_sources
;
241 const char * const *reset_levels
;
242 unsigned int num_reset_levels
;
244 const struct tegra_wake_event
*wake_events
;
245 unsigned int num_wake_events
;
248 static const char * const tegra186_reset_sources
[] = {
266 static const char * const tegra186_reset_levels
[] = {
267 "L0", "L1", "L2", "WARM"
270 static const char * const tegra30_reset_sources
[] = {
278 static const char * const tegra210_reset_sources
[] = {
288 * struct tegra_pmc - NVIDIA Tegra PMC
289 * @dev: pointer to PMC device structure
290 * @base: pointer to I/O remapped register region
291 * @wake: pointer to I/O remapped region for WAKE registers
292 * @aotag: pointer to I/O remapped region for AOTAG registers
293 * @scratch: pointer to I/O remapped region for scratch registers
294 * @clk: pointer to pclk clock
295 * @soc: pointer to SoC data structure
296 * @tz_only: flag specifying if the PMC can only be accessed via TrustZone
297 * @debugfs: pointer to debugfs entry
298 * @rate: currently configured rate of pclk
299 * @suspend_mode: lowest suspend mode available
300 * @cpu_good_time: CPU power good time (in microseconds)
301 * @cpu_off_time: CPU power off time (in microsecends)
302 * @core_osc_time: core power good OSC time (in microseconds)
303 * @core_pmu_time: core power good PMU time (in microseconds)
304 * @core_off_time: core power off time (in microseconds)
305 * @corereq_high: core power request is active-high
306 * @sysclkreq_high: system clock request is active-high
307 * @combined_req: combined power request for CPU & core
308 * @cpu_pwr_good_en: CPU power good signal is enabled
309 * @lp0_vec_phys: physical base address of the LP0 warm boot code
310 * @lp0_vec_size: size of the LP0 warm boot code
311 * @powergates_available: Bitmap of available power gates
312 * @powergates_lock: mutex for power gate register access
313 * @pctl_dev: pin controller exposed by the PMC
314 * @domain: IRQ domain provided by the PMC
315 * @irq: chip implementation for the IRQ domain
322 void __iomem
*scratch
;
324 struct dentry
*debugfs
;
326 const struct tegra_pmc_soc
*soc
;
331 enum tegra_suspend_mode suspend_mode
;
340 bool cpu_pwr_good_en
;
343 DECLARE_BITMAP(powergates_available
, TEGRA_POWERGATE_MAX
);
345 struct mutex powergates_lock
;
347 struct pinctrl_dev
*pctl_dev
;
349 struct irq_domain
*domain
;
353 static struct tegra_pmc
*pmc
= &(struct tegra_pmc
) {
355 .suspend_mode
= TEGRA_SUSPEND_NONE
,
358 static inline struct tegra_powergate
*
359 to_powergate(struct generic_pm_domain
*domain
)
361 return container_of(domain
, struct tegra_powergate
, genpd
);
364 static u32
tegra_pmc_readl(struct tegra_pmc
*pmc
, unsigned long offset
)
366 struct arm_smccc_res res
;
369 arm_smccc_smc(TEGRA_SMC_PMC
, TEGRA_SMC_PMC_READ
, offset
, 0, 0,
373 dev_warn(pmc
->dev
, "%s(): SMC failed: %lu\n",
376 pr_warn("%s(): SMC failed: %lu\n", __func__
,
383 return readl(pmc
->base
+ offset
);
386 static void tegra_pmc_writel(struct tegra_pmc
*pmc
, u32 value
,
387 unsigned long offset
)
389 struct arm_smccc_res res
;
392 arm_smccc_smc(TEGRA_SMC_PMC
, TEGRA_SMC_PMC_WRITE
, offset
,
393 value
, 0, 0, 0, 0, &res
);
396 dev_warn(pmc
->dev
, "%s(): SMC failed: %lu\n",
399 pr_warn("%s(): SMC failed: %lu\n", __func__
,
403 writel(value
, pmc
->base
+ offset
);
407 static u32
tegra_pmc_scratch_readl(struct tegra_pmc
*pmc
, unsigned long offset
)
410 return tegra_pmc_readl(pmc
, offset
);
412 return readl(pmc
->scratch
+ offset
);
415 static void tegra_pmc_scratch_writel(struct tegra_pmc
*pmc
, u32 value
,
416 unsigned long offset
)
419 tegra_pmc_writel(pmc
, value
, offset
);
421 writel(value
, pmc
->scratch
+ offset
);
425 * TODO Figure out a way to call this with the struct tegra_pmc * passed in.
426 * This currently doesn't work because readx_poll_timeout() can only operate
427 * on functions that take a single argument.
429 static inline bool tegra_powergate_state(int id
)
431 if (id
== TEGRA_POWERGATE_3D
&& pmc
->soc
->has_gpu_clamps
)
432 return (tegra_pmc_readl(pmc
, GPU_RG_CNTRL
) & 0x1) == 0;
434 return (tegra_pmc_readl(pmc
, PWRGATE_STATUS
) & BIT(id
)) != 0;
437 static inline bool tegra_powergate_is_valid(struct tegra_pmc
*pmc
, int id
)
439 return (pmc
->soc
&& pmc
->soc
->powergates
[id
]);
442 static inline bool tegra_powergate_is_available(struct tegra_pmc
*pmc
, int id
)
444 return test_bit(id
, pmc
->powergates_available
);
447 static int tegra_powergate_lookup(struct tegra_pmc
*pmc
, const char *name
)
451 if (!pmc
|| !pmc
->soc
|| !name
)
454 for (i
= 0; i
< pmc
->soc
->num_powergates
; i
++) {
455 if (!tegra_powergate_is_valid(pmc
, i
))
458 if (!strcmp(name
, pmc
->soc
->powergates
[i
]))
466 * tegra_powergate_set() - set the state of a partition
467 * @pmc: power management controller
469 * @new_state: new state of the partition
471 static int tegra_powergate_set(struct tegra_pmc
*pmc
, unsigned int id
,
477 if (id
== TEGRA_POWERGATE_3D
&& pmc
->soc
->has_gpu_clamps
)
480 mutex_lock(&pmc
->powergates_lock
);
482 if (tegra_powergate_state(id
) == new_state
) {
483 mutex_unlock(&pmc
->powergates_lock
);
487 tegra_pmc_writel(pmc
, PWRGATE_TOGGLE_START
| id
, PWRGATE_TOGGLE
);
489 err
= readx_poll_timeout(tegra_powergate_state
, id
, status
,
490 status
== new_state
, 10, 100000);
492 mutex_unlock(&pmc
->powergates_lock
);
497 static int __tegra_powergate_remove_clamping(struct tegra_pmc
*pmc
,
502 mutex_lock(&pmc
->powergates_lock
);
505 * On Tegra124 and later, the clamps for the GPU are controlled by a
506 * separate register (with different semantics).
508 if (id
== TEGRA_POWERGATE_3D
) {
509 if (pmc
->soc
->has_gpu_clamps
) {
510 tegra_pmc_writel(pmc
, 0, GPU_RG_CNTRL
);
516 * Tegra 2 has a bug where PCIE and VDE clamping masks are
517 * swapped relatively to the partition ids
519 if (id
== TEGRA_POWERGATE_VDEC
)
520 mask
= (1 << TEGRA_POWERGATE_PCIE
);
521 else if (id
== TEGRA_POWERGATE_PCIE
)
522 mask
= (1 << TEGRA_POWERGATE_VDEC
);
526 tegra_pmc_writel(pmc
, mask
, REMOVE_CLAMPING
);
529 mutex_unlock(&pmc
->powergates_lock
);
534 static void tegra_powergate_disable_clocks(struct tegra_powergate
*pg
)
538 for (i
= 0; i
< pg
->num_clks
; i
++)
539 clk_disable_unprepare(pg
->clks
[i
]);
542 static int tegra_powergate_enable_clocks(struct tegra_powergate
*pg
)
547 for (i
= 0; i
< pg
->num_clks
; i
++) {
548 err
= clk_prepare_enable(pg
->clks
[i
]);
557 clk_disable_unprepare(pg
->clks
[i
]);
562 int __weak
tegra210_clk_handle_mbist_war(unsigned int id
)
567 static int tegra_powergate_power_up(struct tegra_powergate
*pg
,
572 err
= reset_control_assert(pg
->reset
);
576 usleep_range(10, 20);
578 err
= tegra_powergate_set(pg
->pmc
, pg
->id
, true);
582 usleep_range(10, 20);
584 err
= tegra_powergate_enable_clocks(pg
);
588 usleep_range(10, 20);
590 err
= __tegra_powergate_remove_clamping(pg
->pmc
, pg
->id
);
594 usleep_range(10, 20);
596 err
= reset_control_deassert(pg
->reset
);
600 usleep_range(10, 20);
602 if (pg
->pmc
->soc
->needs_mbist_war
)
603 err
= tegra210_clk_handle_mbist_war(pg
->id
);
608 tegra_powergate_disable_clocks(pg
);
613 tegra_powergate_disable_clocks(pg
);
614 usleep_range(10, 20);
617 tegra_powergate_set(pg
->pmc
, pg
->id
, false);
622 static int tegra_powergate_power_down(struct tegra_powergate
*pg
)
626 err
= tegra_powergate_enable_clocks(pg
);
630 usleep_range(10, 20);
632 err
= reset_control_assert(pg
->reset
);
636 usleep_range(10, 20);
638 tegra_powergate_disable_clocks(pg
);
640 usleep_range(10, 20);
642 err
= tegra_powergate_set(pg
->pmc
, pg
->id
, false);
649 tegra_powergate_enable_clocks(pg
);
650 usleep_range(10, 20);
651 reset_control_deassert(pg
->reset
);
652 usleep_range(10, 20);
655 tegra_powergate_disable_clocks(pg
);
660 static int tegra_genpd_power_on(struct generic_pm_domain
*domain
)
662 struct tegra_powergate
*pg
= to_powergate(domain
);
663 struct device
*dev
= pg
->pmc
->dev
;
666 err
= tegra_powergate_power_up(pg
, true);
668 dev_err(dev
, "failed to turn on PM domain %s: %d\n",
669 pg
->genpd
.name
, err
);
673 reset_control_release(pg
->reset
);
679 static int tegra_genpd_power_off(struct generic_pm_domain
*domain
)
681 struct tegra_powergate
*pg
= to_powergate(domain
);
682 struct device
*dev
= pg
->pmc
->dev
;
685 err
= reset_control_acquire(pg
->reset
);
687 pr_err("failed to acquire resets: %d\n", err
);
691 err
= tegra_powergate_power_down(pg
);
693 dev_err(dev
, "failed to turn off PM domain %s: %d\n",
694 pg
->genpd
.name
, err
);
695 reset_control_release(pg
->reset
);
702 * tegra_powergate_power_on() - power on partition
705 int tegra_powergate_power_on(unsigned int id
)
707 if (!tegra_powergate_is_available(pmc
, id
))
710 return tegra_powergate_set(pmc
, id
, true);
714 * tegra_powergate_power_off() - power off partition
717 int tegra_powergate_power_off(unsigned int id
)
719 if (!tegra_powergate_is_available(pmc
, id
))
722 return tegra_powergate_set(pmc
, id
, false);
724 EXPORT_SYMBOL(tegra_powergate_power_off
);
727 * tegra_powergate_is_powered() - check if partition is powered
728 * @pmc: power management controller
731 static int tegra_powergate_is_powered(struct tegra_pmc
*pmc
, unsigned int id
)
733 if (!tegra_powergate_is_valid(pmc
, id
))
736 return tegra_powergate_state(id
);
740 * tegra_powergate_remove_clamping() - remove power clamps for partition
743 int tegra_powergate_remove_clamping(unsigned int id
)
745 if (!tegra_powergate_is_available(pmc
, id
))
748 return __tegra_powergate_remove_clamping(pmc
, id
);
750 EXPORT_SYMBOL(tegra_powergate_remove_clamping
);
753 * tegra_powergate_sequence_power_up() - power up partition
755 * @clk: clock for partition
756 * @rst: reset for partition
758 * Must be called with clk disabled, and returns with clk enabled.
760 int tegra_powergate_sequence_power_up(unsigned int id
, struct clk
*clk
,
761 struct reset_control
*rst
)
763 struct tegra_powergate
*pg
;
766 if (!tegra_powergate_is_available(pmc
, id
))
769 pg
= kzalloc(sizeof(*pg
), GFP_KERNEL
);
779 err
= tegra_powergate_power_up(pg
, false);
781 dev_err(pmc
->dev
, "failed to turn on partition %d: %d\n", id
,
788 EXPORT_SYMBOL(tegra_powergate_sequence_power_up
);
791 * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID
792 * @pmc: power management controller
793 * @cpuid: CPU partition ID
795 * Returns the partition ID corresponding to the CPU partition ID or a
796 * negative error code on failure.
798 static int tegra_get_cpu_powergate_id(struct tegra_pmc
*pmc
,
801 if (pmc
->soc
&& cpuid
< pmc
->soc
->num_cpu_powergates
)
802 return pmc
->soc
->cpu_powergates
[cpuid
];
808 * tegra_pmc_cpu_is_powered() - check if CPU partition is powered
809 * @cpuid: CPU partition ID
811 bool tegra_pmc_cpu_is_powered(unsigned int cpuid
)
815 id
= tegra_get_cpu_powergate_id(pmc
, cpuid
);
819 return tegra_powergate_is_powered(pmc
, id
);
823 * tegra_pmc_cpu_power_on() - power on CPU partition
824 * @cpuid: CPU partition ID
826 int tegra_pmc_cpu_power_on(unsigned int cpuid
)
830 id
= tegra_get_cpu_powergate_id(pmc
, cpuid
);
834 return tegra_powergate_set(pmc
, id
, true);
838 * tegra_pmc_cpu_remove_clamping() - remove power clamps for CPU partition
839 * @cpuid: CPU partition ID
841 int tegra_pmc_cpu_remove_clamping(unsigned int cpuid
)
845 id
= tegra_get_cpu_powergate_id(pmc
, cpuid
);
849 return tegra_powergate_remove_clamping(id
);
852 static int tegra_pmc_restart_notify(struct notifier_block
*this,
853 unsigned long action
, void *data
)
855 const char *cmd
= data
;
858 value
= tegra_pmc_scratch_readl(pmc
, pmc
->soc
->regs
->scratch0
);
859 value
&= ~PMC_SCRATCH0_MODE_MASK
;
862 if (strcmp(cmd
, "recovery") == 0)
863 value
|= PMC_SCRATCH0_MODE_RECOVERY
;
865 if (strcmp(cmd
, "bootloader") == 0)
866 value
|= PMC_SCRATCH0_MODE_BOOTLOADER
;
868 if (strcmp(cmd
, "forced-recovery") == 0)
869 value
|= PMC_SCRATCH0_MODE_RCM
;
872 tegra_pmc_scratch_writel(pmc
, value
, pmc
->soc
->regs
->scratch0
);
874 /* reset everything but PMC_SCRATCH0 and PMC_RST_STATUS */
875 value
= tegra_pmc_readl(pmc
, PMC_CNTRL
);
876 value
|= PMC_CNTRL_MAIN_RST
;
877 tegra_pmc_writel(pmc
, value
, PMC_CNTRL
);
882 static struct notifier_block tegra_pmc_restart_handler
= {
883 .notifier_call
= tegra_pmc_restart_notify
,
887 static int powergate_show(struct seq_file
*s
, void *data
)
892 seq_printf(s
, " powergate powered\n");
893 seq_printf(s
, "------------------\n");
895 for (i
= 0; i
< pmc
->soc
->num_powergates
; i
++) {
896 status
= tegra_powergate_is_powered(pmc
, i
);
900 seq_printf(s
, " %9s %7s\n", pmc
->soc
->powergates
[i
],
901 status
? "yes" : "no");
907 DEFINE_SHOW_ATTRIBUTE(powergate
);
909 static int tegra_powergate_debugfs_init(void)
911 pmc
->debugfs
= debugfs_create_file("powergate", S_IRUGO
, NULL
, NULL
,
919 static int tegra_powergate_of_get_clks(struct tegra_powergate
*pg
,
920 struct device_node
*np
)
923 unsigned int i
, count
;
926 count
= of_clk_get_parent_count(np
);
930 pg
->clks
= kcalloc(count
, sizeof(clk
), GFP_KERNEL
);
934 for (i
= 0; i
< count
; i
++) {
935 pg
->clks
[i
] = of_clk_get(np
, i
);
936 if (IS_ERR(pg
->clks
[i
])) {
937 err
= PTR_ERR(pg
->clks
[i
]);
942 pg
->num_clks
= count
;
948 clk_put(pg
->clks
[i
]);
955 static int tegra_powergate_of_get_resets(struct tegra_powergate
*pg
,
956 struct device_node
*np
, bool off
)
958 struct device
*dev
= pg
->pmc
->dev
;
961 pg
->reset
= of_reset_control_array_get_exclusive_released(np
);
962 if (IS_ERR(pg
->reset
)) {
963 err
= PTR_ERR(pg
->reset
);
964 dev_err(dev
, "failed to get device resets: %d\n", err
);
968 err
= reset_control_acquire(pg
->reset
);
970 pr_err("failed to acquire resets: %d\n", err
);
975 err
= reset_control_assert(pg
->reset
);
977 err
= reset_control_deassert(pg
->reset
);
981 reset_control_release(pg
->reset
);
986 reset_control_release(pg
->reset
);
987 reset_control_put(pg
->reset
);
993 static int tegra_powergate_add(struct tegra_pmc
*pmc
, struct device_node
*np
)
995 struct device
*dev
= pmc
->dev
;
996 struct tegra_powergate
*pg
;
1000 pg
= kzalloc(sizeof(*pg
), GFP_KERNEL
);
1004 id
= tegra_powergate_lookup(pmc
, np
->name
);
1006 dev_err(dev
, "powergate lookup failed for %pOFn: %d\n", np
, id
);
1012 * Clear the bit for this powergate so it cannot be managed
1013 * directly via the legacy APIs for controlling powergates.
1015 clear_bit(id
, pmc
->powergates_available
);
1018 pg
->genpd
.name
= np
->name
;
1019 pg
->genpd
.power_off
= tegra_genpd_power_off
;
1020 pg
->genpd
.power_on
= tegra_genpd_power_on
;
1023 off
= !tegra_powergate_is_powered(pmc
, pg
->id
);
1025 err
= tegra_powergate_of_get_clks(pg
, np
);
1027 dev_err(dev
, "failed to get clocks for %pOFn: %d\n", np
, err
);
1031 err
= tegra_powergate_of_get_resets(pg
, np
, off
);
1033 dev_err(dev
, "failed to get resets for %pOFn: %d\n", np
, err
);
1037 if (!IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS
)) {
1039 WARN_ON(tegra_powergate_power_up(pg
, true));
1044 err
= pm_genpd_init(&pg
->genpd
, NULL
, off
);
1046 dev_err(dev
, "failed to initialise PM domain %pOFn: %d\n", np
,
1051 err
= of_genpd_add_provider_simple(np
, &pg
->genpd
);
1053 dev_err(dev
, "failed to add PM domain provider for %pOFn: %d\n",
1058 dev_dbg(dev
, "added PM domain %s\n", pg
->genpd
.name
);
1063 pm_genpd_remove(&pg
->genpd
);
1066 reset_control_put(pg
->reset
);
1069 while (pg
->num_clks
--)
1070 clk_put(pg
->clks
[pg
->num_clks
]);
1075 set_bit(id
, pmc
->powergates_available
);
1083 static int tegra_powergate_init(struct tegra_pmc
*pmc
,
1084 struct device_node
*parent
)
1086 struct device_node
*np
, *child
;
1089 np
= of_get_child_by_name(parent
, "powergates");
1093 for_each_child_of_node(np
, child
) {
1094 err
= tegra_powergate_add(pmc
, child
);
1106 static void tegra_powergate_remove(struct generic_pm_domain
*genpd
)
1108 struct tegra_powergate
*pg
= to_powergate(genpd
);
1110 reset_control_put(pg
->reset
);
1112 while (pg
->num_clks
--)
1113 clk_put(pg
->clks
[pg
->num_clks
]);
1117 set_bit(pg
->id
, pmc
->powergates_available
);
1122 static void tegra_powergate_remove_all(struct device_node
*parent
)
1124 struct generic_pm_domain
*genpd
;
1125 struct device_node
*np
, *child
;
1127 np
= of_get_child_by_name(parent
, "powergates");
1131 for_each_child_of_node(np
, child
) {
1132 of_genpd_del_provider(child
);
1134 genpd
= of_genpd_remove_last(child
);
1138 tegra_powergate_remove(genpd
);
1144 static const struct tegra_io_pad_soc
*
1145 tegra_io_pad_find(struct tegra_pmc
*pmc
, enum tegra_io_pad id
)
1149 for (i
= 0; i
< pmc
->soc
->num_io_pads
; i
++)
1150 if (pmc
->soc
->io_pads
[i
].id
== id
)
1151 return &pmc
->soc
->io_pads
[i
];
1156 static int tegra_io_pad_get_dpd_register_bit(struct tegra_pmc
*pmc
,
1157 enum tegra_io_pad id
,
1158 unsigned long *request
,
1159 unsigned long *status
,
1162 const struct tegra_io_pad_soc
*pad
;
1164 pad
= tegra_io_pad_find(pmc
, id
);
1166 dev_err(pmc
->dev
, "invalid I/O pad ID %u\n", id
);
1170 if (pad
->dpd
== UINT_MAX
)
1173 *mask
= BIT(pad
->dpd
% 32);
1175 if (pad
->dpd
< 32) {
1176 *status
= pmc
->soc
->regs
->dpd_status
;
1177 *request
= pmc
->soc
->regs
->dpd_req
;
1179 *status
= pmc
->soc
->regs
->dpd2_status
;
1180 *request
= pmc
->soc
->regs
->dpd2_req
;
1186 static int tegra_io_pad_prepare(struct tegra_pmc
*pmc
, enum tegra_io_pad id
,
1187 unsigned long *request
, unsigned long *status
,
1190 unsigned long rate
, value
;
1193 err
= tegra_io_pad_get_dpd_register_bit(pmc
, id
, request
, status
, mask
);
1198 rate
= clk_get_rate(pmc
->clk
);
1200 dev_err(pmc
->dev
, "failed to get clock rate\n");
1204 tegra_pmc_writel(pmc
, DPD_SAMPLE_ENABLE
, DPD_SAMPLE
);
1206 /* must be at least 200 ns, in APB (PCLK) clock cycles */
1207 value
= DIV_ROUND_UP(1000000000, rate
);
1208 value
= DIV_ROUND_UP(200, value
);
1209 tegra_pmc_writel(pmc
, value
, SEL_DPD_TIM
);
1215 static int tegra_io_pad_poll(struct tegra_pmc
*pmc
, unsigned long offset
,
1216 u32 mask
, u32 val
, unsigned long timeout
)
1220 timeout
= jiffies
+ msecs_to_jiffies(timeout
);
1222 while (time_after(timeout
, jiffies
)) {
1223 value
= tegra_pmc_readl(pmc
, offset
);
1224 if ((value
& mask
) == val
)
1227 usleep_range(250, 1000);
1233 static void tegra_io_pad_unprepare(struct tegra_pmc
*pmc
)
1236 tegra_pmc_writel(pmc
, DPD_SAMPLE_DISABLE
, DPD_SAMPLE
);
1240 * tegra_io_pad_power_enable() - enable power to I/O pad
1241 * @id: Tegra I/O pad ID for which to enable power
1243 * Returns: 0 on success or a negative error code on failure.
1245 int tegra_io_pad_power_enable(enum tegra_io_pad id
)
1247 unsigned long request
, status
;
1251 mutex_lock(&pmc
->powergates_lock
);
1253 err
= tegra_io_pad_prepare(pmc
, id
, &request
, &status
, &mask
);
1255 dev_err(pmc
->dev
, "failed to prepare I/O pad: %d\n", err
);
1259 tegra_pmc_writel(pmc
, IO_DPD_REQ_CODE_OFF
| mask
, request
);
1261 err
= tegra_io_pad_poll(pmc
, status
, mask
, 0, 250);
1263 dev_err(pmc
->dev
, "failed to enable I/O pad: %d\n", err
);
1267 tegra_io_pad_unprepare(pmc
);
1270 mutex_unlock(&pmc
->powergates_lock
);
1273 EXPORT_SYMBOL(tegra_io_pad_power_enable
);
1276 * tegra_io_pad_power_disable() - disable power to I/O pad
1277 * @id: Tegra I/O pad ID for which to disable power
1279 * Returns: 0 on success or a negative error code on failure.
1281 int tegra_io_pad_power_disable(enum tegra_io_pad id
)
1283 unsigned long request
, status
;
1287 mutex_lock(&pmc
->powergates_lock
);
1289 err
= tegra_io_pad_prepare(pmc
, id
, &request
, &status
, &mask
);
1291 dev_err(pmc
->dev
, "failed to prepare I/O pad: %d\n", err
);
1295 tegra_pmc_writel(pmc
, IO_DPD_REQ_CODE_ON
| mask
, request
);
1297 err
= tegra_io_pad_poll(pmc
, status
, mask
, mask
, 250);
1299 dev_err(pmc
->dev
, "failed to disable I/O pad: %d\n", err
);
1303 tegra_io_pad_unprepare(pmc
);
1306 mutex_unlock(&pmc
->powergates_lock
);
1309 EXPORT_SYMBOL(tegra_io_pad_power_disable
);
1311 static int tegra_io_pad_is_powered(struct tegra_pmc
*pmc
, enum tegra_io_pad id
)
1313 unsigned long request
, status
;
1317 err
= tegra_io_pad_get_dpd_register_bit(pmc
, id
, &request
, &status
,
1322 value
= tegra_pmc_readl(pmc
, status
);
1324 return !(value
& mask
);
1327 static int tegra_io_pad_set_voltage(struct tegra_pmc
*pmc
, enum tegra_io_pad id
,
1330 const struct tegra_io_pad_soc
*pad
;
1333 pad
= tegra_io_pad_find(pmc
, id
);
1337 if (pad
->voltage
== UINT_MAX
)
1340 mutex_lock(&pmc
->powergates_lock
);
1342 if (pmc
->soc
->has_impl_33v_pwr
) {
1343 value
= tegra_pmc_readl(pmc
, PMC_IMPL_E_33V_PWR
);
1345 if (voltage
== TEGRA_IO_PAD_VOLTAGE_1V8
)
1346 value
&= ~BIT(pad
->voltage
);
1348 value
|= BIT(pad
->voltage
);
1350 tegra_pmc_writel(pmc
, value
, PMC_IMPL_E_33V_PWR
);
1352 /* write-enable PMC_PWR_DET_VALUE[pad->voltage] */
1353 value
= tegra_pmc_readl(pmc
, PMC_PWR_DET
);
1354 value
|= BIT(pad
->voltage
);
1355 tegra_pmc_writel(pmc
, value
, PMC_PWR_DET
);
1357 /* update I/O voltage */
1358 value
= tegra_pmc_readl(pmc
, PMC_PWR_DET_VALUE
);
1360 if (voltage
== TEGRA_IO_PAD_VOLTAGE_1V8
)
1361 value
&= ~BIT(pad
->voltage
);
1363 value
|= BIT(pad
->voltage
);
1365 tegra_pmc_writel(pmc
, value
, PMC_PWR_DET_VALUE
);
1368 mutex_unlock(&pmc
->powergates_lock
);
1370 usleep_range(100, 250);
1375 static int tegra_io_pad_get_voltage(struct tegra_pmc
*pmc
, enum tegra_io_pad id
)
1377 const struct tegra_io_pad_soc
*pad
;
1380 pad
= tegra_io_pad_find(pmc
, id
);
1384 if (pad
->voltage
== UINT_MAX
)
1387 if (pmc
->soc
->has_impl_33v_pwr
)
1388 value
= tegra_pmc_readl(pmc
, PMC_IMPL_E_33V_PWR
);
1390 value
= tegra_pmc_readl(pmc
, PMC_PWR_DET_VALUE
);
1392 if ((value
& BIT(pad
->voltage
)) == 0)
1393 return TEGRA_IO_PAD_VOLTAGE_1V8
;
1395 return TEGRA_IO_PAD_VOLTAGE_3V3
;
1399 * tegra_io_rail_power_on() - enable power to I/O rail
1400 * @id: Tegra I/O pad ID for which to enable power
1402 * See also: tegra_io_pad_power_enable()
1404 int tegra_io_rail_power_on(unsigned int id
)
1406 return tegra_io_pad_power_enable(id
);
1408 EXPORT_SYMBOL(tegra_io_rail_power_on
);
1411 * tegra_io_rail_power_off() - disable power to I/O rail
1412 * @id: Tegra I/O pad ID for which to disable power
1414 * See also: tegra_io_pad_power_disable()
1416 int tegra_io_rail_power_off(unsigned int id
)
1418 return tegra_io_pad_power_disable(id
);
1420 EXPORT_SYMBOL(tegra_io_rail_power_off
);
1422 #ifdef CONFIG_PM_SLEEP
1423 enum tegra_suspend_mode
tegra_pmc_get_suspend_mode(void)
1425 return pmc
->suspend_mode
;
1428 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode
)
1430 if (mode
< TEGRA_SUSPEND_NONE
|| mode
>= TEGRA_MAX_SUSPEND_MODE
)
1433 pmc
->suspend_mode
= mode
;
1436 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode
)
1438 unsigned long long rate
= 0;
1442 case TEGRA_SUSPEND_LP1
:
1446 case TEGRA_SUSPEND_LP2
:
1447 rate
= clk_get_rate(pmc
->clk
);
1454 if (WARN_ON_ONCE(rate
== 0))
1457 if (rate
!= pmc
->rate
) {
1460 ticks
= pmc
->cpu_good_time
* rate
+ USEC_PER_SEC
- 1;
1461 do_div(ticks
, USEC_PER_SEC
);
1462 tegra_pmc_writel(pmc
, ticks
, PMC_CPUPWRGOOD_TIMER
);
1464 ticks
= pmc
->cpu_off_time
* rate
+ USEC_PER_SEC
- 1;
1465 do_div(ticks
, USEC_PER_SEC
);
1466 tegra_pmc_writel(pmc
, ticks
, PMC_CPUPWROFF_TIMER
);
1473 value
= tegra_pmc_readl(pmc
, PMC_CNTRL
);
1474 value
&= ~PMC_CNTRL_SIDE_EFFECT_LP0
;
1475 value
|= PMC_CNTRL_CPU_PWRREQ_OE
;
1476 tegra_pmc_writel(pmc
, value
, PMC_CNTRL
);
1480 static int tegra_pmc_parse_dt(struct tegra_pmc
*pmc
, struct device_node
*np
)
1482 u32 value
, values
[2];
1484 if (of_property_read_u32(np
, "nvidia,suspend-mode", &value
)) {
1488 pmc
->suspend_mode
= TEGRA_SUSPEND_LP0
;
1492 pmc
->suspend_mode
= TEGRA_SUSPEND_LP1
;
1496 pmc
->suspend_mode
= TEGRA_SUSPEND_LP2
;
1500 pmc
->suspend_mode
= TEGRA_SUSPEND_NONE
;
1505 pmc
->suspend_mode
= tegra_pm_validate_suspend_mode(pmc
->suspend_mode
);
1507 if (of_property_read_u32(np
, "nvidia,cpu-pwr-good-time", &value
))
1508 pmc
->suspend_mode
= TEGRA_SUSPEND_NONE
;
1510 pmc
->cpu_good_time
= value
;
1512 if (of_property_read_u32(np
, "nvidia,cpu-pwr-off-time", &value
))
1513 pmc
->suspend_mode
= TEGRA_SUSPEND_NONE
;
1515 pmc
->cpu_off_time
= value
;
1517 if (of_property_read_u32_array(np
, "nvidia,core-pwr-good-time",
1518 values
, ARRAY_SIZE(values
)))
1519 pmc
->suspend_mode
= TEGRA_SUSPEND_NONE
;
1521 pmc
->core_osc_time
= values
[0];
1522 pmc
->core_pmu_time
= values
[1];
1524 if (of_property_read_u32(np
, "nvidia,core-pwr-off-time", &value
))
1525 pmc
->suspend_mode
= TEGRA_SUSPEND_NONE
;
1527 pmc
->core_off_time
= value
;
1529 pmc
->corereq_high
= of_property_read_bool(np
,
1530 "nvidia,core-power-req-active-high");
1532 pmc
->sysclkreq_high
= of_property_read_bool(np
,
1533 "nvidia,sys-clock-req-active-high");
1535 pmc
->combined_req
= of_property_read_bool(np
,
1536 "nvidia,combined-power-req");
1538 pmc
->cpu_pwr_good_en
= of_property_read_bool(np
,
1539 "nvidia,cpu-pwr-good-en");
1541 if (of_property_read_u32_array(np
, "nvidia,lp0-vec", values
,
1542 ARRAY_SIZE(values
)))
1543 if (pmc
->suspend_mode
== TEGRA_SUSPEND_LP0
)
1544 pmc
->suspend_mode
= TEGRA_SUSPEND_LP1
;
1546 pmc
->lp0_vec_phys
= values
[0];
1547 pmc
->lp0_vec_size
= values
[1];
1552 static void tegra_pmc_init(struct tegra_pmc
*pmc
)
1555 pmc
->soc
->init(pmc
);
1558 static void tegra_pmc_init_tsense_reset(struct tegra_pmc
*pmc
)
1560 static const char disabled
[] = "emergency thermal reset disabled";
1561 u32 pmu_addr
, ctrl_id
, reg_addr
, reg_data
, pinmux
;
1562 struct device
*dev
= pmc
->dev
;
1563 struct device_node
*np
;
1564 u32 value
, checksum
;
1566 if (!pmc
->soc
->has_tsense_reset
)
1569 np
= of_get_child_by_name(pmc
->dev
->of_node
, "i2c-thermtrip");
1571 dev_warn(dev
, "i2c-thermtrip node not found, %s.\n", disabled
);
1575 if (of_property_read_u32(np
, "nvidia,i2c-controller-id", &ctrl_id
)) {
1576 dev_err(dev
, "I2C controller ID missing, %s.\n", disabled
);
1580 if (of_property_read_u32(np
, "nvidia,bus-addr", &pmu_addr
)) {
1581 dev_err(dev
, "nvidia,bus-addr missing, %s.\n", disabled
);
1585 if (of_property_read_u32(np
, "nvidia,reg-addr", ®_addr
)) {
1586 dev_err(dev
, "nvidia,reg-addr missing, %s.\n", disabled
);
1590 if (of_property_read_u32(np
, "nvidia,reg-data", ®_data
)) {
1591 dev_err(dev
, "nvidia,reg-data missing, %s.\n", disabled
);
1595 if (of_property_read_u32(np
, "nvidia,pinmux-id", &pinmux
))
1598 value
= tegra_pmc_readl(pmc
, PMC_SENSOR_CTRL
);
1599 value
|= PMC_SENSOR_CTRL_SCRATCH_WRITE
;
1600 tegra_pmc_writel(pmc
, value
, PMC_SENSOR_CTRL
);
1602 value
= (reg_data
<< PMC_SCRATCH54_DATA_SHIFT
) |
1603 (reg_addr
<< PMC_SCRATCH54_ADDR_SHIFT
);
1604 tegra_pmc_writel(pmc
, value
, PMC_SCRATCH54
);
1606 value
= PMC_SCRATCH55_RESET_TEGRA
;
1607 value
|= ctrl_id
<< PMC_SCRATCH55_CNTRL_ID_SHIFT
;
1608 value
|= pinmux
<< PMC_SCRATCH55_PINMUX_SHIFT
;
1609 value
|= pmu_addr
<< PMC_SCRATCH55_I2CSLV1_SHIFT
;
1612 * Calculate checksum of SCRATCH54, SCRATCH55 fields. Bits 23:16 will
1613 * contain the checksum and are currently zero, so they are not added.
1615 checksum
= reg_addr
+ reg_data
+ (value
& 0xff) + ((value
>> 8) & 0xff)
1616 + ((value
>> 24) & 0xff);
1618 checksum
= 0x100 - checksum
;
1620 value
|= checksum
<< PMC_SCRATCH55_CHECKSUM_SHIFT
;
1622 tegra_pmc_writel(pmc
, value
, PMC_SCRATCH55
);
1624 value
= tegra_pmc_readl(pmc
, PMC_SENSOR_CTRL
);
1625 value
|= PMC_SENSOR_CTRL_ENABLE_RST
;
1626 tegra_pmc_writel(pmc
, value
, PMC_SENSOR_CTRL
);
1628 dev_info(pmc
->dev
, "emergency thermal reset enabled\n");
1634 static int tegra_io_pad_pinctrl_get_groups_count(struct pinctrl_dev
*pctl_dev
)
1636 struct tegra_pmc
*pmc
= pinctrl_dev_get_drvdata(pctl_dev
);
1638 return pmc
->soc
->num_io_pads
;
1641 static const char *tegra_io_pad_pinctrl_get_group_name(struct pinctrl_dev
*pctl
,
1644 struct tegra_pmc
*pmc
= pinctrl_dev_get_drvdata(pctl
);
1646 return pmc
->soc
->io_pads
[group
].name
;
1649 static int tegra_io_pad_pinctrl_get_group_pins(struct pinctrl_dev
*pctl_dev
,
1651 const unsigned int **pins
,
1652 unsigned int *num_pins
)
1654 struct tegra_pmc
*pmc
= pinctrl_dev_get_drvdata(pctl_dev
);
1656 *pins
= &pmc
->soc
->io_pads
[group
].id
;
1662 static const struct pinctrl_ops tegra_io_pad_pinctrl_ops
= {
1663 .get_groups_count
= tegra_io_pad_pinctrl_get_groups_count
,
1664 .get_group_name
= tegra_io_pad_pinctrl_get_group_name
,
1665 .get_group_pins
= tegra_io_pad_pinctrl_get_group_pins
,
1666 .dt_node_to_map
= pinconf_generic_dt_node_to_map_pin
,
1667 .dt_free_map
= pinconf_generic_dt_free_map
,
1670 static int tegra_io_pad_pinconf_get(struct pinctrl_dev
*pctl_dev
,
1671 unsigned int pin
, unsigned long *config
)
1673 enum pin_config_param param
= pinconf_to_config_param(*config
);
1674 struct tegra_pmc
*pmc
= pinctrl_dev_get_drvdata(pctl_dev
);
1675 const struct tegra_io_pad_soc
*pad
;
1679 pad
= tegra_io_pad_find(pmc
, pin
);
1684 case PIN_CONFIG_POWER_SOURCE
:
1685 ret
= tegra_io_pad_get_voltage(pmc
, pad
->id
);
1692 case PIN_CONFIG_LOW_POWER_MODE
:
1693 ret
= tegra_io_pad_is_powered(pmc
, pad
->id
);
1704 *config
= pinconf_to_config_packed(param
, arg
);
1709 static int tegra_io_pad_pinconf_set(struct pinctrl_dev
*pctl_dev
,
1710 unsigned int pin
, unsigned long *configs
,
1711 unsigned int num_configs
)
1713 struct tegra_pmc
*pmc
= pinctrl_dev_get_drvdata(pctl_dev
);
1714 const struct tegra_io_pad_soc
*pad
;
1715 enum pin_config_param param
;
1720 pad
= tegra_io_pad_find(pmc
, pin
);
1724 for (i
= 0; i
< num_configs
; ++i
) {
1725 param
= pinconf_to_config_param(configs
[i
]);
1726 arg
= pinconf_to_config_argument(configs
[i
]);
1729 case PIN_CONFIG_LOW_POWER_MODE
:
1731 err
= tegra_io_pad_power_disable(pad
->id
);
1733 err
= tegra_io_pad_power_enable(pad
->id
);
1737 case PIN_CONFIG_POWER_SOURCE
:
1738 if (arg
!= TEGRA_IO_PAD_VOLTAGE_1V8
&&
1739 arg
!= TEGRA_IO_PAD_VOLTAGE_3V3
)
1741 err
= tegra_io_pad_set_voltage(pmc
, pad
->id
, arg
);
1753 static const struct pinconf_ops tegra_io_pad_pinconf_ops
= {
1754 .pin_config_get
= tegra_io_pad_pinconf_get
,
1755 .pin_config_set
= tegra_io_pad_pinconf_set
,
1759 static struct pinctrl_desc tegra_pmc_pctl_desc
= {
1760 .pctlops
= &tegra_io_pad_pinctrl_ops
,
1761 .confops
= &tegra_io_pad_pinconf_ops
,
1764 static int tegra_pmc_pinctrl_init(struct tegra_pmc
*pmc
)
1768 if (!pmc
->soc
->num_pin_descs
)
1771 tegra_pmc_pctl_desc
.name
= dev_name(pmc
->dev
);
1772 tegra_pmc_pctl_desc
.pins
= pmc
->soc
->pin_descs
;
1773 tegra_pmc_pctl_desc
.npins
= pmc
->soc
->num_pin_descs
;
1775 pmc
->pctl_dev
= devm_pinctrl_register(pmc
->dev
, &tegra_pmc_pctl_desc
,
1777 if (IS_ERR(pmc
->pctl_dev
)) {
1778 err
= PTR_ERR(pmc
->pctl_dev
);
1779 dev_err(pmc
->dev
, "failed to register pin controller: %d\n",
1787 static ssize_t
reset_reason_show(struct device
*dev
,
1788 struct device_attribute
*attr
, char *buf
)
1792 value
= tegra_pmc_readl(pmc
, pmc
->soc
->regs
->rst_status
);
1793 value
&= pmc
->soc
->regs
->rst_source_mask
;
1794 value
>>= pmc
->soc
->regs
->rst_source_shift
;
1796 if (WARN_ON(value
>= pmc
->soc
->num_reset_sources
))
1797 return sprintf(buf
, "%s\n", "UNKNOWN");
1799 return sprintf(buf
, "%s\n", pmc
->soc
->reset_sources
[value
]);
1802 static DEVICE_ATTR_RO(reset_reason
);
1804 static ssize_t
reset_level_show(struct device
*dev
,
1805 struct device_attribute
*attr
, char *buf
)
1809 value
= tegra_pmc_readl(pmc
, pmc
->soc
->regs
->rst_status
);
1810 value
&= pmc
->soc
->regs
->rst_level_mask
;
1811 value
>>= pmc
->soc
->regs
->rst_level_shift
;
1813 if (WARN_ON(value
>= pmc
->soc
->num_reset_levels
))
1814 return sprintf(buf
, "%s\n", "UNKNOWN");
1816 return sprintf(buf
, "%s\n", pmc
->soc
->reset_levels
[value
]);
1819 static DEVICE_ATTR_RO(reset_level
);
1821 static void tegra_pmc_reset_sysfs_init(struct tegra_pmc
*pmc
)
1823 struct device
*dev
= pmc
->dev
;
1826 if (pmc
->soc
->reset_sources
) {
1827 err
= device_create_file(dev
, &dev_attr_reset_reason
);
1830 "failed to create attr \"reset_reason\": %d\n",
1834 if (pmc
->soc
->reset_levels
) {
1835 err
= device_create_file(dev
, &dev_attr_reset_level
);
1838 "failed to create attr \"reset_level\": %d\n",
1843 static int tegra_pmc_irq_translate(struct irq_domain
*domain
,
1844 struct irq_fwspec
*fwspec
,
1845 unsigned long *hwirq
,
1848 if (WARN_ON(fwspec
->param_count
< 2))
1851 *hwirq
= fwspec
->param
[0];
1852 *type
= fwspec
->param
[1];
1857 static int tegra_pmc_irq_alloc(struct irq_domain
*domain
, unsigned int virq
,
1858 unsigned int num_irqs
, void *data
)
1860 struct tegra_pmc
*pmc
= domain
->host_data
;
1861 const struct tegra_pmc_soc
*soc
= pmc
->soc
;
1862 struct irq_fwspec
*fwspec
= data
;
1866 for (i
= 0; i
< soc
->num_wake_events
; i
++) {
1867 const struct tegra_wake_event
*event
= &soc
->wake_events
[i
];
1869 if (fwspec
->param_count
== 2) {
1870 struct irq_fwspec spec
;
1872 if (event
->id
!= fwspec
->param
[0])
1875 err
= irq_domain_set_hwirq_and_chip(domain
, virq
,
1881 spec
.fwnode
= &pmc
->dev
->of_node
->fwnode
;
1882 spec
.param_count
= 3;
1883 spec
.param
[0] = GIC_SPI
;
1884 spec
.param
[1] = event
->irq
;
1885 spec
.param
[2] = fwspec
->param
[1];
1887 err
= irq_domain_alloc_irqs_parent(domain
, virq
,
1893 if (fwspec
->param_count
== 3) {
1894 if (event
->gpio
.instance
!= fwspec
->param
[0] ||
1895 event
->gpio
.pin
!= fwspec
->param
[1])
1898 err
= irq_domain_set_hwirq_and_chip(domain
, virq
,
1906 if (i
== soc
->num_wake_events
)
1907 err
= irq_domain_set_hwirq_and_chip(domain
, virq
, ULONG_MAX
,
1913 static const struct irq_domain_ops tegra_pmc_irq_domain_ops
= {
1914 .translate
= tegra_pmc_irq_translate
,
1915 .alloc
= tegra_pmc_irq_alloc
,
1918 static int tegra_pmc_irq_set_wake(struct irq_data
*data
, unsigned int on
)
1920 struct tegra_pmc
*pmc
= irq_data_get_irq_chip_data(data
);
1921 unsigned int offset
, bit
;
1924 offset
= data
->hwirq
/ 32;
1925 bit
= data
->hwirq
% 32;
1927 /* clear wake status */
1928 writel(0x1, pmc
->wake
+ WAKE_AOWAKE_STATUS_W(data
->hwirq
));
1930 /* route wake to tier 2 */
1931 value
= readl(pmc
->wake
+ WAKE_AOWAKE_TIER2_ROUTING(offset
));
1934 value
&= ~(1 << bit
);
1938 writel(value
, pmc
->wake
+ WAKE_AOWAKE_TIER2_ROUTING(offset
));
1940 /* enable wakeup event */
1941 writel(!!on
, pmc
->wake
+ WAKE_AOWAKE_MASK_W(data
->hwirq
));
1946 static int tegra_pmc_irq_set_type(struct irq_data
*data
, unsigned int type
)
1948 struct tegra_pmc
*pmc
= irq_data_get_irq_chip_data(data
);
1951 if (data
->hwirq
== ULONG_MAX
)
1954 value
= readl(pmc
->wake
+ WAKE_AOWAKE_CNTRL(data
->hwirq
));
1957 case IRQ_TYPE_EDGE_RISING
:
1958 case IRQ_TYPE_LEVEL_HIGH
:
1959 value
|= WAKE_AOWAKE_CNTRL_LEVEL
;
1962 case IRQ_TYPE_EDGE_FALLING
:
1963 case IRQ_TYPE_LEVEL_LOW
:
1964 value
&= ~WAKE_AOWAKE_CNTRL_LEVEL
;
1967 case IRQ_TYPE_EDGE_RISING
| IRQ_TYPE_EDGE_FALLING
:
1968 value
^= WAKE_AOWAKE_CNTRL_LEVEL
;
1975 writel(value
, pmc
->wake
+ WAKE_AOWAKE_CNTRL(data
->hwirq
));
1980 static int tegra_pmc_irq_init(struct tegra_pmc
*pmc
)
1982 struct irq_domain
*parent
= NULL
;
1983 struct device_node
*np
;
1985 np
= of_irq_find_parent(pmc
->dev
->of_node
);
1987 parent
= irq_find_host(np
);
1994 pmc
->irq
.name
= dev_name(pmc
->dev
);
1995 pmc
->irq
.irq_mask
= irq_chip_mask_parent
;
1996 pmc
->irq
.irq_unmask
= irq_chip_unmask_parent
;
1997 pmc
->irq
.irq_eoi
= irq_chip_eoi_parent
;
1998 pmc
->irq
.irq_set_affinity
= irq_chip_set_affinity_parent
;
1999 pmc
->irq
.irq_set_type
= tegra_pmc_irq_set_type
;
2000 pmc
->irq
.irq_set_wake
= tegra_pmc_irq_set_wake
;
2002 pmc
->domain
= irq_domain_add_hierarchy(parent
, 0, 96, pmc
->dev
->of_node
,
2003 &tegra_pmc_irq_domain_ops
, pmc
);
2005 dev_err(pmc
->dev
, "failed to allocate domain\n");
2012 static int tegra_pmc_probe(struct platform_device
*pdev
)
2015 struct resource
*res
;
2019 * Early initialisation should have configured an initial
2020 * register mapping and setup the soc data pointer. If these
2021 * are not valid then something went badly wrong!
2023 if (WARN_ON(!pmc
->base
|| !pmc
->soc
))
2026 err
= tegra_pmc_parse_dt(pmc
, pdev
->dev
.of_node
);
2030 /* take over the memory region from the early initialization */
2031 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2032 base
= devm_ioremap_resource(&pdev
->dev
, res
);
2034 return PTR_ERR(base
);
2036 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "wake");
2038 pmc
->wake
= devm_ioremap_resource(&pdev
->dev
, res
);
2039 if (IS_ERR(pmc
->wake
))
2040 return PTR_ERR(pmc
->wake
);
2045 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "aotag");
2047 pmc
->aotag
= devm_ioremap_resource(&pdev
->dev
, res
);
2048 if (IS_ERR(pmc
->aotag
))
2049 return PTR_ERR(pmc
->aotag
);
2054 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "scratch");
2056 pmc
->scratch
= devm_ioremap_resource(&pdev
->dev
, res
);
2057 if (IS_ERR(pmc
->scratch
))
2058 return PTR_ERR(pmc
->scratch
);
2060 pmc
->scratch
= base
;
2063 pmc
->clk
= devm_clk_get(&pdev
->dev
, "pclk");
2064 if (IS_ERR(pmc
->clk
)) {
2065 err
= PTR_ERR(pmc
->clk
);
2067 if (err
!= -ENOENT
) {
2068 dev_err(&pdev
->dev
, "failed to get pclk: %d\n", err
);
2075 pmc
->dev
= &pdev
->dev
;
2077 tegra_pmc_init(pmc
);
2079 tegra_pmc_init_tsense_reset(pmc
);
2081 tegra_pmc_reset_sysfs_init(pmc
);
2083 if (IS_ENABLED(CONFIG_DEBUG_FS
)) {
2084 err
= tegra_powergate_debugfs_init();
2089 err
= register_restart_handler(&tegra_pmc_restart_handler
);
2091 dev_err(&pdev
->dev
, "unable to register restart handler, %d\n",
2093 goto cleanup_debugfs
;
2096 err
= tegra_pmc_pinctrl_init(pmc
);
2098 goto cleanup_restart_handler
;
2100 err
= tegra_powergate_init(pmc
, pdev
->dev
.of_node
);
2102 goto cleanup_powergates
;
2104 err
= tegra_pmc_irq_init(pmc
);
2106 goto cleanup_powergates
;
2108 mutex_lock(&pmc
->powergates_lock
);
2111 mutex_unlock(&pmc
->powergates_lock
);
2113 platform_set_drvdata(pdev
, pmc
);
2118 tegra_powergate_remove_all(pdev
->dev
.of_node
);
2119 cleanup_restart_handler
:
2120 unregister_restart_handler(&tegra_pmc_restart_handler
);
2122 debugfs_remove(pmc
->debugfs
);
2124 device_remove_file(&pdev
->dev
, &dev_attr_reset_reason
);
2125 device_remove_file(&pdev
->dev
, &dev_attr_reset_level
);
2129 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
2130 static int tegra_pmc_suspend(struct device
*dev
)
2132 struct tegra_pmc
*pmc
= dev_get_drvdata(dev
);
2134 tegra_pmc_writel(pmc
, virt_to_phys(tegra_resume
), PMC_SCRATCH41
);
2139 static int tegra_pmc_resume(struct device
*dev
)
2141 struct tegra_pmc
*pmc
= dev_get_drvdata(dev
);
2143 tegra_pmc_writel(pmc
, 0x0, PMC_SCRATCH41
);
2148 static SIMPLE_DEV_PM_OPS(tegra_pmc_pm_ops
, tegra_pmc_suspend
, tegra_pmc_resume
);
2152 static const char * const tegra20_powergates
[] = {
2153 [TEGRA_POWERGATE_CPU
] = "cpu",
2154 [TEGRA_POWERGATE_3D
] = "3d",
2155 [TEGRA_POWERGATE_VENC
] = "venc",
2156 [TEGRA_POWERGATE_VDEC
] = "vdec",
2157 [TEGRA_POWERGATE_PCIE
] = "pcie",
2158 [TEGRA_POWERGATE_L2
] = "l2",
2159 [TEGRA_POWERGATE_MPE
] = "mpe",
2162 static const struct tegra_pmc_regs tegra20_pmc_regs
= {
2165 .dpd_status
= 0x1bc,
2167 .dpd2_status
= 0x1c4,
2168 .rst_status
= 0x1b4,
2169 .rst_source_shift
= 0x0,
2170 .rst_source_mask
= 0x7,
2171 .rst_level_shift
= 0x0,
2172 .rst_level_mask
= 0x0,
2175 static void tegra20_pmc_init(struct tegra_pmc
*pmc
)
2179 /* Always enable CPU power request */
2180 value
= tegra_pmc_readl(pmc
, PMC_CNTRL
);
2181 value
|= PMC_CNTRL_CPU_PWRREQ_OE
;
2182 tegra_pmc_writel(pmc
, value
, PMC_CNTRL
);
2184 value
= tegra_pmc_readl(pmc
, PMC_CNTRL
);
2186 if (pmc
->sysclkreq_high
)
2187 value
&= ~PMC_CNTRL_SYSCLK_POLARITY
;
2189 value
|= PMC_CNTRL_SYSCLK_POLARITY
;
2191 /* configure the output polarity while the request is tristated */
2192 tegra_pmc_writel(pmc
, value
, PMC_CNTRL
);
2194 /* now enable the request */
2195 value
= tegra_pmc_readl(pmc
, PMC_CNTRL
);
2196 value
|= PMC_CNTRL_SYSCLK_OE
;
2197 tegra_pmc_writel(pmc
, value
, PMC_CNTRL
);
2200 static void tegra20_pmc_setup_irq_polarity(struct tegra_pmc
*pmc
,
2201 struct device_node
*np
,
2206 value
= tegra_pmc_readl(pmc
, PMC_CNTRL
);
2209 value
|= PMC_CNTRL_INTR_POLARITY
;
2211 value
&= ~PMC_CNTRL_INTR_POLARITY
;
2213 tegra_pmc_writel(pmc
, value
, PMC_CNTRL
);
2216 static const struct tegra_pmc_soc tegra20_pmc_soc
= {
2217 .num_powergates
= ARRAY_SIZE(tegra20_powergates
),
2218 .powergates
= tegra20_powergates
,
2219 .num_cpu_powergates
= 0,
2220 .cpu_powergates
= NULL
,
2221 .has_tsense_reset
= false,
2222 .has_gpu_clamps
= false,
2223 .needs_mbist_war
= false,
2224 .has_impl_33v_pwr
= false,
2225 .maybe_tz_only
= false,
2230 .regs
= &tegra20_pmc_regs
,
2231 .init
= tegra20_pmc_init
,
2232 .setup_irq_polarity
= tegra20_pmc_setup_irq_polarity
,
2233 .reset_sources
= NULL
,
2234 .num_reset_sources
= 0,
2235 .reset_levels
= NULL
,
2236 .num_reset_levels
= 0,
2239 static const char * const tegra30_powergates
[] = {
2240 [TEGRA_POWERGATE_CPU
] = "cpu0",
2241 [TEGRA_POWERGATE_3D
] = "3d0",
2242 [TEGRA_POWERGATE_VENC
] = "venc",
2243 [TEGRA_POWERGATE_VDEC
] = "vdec",
2244 [TEGRA_POWERGATE_PCIE
] = "pcie",
2245 [TEGRA_POWERGATE_L2
] = "l2",
2246 [TEGRA_POWERGATE_MPE
] = "mpe",
2247 [TEGRA_POWERGATE_HEG
] = "heg",
2248 [TEGRA_POWERGATE_SATA
] = "sata",
2249 [TEGRA_POWERGATE_CPU1
] = "cpu1",
2250 [TEGRA_POWERGATE_CPU2
] = "cpu2",
2251 [TEGRA_POWERGATE_CPU3
] = "cpu3",
2252 [TEGRA_POWERGATE_CELP
] = "celp",
2253 [TEGRA_POWERGATE_3D1
] = "3d1",
2256 static const u8 tegra30_cpu_powergates
[] = {
2257 TEGRA_POWERGATE_CPU
,
2258 TEGRA_POWERGATE_CPU1
,
2259 TEGRA_POWERGATE_CPU2
,
2260 TEGRA_POWERGATE_CPU3
,
2263 static const struct tegra_pmc_soc tegra30_pmc_soc
= {
2264 .num_powergates
= ARRAY_SIZE(tegra30_powergates
),
2265 .powergates
= tegra30_powergates
,
2266 .num_cpu_powergates
= ARRAY_SIZE(tegra30_cpu_powergates
),
2267 .cpu_powergates
= tegra30_cpu_powergates
,
2268 .has_tsense_reset
= true,
2269 .has_gpu_clamps
= false,
2270 .needs_mbist_war
= false,
2271 .has_impl_33v_pwr
= false,
2272 .maybe_tz_only
= false,
2277 .regs
= &tegra20_pmc_regs
,
2278 .init
= tegra20_pmc_init
,
2279 .setup_irq_polarity
= tegra20_pmc_setup_irq_polarity
,
2280 .reset_sources
= tegra30_reset_sources
,
2281 .num_reset_sources
= ARRAY_SIZE(tegra30_reset_sources
),
2282 .reset_levels
= NULL
,
2283 .num_reset_levels
= 0,
2286 static const char * const tegra114_powergates
[] = {
2287 [TEGRA_POWERGATE_CPU
] = "crail",
2288 [TEGRA_POWERGATE_3D
] = "3d",
2289 [TEGRA_POWERGATE_VENC
] = "venc",
2290 [TEGRA_POWERGATE_VDEC
] = "vdec",
2291 [TEGRA_POWERGATE_MPE
] = "mpe",
2292 [TEGRA_POWERGATE_HEG
] = "heg",
2293 [TEGRA_POWERGATE_CPU1
] = "cpu1",
2294 [TEGRA_POWERGATE_CPU2
] = "cpu2",
2295 [TEGRA_POWERGATE_CPU3
] = "cpu3",
2296 [TEGRA_POWERGATE_CELP
] = "celp",
2297 [TEGRA_POWERGATE_CPU0
] = "cpu0",
2298 [TEGRA_POWERGATE_C0NC
] = "c0nc",
2299 [TEGRA_POWERGATE_C1NC
] = "c1nc",
2300 [TEGRA_POWERGATE_DIS
] = "dis",
2301 [TEGRA_POWERGATE_DISB
] = "disb",
2302 [TEGRA_POWERGATE_XUSBA
] = "xusba",
2303 [TEGRA_POWERGATE_XUSBB
] = "xusbb",
2304 [TEGRA_POWERGATE_XUSBC
] = "xusbc",
2307 static const u8 tegra114_cpu_powergates
[] = {
2308 TEGRA_POWERGATE_CPU0
,
2309 TEGRA_POWERGATE_CPU1
,
2310 TEGRA_POWERGATE_CPU2
,
2311 TEGRA_POWERGATE_CPU3
,
2314 static const struct tegra_pmc_soc tegra114_pmc_soc
= {
2315 .num_powergates
= ARRAY_SIZE(tegra114_powergates
),
2316 .powergates
= tegra114_powergates
,
2317 .num_cpu_powergates
= ARRAY_SIZE(tegra114_cpu_powergates
),
2318 .cpu_powergates
= tegra114_cpu_powergates
,
2319 .has_tsense_reset
= true,
2320 .has_gpu_clamps
= false,
2321 .needs_mbist_war
= false,
2322 .has_impl_33v_pwr
= false,
2323 .maybe_tz_only
= false,
2328 .regs
= &tegra20_pmc_regs
,
2329 .init
= tegra20_pmc_init
,
2330 .setup_irq_polarity
= tegra20_pmc_setup_irq_polarity
,
2331 .reset_sources
= tegra30_reset_sources
,
2332 .num_reset_sources
= ARRAY_SIZE(tegra30_reset_sources
),
2333 .reset_levels
= NULL
,
2334 .num_reset_levels
= 0,
2337 static const char * const tegra124_powergates
[] = {
2338 [TEGRA_POWERGATE_CPU
] = "crail",
2339 [TEGRA_POWERGATE_3D
] = "3d",
2340 [TEGRA_POWERGATE_VENC
] = "venc",
2341 [TEGRA_POWERGATE_PCIE
] = "pcie",
2342 [TEGRA_POWERGATE_VDEC
] = "vdec",
2343 [TEGRA_POWERGATE_MPE
] = "mpe",
2344 [TEGRA_POWERGATE_HEG
] = "heg",
2345 [TEGRA_POWERGATE_SATA
] = "sata",
2346 [TEGRA_POWERGATE_CPU1
] = "cpu1",
2347 [TEGRA_POWERGATE_CPU2
] = "cpu2",
2348 [TEGRA_POWERGATE_CPU3
] = "cpu3",
2349 [TEGRA_POWERGATE_CELP
] = "celp",
2350 [TEGRA_POWERGATE_CPU0
] = "cpu0",
2351 [TEGRA_POWERGATE_C0NC
] = "c0nc",
2352 [TEGRA_POWERGATE_C1NC
] = "c1nc",
2353 [TEGRA_POWERGATE_SOR
] = "sor",
2354 [TEGRA_POWERGATE_DIS
] = "dis",
2355 [TEGRA_POWERGATE_DISB
] = "disb",
2356 [TEGRA_POWERGATE_XUSBA
] = "xusba",
2357 [TEGRA_POWERGATE_XUSBB
] = "xusbb",
2358 [TEGRA_POWERGATE_XUSBC
] = "xusbc",
2359 [TEGRA_POWERGATE_VIC
] = "vic",
2360 [TEGRA_POWERGATE_IRAM
] = "iram",
2363 static const u8 tegra124_cpu_powergates
[] = {
2364 TEGRA_POWERGATE_CPU0
,
2365 TEGRA_POWERGATE_CPU1
,
2366 TEGRA_POWERGATE_CPU2
,
2367 TEGRA_POWERGATE_CPU3
,
2370 #define TEGRA_IO_PAD(_id, _dpd, _voltage, _name) \
2371 ((struct tegra_io_pad_soc) { \
2374 .voltage = (_voltage), \
2378 #define TEGRA_IO_PIN_DESC(_id, _dpd, _voltage, _name) \
2379 ((struct pinctrl_pin_desc) { \
2384 #define TEGRA124_IO_PAD_TABLE(_pad) \
2385 /* .id .dpd .voltage .name */ \
2386 _pad(TEGRA_IO_PAD_AUDIO, 17, UINT_MAX, "audio"), \
2387 _pad(TEGRA_IO_PAD_BB, 15, UINT_MAX, "bb"), \
2388 _pad(TEGRA_IO_PAD_CAM, 36, UINT_MAX, "cam"), \
2389 _pad(TEGRA_IO_PAD_COMP, 22, UINT_MAX, "comp"), \
2390 _pad(TEGRA_IO_PAD_CSIA, 0, UINT_MAX, "csia"), \
2391 _pad(TEGRA_IO_PAD_CSIB, 1, UINT_MAX, "csb"), \
2392 _pad(TEGRA_IO_PAD_CSIE, 44, UINT_MAX, "cse"), \
2393 _pad(TEGRA_IO_PAD_DSI, 2, UINT_MAX, "dsi"), \
2394 _pad(TEGRA_IO_PAD_DSIB, 39, UINT_MAX, "dsib"), \
2395 _pad(TEGRA_IO_PAD_DSIC, 40, UINT_MAX, "dsic"), \
2396 _pad(TEGRA_IO_PAD_DSID, 41, UINT_MAX, "dsid"), \
2397 _pad(TEGRA_IO_PAD_HDMI, 28, UINT_MAX, "hdmi"), \
2398 _pad(TEGRA_IO_PAD_HSIC, 19, UINT_MAX, "hsic"), \
2399 _pad(TEGRA_IO_PAD_HV, 38, UINT_MAX, "hv"), \
2400 _pad(TEGRA_IO_PAD_LVDS, 57, UINT_MAX, "lvds"), \
2401 _pad(TEGRA_IO_PAD_MIPI_BIAS, 3, UINT_MAX, "mipi-bias"), \
2402 _pad(TEGRA_IO_PAD_NAND, 13, UINT_MAX, "nand"), \
2403 _pad(TEGRA_IO_PAD_PEX_BIAS, 4, UINT_MAX, "pex-bias"), \
2404 _pad(TEGRA_IO_PAD_PEX_CLK1, 5, UINT_MAX, "pex-clk1"), \
2405 _pad(TEGRA_IO_PAD_PEX_CLK2, 6, UINT_MAX, "pex-clk2"), \
2406 _pad(TEGRA_IO_PAD_PEX_CNTRL, 32, UINT_MAX, "pex-cntrl"), \
2407 _pad(TEGRA_IO_PAD_SDMMC1, 33, UINT_MAX, "sdmmc1"), \
2408 _pad(TEGRA_IO_PAD_SDMMC3, 34, UINT_MAX, "sdmmc3"), \
2409 _pad(TEGRA_IO_PAD_SDMMC4, 35, UINT_MAX, "sdmmc4"), \
2410 _pad(TEGRA_IO_PAD_SYS_DDC, 58, UINT_MAX, "sys_ddc"), \
2411 _pad(TEGRA_IO_PAD_UART, 14, UINT_MAX, "uart"), \
2412 _pad(TEGRA_IO_PAD_USB0, 9, UINT_MAX, "usb0"), \
2413 _pad(TEGRA_IO_PAD_USB1, 10, UINT_MAX, "usb1"), \
2414 _pad(TEGRA_IO_PAD_USB2, 11, UINT_MAX, "usb2"), \
2415 _pad(TEGRA_IO_PAD_USB_BIAS, 12, UINT_MAX, "usb_bias")
2417 static const struct tegra_io_pad_soc tegra124_io_pads
[] = {
2418 TEGRA124_IO_PAD_TABLE(TEGRA_IO_PAD
)
2421 static const struct pinctrl_pin_desc tegra124_pin_descs
[] = {
2422 TEGRA124_IO_PAD_TABLE(TEGRA_IO_PIN_DESC
)
2425 static const struct tegra_pmc_soc tegra124_pmc_soc
= {
2426 .num_powergates
= ARRAY_SIZE(tegra124_powergates
),
2427 .powergates
= tegra124_powergates
,
2428 .num_cpu_powergates
= ARRAY_SIZE(tegra124_cpu_powergates
),
2429 .cpu_powergates
= tegra124_cpu_powergates
,
2430 .has_tsense_reset
= true,
2431 .has_gpu_clamps
= true,
2432 .needs_mbist_war
= false,
2433 .has_impl_33v_pwr
= false,
2434 .maybe_tz_only
= false,
2435 .num_io_pads
= ARRAY_SIZE(tegra124_io_pads
),
2436 .io_pads
= tegra124_io_pads
,
2437 .num_pin_descs
= ARRAY_SIZE(tegra124_pin_descs
),
2438 .pin_descs
= tegra124_pin_descs
,
2439 .regs
= &tegra20_pmc_regs
,
2440 .init
= tegra20_pmc_init
,
2441 .setup_irq_polarity
= tegra20_pmc_setup_irq_polarity
,
2442 .reset_sources
= tegra30_reset_sources
,
2443 .num_reset_sources
= ARRAY_SIZE(tegra30_reset_sources
),
2444 .reset_levels
= NULL
,
2445 .num_reset_levels
= 0,
2448 static const char * const tegra210_powergates
[] = {
2449 [TEGRA_POWERGATE_CPU
] = "crail",
2450 [TEGRA_POWERGATE_3D
] = "3d",
2451 [TEGRA_POWERGATE_VENC
] = "venc",
2452 [TEGRA_POWERGATE_PCIE
] = "pcie",
2453 [TEGRA_POWERGATE_MPE
] = "mpe",
2454 [TEGRA_POWERGATE_SATA
] = "sata",
2455 [TEGRA_POWERGATE_CPU1
] = "cpu1",
2456 [TEGRA_POWERGATE_CPU2
] = "cpu2",
2457 [TEGRA_POWERGATE_CPU3
] = "cpu3",
2458 [TEGRA_POWERGATE_CPU0
] = "cpu0",
2459 [TEGRA_POWERGATE_C0NC
] = "c0nc",
2460 [TEGRA_POWERGATE_SOR
] = "sor",
2461 [TEGRA_POWERGATE_DIS
] = "dis",
2462 [TEGRA_POWERGATE_DISB
] = "disb",
2463 [TEGRA_POWERGATE_XUSBA
] = "xusba",
2464 [TEGRA_POWERGATE_XUSBB
] = "xusbb",
2465 [TEGRA_POWERGATE_XUSBC
] = "xusbc",
2466 [TEGRA_POWERGATE_VIC
] = "vic",
2467 [TEGRA_POWERGATE_IRAM
] = "iram",
2468 [TEGRA_POWERGATE_NVDEC
] = "nvdec",
2469 [TEGRA_POWERGATE_NVJPG
] = "nvjpg",
2470 [TEGRA_POWERGATE_AUD
] = "aud",
2471 [TEGRA_POWERGATE_DFD
] = "dfd",
2472 [TEGRA_POWERGATE_VE2
] = "ve2",
2475 static const u8 tegra210_cpu_powergates
[] = {
2476 TEGRA_POWERGATE_CPU0
,
2477 TEGRA_POWERGATE_CPU1
,
2478 TEGRA_POWERGATE_CPU2
,
2479 TEGRA_POWERGATE_CPU3
,
2482 #define TEGRA210_IO_PAD_TABLE(_pad) \
2483 /* .id .dpd .voltage .name */ \
2484 _pad(TEGRA_IO_PAD_AUDIO, 17, 5, "audio"), \
2485 _pad(TEGRA_IO_PAD_AUDIO_HV, 61, 18, "audio-hv"), \
2486 _pad(TEGRA_IO_PAD_CAM, 36, 10, "cam"), \
2487 _pad(TEGRA_IO_PAD_CSIA, 0, UINT_MAX, "csia"), \
2488 _pad(TEGRA_IO_PAD_CSIB, 1, UINT_MAX, "csib"), \
2489 _pad(TEGRA_IO_PAD_CSIC, 42, UINT_MAX, "csic"), \
2490 _pad(TEGRA_IO_PAD_CSID, 43, UINT_MAX, "csid"), \
2491 _pad(TEGRA_IO_PAD_CSIE, 44, UINT_MAX, "csie"), \
2492 _pad(TEGRA_IO_PAD_CSIF, 45, UINT_MAX, "csif"), \
2493 _pad(TEGRA_IO_PAD_DBG, 25, 19, "dbg"), \
2494 _pad(TEGRA_IO_PAD_DEBUG_NONAO, 26, UINT_MAX, "debug-nonao"), \
2495 _pad(TEGRA_IO_PAD_DMIC, 50, 20, "dmic"), \
2496 _pad(TEGRA_IO_PAD_DP, 51, UINT_MAX, "dp"), \
2497 _pad(TEGRA_IO_PAD_DSI, 2, UINT_MAX, "dsi"), \
2498 _pad(TEGRA_IO_PAD_DSIB, 39, UINT_MAX, "dsib"), \
2499 _pad(TEGRA_IO_PAD_DSIC, 40, UINT_MAX, "dsic"), \
2500 _pad(TEGRA_IO_PAD_DSID, 41, UINT_MAX, "dsid"), \
2501 _pad(TEGRA_IO_PAD_EMMC, 35, UINT_MAX, "emmc"), \
2502 _pad(TEGRA_IO_PAD_EMMC2, 37, UINT_MAX, "emmc2"), \
2503 _pad(TEGRA_IO_PAD_GPIO, 27, 21, "gpio"), \
2504 _pad(TEGRA_IO_PAD_HDMI, 28, UINT_MAX, "hdmi"), \
2505 _pad(TEGRA_IO_PAD_HSIC, 19, UINT_MAX, "hsic"), \
2506 _pad(TEGRA_IO_PAD_LVDS, 57, UINT_MAX, "lvds"), \
2507 _pad(TEGRA_IO_PAD_MIPI_BIAS, 3, UINT_MAX, "mipi-bias"), \
2508 _pad(TEGRA_IO_PAD_PEX_BIAS, 4, UINT_MAX, "pex-bias"), \
2509 _pad(TEGRA_IO_PAD_PEX_CLK1, 5, UINT_MAX, "pex-clk1"), \
2510 _pad(TEGRA_IO_PAD_PEX_CLK2, 6, UINT_MAX, "pex-clk2"), \
2511 _pad(TEGRA_IO_PAD_PEX_CNTRL, UINT_MAX, 11, "pex-cntrl"), \
2512 _pad(TEGRA_IO_PAD_SDMMC1, 33, 12, "sdmmc1"), \
2513 _pad(TEGRA_IO_PAD_SDMMC3, 34, 13, "sdmmc3"), \
2514 _pad(TEGRA_IO_PAD_SPI, 46, 22, "spi"), \
2515 _pad(TEGRA_IO_PAD_SPI_HV, 47, 23, "spi-hv"), \
2516 _pad(TEGRA_IO_PAD_UART, 14, 2, "uart"), \
2517 _pad(TEGRA_IO_PAD_USB0, 9, UINT_MAX, "usb0"), \
2518 _pad(TEGRA_IO_PAD_USB1, 10, UINT_MAX, "usb1"), \
2519 _pad(TEGRA_IO_PAD_USB2, 11, UINT_MAX, "usb2"), \
2520 _pad(TEGRA_IO_PAD_USB3, 18, UINT_MAX, "usb3"), \
2521 _pad(TEGRA_IO_PAD_USB_BIAS, 12, UINT_MAX, "usb-bias")
2523 static const struct tegra_io_pad_soc tegra210_io_pads
[] = {
2524 TEGRA210_IO_PAD_TABLE(TEGRA_IO_PAD
)
2527 static const struct pinctrl_pin_desc tegra210_pin_descs
[] = {
2528 TEGRA210_IO_PAD_TABLE(TEGRA_IO_PIN_DESC
)
2531 static const struct tegra_pmc_soc tegra210_pmc_soc
= {
2532 .num_powergates
= ARRAY_SIZE(tegra210_powergates
),
2533 .powergates
= tegra210_powergates
,
2534 .num_cpu_powergates
= ARRAY_SIZE(tegra210_cpu_powergates
),
2535 .cpu_powergates
= tegra210_cpu_powergates
,
2536 .has_tsense_reset
= true,
2537 .has_gpu_clamps
= true,
2538 .needs_mbist_war
= true,
2539 .has_impl_33v_pwr
= false,
2540 .maybe_tz_only
= true,
2541 .num_io_pads
= ARRAY_SIZE(tegra210_io_pads
),
2542 .io_pads
= tegra210_io_pads
,
2543 .num_pin_descs
= ARRAY_SIZE(tegra210_pin_descs
),
2544 .pin_descs
= tegra210_pin_descs
,
2545 .regs
= &tegra20_pmc_regs
,
2546 .init
= tegra20_pmc_init
,
2547 .setup_irq_polarity
= tegra20_pmc_setup_irq_polarity
,
2548 .reset_sources
= tegra210_reset_sources
,
2549 .num_reset_sources
= ARRAY_SIZE(tegra210_reset_sources
),
2550 .reset_levels
= NULL
,
2551 .num_reset_levels
= 0,
2554 #define TEGRA186_IO_PAD_TABLE(_pad) \
2555 /* .id .dpd .voltage .name */ \
2556 _pad(TEGRA_IO_PAD_CSIA, 0, UINT_MAX, "csia"), \
2557 _pad(TEGRA_IO_PAD_CSIB, 1, UINT_MAX, "csib"), \
2558 _pad(TEGRA_IO_PAD_DSI, 2, UINT_MAX, "dsi"), \
2559 _pad(TEGRA_IO_PAD_MIPI_BIAS, 3, UINT_MAX, "mipi-bias"), \
2560 _pad(TEGRA_IO_PAD_PEX_CLK_BIAS, 4, UINT_MAX, "pex-clk-bias"), \
2561 _pad(TEGRA_IO_PAD_PEX_CLK3, 5, UINT_MAX, "pex-clk3"), \
2562 _pad(TEGRA_IO_PAD_PEX_CLK2, 6, UINT_MAX, "pex-clk2"), \
2563 _pad(TEGRA_IO_PAD_PEX_CLK1, 7, UINT_MAX, "pex-clk1"), \
2564 _pad(TEGRA_IO_PAD_USB0, 9, UINT_MAX, "usb0"), \
2565 _pad(TEGRA_IO_PAD_USB1, 10, UINT_MAX, "usb1"), \
2566 _pad(TEGRA_IO_PAD_USB2, 11, UINT_MAX, "usb2"), \
2567 _pad(TEGRA_IO_PAD_USB_BIAS, 12, UINT_MAX, "usb-bias"), \
2568 _pad(TEGRA_IO_PAD_UART, 14, UINT_MAX, "uart"), \
2569 _pad(TEGRA_IO_PAD_AUDIO, 17, UINT_MAX, "audio"), \
2570 _pad(TEGRA_IO_PAD_HSIC, 19, UINT_MAX, "hsic"), \
2571 _pad(TEGRA_IO_PAD_DBG, 25, UINT_MAX, "dbg"), \
2572 _pad(TEGRA_IO_PAD_HDMI_DP0, 28, UINT_MAX, "hdmi-dp0"), \
2573 _pad(TEGRA_IO_PAD_HDMI_DP1, 29, UINT_MAX, "hdmi-dp1"), \
2574 _pad(TEGRA_IO_PAD_PEX_CNTRL, 32, UINT_MAX, "pex-cntrl"), \
2575 _pad(TEGRA_IO_PAD_SDMMC2_HV, 34, 5, "sdmmc2-hv"), \
2576 _pad(TEGRA_IO_PAD_SDMMC4, 36, UINT_MAX, "sdmmc4"), \
2577 _pad(TEGRA_IO_PAD_CAM, 38, UINT_MAX, "cam"), \
2578 _pad(TEGRA_IO_PAD_DSIB, 40, UINT_MAX, "dsib"), \
2579 _pad(TEGRA_IO_PAD_DSIC, 41, UINT_MAX, "dsic"), \
2580 _pad(TEGRA_IO_PAD_DSID, 42, UINT_MAX, "dsid"), \
2581 _pad(TEGRA_IO_PAD_CSIC, 43, UINT_MAX, "csic"), \
2582 _pad(TEGRA_IO_PAD_CSID, 44, UINT_MAX, "csid"), \
2583 _pad(TEGRA_IO_PAD_CSIE, 45, UINT_MAX, "csie"), \
2584 _pad(TEGRA_IO_PAD_CSIF, 46, UINT_MAX, "csif"), \
2585 _pad(TEGRA_IO_PAD_SPI, 47, UINT_MAX, "spi"), \
2586 _pad(TEGRA_IO_PAD_UFS, 49, UINT_MAX, "ufs"), \
2587 _pad(TEGRA_IO_PAD_DMIC_HV, 52, 2, "dmic-hv"), \
2588 _pad(TEGRA_IO_PAD_EDP, 53, UINT_MAX, "edp"), \
2589 _pad(TEGRA_IO_PAD_SDMMC1_HV, 55, 4, "sdmmc1-hv"), \
2590 _pad(TEGRA_IO_PAD_SDMMC3_HV, 56, 6, "sdmmc3-hv"), \
2591 _pad(TEGRA_IO_PAD_CONN, 60, UINT_MAX, "conn"), \
2592 _pad(TEGRA_IO_PAD_AUDIO_HV, 61, 1, "audio-hv"), \
2593 _pad(TEGRA_IO_PAD_AO_HV, UINT_MAX, 0, "ao-hv")
2595 static const struct tegra_io_pad_soc tegra186_io_pads
[] = {
2596 TEGRA186_IO_PAD_TABLE(TEGRA_IO_PAD
)
2599 static const struct pinctrl_pin_desc tegra186_pin_descs
[] = {
2600 TEGRA186_IO_PAD_TABLE(TEGRA_IO_PIN_DESC
)
2603 static const struct tegra_pmc_regs tegra186_pmc_regs
= {
2608 .dpd2_status
= 0x80,
2610 .rst_source_shift
= 0x2,
2611 .rst_source_mask
= 0x3C,
2612 .rst_level_shift
= 0x0,
2613 .rst_level_mask
= 0x3,
2616 static void tegra186_pmc_setup_irq_polarity(struct tegra_pmc
*pmc
,
2617 struct device_node
*np
,
2620 struct resource regs
;
2625 index
= of_property_match_string(np
, "reg-names", "wake");
2627 dev_err(pmc
->dev
, "failed to find PMC wake registers\n");
2631 of_address_to_resource(np
, index
, ®s
);
2633 wake
= ioremap_nocache(regs
.start
, resource_size(®s
));
2635 dev_err(pmc
->dev
, "failed to map PMC wake registers\n");
2639 value
= readl(wake
+ WAKE_AOWAKE_CTRL
);
2642 value
|= WAKE_AOWAKE_CTRL_INTR_POLARITY
;
2644 value
&= ~WAKE_AOWAKE_CTRL_INTR_POLARITY
;
2646 writel(value
, wake
+ WAKE_AOWAKE_CTRL
);
2651 static const struct tegra_wake_event tegra186_wake_events
[] = {
2652 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA186_AON_GPIO(FF
, 0)),
2653 TEGRA_WAKE_IRQ("rtc", 73, 10),
2656 static const struct tegra_pmc_soc tegra186_pmc_soc
= {
2657 .num_powergates
= 0,
2659 .num_cpu_powergates
= 0,
2660 .cpu_powergates
= NULL
,
2661 .has_tsense_reset
= false,
2662 .has_gpu_clamps
= false,
2663 .needs_mbist_war
= false,
2664 .has_impl_33v_pwr
= true,
2665 .maybe_tz_only
= false,
2666 .num_io_pads
= ARRAY_SIZE(tegra186_io_pads
),
2667 .io_pads
= tegra186_io_pads
,
2668 .num_pin_descs
= ARRAY_SIZE(tegra186_pin_descs
),
2669 .pin_descs
= tegra186_pin_descs
,
2670 .regs
= &tegra186_pmc_regs
,
2672 .setup_irq_polarity
= tegra186_pmc_setup_irq_polarity
,
2673 .reset_sources
= tegra186_reset_sources
,
2674 .num_reset_sources
= ARRAY_SIZE(tegra186_reset_sources
),
2675 .reset_levels
= tegra186_reset_levels
,
2676 .num_reset_levels
= ARRAY_SIZE(tegra186_reset_levels
),
2677 .num_wake_events
= ARRAY_SIZE(tegra186_wake_events
),
2678 .wake_events
= tegra186_wake_events
,
2681 static const struct tegra_io_pad_soc tegra194_io_pads
[] = {
2682 { .id
= TEGRA_IO_PAD_CSIA
, .dpd
= 0, .voltage
= UINT_MAX
},
2683 { .id
= TEGRA_IO_PAD_CSIB
, .dpd
= 1, .voltage
= UINT_MAX
},
2684 { .id
= TEGRA_IO_PAD_MIPI_BIAS
, .dpd
= 3, .voltage
= UINT_MAX
},
2685 { .id
= TEGRA_IO_PAD_PEX_CLK_BIAS
, .dpd
= 4, .voltage
= UINT_MAX
},
2686 { .id
= TEGRA_IO_PAD_PEX_CLK3
, .dpd
= 5, .voltage
= UINT_MAX
},
2687 { .id
= TEGRA_IO_PAD_PEX_CLK2
, .dpd
= 6, .voltage
= UINT_MAX
},
2688 { .id
= TEGRA_IO_PAD_PEX_CLK1
, .dpd
= 7, .voltage
= UINT_MAX
},
2689 { .id
= TEGRA_IO_PAD_EQOS
, .dpd
= 8, .voltage
= UINT_MAX
},
2690 { .id
= TEGRA_IO_PAD_PEX_CLK2_BIAS
, .dpd
= 9, .voltage
= UINT_MAX
},
2691 { .id
= TEGRA_IO_PAD_PEX_CLK2
, .dpd
= 10, .voltage
= UINT_MAX
},
2692 { .id
= TEGRA_IO_PAD_DAP3
, .dpd
= 11, .voltage
= UINT_MAX
},
2693 { .id
= TEGRA_IO_PAD_DAP5
, .dpd
= 12, .voltage
= UINT_MAX
},
2694 { .id
= TEGRA_IO_PAD_UART
, .dpd
= 14, .voltage
= UINT_MAX
},
2695 { .id
= TEGRA_IO_PAD_PWR_CTL
, .dpd
= 15, .voltage
= UINT_MAX
},
2696 { .id
= TEGRA_IO_PAD_SOC_GPIO53
, .dpd
= 16, .voltage
= UINT_MAX
},
2697 { .id
= TEGRA_IO_PAD_AUDIO
, .dpd
= 17, .voltage
= UINT_MAX
},
2698 { .id
= TEGRA_IO_PAD_GP_PWM2
, .dpd
= 18, .voltage
= UINT_MAX
},
2699 { .id
= TEGRA_IO_PAD_GP_PWM3
, .dpd
= 19, .voltage
= UINT_MAX
},
2700 { .id
= TEGRA_IO_PAD_SOC_GPIO12
, .dpd
= 20, .voltage
= UINT_MAX
},
2701 { .id
= TEGRA_IO_PAD_SOC_GPIO13
, .dpd
= 21, .voltage
= UINT_MAX
},
2702 { .id
= TEGRA_IO_PAD_SOC_GPIO10
, .dpd
= 22, .voltage
= UINT_MAX
},
2703 { .id
= TEGRA_IO_PAD_UART4
, .dpd
= 23, .voltage
= UINT_MAX
},
2704 { .id
= TEGRA_IO_PAD_UART5
, .dpd
= 24, .voltage
= UINT_MAX
},
2705 { .id
= TEGRA_IO_PAD_DBG
, .dpd
= 25, .voltage
= UINT_MAX
},
2706 { .id
= TEGRA_IO_PAD_HDMI_DP3
, .dpd
= 26, .voltage
= UINT_MAX
},
2707 { .id
= TEGRA_IO_PAD_HDMI_DP2
, .dpd
= 27, .voltage
= UINT_MAX
},
2708 { .id
= TEGRA_IO_PAD_HDMI_DP0
, .dpd
= 28, .voltage
= UINT_MAX
},
2709 { .id
= TEGRA_IO_PAD_HDMI_DP1
, .dpd
= 29, .voltage
= UINT_MAX
},
2710 { .id
= TEGRA_IO_PAD_PEX_CNTRL
, .dpd
= 32, .voltage
= UINT_MAX
},
2711 { .id
= TEGRA_IO_PAD_PEX_CTL2
, .dpd
= 33, .voltage
= UINT_MAX
},
2712 { .id
= TEGRA_IO_PAD_PEX_L0_RST_N
, .dpd
= 34, .voltage
= UINT_MAX
},
2713 { .id
= TEGRA_IO_PAD_PEX_L1_RST_N
, .dpd
= 35, .voltage
= UINT_MAX
},
2714 { .id
= TEGRA_IO_PAD_SDMMC4
, .dpd
= 36, .voltage
= UINT_MAX
},
2715 { .id
= TEGRA_IO_PAD_PEX_L5_RST_N
, .dpd
= 37, .voltage
= UINT_MAX
},
2716 { .id
= TEGRA_IO_PAD_CSIC
, .dpd
= 43, .voltage
= UINT_MAX
},
2717 { .id
= TEGRA_IO_PAD_CSID
, .dpd
= 44, .voltage
= UINT_MAX
},
2718 { .id
= TEGRA_IO_PAD_CSIE
, .dpd
= 45, .voltage
= UINT_MAX
},
2719 { .id
= TEGRA_IO_PAD_CSIF
, .dpd
= 46, .voltage
= UINT_MAX
},
2720 { .id
= TEGRA_IO_PAD_SPI
, .dpd
= 47, .voltage
= UINT_MAX
},
2721 { .id
= TEGRA_IO_PAD_UFS
, .dpd
= 49, .voltage
= UINT_MAX
},
2722 { .id
= TEGRA_IO_PAD_CSIG
, .dpd
= 50, .voltage
= UINT_MAX
},
2723 { .id
= TEGRA_IO_PAD_CSIH
, .dpd
= 51, .voltage
= UINT_MAX
},
2724 { .id
= TEGRA_IO_PAD_EDP
, .dpd
= 53, .voltage
= UINT_MAX
},
2725 { .id
= TEGRA_IO_PAD_SDMMC1_HV
, .dpd
= 55, .voltage
= UINT_MAX
},
2726 { .id
= TEGRA_IO_PAD_SDMMC3_HV
, .dpd
= 56, .voltage
= UINT_MAX
},
2727 { .id
= TEGRA_IO_PAD_CONN
, .dpd
= 60, .voltage
= UINT_MAX
},
2728 { .id
= TEGRA_IO_PAD_AUDIO_HV
, .dpd
= 61, .voltage
= UINT_MAX
},
2731 static const struct tegra_wake_event tegra194_wake_events
[] = {
2732 TEGRA_WAKE_GPIO("power", 29, 1, TEGRA194_AON_GPIO(EE
, 4)),
2733 TEGRA_WAKE_IRQ("rtc", 73, 10),
2736 static const struct tegra_pmc_soc tegra194_pmc_soc
= {
2737 .num_powergates
= 0,
2739 .num_cpu_powergates
= 0,
2740 .cpu_powergates
= NULL
,
2741 .has_tsense_reset
= false,
2742 .has_gpu_clamps
= false,
2743 .needs_mbist_war
= false,
2744 .has_impl_33v_pwr
= false,
2745 .maybe_tz_only
= false,
2746 .num_io_pads
= ARRAY_SIZE(tegra194_io_pads
),
2747 .io_pads
= tegra194_io_pads
,
2748 .regs
= &tegra186_pmc_regs
,
2750 .setup_irq_polarity
= tegra186_pmc_setup_irq_polarity
,
2751 .num_wake_events
= ARRAY_SIZE(tegra194_wake_events
),
2752 .wake_events
= tegra194_wake_events
,
2755 static const struct of_device_id tegra_pmc_match
[] = {
2756 { .compatible
= "nvidia,tegra194-pmc", .data
= &tegra194_pmc_soc
},
2757 { .compatible
= "nvidia,tegra186-pmc", .data
= &tegra186_pmc_soc
},
2758 { .compatible
= "nvidia,tegra210-pmc", .data
= &tegra210_pmc_soc
},
2759 { .compatible
= "nvidia,tegra132-pmc", .data
= &tegra124_pmc_soc
},
2760 { .compatible
= "nvidia,tegra124-pmc", .data
= &tegra124_pmc_soc
},
2761 { .compatible
= "nvidia,tegra114-pmc", .data
= &tegra114_pmc_soc
},
2762 { .compatible
= "nvidia,tegra30-pmc", .data
= &tegra30_pmc_soc
},
2763 { .compatible
= "nvidia,tegra20-pmc", .data
= &tegra20_pmc_soc
},
2767 static struct platform_driver tegra_pmc_driver
= {
2769 .name
= "tegra-pmc",
2770 .suppress_bind_attrs
= true,
2771 .of_match_table
= tegra_pmc_match
,
2772 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
2773 .pm
= &tegra_pmc_pm_ops
,
2776 .probe
= tegra_pmc_probe
,
2778 builtin_platform_driver(tegra_pmc_driver
);
2780 static bool __init
tegra_pmc_detect_tz_only(struct tegra_pmc
*pmc
)
2784 saved
= readl(pmc
->base
+ pmc
->soc
->regs
->scratch0
);
2785 value
= saved
^ 0xffffffff;
2787 if (value
== 0xffffffff)
2790 /* write pattern and read it back */
2791 writel(value
, pmc
->base
+ pmc
->soc
->regs
->scratch0
);
2792 value
= readl(pmc
->base
+ pmc
->soc
->regs
->scratch0
);
2794 /* if we read all-zeroes, access is restricted to TZ only */
2796 pr_info("access to PMC is restricted to TZ\n");
2800 /* restore original value */
2801 writel(saved
, pmc
->base
+ pmc
->soc
->regs
->scratch0
);
2807 * Early initialization to allow access to registers in the very early boot
2810 static int __init
tegra_pmc_early_init(void)
2812 const struct of_device_id
*match
;
2813 struct device_node
*np
;
2814 struct resource regs
;
2818 mutex_init(&pmc
->powergates_lock
);
2820 np
= of_find_matching_node_and_match(NULL
, tegra_pmc_match
, &match
);
2823 * Fall back to legacy initialization for 32-bit ARM only. All
2824 * 64-bit ARM device tree files for Tegra are required to have
2827 * This is for backwards-compatibility with old device trees
2828 * that didn't contain a PMC node. Note that in this case the
2829 * SoC data can't be matched and therefore powergating is
2832 if (IS_ENABLED(CONFIG_ARM
) && soc_is_tegra()) {
2833 pr_warn("DT node not found, powergating disabled\n");
2835 regs
.start
= 0x7000e400;
2836 regs
.end
= 0x7000e7ff;
2837 regs
.flags
= IORESOURCE_MEM
;
2839 pr_warn("Using memory region %pR\n", ®s
);
2842 * At this point we're not running on Tegra, so play
2843 * nice with multi-platform kernels.
2849 * Extract information from the device tree if we've found a
2852 if (of_address_to_resource(np
, 0, ®s
) < 0) {
2853 pr_err("failed to get PMC registers\n");
2859 pmc
->base
= ioremap_nocache(regs
.start
, resource_size(®s
));
2861 pr_err("failed to map PMC registers\n");
2867 pmc
->soc
= match
->data
;
2869 if (pmc
->soc
->maybe_tz_only
)
2870 pmc
->tz_only
= tegra_pmc_detect_tz_only(pmc
);
2872 /* Create a bitmap of the available and valid partitions */
2873 for (i
= 0; i
< pmc
->soc
->num_powergates
; i
++)
2874 if (pmc
->soc
->powergates
[i
])
2875 set_bit(i
, pmc
->powergates_available
);
2878 * Invert the interrupt polarity if a PMC device tree node
2879 * exists and contains the nvidia,invert-interrupt property.
2881 invert
= of_property_read_bool(np
, "nvidia,invert-interrupt");
2883 pmc
->soc
->setup_irq_polarity(pmc
, np
, invert
);
2890 early_initcall(tegra_pmc_early_init
);