162306a36Sopenharmony_ciNVIDIA Tegra124 DFLL FCPU clocksource 262306a36Sopenharmony_ci 362306a36Sopenharmony_ciThis binding uses the common clock binding: 462306a36Sopenharmony_ciDocumentation/devicetree/bindings/clock/clock-bindings.txt 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciThe DFLL IP block on Tegra is a root clocksource designed for clocking 762306a36Sopenharmony_cithe fast CPU cluster. It consists of a free-running voltage controlled 862306a36Sopenharmony_cioscillator connected to the CPU voltage rail (VDD_CPU), and a closed loop 962306a36Sopenharmony_cicontrol module that will automatically adjust the VDD_CPU voltage by 1062306a36Sopenharmony_cicommunicating with an off-chip PMIC either via an I2C bus or via PWM signals. 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciRequired properties: 1362306a36Sopenharmony_ci- compatible : should be one of: 1462306a36Sopenharmony_ci - "nvidia,tegra124-dfll": for Tegra124 1562306a36Sopenharmony_ci - "nvidia,tegra210-dfll": for Tegra210 1662306a36Sopenharmony_ci- reg : Defines the following set of registers, in the order listed: 1762306a36Sopenharmony_ci - registers for the DFLL control logic. 1862306a36Sopenharmony_ci - registers for the I2C output logic. 1962306a36Sopenharmony_ci - registers for the integrated I2C master controller. 2062306a36Sopenharmony_ci - look-up table RAM for voltage register values. 2162306a36Sopenharmony_ci- interrupts: Should contain the DFLL block interrupt. 2262306a36Sopenharmony_ci- clocks: Must contain an entry for each entry in clock-names. 2362306a36Sopenharmony_ci See clock-bindings.txt for details. 2462306a36Sopenharmony_ci- clock-names: Must include the following entries: 2562306a36Sopenharmony_ci - soc: Clock source for the DFLL control logic. 2662306a36Sopenharmony_ci - ref: The closed loop reference clock 2762306a36Sopenharmony_ci - i2c: Clock source for the integrated I2C master. 2862306a36Sopenharmony_ci- resets: Must contain an entry for each entry in reset-names. 2962306a36Sopenharmony_ci See ../reset/reset.txt for details. 3062306a36Sopenharmony_ci- reset-names: Must include the following entries: 3162306a36Sopenharmony_ci - dvco: Reset control for the DFLL DVCO. 3262306a36Sopenharmony_ci- #clock-cells: Must be 0. 3362306a36Sopenharmony_ci- clock-output-names: Name of the clock output. 3462306a36Sopenharmony_ci- vdd-cpu-supply: Regulator for the CPU voltage rail that the DFLL 3562306a36Sopenharmony_ci hardware will start controlling. The regulator will be queried for 3662306a36Sopenharmony_ci the I2C register, control values and supported voltages. 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciRequired properties for the control loop parameters: 3962306a36Sopenharmony_ci- nvidia,sample-rate: Sample rate of the DFLL control loop. 4062306a36Sopenharmony_ci- nvidia,droop-ctrl: See the register CL_DVFS_DROOP_CTRL in the TRM. 4162306a36Sopenharmony_ci- nvidia,force-mode: See the field DFLL_PARAMS_FORCE_MODE in the TRM. 4262306a36Sopenharmony_ci- nvidia,cf: Numeric value, see the field DFLL_PARAMS_CF_PARAM in the TRM. 4362306a36Sopenharmony_ci- nvidia,ci: Numeric value, see the field DFLL_PARAMS_CI_PARAM in the TRM. 4462306a36Sopenharmony_ci- nvidia,cg: Numeric value, see the field DFLL_PARAMS_CG_PARAM in the TRM. 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciOptional properties for the control loop parameters: 4762306a36Sopenharmony_ci- nvidia,cg-scale: Boolean value, see the field DFLL_PARAMS_CG_SCALE in the TRM. 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciOptional properties for mode selection: 5062306a36Sopenharmony_ci- nvidia,pwm-to-pmic: Use PWM to control regulator rather then I2C. 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ciRequired properties for I2C mode: 5362306a36Sopenharmony_ci- nvidia,i2c-fs-rate: I2C transfer rate, if using full speed mode. 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciRequired properties for PWM mode: 5662306a36Sopenharmony_ci- nvidia,pwm-period-nanoseconds: period of PWM square wave in nanoseconds. 5762306a36Sopenharmony_ci- nvidia,pwm-tristate-microvolts: Regulator voltage in micro volts when PWM 5862306a36Sopenharmony_ci control is disabled and the PWM output is tristated. Note that this voltage is 5962306a36Sopenharmony_ci configured in hardware, typically via a resistor divider. 6062306a36Sopenharmony_ci- nvidia,pwm-min-microvolts: Regulator voltage in micro volts when PWM control 6162306a36Sopenharmony_ci is enabled and PWM output is low. Hence, this is the minimum output voltage 6262306a36Sopenharmony_ci that the regulator supports when PWM control is enabled. 6362306a36Sopenharmony_ci- nvidia,pwm-voltage-step-microvolts: Voltage increase in micro volts 6462306a36Sopenharmony_ci corresponding to a 1/33th increase in duty cycle. Eg the voltage for 2/33th 6562306a36Sopenharmony_ci duty cycle would be: nvidia,pwm-min-microvolts + 6662306a36Sopenharmony_ci nvidia,pwm-voltage-step-microvolts * 2. 6762306a36Sopenharmony_ci- pinctrl-0: I/O pad configuration when PWM control is enabled. 6862306a36Sopenharmony_ci- pinctrl-1: I/O pad configuration when PWM control is disabled. 6962306a36Sopenharmony_ci- pinctrl-names: must include the following entries: 7062306a36Sopenharmony_ci - dvfs_pwm_enable: I/O pad configuration when PWM control is enabled. 7162306a36Sopenharmony_ci - dvfs_pwm_disable: I/O pad configuration when PWM control is disabled. 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ciExample for I2C: 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciclock@70110000 { 7662306a36Sopenharmony_ci compatible = "nvidia,tegra124-dfll"; 7762306a36Sopenharmony_ci reg = <0 0x70110000 0 0x100>, /* DFLL control */ 7862306a36Sopenharmony_ci <0 0x70110000 0 0x100>, /* I2C output control */ 7962306a36Sopenharmony_ci <0 0x70110100 0 0x100>, /* Integrated I2C controller */ 8062306a36Sopenharmony_ci <0 0x70110200 0 0x100>; /* Look-up table RAM */ 8162306a36Sopenharmony_ci interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; 8262306a36Sopenharmony_ci clocks = <&tegra_car TEGRA124_CLK_DFLL_SOC>, 8362306a36Sopenharmony_ci <&tegra_car TEGRA124_CLK_DFLL_REF>, 8462306a36Sopenharmony_ci <&tegra_car TEGRA124_CLK_I2C5>; 8562306a36Sopenharmony_ci clock-names = "soc", "ref", "i2c"; 8662306a36Sopenharmony_ci resets = <&tegra_car TEGRA124_RST_DFLL_DVCO>; 8762306a36Sopenharmony_ci reset-names = "dvco"; 8862306a36Sopenharmony_ci #clock-cells = <0>; 8962306a36Sopenharmony_ci clock-output-names = "dfllCPU_out"; 9062306a36Sopenharmony_ci vdd-cpu-supply = <&vdd_cpu>; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci nvidia,sample-rate = <12500>; 9362306a36Sopenharmony_ci nvidia,droop-ctrl = <0x00000f00>; 9462306a36Sopenharmony_ci nvidia,force-mode = <1>; 9562306a36Sopenharmony_ci nvidia,cf = <10>; 9662306a36Sopenharmony_ci nvidia,ci = <0>; 9762306a36Sopenharmony_ci nvidia,cg = <2>; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci nvidia,i2c-fs-rate = <400000>; 10062306a36Sopenharmony_ci}; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciExample for PWM: 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ciclock@70110000 { 10562306a36Sopenharmony_ci compatible = "nvidia,tegra124-dfll"; 10662306a36Sopenharmony_ci reg = <0 0x70110000 0 0x100>, /* DFLL control */ 10762306a36Sopenharmony_ci <0 0x70110000 0 0x100>, /* I2C output control */ 10862306a36Sopenharmony_ci <0 0x70110100 0 0x100>, /* Integrated I2C controller */ 10962306a36Sopenharmony_ci <0 0x70110200 0 0x100>; /* Look-up table RAM */ 11062306a36Sopenharmony_ci interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; 11162306a36Sopenharmony_ci clocks = <&tegra_car TEGRA210_CLK_DFLL_SOC>, 11262306a36Sopenharmony_ci <&tegra_car TEGRA210_CLK_DFLL_REF>, 11362306a36Sopenharmony_ci <&tegra_car TEGRA124_CLK_I2C5>;; 11462306a36Sopenharmony_ci clock-names = "soc", "ref", "i2c"; 11562306a36Sopenharmony_ci resets = <&tegra_car TEGRA124_RST_DFLL_DVCO>; 11662306a36Sopenharmony_ci reset-names = "dvco"; 11762306a36Sopenharmony_ci #clock-cells = <0>; 11862306a36Sopenharmony_ci clock-output-names = "dfllCPU_out"; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci nvidia,sample-rate = <25000>; 12162306a36Sopenharmony_ci nvidia,droop-ctrl = <0x00000f00>; 12262306a36Sopenharmony_ci nvidia,force-mode = <1>; 12362306a36Sopenharmony_ci nvidia,cf = <6>; 12462306a36Sopenharmony_ci nvidia,ci = <0>; 12562306a36Sopenharmony_ci nvidia,cg = <2>; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci nvidia,pwm-min-microvolts = <708000>; /* 708mV */ 12862306a36Sopenharmony_ci nvidia,pwm-period-nanoseconds = <2500>; /* 2.5us */ 12962306a36Sopenharmony_ci nvidia,pwm-to-pmic; 13062306a36Sopenharmony_ci nvidia,pwm-tristate-microvolts = <1000000>; 13162306a36Sopenharmony_ci nvidia,pwm-voltage-step-microvolts = <19200>; /* 19.2mV */ 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci pinctrl-names = "dvfs_pwm_enable", "dvfs_pwm_disable"; 13462306a36Sopenharmony_ci pinctrl-0 = <&dvfs_pwm_active_state>; 13562306a36Sopenharmony_ci pinctrl-1 = <&dvfs_pwm_inactive_state>; 13662306a36Sopenharmony_ci}; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci/* pinmux nodes added for completeness. Binding doc can be found in: 13962306a36Sopenharmony_ci * Documentation/devicetree/bindings/pinctrl/nvidia,tegra210-pinmux.yaml 14062306a36Sopenharmony_ci */ 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_cipinmux: pinmux@700008d4 { 14362306a36Sopenharmony_ci dvfs_pwm_active_state: dvfs_pwm_active { 14462306a36Sopenharmony_ci dvfs_pwm_pbb1 { 14562306a36Sopenharmony_ci nvidia,pins = "dvfs_pwm_pbb1"; 14662306a36Sopenharmony_ci nvidia,tristate = <TEGRA_PIN_DISABLE>; 14762306a36Sopenharmony_ci }; 14862306a36Sopenharmony_ci }; 14962306a36Sopenharmony_ci dvfs_pwm_inactive_state: dvfs_pwm_inactive { 15062306a36Sopenharmony_ci dvfs_pwm_pbb1 { 15162306a36Sopenharmony_ci nvidia,pins = "dvfs_pwm_pbb1"; 15262306a36Sopenharmony_ci nvidia,tristate = <TEGRA_PIN_ENABLE>; 15362306a36Sopenharmony_ci }; 15462306a36Sopenharmony_ci }; 15562306a36Sopenharmony_ci}; 156