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