1 /* 2 * clk-dfll.c - Tegra DFLL clock source common code 3 * 4 * Copyright (C) 2012-2019 NVIDIA Corporation. All rights reserved. 5 * 6 * Aleksandr Frid <afrid@nvidia.com> 7 * Paul Walmsley <pwalmsley@nvidia.com> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 16 * more details. 17 * 18 * This library is for the DVCO and DFLL IP blocks on the Tegra124 19 * SoC. These IP blocks together are also known at NVIDIA as 20 * "CL-DVFS". To try to avoid confusion, this code refers to them 21 * collectively as the "DFLL." 22 * 23 * The DFLL is a root clocksource which tolerates some amount of 24 * supply voltage noise. Tegra124 uses it to clock the fast CPU 25 * complex when the target CPU speed is above a particular rate. The 26 * DFLL can be operated in either open-loop mode or closed-loop mode. 27 * In open-loop mode, the DFLL generates an output clock appropriate 28 * to the supply voltage. In closed-loop mode, when configured with a 29 * target frequency, the DFLL minimizes supply voltage while 30 * delivering an average frequency equal to the target. 31 * 32 * Devices clocked by the DFLL must be able to tolerate frequency 33 * variation. In the case of the CPU, it's important to note that the 34 * CPU cycle time will vary. This has implications for 35 * performance-measurement code and any code that relies on the CPU 36 * cycle time to delay for a certain length of time. 37 * 38 */ 39 40 #include <linux/clk.h> 41 #include <linux/clk-provider.h> 42 #include <linux/debugfs.h> 43 #include <linux/device.h> 44 #include <linux/err.h> 45 #include <linux/i2c.h> 46 #include <linux/io.h> 47 #include <linux/kernel.h> 48 #include <linux/module.h> 49 #include <linux/of.h> 50 #include <linux/pinctrl/consumer.h> 51 #include <linux/pm_opp.h> 52 #include <linux/pm_runtime.h> 53 #include <linux/regmap.h> 54 #include <linux/regulator/consumer.h> 55 #include <linux/reset.h> 56 #include <linux/seq_file.h> 57 58 #include "clk-dfll.h" 59 #include "cvb.h" 60 61 /* 62 * DFLL control registers - access via dfll_{readl,writel} 63 */ 64 65 /* DFLL_CTRL: DFLL control register */ 66 #define DFLL_CTRL 0x00 67 #define DFLL_CTRL_MODE_MASK 0x03 68 69 /* DFLL_CONFIG: DFLL sample rate control */ 70 #define DFLL_CONFIG 0x04 71 #define DFLL_CONFIG_DIV_MASK 0xff 72 #define DFLL_CONFIG_DIV_PRESCALE 32 73 74 /* DFLL_PARAMS: tuning coefficients for closed loop integrator */ 75 #define DFLL_PARAMS 0x08 76 #define DFLL_PARAMS_CG_SCALE (0x1 << 24) 77 #define DFLL_PARAMS_FORCE_MODE_SHIFT 22 78 #define DFLL_PARAMS_FORCE_MODE_MASK (0x3 << DFLL_PARAMS_FORCE_MODE_SHIFT) 79 #define DFLL_PARAMS_CF_PARAM_SHIFT 16 80 #define DFLL_PARAMS_CF_PARAM_MASK (0x3f << DFLL_PARAMS_CF_PARAM_SHIFT) 81 #define DFLL_PARAMS_CI_PARAM_SHIFT 8 82 #define DFLL_PARAMS_CI_PARAM_MASK (0x7 << DFLL_PARAMS_CI_PARAM_SHIFT) 83 #define DFLL_PARAMS_CG_PARAM_SHIFT 0 84 #define DFLL_PARAMS_CG_PARAM_MASK (0xff << DFLL_PARAMS_CG_PARAM_SHIFT) 85 86 /* DFLL_TUNE0: delay line configuration register 0 */ 87 #define DFLL_TUNE0 0x0c 88 89 /* DFLL_TUNE1: delay line configuration register 1 */ 90 #define DFLL_TUNE1 0x10 91 92 /* DFLL_FREQ_REQ: target DFLL frequency control */ 93 #define DFLL_FREQ_REQ 0x14 94 #define DFLL_FREQ_REQ_FORCE_ENABLE (0x1 << 28) 95 #define DFLL_FREQ_REQ_FORCE_SHIFT 16 96 #define DFLL_FREQ_REQ_FORCE_MASK (0xfff << DFLL_FREQ_REQ_FORCE_SHIFT) 97 #define FORCE_MAX 2047 98 #define FORCE_MIN -2048 99 #define DFLL_FREQ_REQ_SCALE_SHIFT 8 100 #define DFLL_FREQ_REQ_SCALE_MASK (0xff << DFLL_FREQ_REQ_SCALE_SHIFT) 101 #define DFLL_FREQ_REQ_SCALE_MAX 256 102 #define DFLL_FREQ_REQ_FREQ_VALID (0x1 << 7) 103 #define DFLL_FREQ_REQ_MULT_SHIFT 0 104 #define DFLL_FREQ_REG_MULT_MASK (0x7f << DFLL_FREQ_REQ_MULT_SHIFT) 105 #define FREQ_MAX 127 106 107 /* DFLL_DROOP_CTRL: droop prevention control */ 108 #define DFLL_DROOP_CTRL 0x1c 109 110 /* DFLL_OUTPUT_CFG: closed loop mode control registers */ 111 /* NOTE: access via dfll_i2c_{readl,writel} */ 112 #define DFLL_OUTPUT_CFG 0x20 113 #define DFLL_OUTPUT_CFG_I2C_ENABLE (0x1 << 30) 114 #define OUT_MASK 0x3f 115 #define DFLL_OUTPUT_CFG_SAFE_SHIFT 24 116 #define DFLL_OUTPUT_CFG_SAFE_MASK \ 117 (OUT_MASK << DFLL_OUTPUT_CFG_SAFE_SHIFT) 118 #define DFLL_OUTPUT_CFG_MAX_SHIFT 16 119 #define DFLL_OUTPUT_CFG_MAX_MASK \ 120 (OUT_MASK << DFLL_OUTPUT_CFG_MAX_SHIFT) 121 #define DFLL_OUTPUT_CFG_MIN_SHIFT 8 122 #define DFLL_OUTPUT_CFG_MIN_MASK \ 123 (OUT_MASK << DFLL_OUTPUT_CFG_MIN_SHIFT) 124 #define DFLL_OUTPUT_CFG_PWM_DELTA (0x1 << 7) 125 #define DFLL_OUTPUT_CFG_PWM_ENABLE (0x1 << 6) 126 #define DFLL_OUTPUT_CFG_PWM_DIV_SHIFT 0 127 #define DFLL_OUTPUT_CFG_PWM_DIV_MASK \ 128 (OUT_MASK << DFLL_OUTPUT_CFG_PWM_DIV_SHIFT) 129 130 /* DFLL_OUTPUT_FORCE: closed loop mode voltage forcing control */ 131 #define DFLL_OUTPUT_FORCE 0x24 132 #define DFLL_OUTPUT_FORCE_ENABLE (0x1 << 6) 133 #define DFLL_OUTPUT_FORCE_VALUE_SHIFT 0 134 #define DFLL_OUTPUT_FORCE_VALUE_MASK \ 135 (OUT_MASK << DFLL_OUTPUT_FORCE_VALUE_SHIFT) 136 137 /* DFLL_MONITOR_CTRL: internal monitor data source control */ 138 #define DFLL_MONITOR_CTRL 0x28 139 #define DFLL_MONITOR_CTRL_FREQ 6 140 141 /* DFLL_MONITOR_DATA: internal monitor data output */ 142 #define DFLL_MONITOR_DATA 0x2c 143 #define DFLL_MONITOR_DATA_NEW_MASK (0x1 << 16) 144 #define DFLL_MONITOR_DATA_VAL_SHIFT 0 145 #define DFLL_MONITOR_DATA_VAL_MASK (0xFFFF << DFLL_MONITOR_DATA_VAL_SHIFT) 146 147 /* 148 * I2C output control registers - access via dfll_i2c_{readl,writel} 149 */ 150 151 /* DFLL_I2C_CFG: I2C controller configuration register */ 152 #define DFLL_I2C_CFG 0x40 153 #define DFLL_I2C_CFG_ARB_ENABLE (0x1 << 20) 154 #define DFLL_I2C_CFG_HS_CODE_SHIFT 16 155 #define DFLL_I2C_CFG_HS_CODE_MASK (0x7 << DFLL_I2C_CFG_HS_CODE_SHIFT) 156 #define DFLL_I2C_CFG_PACKET_ENABLE (0x1 << 15) 157 #define DFLL_I2C_CFG_SIZE_SHIFT 12 158 #define DFLL_I2C_CFG_SIZE_MASK (0x7 << DFLL_I2C_CFG_SIZE_SHIFT) 159 #define DFLL_I2C_CFG_SLAVE_ADDR_10 (0x1 << 10) 160 #define DFLL_I2C_CFG_SLAVE_ADDR_SHIFT_7BIT 1 161 #define DFLL_I2C_CFG_SLAVE_ADDR_SHIFT_10BIT 0 162 163 /* DFLL_I2C_VDD_REG_ADDR: PMIC I2C address for closed loop mode */ 164 #define DFLL_I2C_VDD_REG_ADDR 0x44 165 166 /* DFLL_I2C_STS: I2C controller status */ 167 #define DFLL_I2C_STS 0x48 168 #define DFLL_I2C_STS_I2C_LAST_SHIFT 1 169 #define DFLL_I2C_STS_I2C_REQ_PENDING 0x1 170 171 /* DFLL_INTR_STS: DFLL interrupt status register */ 172 #define DFLL_INTR_STS 0x5c 173 174 /* DFLL_INTR_EN: DFLL interrupt enable register */ 175 #define DFLL_INTR_EN 0x60 176 #define DFLL_INTR_MIN_MASK 0x1 177 #define DFLL_INTR_MAX_MASK 0x2 178 179 /* 180 * Integrated I2C controller registers - relative to td->i2c_controller_base 181 */ 182 183 /* DFLL_I2C_CLK_DIVISOR: I2C controller clock divisor */ 184 #define DFLL_I2C_CLK_DIVISOR 0x6c 185 #define DFLL_I2C_CLK_DIVISOR_MASK 0xffff 186 #define DFLL_I2C_CLK_DIVISOR_FS_SHIFT 16 187 #define DFLL_I2C_CLK_DIVISOR_HS_SHIFT 0 188 #define DFLL_I2C_CLK_DIVISOR_PREDIV 8 189 #define DFLL_I2C_CLK_DIVISOR_HSMODE_PREDIV 12 190 191 /* 192 * Other constants 193 */ 194 195 /* MAX_DFLL_VOLTAGES: number of LUT entries in the DFLL IP block */ 196 #define MAX_DFLL_VOLTAGES 33 197 198 /* 199 * REF_CLK_CYC_PER_DVCO_SAMPLE: the number of ref_clk cycles that the hardware 200 * integrates the DVCO counter over - used for debug rate monitoring and 201 * droop control 202 */ 203 #define REF_CLK_CYC_PER_DVCO_SAMPLE 4 204 205 /* 206 * REF_CLOCK_RATE: the DFLL reference clock rate currently supported by this 207 * driver, in Hz 208 */ 209 #define REF_CLOCK_RATE 51000000UL 210 211 #define DVCO_RATE_TO_MULT(rate, ref_rate) ((rate) / ((ref_rate) / 2)) 212 #define MULT_TO_DVCO_RATE(mult, ref_rate) ((mult) * ((ref_rate) / 2)) 213 214 /** 215 * enum dfll_ctrl_mode - DFLL hardware operating mode 216 * @DFLL_UNINITIALIZED: (uninitialized state - not in hardware bitfield) 217 * @DFLL_DISABLED: DFLL not generating an output clock 218 * @DFLL_OPEN_LOOP: DVCO running, but DFLL not adjusting voltage 219 * @DFLL_CLOSED_LOOP: DVCO running, and DFLL adjusting voltage to match 220 * the requested rate 221 * 222 * The integer corresponding to the last two states, minus one, is 223 * written to the DFLL hardware to change operating modes. 224 */ 225 enum dfll_ctrl_mode { 226 DFLL_UNINITIALIZED = 0, 227 DFLL_DISABLED = 1, 228 DFLL_OPEN_LOOP = 2, 229 DFLL_CLOSED_LOOP = 3, 230 }; 231 232 /** 233 * enum dfll_tune_range - voltage range that the driver believes it's in 234 * @DFLL_TUNE_UNINITIALIZED: DFLL tuning not yet programmed 235 * @DFLL_TUNE_LOW: DFLL in the low-voltage range (or open-loop mode) 236 * 237 * Some DFLL tuning parameters may need to change depending on the 238 * DVCO's voltage; these states represent the ranges that the driver 239 * supports. These are software states; these values are never 240 * written into registers. 241 */ 242 enum dfll_tune_range { 243 DFLL_TUNE_UNINITIALIZED = 0, 244 DFLL_TUNE_LOW = 1, 245 }; 246 247 248 enum tegra_dfll_pmu_if { 249 TEGRA_DFLL_PMU_I2C = 0, 250 TEGRA_DFLL_PMU_PWM = 1, 251 }; 252 253 /** 254 * struct dfll_rate_req - target DFLL rate request data 255 * @rate: target frequency, after the postscaling 256 * @dvco_target_rate: target frequency, after the postscaling 257 * @lut_index: LUT index at which voltage the dvco_target_rate will be reached 258 * @mult_bits: value to program to the MULT bits of the DFLL_FREQ_REQ register 259 * @scale_bits: value to program to the SCALE bits of the DFLL_FREQ_REQ register 260 */ 261 struct dfll_rate_req { 262 unsigned long rate; 263 unsigned long dvco_target_rate; 264 int lut_index; 265 u8 mult_bits; 266 u8 scale_bits; 267 }; 268 269 struct tegra_dfll { 270 struct device *dev; 271 struct tegra_dfll_soc_data *soc; 272 273 void __iomem *base; 274 void __iomem *i2c_base; 275 void __iomem *i2c_controller_base; 276 void __iomem *lut_base; 277 278 struct regulator *vdd_reg; 279 struct clk *soc_clk; 280 struct clk *ref_clk; 281 struct clk *i2c_clk; 282 struct clk *dfll_clk; 283 struct reset_control *dvco_rst; 284 unsigned long ref_rate; 285 unsigned long i2c_clk_rate; 286 unsigned long dvco_rate_min; 287 288 enum dfll_ctrl_mode mode; 289 enum dfll_tune_range tune_range; 290 struct dentry *debugfs_dir; 291 struct clk_hw dfll_clk_hw; 292 const char *output_clock_name; 293 struct dfll_rate_req last_req; 294 unsigned long last_unrounded_rate; 295 296 /* Parameters from DT */ 297 u32 droop_ctrl; 298 u32 sample_rate; 299 u32 force_mode; 300 u32 cf; 301 u32 ci; 302 u32 cg; 303 bool cg_scale; 304 305 /* I2C interface parameters */ 306 u32 i2c_fs_rate; 307 u32 i2c_reg; 308 u32 i2c_slave_addr; 309 310 /* lut array entries are regulator framework selectors or PWM values*/ 311 unsigned lut[MAX_DFLL_VOLTAGES]; 312 unsigned long lut_uv[MAX_DFLL_VOLTAGES]; 313 int lut_size; 314 u8 lut_bottom, lut_min, lut_max, lut_safe; 315 316 /* PWM interface */ 317 enum tegra_dfll_pmu_if pmu_if; 318 unsigned long pwm_rate; 319 struct pinctrl *pwm_pin; 320 struct pinctrl_state *pwm_enable_state; 321 struct pinctrl_state *pwm_disable_state; 322 u32 reg_init_uV; 323 }; 324 325 #define clk_hw_to_dfll(_hw) container_of(_hw, struct tegra_dfll, dfll_clk_hw) 326 327 /* mode_name: map numeric DFLL modes to names for friendly console messages */ 328 static const char * const mode_name[] = { 329 [DFLL_UNINITIALIZED] = "uninitialized", 330 [DFLL_DISABLED] = "disabled", 331 [DFLL_OPEN_LOOP] = "open_loop", 332 [DFLL_CLOSED_LOOP] = "closed_loop", 333 }; 334 335 /* 336 * Register accessors 337 */ 338 339 static inline u32 dfll_readl(struct tegra_dfll *td, u32 offs) 340 { 341 return __raw_readl(td->base + offs); 342 } 343 344 static inline void dfll_writel(struct tegra_dfll *td, u32 val, u32 offs) 345 { 346 WARN_ON(offs >= DFLL_I2C_CFG); 347 __raw_writel(val, td->base + offs); 348 } 349 350 static inline void dfll_wmb(struct tegra_dfll *td) 351 { 352 dfll_readl(td, DFLL_CTRL); 353 } 354 355 /* I2C output control registers - for addresses above DFLL_I2C_CFG */ 356 357 static inline u32 dfll_i2c_readl(struct tegra_dfll *td, u32 offs) 358 { 359 return __raw_readl(td->i2c_base + offs); 360 } 361 362 static inline void dfll_i2c_writel(struct tegra_dfll *td, u32 val, u32 offs) 363 { 364 __raw_writel(val, td->i2c_base + offs); 365 } 366 367 static inline void dfll_i2c_wmb(struct tegra_dfll *td) 368 { 369 dfll_i2c_readl(td, DFLL_I2C_CFG); 370 } 371 372 /** 373 * dfll_is_running - is the DFLL currently generating a clock? 374 * @td: DFLL instance 375 * 376 * If the DFLL is currently generating an output clock signal, return 377 * true; otherwise return false. 378 */ 379 static bool dfll_is_running(struct tegra_dfll *td) 380 { 381 return td->mode >= DFLL_OPEN_LOOP; 382 } 383 384 /* 385 * Runtime PM suspend/resume callbacks 386 */ 387 388 /** 389 * tegra_dfll_runtime_resume - enable all clocks needed by the DFLL 390 * @dev: DFLL device * 391 * 392 * Enable all clocks needed by the DFLL. Assumes that clk_prepare() 393 * has already been called on all the clocks. 394 * 395 * XXX Should also handle context restore when returning from off. 396 */ 397 int tegra_dfll_runtime_resume(struct device *dev) 398 { 399 struct tegra_dfll *td = dev_get_drvdata(dev); 400 int ret; 401 402 ret = clk_enable(td->ref_clk); 403 if (ret) { 404 dev_err(dev, "could not enable ref clock: %d\n", ret); 405 return ret; 406 } 407 408 ret = clk_enable(td->soc_clk); 409 if (ret) { 410 dev_err(dev, "could not enable register clock: %d\n", ret); 411 clk_disable(td->ref_clk); 412 return ret; 413 } 414 415 ret = clk_enable(td->i2c_clk); 416 if (ret) { 417 dev_err(dev, "could not enable i2c clock: %d\n", ret); 418 clk_disable(td->soc_clk); 419 clk_disable(td->ref_clk); 420 return ret; 421 } 422 423 return 0; 424 } 425 EXPORT_SYMBOL(tegra_dfll_runtime_resume); 426 427 /** 428 * tegra_dfll_runtime_suspend - disable all clocks needed by the DFLL 429 * @dev: DFLL device * 430 * 431 * Disable all clocks needed by the DFLL. Assumes that other code 432 * will later call clk_unprepare(). 433 */ 434 int tegra_dfll_runtime_suspend(struct device *dev) 435 { 436 struct tegra_dfll *td = dev_get_drvdata(dev); 437 438 clk_disable(td->ref_clk); 439 clk_disable(td->soc_clk); 440 clk_disable(td->i2c_clk); 441 442 return 0; 443 } 444 EXPORT_SYMBOL(tegra_dfll_runtime_suspend); 445 446 /* 447 * DFLL tuning operations (per-voltage-range tuning settings) 448 */ 449 450 /** 451 * dfll_tune_low - tune to DFLL and CPU settings valid for any voltage 452 * @td: DFLL instance 453 * 454 * Tune the DFLL oscillator parameters and the CPU clock shaper for 455 * the low-voltage range. These settings are valid for any voltage, 456 * but may not be optimal. 457 */ 458 static void dfll_tune_low(struct tegra_dfll *td) 459 { 460 td->tune_range = DFLL_TUNE_LOW; 461 462 dfll_writel(td, td->soc->cvb->cpu_dfll_data.tune0_low, DFLL_TUNE0); 463 dfll_writel(td, td->soc->cvb->cpu_dfll_data.tune1, DFLL_TUNE1); 464 dfll_wmb(td); 465 466 if (td->soc->set_clock_trimmers_low) 467 td->soc->set_clock_trimmers_low(); 468 } 469 470 /* 471 * Output clock scaler helpers 472 */ 473 474 /** 475 * dfll_scale_dvco_rate - calculate scaled rate from the DVCO rate 476 * @scale_bits: clock scaler value (bits in the DFLL_FREQ_REQ_SCALE field) 477 * @dvco_rate: the DVCO rate 478 * 479 * Apply the same scaling formula that the DFLL hardware uses to scale 480 * the DVCO rate. 481 */ 482 static unsigned long dfll_scale_dvco_rate(int scale_bits, 483 unsigned long dvco_rate) 484 { 485 return (u64)dvco_rate * (scale_bits + 1) / DFLL_FREQ_REQ_SCALE_MAX; 486 } 487 488 /* 489 * DFLL mode switching 490 */ 491 492 /** 493 * dfll_set_mode - change the DFLL control mode 494 * @td: DFLL instance 495 * @mode: DFLL control mode (see enum dfll_ctrl_mode) 496 * 497 * Change the DFLL's operating mode between disabled, open-loop mode, 498 * and closed-loop mode, or vice versa. 499 */ 500 static void dfll_set_mode(struct tegra_dfll *td, 501 enum dfll_ctrl_mode mode) 502 { 503 td->mode = mode; 504 dfll_writel(td, mode - 1, DFLL_CTRL); 505 dfll_wmb(td); 506 } 507 508 /* 509 * DVCO rate control 510 */ 511 512 static unsigned long get_dvco_rate_below(struct tegra_dfll *td, u8 out_min) 513 { 514 struct dev_pm_opp *opp; 515 unsigned long rate, prev_rate; 516 unsigned long uv, min_uv; 517 518 min_uv = td->lut_uv[out_min]; 519 for (rate = 0, prev_rate = 0; ; rate++) { 520 opp = dev_pm_opp_find_freq_ceil(td->soc->dev, &rate); 521 if (IS_ERR(opp)) 522 break; 523 524 uv = dev_pm_opp_get_voltage(opp); 525 dev_pm_opp_put(opp); 526 527 if (uv && uv > min_uv) 528 return prev_rate; 529 530 prev_rate = rate; 531 } 532 533 return prev_rate; 534 } 535 536 /* 537 * DFLL-to-I2C controller interface 538 */ 539 540 /** 541 * dfll_i2c_set_output_enabled - enable/disable I2C PMIC voltage requests 542 * @td: DFLL instance 543 * @enable: whether to enable or disable the I2C voltage requests 544 * 545 * Set the master enable control for I2C control value updates. If disabled, 546 * then I2C control messages are inhibited, regardless of the DFLL mode. 547 */ 548 static int dfll_i2c_set_output_enabled(struct tegra_dfll *td, bool enable) 549 { 550 u32 val; 551 552 val = dfll_i2c_readl(td, DFLL_OUTPUT_CFG); 553 554 if (enable) 555 val |= DFLL_OUTPUT_CFG_I2C_ENABLE; 556 else 557 val &= ~DFLL_OUTPUT_CFG_I2C_ENABLE; 558 559 dfll_i2c_writel(td, val, DFLL_OUTPUT_CFG); 560 dfll_i2c_wmb(td); 561 562 return 0; 563 } 564 565 566 /* 567 * DFLL-to-PWM controller interface 568 */ 569 570 /** 571 * dfll_pwm_set_output_enabled - enable/disable PWM voltage requests 572 * @td: DFLL instance 573 * @enable: whether to enable or disable the PWM voltage requests 574 * 575 * Set the master enable control for PWM control value updates. If disabled, 576 * then the PWM signal is not driven. Also configure the PWM output pad 577 * to the appropriate state. 578 */ 579 static int dfll_pwm_set_output_enabled(struct tegra_dfll *td, bool enable) 580 { 581 int ret; 582 u32 val, div; 583 584 if (enable) { 585 ret = pinctrl_select_state(td->pwm_pin, td->pwm_enable_state); 586 if (ret < 0) { 587 dev_err(td->dev, "setting enable state failed\n"); 588 return -EINVAL; 589 } 590 val = dfll_readl(td, DFLL_OUTPUT_CFG); 591 val &= ~DFLL_OUTPUT_CFG_PWM_DIV_MASK; 592 div = DIV_ROUND_UP(td->ref_rate, td->pwm_rate); 593 val |= (div << DFLL_OUTPUT_CFG_PWM_DIV_SHIFT) 594 & DFLL_OUTPUT_CFG_PWM_DIV_MASK; 595 dfll_writel(td, val, DFLL_OUTPUT_CFG); 596 dfll_wmb(td); 597 598 val |= DFLL_OUTPUT_CFG_PWM_ENABLE; 599 dfll_writel(td, val, DFLL_OUTPUT_CFG); 600 dfll_wmb(td); 601 } else { 602 ret = pinctrl_select_state(td->pwm_pin, td->pwm_disable_state); 603 if (ret < 0) 604 dev_warn(td->dev, "setting disable state failed\n"); 605 606 val = dfll_readl(td, DFLL_OUTPUT_CFG); 607 val &= ~DFLL_OUTPUT_CFG_PWM_ENABLE; 608 dfll_writel(td, val, DFLL_OUTPUT_CFG); 609 dfll_wmb(td); 610 } 611 612 return 0; 613 } 614 615 /** 616 * dfll_set_force_output_value - set fixed value for force output 617 * @td: DFLL instance 618 * @out_val: value to force output 619 * 620 * Set the fixed value for force output, DFLL will output this value when 621 * force output is enabled. 622 */ 623 static u32 dfll_set_force_output_value(struct tegra_dfll *td, u8 out_val) 624 { 625 u32 val = dfll_readl(td, DFLL_OUTPUT_FORCE); 626 627 val = (val & DFLL_OUTPUT_FORCE_ENABLE) | (out_val & OUT_MASK); 628 dfll_writel(td, val, DFLL_OUTPUT_FORCE); 629 dfll_wmb(td); 630 631 return dfll_readl(td, DFLL_OUTPUT_FORCE); 632 } 633 634 /** 635 * dfll_set_force_output_enabled - enable/disable force output 636 * @td: DFLL instance 637 * @enable: whether to enable or disable the force output 638 * 639 * Set the enable control for fouce output with fixed value. 640 */ 641 static void dfll_set_force_output_enabled(struct tegra_dfll *td, bool enable) 642 { 643 u32 val = dfll_readl(td, DFLL_OUTPUT_FORCE); 644 645 if (enable) 646 val |= DFLL_OUTPUT_FORCE_ENABLE; 647 else 648 val &= ~DFLL_OUTPUT_FORCE_ENABLE; 649 650 dfll_writel(td, val, DFLL_OUTPUT_FORCE); 651 dfll_wmb(td); 652 } 653 654 /** 655 * dfll_force_output - force output a fixed value 656 * @td: DFLL instance 657 * @out_sel: value to force output 658 * 659 * Set the fixed value for force output, DFLL will output this value. 660 */ 661 static int dfll_force_output(struct tegra_dfll *td, unsigned int out_sel) 662 { 663 u32 val; 664 665 if (out_sel > OUT_MASK) 666 return -EINVAL; 667 668 val = dfll_set_force_output_value(td, out_sel); 669 if ((td->mode < DFLL_CLOSED_LOOP) && 670 !(val & DFLL_OUTPUT_FORCE_ENABLE)) { 671 dfll_set_force_output_enabled(td, true); 672 } 673 674 return 0; 675 } 676 677 /** 678 * dfll_load_lut - load the voltage lookup table 679 * @td: struct tegra_dfll * 680 * 681 * Load the voltage-to-PMIC register value lookup table into the DFLL 682 * IP block memory. Look-up tables can be loaded at any time. 683 */ 684 static void dfll_load_i2c_lut(struct tegra_dfll *td) 685 { 686 int i, lut_index; 687 u32 val; 688 689 for (i = 0; i < MAX_DFLL_VOLTAGES; i++) { 690 if (i < td->lut_min) 691 lut_index = td->lut_min; 692 else if (i > td->lut_max) 693 lut_index = td->lut_max; 694 else 695 lut_index = i; 696 697 val = regulator_list_hardware_vsel(td->vdd_reg, 698 td->lut[lut_index]); 699 __raw_writel(val, td->lut_base + i * 4); 700 } 701 702 dfll_i2c_wmb(td); 703 } 704 705 /** 706 * dfll_init_i2c_if - set up the DFLL's DFLL-I2C interface 707 * @td: DFLL instance 708 * 709 * During DFLL driver initialization, program the DFLL-I2C interface 710 * with the PMU slave address, vdd register offset, and transfer mode. 711 * This data is used by the DFLL to automatically construct I2C 712 * voltage-set commands, which are then passed to the DFLL's internal 713 * I2C controller. 714 */ 715 static void dfll_init_i2c_if(struct tegra_dfll *td) 716 { 717 u32 val; 718 719 if (td->i2c_slave_addr > 0x7f) { 720 val = td->i2c_slave_addr << DFLL_I2C_CFG_SLAVE_ADDR_SHIFT_10BIT; 721 val |= DFLL_I2C_CFG_SLAVE_ADDR_10; 722 } else { 723 val = td->i2c_slave_addr << DFLL_I2C_CFG_SLAVE_ADDR_SHIFT_7BIT; 724 } 725 val |= DFLL_I2C_CFG_SIZE_MASK; 726 val |= DFLL_I2C_CFG_ARB_ENABLE; 727 dfll_i2c_writel(td, val, DFLL_I2C_CFG); 728 729 dfll_i2c_writel(td, td->i2c_reg, DFLL_I2C_VDD_REG_ADDR); 730 731 val = DIV_ROUND_UP(td->i2c_clk_rate, td->i2c_fs_rate * 8); 732 BUG_ON(!val || (val > DFLL_I2C_CLK_DIVISOR_MASK)); 733 val = (val - 1) << DFLL_I2C_CLK_DIVISOR_FS_SHIFT; 734 735 /* default hs divisor just in case */ 736 val |= 1 << DFLL_I2C_CLK_DIVISOR_HS_SHIFT; 737 __raw_writel(val, td->i2c_controller_base + DFLL_I2C_CLK_DIVISOR); 738 dfll_i2c_wmb(td); 739 } 740 741 /** 742 * dfll_init_out_if - prepare DFLL-to-PMIC interface 743 * @td: DFLL instance 744 * 745 * During DFLL driver initialization or resume from context loss, 746 * disable the I2C command output to the PMIC, set safe voltage and 747 * output limits, and disable and clear limit interrupts. 748 */ 749 static void dfll_init_out_if(struct tegra_dfll *td) 750 { 751 u32 val; 752 753 td->lut_min = td->lut_bottom; 754 td->lut_max = td->lut_size - 1; 755 td->lut_safe = td->lut_min + (td->lut_min < td->lut_max ? 1 : 0); 756 757 /* clear DFLL_OUTPUT_CFG before setting new value */ 758 dfll_writel(td, 0, DFLL_OUTPUT_CFG); 759 dfll_wmb(td); 760 761 val = (td->lut_safe << DFLL_OUTPUT_CFG_SAFE_SHIFT) | 762 (td->lut_max << DFLL_OUTPUT_CFG_MAX_SHIFT) | 763 (td->lut_min << DFLL_OUTPUT_CFG_MIN_SHIFT); 764 dfll_writel(td, val, DFLL_OUTPUT_CFG); 765 dfll_wmb(td); 766 767 dfll_writel(td, 0, DFLL_OUTPUT_FORCE); 768 dfll_i2c_writel(td, 0, DFLL_INTR_EN); 769 dfll_i2c_writel(td, DFLL_INTR_MAX_MASK | DFLL_INTR_MIN_MASK, 770 DFLL_INTR_STS); 771 772 if (td->pmu_if == TEGRA_DFLL_PMU_PWM) { 773 u32 vinit = td->reg_init_uV; 774 int vstep = td->soc->alignment.step_uv; 775 unsigned long vmin = td->lut_uv[0]; 776 777 /* set initial voltage */ 778 if ((vinit >= vmin) && vstep) { 779 unsigned int vsel; 780 781 vsel = DIV_ROUND_UP((vinit - vmin), vstep); 782 dfll_force_output(td, vsel); 783 } 784 } else { 785 dfll_load_i2c_lut(td); 786 dfll_init_i2c_if(td); 787 } 788 } 789 790 /* 791 * Set/get the DFLL's targeted output clock rate 792 */ 793 794 /** 795 * find_lut_index_for_rate - determine I2C LUT index for given DFLL rate 796 * @td: DFLL instance 797 * @rate: clock rate 798 * 799 * Determines the index of a I2C LUT entry for a voltage that approximately 800 * produces the given DFLL clock rate. This is used when forcing a value 801 * to the integrator during rate changes. Returns -ENOENT if a suitable 802 * LUT index is not found. 803 */ 804 static int find_lut_index_for_rate(struct tegra_dfll *td, unsigned long rate) 805 { 806 struct dev_pm_opp *opp; 807 int i, align_step; 808 809 opp = dev_pm_opp_find_freq_ceil(td->soc->dev, &rate); 810 if (IS_ERR(opp)) 811 return PTR_ERR(opp); 812 813 align_step = dev_pm_opp_get_voltage(opp) / td->soc->alignment.step_uv; 814 dev_pm_opp_put(opp); 815 816 for (i = td->lut_bottom; i < td->lut_size; i++) { 817 if ((td->lut_uv[i] / td->soc->alignment.step_uv) >= align_step) 818 return i; 819 } 820 821 return -ENOENT; 822 } 823 824 /** 825 * dfll_calculate_rate_request - calculate DFLL parameters for a given rate 826 * @td: DFLL instance 827 * @req: DFLL-rate-request structure 828 * @rate: the desired DFLL rate 829 * 830 * Populate the DFLL-rate-request record @req fields with the scale_bits 831 * and mult_bits fields, based on the target input rate. Returns 0 upon 832 * success, or -EINVAL if the requested rate in req->rate is too high 833 * or low for the DFLL to generate. 834 */ 835 static int dfll_calculate_rate_request(struct tegra_dfll *td, 836 struct dfll_rate_req *req, 837 unsigned long rate) 838 { 839 u32 val; 840 841 /* 842 * If requested rate is below the minimum DVCO rate, active the scaler. 843 * In the future the DVCO minimum voltage should be selected based on 844 * chip temperature and the actual minimum rate should be calibrated 845 * at runtime. 846 */ 847 req->scale_bits = DFLL_FREQ_REQ_SCALE_MAX - 1; 848 if (rate < td->dvco_rate_min) { 849 int scale; 850 851 scale = DIV_ROUND_CLOSEST(rate / 1000 * DFLL_FREQ_REQ_SCALE_MAX, 852 td->dvco_rate_min / 1000); 853 if (!scale) { 854 dev_err(td->dev, "%s: Rate %lu is too low\n", 855 __func__, rate); 856 return -EINVAL; 857 } 858 req->scale_bits = scale - 1; 859 rate = td->dvco_rate_min; 860 } 861 862 /* Convert requested rate into frequency request and scale settings */ 863 val = DVCO_RATE_TO_MULT(rate, td->ref_rate); 864 if (val > FREQ_MAX) { 865 dev_err(td->dev, "%s: Rate %lu is above dfll range\n", 866 __func__, rate); 867 return -EINVAL; 868 } 869 req->mult_bits = val; 870 req->dvco_target_rate = MULT_TO_DVCO_RATE(req->mult_bits, td->ref_rate); 871 req->rate = dfll_scale_dvco_rate(req->scale_bits, 872 req->dvco_target_rate); 873 req->lut_index = find_lut_index_for_rate(td, req->dvco_target_rate); 874 if (req->lut_index < 0) 875 return req->lut_index; 876 877 return 0; 878 } 879 880 /** 881 * dfll_set_frequency_request - start the frequency change operation 882 * @td: DFLL instance 883 * @req: rate request structure 884 * 885 * Tell the DFLL to try to change its output frequency to the 886 * frequency represented by @req. DFLL must be in closed-loop mode. 887 */ 888 static void dfll_set_frequency_request(struct tegra_dfll *td, 889 struct dfll_rate_req *req) 890 { 891 u32 val = 0; 892 int force_val; 893 int coef = 128; /* FIXME: td->cg_scale? */; 894 895 force_val = (req->lut_index - td->lut_safe) * coef / td->cg; 896 force_val = clamp(force_val, FORCE_MIN, FORCE_MAX); 897 898 val |= req->mult_bits << DFLL_FREQ_REQ_MULT_SHIFT; 899 val |= req->scale_bits << DFLL_FREQ_REQ_SCALE_SHIFT; 900 val |= ((u32)force_val << DFLL_FREQ_REQ_FORCE_SHIFT) & 901 DFLL_FREQ_REQ_FORCE_MASK; 902 val |= DFLL_FREQ_REQ_FREQ_VALID | DFLL_FREQ_REQ_FORCE_ENABLE; 903 904 dfll_writel(td, val, DFLL_FREQ_REQ); 905 dfll_wmb(td); 906 } 907 908 /** 909 * tegra_dfll_request_rate - set the next rate for the DFLL to tune to 910 * @td: DFLL instance 911 * @rate: clock rate to target 912 * 913 * Convert the requested clock rate @rate into the DFLL control logic 914 * settings. In closed-loop mode, update new settings immediately to 915 * adjust DFLL output rate accordingly. Otherwise, just save them 916 * until the next switch to closed loop. Returns 0 upon success, 917 * -EPERM if the DFLL driver has not yet been initialized, or -EINVAL 918 * if @rate is outside the DFLL's tunable range. 919 */ 920 static int dfll_request_rate(struct tegra_dfll *td, unsigned long rate) 921 { 922 int ret; 923 struct dfll_rate_req req; 924 925 if (td->mode == DFLL_UNINITIALIZED) { 926 dev_err(td->dev, "%s: Cannot set DFLL rate in %s mode\n", 927 __func__, mode_name[td->mode]); 928 return -EPERM; 929 } 930 931 ret = dfll_calculate_rate_request(td, &req, rate); 932 if (ret) 933 return ret; 934 935 td->last_unrounded_rate = rate; 936 td->last_req = req; 937 938 if (td->mode == DFLL_CLOSED_LOOP) 939 dfll_set_frequency_request(td, &td->last_req); 940 941 return 0; 942 } 943 944 /* 945 * DFLL enable/disable & open-loop <-> closed-loop transitions 946 */ 947 948 /** 949 * dfll_disable - switch from open-loop mode to disabled mode 950 * @td: DFLL instance 951 * 952 * Switch from OPEN_LOOP state to DISABLED state. Returns 0 upon success 953 * or -EPERM if the DFLL is not currently in open-loop mode. 954 */ 955 static int dfll_disable(struct tegra_dfll *td) 956 { 957 if (td->mode != DFLL_OPEN_LOOP) { 958 dev_err(td->dev, "cannot disable DFLL in %s mode\n", 959 mode_name[td->mode]); 960 return -EINVAL; 961 } 962 963 dfll_set_mode(td, DFLL_DISABLED); 964 pm_runtime_put_sync(td->dev); 965 966 return 0; 967 } 968 969 /** 970 * dfll_enable - switch a disabled DFLL to open-loop mode 971 * @td: DFLL instance 972 * 973 * Switch from DISABLED state to OPEN_LOOP state. Returns 0 upon success 974 * or -EPERM if the DFLL is not currently disabled. 975 */ 976 static int dfll_enable(struct tegra_dfll *td) 977 { 978 if (td->mode != DFLL_DISABLED) { 979 dev_err(td->dev, "cannot enable DFLL in %s mode\n", 980 mode_name[td->mode]); 981 return -EPERM; 982 } 983 984 pm_runtime_get_sync(td->dev); 985 dfll_set_mode(td, DFLL_OPEN_LOOP); 986 987 return 0; 988 } 989 990 /** 991 * dfll_set_open_loop_config - prepare to switch to open-loop mode 992 * @td: DFLL instance 993 * 994 * Prepare to switch the DFLL to open-loop mode. This switches the 995 * DFLL to the low-voltage tuning range, ensures that I2C output 996 * forcing is disabled, and disables the output clock rate scaler. 997 * The DFLL's low-voltage tuning range parameters must be 998 * characterized to keep the downstream device stable at any DVCO 999 * input voltage. No return value. 1000 */ 1001 static void dfll_set_open_loop_config(struct tegra_dfll *td) 1002 { 1003 u32 val; 1004 1005 /* always tune low (safe) in open loop */ 1006 if (td->tune_range != DFLL_TUNE_LOW) 1007 dfll_tune_low(td); 1008 1009 val = dfll_readl(td, DFLL_FREQ_REQ); 1010 val |= DFLL_FREQ_REQ_SCALE_MASK; 1011 val &= ~DFLL_FREQ_REQ_FORCE_ENABLE; 1012 dfll_writel(td, val, DFLL_FREQ_REQ); 1013 dfll_wmb(td); 1014 } 1015 1016 /** 1017 * tegra_dfll_lock - switch from open-loop to closed-loop mode 1018 * @td: DFLL instance 1019 * 1020 * Switch from OPEN_LOOP state to CLOSED_LOOP state. Returns 0 upon success, 1021 * -EINVAL if the DFLL's target rate hasn't been set yet, or -EPERM if the 1022 * DFLL is not currently in open-loop mode. 1023 */ 1024 static int dfll_lock(struct tegra_dfll *td) 1025 { 1026 struct dfll_rate_req *req = &td->last_req; 1027 1028 switch (td->mode) { 1029 case DFLL_CLOSED_LOOP: 1030 return 0; 1031 1032 case DFLL_OPEN_LOOP: 1033 if (req->rate == 0) { 1034 dev_err(td->dev, "%s: Cannot lock DFLL at rate 0\n", 1035 __func__); 1036 return -EINVAL; 1037 } 1038 1039 if (td->pmu_if == TEGRA_DFLL_PMU_PWM) 1040 dfll_pwm_set_output_enabled(td, true); 1041 else 1042 dfll_i2c_set_output_enabled(td, true); 1043 1044 dfll_set_mode(td, DFLL_CLOSED_LOOP); 1045 dfll_set_frequency_request(td, req); 1046 dfll_set_force_output_enabled(td, false); 1047 return 0; 1048 1049 default: 1050 BUG_ON(td->mode > DFLL_CLOSED_LOOP); 1051 dev_err(td->dev, "%s: Cannot lock DFLL in %s mode\n", 1052 __func__, mode_name[td->mode]); 1053 return -EPERM; 1054 } 1055 } 1056 1057 /** 1058 * tegra_dfll_unlock - switch from closed-loop to open-loop mode 1059 * @td: DFLL instance 1060 * 1061 * Switch from CLOSED_LOOP state to OPEN_LOOP state. Returns 0 upon success, 1062 * or -EPERM if the DFLL is not currently in open-loop mode. 1063 */ 1064 static int dfll_unlock(struct tegra_dfll *td) 1065 { 1066 switch (td->mode) { 1067 case DFLL_CLOSED_LOOP: 1068 dfll_set_open_loop_config(td); 1069 dfll_set_mode(td, DFLL_OPEN_LOOP); 1070 if (td->pmu_if == TEGRA_DFLL_PMU_PWM) 1071 dfll_pwm_set_output_enabled(td, false); 1072 else 1073 dfll_i2c_set_output_enabled(td, false); 1074 return 0; 1075 1076 case DFLL_OPEN_LOOP: 1077 return 0; 1078 1079 default: 1080 BUG_ON(td->mode > DFLL_CLOSED_LOOP); 1081 dev_err(td->dev, "%s: Cannot unlock DFLL in %s mode\n", 1082 __func__, mode_name[td->mode]); 1083 return -EPERM; 1084 } 1085 } 1086 1087 /* 1088 * Clock framework integration 1089 * 1090 * When the DFLL is being controlled by the CCF, always enter closed loop 1091 * mode when the clk is enabled. This requires that a DFLL rate request 1092 * has been set beforehand, which implies that a clk_set_rate() call is 1093 * always required before a clk_enable(). 1094 */ 1095 1096 static int dfll_clk_is_enabled(struct clk_hw *hw) 1097 { 1098 struct tegra_dfll *td = clk_hw_to_dfll(hw); 1099 1100 return dfll_is_running(td); 1101 } 1102 1103 static int dfll_clk_enable(struct clk_hw *hw) 1104 { 1105 struct tegra_dfll *td = clk_hw_to_dfll(hw); 1106 int ret; 1107 1108 ret = dfll_enable(td); 1109 if (ret) 1110 return ret; 1111 1112 ret = dfll_lock(td); 1113 if (ret) 1114 dfll_disable(td); 1115 1116 return ret; 1117 } 1118 1119 static void dfll_clk_disable(struct clk_hw *hw) 1120 { 1121 struct tegra_dfll *td = clk_hw_to_dfll(hw); 1122 int ret; 1123 1124 ret = dfll_unlock(td); 1125 if (!ret) 1126 dfll_disable(td); 1127 } 1128 1129 static unsigned long dfll_clk_recalc_rate(struct clk_hw *hw, 1130 unsigned long parent_rate) 1131 { 1132 struct tegra_dfll *td = clk_hw_to_dfll(hw); 1133 1134 return td->last_unrounded_rate; 1135 } 1136 1137 /* Must use determine_rate since it allows for rates exceeding 2^31-1 */ 1138 static int dfll_clk_determine_rate(struct clk_hw *hw, 1139 struct clk_rate_request *clk_req) 1140 { 1141 struct tegra_dfll *td = clk_hw_to_dfll(hw); 1142 struct dfll_rate_req req; 1143 int ret; 1144 1145 ret = dfll_calculate_rate_request(td, &req, clk_req->rate); 1146 if (ret) 1147 return ret; 1148 1149 /* 1150 * Don't set the rounded rate, since it doesn't really matter as 1151 * the output rate will be voltage controlled anyway, and cpufreq 1152 * freaks out if any rounding happens. 1153 */ 1154 1155 return 0; 1156 } 1157 1158 static int dfll_clk_set_rate(struct clk_hw *hw, unsigned long rate, 1159 unsigned long parent_rate) 1160 { 1161 struct tegra_dfll *td = clk_hw_to_dfll(hw); 1162 1163 return dfll_request_rate(td, rate); 1164 } 1165 1166 static const struct clk_ops dfll_clk_ops = { 1167 .is_enabled = dfll_clk_is_enabled, 1168 .enable = dfll_clk_enable, 1169 .disable = dfll_clk_disable, 1170 .recalc_rate = dfll_clk_recalc_rate, 1171 .determine_rate = dfll_clk_determine_rate, 1172 .set_rate = dfll_clk_set_rate, 1173 }; 1174 1175 static struct clk_init_data dfll_clk_init_data = { 1176 .ops = &dfll_clk_ops, 1177 .num_parents = 0, 1178 }; 1179 1180 /** 1181 * dfll_register_clk - register the DFLL output clock with the clock framework 1182 * @td: DFLL instance 1183 * 1184 * Register the DFLL's output clock with the Linux clock framework and register 1185 * the DFLL driver as an OF clock provider. Returns 0 upon success or -EINVAL 1186 * or -ENOMEM upon failure. 1187 */ 1188 static int dfll_register_clk(struct tegra_dfll *td) 1189 { 1190 int ret; 1191 1192 dfll_clk_init_data.name = td->output_clock_name; 1193 td->dfll_clk_hw.init = &dfll_clk_init_data; 1194 1195 td->dfll_clk = clk_register(td->dev, &td->dfll_clk_hw); 1196 if (IS_ERR(td->dfll_clk)) { 1197 dev_err(td->dev, "DFLL clock registration error\n"); 1198 return -EINVAL; 1199 } 1200 1201 ret = of_clk_add_provider(td->dev->of_node, of_clk_src_simple_get, 1202 td->dfll_clk); 1203 if (ret) { 1204 dev_err(td->dev, "of_clk_add_provider() failed\n"); 1205 1206 clk_unregister(td->dfll_clk); 1207 return ret; 1208 } 1209 1210 return 0; 1211 } 1212 1213 /** 1214 * dfll_unregister_clk - unregister the DFLL output clock 1215 * @td: DFLL instance 1216 * 1217 * Unregister the DFLL's output clock from the Linux clock framework 1218 * and from clkdev. No return value. 1219 */ 1220 static void dfll_unregister_clk(struct tegra_dfll *td) 1221 { 1222 of_clk_del_provider(td->dev->of_node); 1223 clk_unregister(td->dfll_clk); 1224 td->dfll_clk = NULL; 1225 } 1226 1227 /* 1228 * Debugfs interface 1229 */ 1230 1231 #ifdef CONFIG_DEBUG_FS 1232 /* 1233 * Monitor control 1234 */ 1235 1236 /** 1237 * dfll_calc_monitored_rate - convert DFLL_MONITOR_DATA_VAL rate into real freq 1238 * @monitor_data: value read from the DFLL_MONITOR_DATA_VAL bitfield 1239 * @ref_rate: DFLL reference clock rate 1240 * 1241 * Convert @monitor_data from DFLL_MONITOR_DATA_VAL units into cycles 1242 * per second. Returns the converted value. 1243 */ 1244 static u64 dfll_calc_monitored_rate(u32 monitor_data, 1245 unsigned long ref_rate) 1246 { 1247 return monitor_data * (ref_rate / REF_CLK_CYC_PER_DVCO_SAMPLE); 1248 } 1249 1250 /** 1251 * dfll_read_monitor_rate - return the DFLL's output rate from internal monitor 1252 * @td: DFLL instance 1253 * 1254 * If the DFLL is enabled, return the last rate reported by the DFLL's 1255 * internal monitoring hardware. This works in both open-loop and 1256 * closed-loop mode, and takes the output scaler setting into account. 1257 * Assumes that the monitor was programmed to monitor frequency before 1258 * the sample period started. If the driver believes that the DFLL is 1259 * currently uninitialized or disabled, it will return 0, since 1260 * otherwise the DFLL monitor data register will return the last 1261 * measured rate from when the DFLL was active. 1262 */ 1263 static u64 dfll_read_monitor_rate(struct tegra_dfll *td) 1264 { 1265 u32 v, s; 1266 u64 pre_scaler_rate, post_scaler_rate; 1267 1268 if (!dfll_is_running(td)) 1269 return 0; 1270 1271 v = dfll_readl(td, DFLL_MONITOR_DATA); 1272 v = (v & DFLL_MONITOR_DATA_VAL_MASK) >> DFLL_MONITOR_DATA_VAL_SHIFT; 1273 pre_scaler_rate = dfll_calc_monitored_rate(v, td->ref_rate); 1274 1275 s = dfll_readl(td, DFLL_FREQ_REQ); 1276 s = (s & DFLL_FREQ_REQ_SCALE_MASK) >> DFLL_FREQ_REQ_SCALE_SHIFT; 1277 post_scaler_rate = dfll_scale_dvco_rate(s, pre_scaler_rate); 1278 1279 return post_scaler_rate; 1280 } 1281 1282 static int attr_enable_get(void *data, u64 *val) 1283 { 1284 struct tegra_dfll *td = data; 1285 1286 *val = dfll_is_running(td); 1287 1288 return 0; 1289 } 1290 static int attr_enable_set(void *data, u64 val) 1291 { 1292 struct tegra_dfll *td = data; 1293 1294 return val ? dfll_enable(td) : dfll_disable(td); 1295 } 1296 DEFINE_DEBUGFS_ATTRIBUTE(enable_fops, attr_enable_get, attr_enable_set, 1297 "%llu\n"); 1298 1299 static int attr_lock_get(void *data, u64 *val) 1300 { 1301 struct tegra_dfll *td = data; 1302 1303 *val = (td->mode == DFLL_CLOSED_LOOP); 1304 1305 return 0; 1306 } 1307 static int attr_lock_set(void *data, u64 val) 1308 { 1309 struct tegra_dfll *td = data; 1310 1311 return val ? dfll_lock(td) : dfll_unlock(td); 1312 } 1313 DEFINE_DEBUGFS_ATTRIBUTE(lock_fops, attr_lock_get, attr_lock_set, "%llu\n"); 1314 1315 static int attr_rate_get(void *data, u64 *val) 1316 { 1317 struct tegra_dfll *td = data; 1318 1319 *val = dfll_read_monitor_rate(td); 1320 1321 return 0; 1322 } 1323 1324 static int attr_rate_set(void *data, u64 val) 1325 { 1326 struct tegra_dfll *td = data; 1327 1328 return dfll_request_rate(td, val); 1329 } 1330 DEFINE_DEBUGFS_ATTRIBUTE(rate_fops, attr_rate_get, attr_rate_set, "%llu\n"); 1331 1332 static int attr_registers_show(struct seq_file *s, void *data) 1333 { 1334 u32 val, offs; 1335 struct tegra_dfll *td = s->private; 1336 1337 seq_puts(s, "CONTROL REGISTERS:\n"); 1338 for (offs = 0; offs <= DFLL_MONITOR_DATA; offs += 4) { 1339 if (offs == DFLL_OUTPUT_CFG) 1340 val = dfll_i2c_readl(td, offs); 1341 else 1342 val = dfll_readl(td, offs); 1343 seq_printf(s, "[0x%02x] = 0x%08x\n", offs, val); 1344 } 1345 1346 seq_puts(s, "\nI2C and INTR REGISTERS:\n"); 1347 for (offs = DFLL_I2C_CFG; offs <= DFLL_I2C_STS; offs += 4) 1348 seq_printf(s, "[0x%02x] = 0x%08x\n", offs, 1349 dfll_i2c_readl(td, offs)); 1350 for (offs = DFLL_INTR_STS; offs <= DFLL_INTR_EN; offs += 4) 1351 seq_printf(s, "[0x%02x] = 0x%08x\n", offs, 1352 dfll_i2c_readl(td, offs)); 1353 1354 if (td->pmu_if == TEGRA_DFLL_PMU_I2C) { 1355 seq_puts(s, "\nINTEGRATED I2C CONTROLLER REGISTERS:\n"); 1356 offs = DFLL_I2C_CLK_DIVISOR; 1357 seq_printf(s, "[0x%02x] = 0x%08x\n", offs, 1358 __raw_readl(td->i2c_controller_base + offs)); 1359 1360 seq_puts(s, "\nLUT:\n"); 1361 for (offs = 0; offs < 4 * MAX_DFLL_VOLTAGES; offs += 4) 1362 seq_printf(s, "[0x%02x] = 0x%08x\n", offs, 1363 __raw_readl(td->lut_base + offs)); 1364 } 1365 1366 return 0; 1367 } 1368 1369 DEFINE_SHOW_ATTRIBUTE(attr_registers); 1370 1371 static void dfll_debug_init(struct tegra_dfll *td) 1372 { 1373 struct dentry *root; 1374 1375 if (!td || (td->mode == DFLL_UNINITIALIZED)) 1376 return; 1377 1378 root = debugfs_create_dir("tegra_dfll_fcpu", NULL); 1379 td->debugfs_dir = root; 1380 1381 debugfs_create_file_unsafe("enable", 0644, root, td, 1382 &enable_fops); 1383 debugfs_create_file_unsafe("lock", 0444, root, td, &lock_fops); 1384 debugfs_create_file_unsafe("rate", 0444, root, td, &rate_fops); 1385 debugfs_create_file("registers", 0444, root, td, &attr_registers_fops); 1386 } 1387 1388 #else 1389 static void inline dfll_debug_init(struct tegra_dfll *td) { } 1390 #endif /* CONFIG_DEBUG_FS */ 1391 1392 /* 1393 * DFLL initialization 1394 */ 1395 1396 /** 1397 * dfll_set_default_params - program non-output related DFLL parameters 1398 * @td: DFLL instance 1399 * 1400 * During DFLL driver initialization or resume from context loss, 1401 * program parameters for the closed loop integrator, DVCO tuning, 1402 * voltage droop control and monitor control. 1403 */ 1404 static void dfll_set_default_params(struct tegra_dfll *td) 1405 { 1406 u32 val; 1407 1408 val = DIV_ROUND_UP(td->ref_rate, td->sample_rate * 32); 1409 BUG_ON(val > DFLL_CONFIG_DIV_MASK); 1410 dfll_writel(td, val, DFLL_CONFIG); 1411 1412 val = (td->force_mode << DFLL_PARAMS_FORCE_MODE_SHIFT) | 1413 (td->cf << DFLL_PARAMS_CF_PARAM_SHIFT) | 1414 (td->ci << DFLL_PARAMS_CI_PARAM_SHIFT) | 1415 (td->cg << DFLL_PARAMS_CG_PARAM_SHIFT) | 1416 (td->cg_scale ? DFLL_PARAMS_CG_SCALE : 0); 1417 dfll_writel(td, val, DFLL_PARAMS); 1418 1419 dfll_tune_low(td); 1420 dfll_writel(td, td->droop_ctrl, DFLL_DROOP_CTRL); 1421 dfll_writel(td, DFLL_MONITOR_CTRL_FREQ, DFLL_MONITOR_CTRL); 1422 } 1423 1424 /** 1425 * dfll_init_clks - clk_get() the DFLL source clocks 1426 * @td: DFLL instance 1427 * 1428 * Call clk_get() on the DFLL source clocks and save the pointers for later 1429 * use. Returns 0 upon success or error (see devm_clk_get) if one or more 1430 * of the clocks couldn't be looked up. 1431 */ 1432 static int dfll_init_clks(struct tegra_dfll *td) 1433 { 1434 td->ref_clk = devm_clk_get(td->dev, "ref"); 1435 if (IS_ERR(td->ref_clk)) { 1436 dev_err(td->dev, "missing ref clock\n"); 1437 return PTR_ERR(td->ref_clk); 1438 } 1439 1440 td->soc_clk = devm_clk_get(td->dev, "soc"); 1441 if (IS_ERR(td->soc_clk)) { 1442 dev_err(td->dev, "missing soc clock\n"); 1443 return PTR_ERR(td->soc_clk); 1444 } 1445 1446 td->i2c_clk = devm_clk_get(td->dev, "i2c"); 1447 if (IS_ERR(td->i2c_clk)) { 1448 dev_err(td->dev, "missing i2c clock\n"); 1449 return PTR_ERR(td->i2c_clk); 1450 } 1451 td->i2c_clk_rate = clk_get_rate(td->i2c_clk); 1452 1453 return 0; 1454 } 1455 1456 /** 1457 * dfll_init - Prepare the DFLL IP block for use 1458 * @td: DFLL instance 1459 * 1460 * Do everything necessary to prepare the DFLL IP block for use. The 1461 * DFLL will be left in DISABLED state. Called by dfll_probe(). 1462 * Returns 0 upon success, or passes along the error from whatever 1463 * function returned it. 1464 */ 1465 static int dfll_init(struct tegra_dfll *td) 1466 { 1467 int ret; 1468 1469 td->ref_rate = clk_get_rate(td->ref_clk); 1470 if (td->ref_rate != REF_CLOCK_RATE) { 1471 dev_err(td->dev, "unexpected ref clk rate %lu, expecting %lu", 1472 td->ref_rate, REF_CLOCK_RATE); 1473 return -EINVAL; 1474 } 1475 1476 reset_control_deassert(td->dvco_rst); 1477 1478 ret = clk_prepare(td->ref_clk); 1479 if (ret) { 1480 dev_err(td->dev, "failed to prepare ref_clk\n"); 1481 return ret; 1482 } 1483 1484 ret = clk_prepare(td->soc_clk); 1485 if (ret) { 1486 dev_err(td->dev, "failed to prepare soc_clk\n"); 1487 goto di_err1; 1488 } 1489 1490 ret = clk_prepare(td->i2c_clk); 1491 if (ret) { 1492 dev_err(td->dev, "failed to prepare i2c_clk\n"); 1493 goto di_err2; 1494 } 1495 1496 td->last_unrounded_rate = 0; 1497 1498 pm_runtime_enable(td->dev); 1499 pm_runtime_get_sync(td->dev); 1500 1501 dfll_set_mode(td, DFLL_DISABLED); 1502 dfll_set_default_params(td); 1503 1504 if (td->soc->init_clock_trimmers) 1505 td->soc->init_clock_trimmers(); 1506 1507 dfll_set_open_loop_config(td); 1508 1509 dfll_init_out_if(td); 1510 1511 pm_runtime_put_sync(td->dev); 1512 1513 return 0; 1514 1515 di_err2: 1516 clk_unprepare(td->soc_clk); 1517 di_err1: 1518 clk_unprepare(td->ref_clk); 1519 1520 reset_control_assert(td->dvco_rst); 1521 1522 return ret; 1523 } 1524 1525 /* 1526 * DT data fetch 1527 */ 1528 1529 /* 1530 * Find a PMIC voltage register-to-voltage mapping for the given voltage. 1531 * An exact voltage match is required. 1532 */ 1533 static int find_vdd_map_entry_exact(struct tegra_dfll *td, int uV) 1534 { 1535 int i, n_voltages, reg_uV,reg_volt_id, align_step; 1536 1537 if (WARN_ON(td->pmu_if == TEGRA_DFLL_PMU_PWM)) 1538 return -EINVAL; 1539 1540 align_step = uV / td->soc->alignment.step_uv; 1541 n_voltages = regulator_count_voltages(td->vdd_reg); 1542 for (i = 0; i < n_voltages; i++) { 1543 reg_uV = regulator_list_voltage(td->vdd_reg, i); 1544 if (reg_uV < 0) 1545 break; 1546 1547 reg_volt_id = reg_uV / td->soc->alignment.step_uv; 1548 1549 if (align_step == reg_volt_id) 1550 return i; 1551 } 1552 1553 dev_err(td->dev, "no voltage map entry for %d uV\n", uV); 1554 return -EINVAL; 1555 } 1556 1557 /* 1558 * Find a PMIC voltage register-to-voltage mapping for the given voltage, 1559 * rounding up to the closest supported voltage. 1560 * */ 1561 static int find_vdd_map_entry_min(struct tegra_dfll *td, int uV) 1562 { 1563 int i, n_voltages, reg_uV, reg_volt_id, align_step; 1564 1565 if (WARN_ON(td->pmu_if == TEGRA_DFLL_PMU_PWM)) 1566 return -EINVAL; 1567 1568 align_step = uV / td->soc->alignment.step_uv; 1569 n_voltages = regulator_count_voltages(td->vdd_reg); 1570 for (i = 0; i < n_voltages; i++) { 1571 reg_uV = regulator_list_voltage(td->vdd_reg, i); 1572 if (reg_uV < 0) 1573 break; 1574 1575 reg_volt_id = reg_uV / td->soc->alignment.step_uv; 1576 1577 if (align_step <= reg_volt_id) 1578 return i; 1579 } 1580 1581 dev_err(td->dev, "no voltage map entry rounding to %d uV\n", uV); 1582 return -EINVAL; 1583 } 1584 1585 /* 1586 * dfll_build_pwm_lut - build the PWM regulator lookup table 1587 * @td: DFLL instance 1588 * @v_max: Vmax from OPP table 1589 * 1590 * Look-up table in h/w is ignored when PWM is used as DFLL interface to PMIC. 1591 * In this case closed loop output is controlling duty cycle directly. The s/w 1592 * look-up that maps PWM duty cycle to voltage is still built by this function. 1593 */ 1594 static int dfll_build_pwm_lut(struct tegra_dfll *td, unsigned long v_max) 1595 { 1596 int i; 1597 unsigned long rate, reg_volt; 1598 u8 lut_bottom = MAX_DFLL_VOLTAGES; 1599 int v_min = td->soc->cvb->min_millivolts * 1000; 1600 1601 for (i = 0; i < MAX_DFLL_VOLTAGES; i++) { 1602 reg_volt = td->lut_uv[i]; 1603 1604 /* since opp voltage is exact mv */ 1605 reg_volt = (reg_volt / 1000) * 1000; 1606 if (reg_volt > v_max) 1607 break; 1608 1609 td->lut[i] = i; 1610 if ((lut_bottom == MAX_DFLL_VOLTAGES) && (reg_volt >= v_min)) 1611 lut_bottom = i; 1612 } 1613 1614 /* determine voltage boundaries */ 1615 td->lut_size = i; 1616 if ((lut_bottom == MAX_DFLL_VOLTAGES) || 1617 (lut_bottom + 1 >= td->lut_size)) { 1618 dev_err(td->dev, "no voltage above DFLL minimum %d mV\n", 1619 td->soc->cvb->min_millivolts); 1620 return -EINVAL; 1621 } 1622 td->lut_bottom = lut_bottom; 1623 1624 /* determine rate boundaries */ 1625 rate = get_dvco_rate_below(td, td->lut_bottom); 1626 if (!rate) { 1627 dev_err(td->dev, "no opp below DFLL minimum voltage %d mV\n", 1628 td->soc->cvb->min_millivolts); 1629 return -EINVAL; 1630 } 1631 td->dvco_rate_min = rate; 1632 1633 return 0; 1634 } 1635 1636 /** 1637 * dfll_build_i2c_lut - build the I2C voltage register lookup table 1638 * @td: DFLL instance 1639 * @v_max: Vmax from OPP table 1640 * 1641 * The DFLL hardware has 33 bytes of look-up table RAM that must be filled with 1642 * PMIC voltage register values that span the entire DFLL operating range. 1643 * This function builds the look-up table based on the OPP table provided by 1644 * the soc-specific platform driver (td->soc->opp_dev) and the PMIC 1645 * register-to-voltage mapping queried from the regulator framework. 1646 * 1647 * On success, fills in td->lut and returns 0, or -err on failure. 1648 */ 1649 static int dfll_build_i2c_lut(struct tegra_dfll *td, unsigned long v_max) 1650 { 1651 unsigned long rate, v, v_opp; 1652 int ret = -EINVAL; 1653 int j, selector, lut; 1654 1655 v = td->soc->cvb->min_millivolts * 1000; 1656 lut = find_vdd_map_entry_exact(td, v); 1657 if (lut < 0) 1658 goto out; 1659 td->lut[0] = lut; 1660 td->lut_bottom = 0; 1661 1662 for (j = 1, rate = 0; ; rate++) { 1663 struct dev_pm_opp *opp; 1664 1665 opp = dev_pm_opp_find_freq_ceil(td->soc->dev, &rate); 1666 if (IS_ERR(opp)) 1667 break; 1668 v_opp = dev_pm_opp_get_voltage(opp); 1669 1670 if (v_opp <= td->soc->cvb->min_millivolts * 1000) 1671 td->dvco_rate_min = dev_pm_opp_get_freq(opp); 1672 1673 dev_pm_opp_put(opp); 1674 1675 for (;;) { 1676 v += max(1UL, (v_max - v) / (MAX_DFLL_VOLTAGES - j)); 1677 if (v >= v_opp) 1678 break; 1679 1680 selector = find_vdd_map_entry_min(td, v); 1681 if (selector < 0) 1682 goto out; 1683 if (selector != td->lut[j - 1]) 1684 td->lut[j++] = selector; 1685 } 1686 1687 v = (j == MAX_DFLL_VOLTAGES - 1) ? v_max : v_opp; 1688 selector = find_vdd_map_entry_exact(td, v); 1689 if (selector < 0) 1690 goto out; 1691 if (selector != td->lut[j - 1]) 1692 td->lut[j++] = selector; 1693 1694 if (v >= v_max) 1695 break; 1696 } 1697 td->lut_size = j; 1698 1699 if (!td->dvco_rate_min) 1700 dev_err(td->dev, "no opp above DFLL minimum voltage %d mV\n", 1701 td->soc->cvb->min_millivolts); 1702 else { 1703 ret = 0; 1704 for (j = 0; j < td->lut_size; j++) 1705 td->lut_uv[j] = 1706 regulator_list_voltage(td->vdd_reg, 1707 td->lut[j]); 1708 } 1709 1710 out: 1711 return ret; 1712 } 1713 1714 static int dfll_build_lut(struct tegra_dfll *td) 1715 { 1716 unsigned long rate, v_max; 1717 struct dev_pm_opp *opp; 1718 1719 rate = ULONG_MAX; 1720 opp = dev_pm_opp_find_freq_floor(td->soc->dev, &rate); 1721 if (IS_ERR(opp)) { 1722 dev_err(td->dev, "couldn't get vmax opp, empty opp table?\n"); 1723 return -EINVAL; 1724 } 1725 v_max = dev_pm_opp_get_voltage(opp); 1726 dev_pm_opp_put(opp); 1727 1728 if (td->pmu_if == TEGRA_DFLL_PMU_PWM) 1729 return dfll_build_pwm_lut(td, v_max); 1730 else 1731 return dfll_build_i2c_lut(td, v_max); 1732 } 1733 1734 /** 1735 * read_dt_param - helper function for reading required parameters from the DT 1736 * @td: DFLL instance 1737 * @param: DT property name 1738 * @dest: output pointer for the value read 1739 * 1740 * Read a required numeric parameter from the DFLL device node, or complain 1741 * if the property doesn't exist. Returns a boolean indicating success for 1742 * easy chaining of multiple calls to this function. 1743 */ 1744 static bool read_dt_param(struct tegra_dfll *td, const char *param, u32 *dest) 1745 { 1746 int err = of_property_read_u32(td->dev->of_node, param, dest); 1747 1748 if (err < 0) { 1749 dev_err(td->dev, "failed to read DT parameter %s: %d\n", 1750 param, err); 1751 return false; 1752 } 1753 1754 return true; 1755 } 1756 1757 /** 1758 * dfll_fetch_i2c_params - query PMIC I2C params from DT & regulator subsystem 1759 * @td: DFLL instance 1760 * 1761 * Read all the parameters required for operation in I2C mode. The parameters 1762 * can originate from the device tree or the regulator subsystem. 1763 * Returns 0 on success or -err on failure. 1764 */ 1765 static int dfll_fetch_i2c_params(struct tegra_dfll *td) 1766 { 1767 struct regmap *regmap; 1768 struct device *i2c_dev; 1769 struct i2c_client *i2c_client; 1770 int vsel_reg, vsel_mask; 1771 int ret; 1772 1773 if (!read_dt_param(td, "nvidia,i2c-fs-rate", &td->i2c_fs_rate)) 1774 return -EINVAL; 1775 1776 regmap = regulator_get_regmap(td->vdd_reg); 1777 i2c_dev = regmap_get_device(regmap); 1778 i2c_client = to_i2c_client(i2c_dev); 1779 1780 td->i2c_slave_addr = i2c_client->addr; 1781 1782 ret = regulator_get_hardware_vsel_register(td->vdd_reg, 1783 &vsel_reg, 1784 &vsel_mask); 1785 if (ret < 0) { 1786 dev_err(td->dev, 1787 "regulator unsuitable for DFLL I2C operation\n"); 1788 return -EINVAL; 1789 } 1790 td->i2c_reg = vsel_reg; 1791 1792 return 0; 1793 } 1794 1795 static int dfll_fetch_pwm_params(struct tegra_dfll *td) 1796 { 1797 int ret, i; 1798 u32 pwm_period; 1799 1800 if (!td->soc->alignment.step_uv || !td->soc->alignment.offset_uv) { 1801 dev_err(td->dev, 1802 "Missing step or alignment info for PWM regulator"); 1803 return -EINVAL; 1804 } 1805 for (i = 0; i < MAX_DFLL_VOLTAGES; i++) 1806 td->lut_uv[i] = td->soc->alignment.offset_uv + 1807 i * td->soc->alignment.step_uv; 1808 1809 ret = read_dt_param(td, "nvidia,pwm-tristate-microvolts", 1810 &td->reg_init_uV); 1811 if (!ret) { 1812 dev_err(td->dev, "couldn't get initialized voltage\n"); 1813 return ret; 1814 } 1815 1816 ret = read_dt_param(td, "nvidia,pwm-period-nanoseconds", &pwm_period); 1817 if (!ret) { 1818 dev_err(td->dev, "couldn't get PWM period\n"); 1819 return ret; 1820 } 1821 td->pwm_rate = (NSEC_PER_SEC / pwm_period) * (MAX_DFLL_VOLTAGES - 1); 1822 1823 td->pwm_pin = devm_pinctrl_get(td->dev); 1824 if (IS_ERR(td->pwm_pin)) { 1825 dev_err(td->dev, "DT: missing pinctrl device\n"); 1826 return PTR_ERR(td->pwm_pin); 1827 } 1828 1829 td->pwm_enable_state = pinctrl_lookup_state(td->pwm_pin, 1830 "dvfs_pwm_enable"); 1831 if (IS_ERR(td->pwm_enable_state)) { 1832 dev_err(td->dev, "DT: missing pwm enabled state\n"); 1833 return PTR_ERR(td->pwm_enable_state); 1834 } 1835 1836 td->pwm_disable_state = pinctrl_lookup_state(td->pwm_pin, 1837 "dvfs_pwm_disable"); 1838 if (IS_ERR(td->pwm_disable_state)) { 1839 dev_err(td->dev, "DT: missing pwm disabled state\n"); 1840 return PTR_ERR(td->pwm_disable_state); 1841 } 1842 1843 return 0; 1844 } 1845 1846 /** 1847 * dfll_fetch_common_params - read DFLL parameters from the device tree 1848 * @td: DFLL instance 1849 * 1850 * Read all the DT parameters that are common to both I2C and PWM operation. 1851 * Returns 0 on success or -EINVAL on any failure. 1852 */ 1853 static int dfll_fetch_common_params(struct tegra_dfll *td) 1854 { 1855 bool ok = true; 1856 1857 ok &= read_dt_param(td, "nvidia,droop-ctrl", &td->droop_ctrl); 1858 ok &= read_dt_param(td, "nvidia,sample-rate", &td->sample_rate); 1859 ok &= read_dt_param(td, "nvidia,force-mode", &td->force_mode); 1860 ok &= read_dt_param(td, "nvidia,cf", &td->cf); 1861 ok &= read_dt_param(td, "nvidia,ci", &td->ci); 1862 ok &= read_dt_param(td, "nvidia,cg", &td->cg); 1863 td->cg_scale = of_property_read_bool(td->dev->of_node, 1864 "nvidia,cg-scale"); 1865 1866 if (of_property_read_string(td->dev->of_node, "clock-output-names", 1867 &td->output_clock_name)) { 1868 dev_err(td->dev, "missing clock-output-names property\n"); 1869 ok = false; 1870 } 1871 1872 return ok ? 0 : -EINVAL; 1873 } 1874 1875 /* 1876 * API exported to per-SoC platform drivers 1877 */ 1878 1879 /** 1880 * tegra_dfll_register - probe a Tegra DFLL device 1881 * @pdev: DFLL platform_device * 1882 * @soc: Per-SoC integration and characterization data for this DFLL instance 1883 * 1884 * Probe and initialize a DFLL device instance. Intended to be called 1885 * by a SoC-specific shim driver that passes in per-SoC integration 1886 * and configuration data via @soc. Returns 0 on success or -err on failure. 1887 */ 1888 int tegra_dfll_register(struct platform_device *pdev, 1889 struct tegra_dfll_soc_data *soc) 1890 { 1891 struct resource *mem; 1892 struct tegra_dfll *td; 1893 int ret; 1894 1895 if (!soc) { 1896 dev_err(&pdev->dev, "no tegra_dfll_soc_data provided\n"); 1897 return -EINVAL; 1898 } 1899 1900 td = devm_kzalloc(&pdev->dev, sizeof(*td), GFP_KERNEL); 1901 if (!td) 1902 return -ENOMEM; 1903 td->dev = &pdev->dev; 1904 platform_set_drvdata(pdev, td); 1905 1906 td->soc = soc; 1907 1908 td->dvco_rst = devm_reset_control_get(td->dev, "dvco"); 1909 if (IS_ERR(td->dvco_rst)) { 1910 dev_err(td->dev, "couldn't get dvco reset\n"); 1911 return PTR_ERR(td->dvco_rst); 1912 } 1913 1914 ret = dfll_fetch_common_params(td); 1915 if (ret) { 1916 dev_err(td->dev, "couldn't parse device tree parameters\n"); 1917 return ret; 1918 } 1919 1920 if (of_property_read_bool(td->dev->of_node, "nvidia,pwm-to-pmic")) { 1921 td->pmu_if = TEGRA_DFLL_PMU_PWM; 1922 ret = dfll_fetch_pwm_params(td); 1923 } else { 1924 td->vdd_reg = devm_regulator_get(td->dev, "vdd-cpu"); 1925 if (IS_ERR(td->vdd_reg)) { 1926 dev_err(td->dev, "couldn't get vdd_cpu regulator\n"); 1927 return PTR_ERR(td->vdd_reg); 1928 } 1929 td->pmu_if = TEGRA_DFLL_PMU_I2C; 1930 ret = dfll_fetch_i2c_params(td); 1931 } 1932 if (ret) 1933 return ret; 1934 1935 ret = dfll_build_lut(td); 1936 if (ret) { 1937 dev_err(td->dev, "couldn't build LUT\n"); 1938 return ret; 1939 } 1940 1941 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1942 if (!mem) { 1943 dev_err(td->dev, "no control register resource\n"); 1944 return -ENODEV; 1945 } 1946 1947 td->base = devm_ioremap(td->dev, mem->start, resource_size(mem)); 1948 if (!td->base) { 1949 dev_err(td->dev, "couldn't ioremap DFLL control registers\n"); 1950 return -ENODEV; 1951 } 1952 1953 mem = platform_get_resource(pdev, IORESOURCE_MEM, 1); 1954 if (!mem) { 1955 dev_err(td->dev, "no i2c_base resource\n"); 1956 return -ENODEV; 1957 } 1958 1959 td->i2c_base = devm_ioremap(td->dev, mem->start, resource_size(mem)); 1960 if (!td->i2c_base) { 1961 dev_err(td->dev, "couldn't ioremap i2c_base resource\n"); 1962 return -ENODEV; 1963 } 1964 1965 mem = platform_get_resource(pdev, IORESOURCE_MEM, 2); 1966 if (!mem) { 1967 dev_err(td->dev, "no i2c_controller_base resource\n"); 1968 return -ENODEV; 1969 } 1970 1971 td->i2c_controller_base = devm_ioremap(td->dev, mem->start, 1972 resource_size(mem)); 1973 if (!td->i2c_controller_base) { 1974 dev_err(td->dev, 1975 "couldn't ioremap i2c_controller_base resource\n"); 1976 return -ENODEV; 1977 } 1978 1979 mem = platform_get_resource(pdev, IORESOURCE_MEM, 3); 1980 if (!mem) { 1981 dev_err(td->dev, "no lut_base resource\n"); 1982 return -ENODEV; 1983 } 1984 1985 td->lut_base = devm_ioremap(td->dev, mem->start, resource_size(mem)); 1986 if (!td->lut_base) { 1987 dev_err(td->dev, 1988 "couldn't ioremap lut_base resource\n"); 1989 return -ENODEV; 1990 } 1991 1992 ret = dfll_init_clks(td); 1993 if (ret) { 1994 dev_err(&pdev->dev, "DFLL clock init error\n"); 1995 return ret; 1996 } 1997 1998 /* Enable the clocks and set the device up */ 1999 ret = dfll_init(td); 2000 if (ret) 2001 return ret; 2002 2003 ret = dfll_register_clk(td); 2004 if (ret) { 2005 dev_err(&pdev->dev, "DFLL clk registration failed\n"); 2006 return ret; 2007 } 2008 2009 dfll_debug_init(td); 2010 2011 return 0; 2012 } 2013 EXPORT_SYMBOL(tegra_dfll_register); 2014 2015 /** 2016 * tegra_dfll_unregister - release all of the DFLL driver resources for a device 2017 * @pdev: DFLL platform_device * 2018 * 2019 * Unbind this driver from the DFLL hardware device represented by 2020 * @pdev. The DFLL must be disabled for this to succeed. Returns a 2021 * soc pointer upon success or -EBUSY if the DFLL is still active. 2022 */ 2023 struct tegra_dfll_soc_data *tegra_dfll_unregister(struct platform_device *pdev) 2024 { 2025 struct tegra_dfll *td = platform_get_drvdata(pdev); 2026 2027 /* Try to prevent removal while the DFLL is active */ 2028 if (td->mode != DFLL_DISABLED) { 2029 dev_err(&pdev->dev, 2030 "must disable DFLL before removing driver\n"); 2031 return ERR_PTR(-EBUSY); 2032 } 2033 2034 debugfs_remove_recursive(td->debugfs_dir); 2035 2036 dfll_unregister_clk(td); 2037 pm_runtime_disable(&pdev->dev); 2038 2039 clk_unprepare(td->ref_clk); 2040 clk_unprepare(td->soc_clk); 2041 clk_unprepare(td->i2c_clk); 2042 2043 reset_control_assert(td->dvco_rst); 2044 2045 return td->soc; 2046 } 2047 EXPORT_SYMBOL(tegra_dfll_unregister); 2048