STRUCT DPLL_DATA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ struct dpll_data(9) πŸ¦‹

okay bestie, welcome to the Kernel API Manual page for struct dpll_data β€” literally the DPLL registers and integration data. DPLL? yes. Registers? yes. Integration data? yes. It's giving hardware-core main character energy πŸ‘‘ and we're gonna walk through every single field together, no cap.


✨ NAME ✨

struct dpll_data β€” DPLL registers and integration data πŸ’…

🌸 SYNOPSIS 🌸

okay so here's the whole struct, and yes it's long, but every field is important, periodt:

       struct dpll_data {
           struct clk_omap_reg     mult_div1_reg;
           u32 mult_mask;
           u32 div1_mask;
           struct clk_hw           *clk_bypass;
           struct clk_hw           *clk_ref;
           struct clk_omap_reg     control_reg;
           u32 enable_mask;
           unsigned long           last_rounded_rate;
           u16 last_rounded_m;
           u8 last_rounded_m4xen;
           u8 last_rounded_lpmode;
           u16 max_multiplier;
           u8 last_rounded_n;
           u8 min_divider;
           u16 max_divider;
           unsigned long           max_rate;
           u8 modes;
           struct clk_omap_reg     autoidle_reg;
           struct clk_omap_reg     idlest_reg;
           u32 autoidle_mask;
           u32 freqsel_mask;
           u32 idlest_mask;
           u32 dco_mask;
           u32 sddiv_mask;
           u32 dcc_mask;
           unsigned long           dcc_rate;
           u32 lpmode_mask;
           u32 m4xen_mask;
           u8 auto_recal_bit;
           u8 recal_en_bit;
           u8 recal_st_bit;
           struct clk_omap_reg     ssc_deltam_reg;
           struct clk_omap_reg     ssc_modfreq_reg;
           u32 ssc_deltam_int_mask;
           u32 ssc_deltam_frac_mask;
           u32 ssc_modfreq_mant_mask;
           u32 ssc_modfreq_exp_mask;
           u32 ssc_enable_mask;
           u32 ssc_downspread_mask;
           u32 ssc_modfreq;
           u32 ssc_deltam;
           bool ssc_downspread;
           u8 flags;
        };

πŸŽ€ MEMBERS πŸŽ€

okay so here's the entire roster, and yes every one of these is iconic in its own way:

  • mult_div1_reg β€” the register containing the DPLL M and N bitfields πŸ’…
  • mult_mask β€” mask of the DPLL M bitfield in mult_div1_reg ✨
  • div1_mask β€” mask of the DPLL N bitfield in mult_div1_reg
  • clk_bypass β€” struct clk_hw pointer to the clock's bypass clock input πŸ¦‹
  • clk_ref β€” struct clk_hw pointer to the clock's reference clock input
  • control_reg β€” register containing the DPLL mode bitfield
  • enable_mask β€” mask of the DPLL mode bitfield in control_reg
  • last_rounded_rate β€” cache of the last rate result of omap2_dpll_determine_rate (iykyk)
  • last_rounded_m β€” cache of the last M result of omap2_dpll_determine_rate
  • last_rounded_m4xen β€” cache of the last M4X result of omap4_dpll_regm4xen_determine_rate
  • last_rounded_lpmode β€” cache of the last lpmode result of omap4_dpll_lpmode_recalc
  • max_multiplier β€” maximum valid non-bypass multiplier value (actual)
  • last_rounded_n β€” cache of the last N result of omap2_dpll_determine_rate
  • min_divider β€” minimum valid non-bypass divider value (actual)
  • max_divider β€” maximum valid non-bypass divider value (actual)
  • max_rate β€” maximum clock rate for the DPLL
  • modes β€” possible values of enable_mask
  • autoidle_reg β€” register containing the DPLL autoidle mode bitfield
  • idlest_reg β€” register containing the DPLL idle status bitfield
  • autoidle_mask β€” mask of the DPLL autoidle mode bitfield in autoidle_reg
  • freqsel_mask β€” mask of the DPLL jitter correction bitfield in control_reg
  • idlest_mask β€” mask of the DPLL idle status bitfield in idlest_reg
  • dcc_mask β€” mask of the DPLL DCC correction bitfield mult_div1_reg
  • dcc_rate β€” rate atleast which DCC dcc_mask must be set (yes, "atleast" is literally what the original says β€” we're not fixing it πŸ’€)
  • lpmode_mask β€” mask of the DPLL low-power mode bitfield in control_reg
  • m4xen_mask β€” mask of the DPLL M4X multiplier bitfield in control_reg
  • auto_recal_bit β€” bitshift of the driftguard enable bit in control_reg
  • recal_en_bit β€” bitshift of the PRM_IRQENABLE_* bit for recalibration IRQs
  • recal_st_bit β€” bitshift of the PRM_IRQSTATUS_* bit for recalibration IRQs
  • ssc_deltam_reg β€” register containing the DPLL SSC frequency spreading
  • ssc_modfreq_reg β€” register containing the DPLL SSC modulation frequency
  • ssc_modfreq_mant_mask β€” mask of the mantissa component in ssc_modfreq_reg
  • ssc_modfreq_exp_mask β€” mask of the exponent component in ssc_modfreq_reg
  • ssc_enable_mask β€” mask of the DPLL SSC enable bit in control_reg
  • ssc_downspread_mask β€” mask of the DPLL SSC low frequency only bit in control_reg
  • ssc_modfreq β€” the DPLL SSC frequency modulation in kHz
  • ssc_deltam β€” the DPLL SSC frequency spreading in permille (10th of percent)
  • ssc_downspread β€” require the only low frequency spread of the DPLL in SSC mode
  • flags β€” DPLL type/features (see below πŸ‘‡)

quick heads up bestie: the struct in the synopsis also has dco_mask, sddiv_mask, ssc_deltam_int_mask and ssc_deltam_frac_mask β€” but the members list doesn't describe them, so we're not gonna invent anything, periodt πŸ’…

🌈 DESCRIPTION 🌈

Possible values for flags: DPLL_J_TYPE: "J-type DPLL" (only some 36xx, 4xxx DPLLs) ✨

freqsel_mask is only used on the OMAP34xx family and AM35xx.

XXX Some DPLLs have multiple bypass inputs, so it's not technically correct to only have one clk_bypass pointer. 😭
XXX The runtime-variable fields (last_rounded_rate, last_rounded_m, last_rounded_n) should be separated from the runtime-fixed fields and placed into a different structure, so that the runtime-fixed data can be placed into read-only space. πŸ‘‘

⭐ SEE ALSO ⭐

  • Kernel file ./include/linux/clk/ti.h
  • struct clk_omap_reg(9)
  • struct clk_hw_omap_ops(9)
  • struct clk_hw_omap(9)
  • struct ti_clk_ll_ops(9)

and that's the whole page bestie β€” Kernel API Manual, source path ./include/linux/clk, dated October 2026. slay πŸ’…βœ¨

πŸ“¦ where this page comes from