STRUCT DPU_HW_SCALER3_CFG(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ struct dpu_hw_scaler3_cfg(9) ✨

Hey bestie! Welcome to the struct dpu_hw_scaler3_cfg page from the Kernel API Manual πŸ’–. This is the whole vibe for QSEEDv3 configuration β€” like, the main character struct that holds all the scaling settings for the DPU. Let's get into it, no cap 🧚.


🌸 NAME 🌸

struct dpu_hw_scaler3_cfg β€” QSEEDv3 configuration. That's it, that's the energy ✨.


πŸŽ€ SYNOPSIS πŸŽ€

struct dpu_hw_scaler3_cfg {
    u32 enable;
    u32 dir_en;
    int32_t init_phase_x[DPU_MAX_PLANES];
    int32_t phase_step_x[DPU_MAX_PLANES];
    int32_t init_phase_y[DPU_MAX_PLANES];
    int32_t phase_step_y[DPU_MAX_PLANES];
    u32 preload_x[DPU_MAX_PLANES];
    u32 preload_y[DPU_MAX_PLANES];
    u32 src_width[DPU_MAX_PLANES];
    u32 src_height[DPU_MAX_PLANES];
    u32 dst_width;
    u32 dst_height;
    u32 y_rgb_filter_cfg;
    u32 uv_filter_cfg;
    u32 alpha_filter_cfg;
    u32 blend_cfg;
    u32 lut_flag;
    u32 dir_lut_idx;
    u32 y_rgb_cir_lut_idx;
    u32 uv_cir_lut_idx;
    u32 y_rgb_sep_lut_idx;
    u32 uv_sep_lut_idx;
    u32 *dir_lut;
    size_t dir_len;
    u32 *cir_lut;
    size_t cir_len;
    u32 *sep_lut;
    size_t sep_len;
    struct dpu_hw_scaler3_de_cfg de;
    u32 dir_weight;
};

πŸ’… MEMBERS πŸ’…

Okay so here's the whole squad β€” every single field explained, and yes we're going through all of them because details matter and we don't skip 🫢.

🌈 The Basics

  • enable β€” the scaler enable switch. Lowkey the on/off button for the whole thing πŸ”₯.
  • dir_en β€” direction detection block enable. It's giving "do we detect direction or not" vibes πŸ‘‘.

🌸 Phase Stuff (per-plane, because we're thorough)

  • init_phase_x β€” horizontal initial phase. int32_t array over DPU_MAX_PLANES, okurr πŸ’….
  • phase_step_x β€” horizontal phase step. Same array energy, int32_t[DPU_MAX_PLANES] πŸŽ€.
  • init_phase_y β€” vertical initial phase. int32_t[DPU_MAX_PLANES], yes bestie πŸ’–.
  • phase_step_y β€” vertical phase step. int32_t[DPU_MAX_PLANES], slay ✨.

πŸ¦‹ Preloads & Dimensions

  • preload_x β€” horizontal preload value. u32[DPU_MAX_PLANES], iconic 🌟.
  • preload_y β€” vertical preload value. u32[DPU_MAX_PLANES], periodt πŸ’€.
  • src_width β€” source width. u32[DPU_MAX_PLANES] β€” gotta know how wide the source is fr fr.
  • src_height β€” source height. u32[DPU_MAX_PLANES] β€” and how tall, obviously πŸ™ˆ.
  • dst_width β€” destination width. Just a u32, no array, we're keeping it simple here πŸ“.
  • dst_height β€” destination height. Also a plain u32, main character energy πŸ‘‘.

🧚 Filter Configs β€” The Aesthetic Choices

  • y_rgb_filter_cfg β€” y/rgb plane filter configuration. This is how we're filtering the luma/color, iykyk 🌈.
  • uv_filter_cfg β€” uv plane filter configuration. Chroma vibes only πŸ’œ.
  • alpha_filter_cfg β€” alpha filter configuration. For when transparency is the moment ✨.
  • blend_cfg β€” blend coefficients configuration. Mixing it up, literally πŸŽ€.

πŸ”₯ LUT Flags β€” The Big One

  • lut_flag β€” scaler LUT update flags. Okay so this is a bitmask situation, and you know we have to list every bit:
    • 0x1 β€” swap LUT bank
    • 0x2 β€” update 2D filter LUT
    • 0x4 β€” update y circular filter LUT
    • 0x8 β€” update uv circular filter LUT
    • 0x10 β€” update y separable filter LUT
    • 0x20 β€” update uv separable filter LUT

Like, it's giving "I contain multitudes" πŸ’…. No cap, these are the exact flags.

🫢 LUT Indices β€” The Address Book

  • dir_lut_idx β€” 2D filter LUT index. Where's the 2D LUT at? Right here πŸ”.
  • y_rgb_cir_lut_idx β€” y circular filter LUT index. Found it 🎯.
  • uv_cir_lut_idx β€” uv circular filter LUT index. Also found πŸ’–.
  • y_rgb_sep_lut_idx β€” y circular filter LUT index. (Yes, the manpage says "circular" here too β€” we're not fixing it, we're just reporting it, bestie πŸ™ˆ.)
  • uv_sep_lut_idx β€” uv separable filter LUT index. Separable and slay 🌸.

🌟 LUT Pointers & Lengths β€” The Actual Data

  • dir_lut β€” pointer to 2D LUT. u32 *, it's just pointing at the good stuff πŸ‘‰.
  • dir_len β€” length for the dir_lut. size_t, because size matters πŸ’€.
  • cir_lut β€” pointer to circular filter LUT. u32 *, circular and cute πŸŒ€.
  • cir_len β€” length for the cir_lut. size_t, keeping it measured ✨.
  • sep_lut β€” pointer to separable filter LUT. u32 *, separable supremacy πŸ‘‘.
  • sep_len β€” length for the sep_lut. size_t, and that's that πŸŽ€.

🧚 Detail Enhancer & Directional Weight

  • de β€” detail enhancer configuration. It's a struct dpu_hw_scaler3_de_cfg, so you know it's got its own whole vibe going on πŸ”₯.
  • dir_weight β€” Directional weight. u32, the final touch, the je ne sais quoi πŸ’–.

πŸ”— SEE ALSO πŸ”—

Like, go check these out, bestie β€” they're all connected and honestly iconic:

  • Kernel file ./drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
  • struct dpu_hw_blk(9)
  • struct dpu_hw_scaler3_de_cfg(9)
  • struct dpu_drm_pix_ext_v1(9)
  • struct dpu_drm_de_v1(9)
  • struct dpu_drm_scaler_v2(9)
  • struct dpu_hw_qos_cfg(9)

Okay that's the whole page, bestie! πŸ’– This was brought to you by the source at ./drivers/gpu/drm/msm/disp/dpu1 and it's dated October 2026 β€” like, future vibes but make it kernel. Stay scaley βœ¨πŸ’…πŸ«Ά.

πŸ“¦ where this page comes from