cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pmc.c (104475B)


      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";
   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, 1);
   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", &reg_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", &reg_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, &regs);
   3580
   3581	wake = ioremap(regs.start, resource_size(&regs));
   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", &regs);
   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, &regs) < 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(&regs));
   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);