Linux Audio

Check our new training course

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