STRUCT DPU_HW_SSPP_OPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct dpu_hw_sspp_ops(9) β€” like, the whole vibe

okay so bestie, welcome to struct dpu_hw_sspp_ops(9), straight outta the Kernel API Manual ✨ this is the group chat of function pointers that lets you talk to the SSPP hardware driver, and honestly? she's iconic for it.

🌸 NAME 🌸

struct dpu_hw_sspp_ops β€” the interface to the SSPP Hw driver functions 🫢

Two rules before you touch anything, no cap:

  • Caller must call the init function to get the pipe context for each pipe.
  • Assumption (and you know what happens when you assume, bestie) is that these functions will be called after clocks are enabled ⚑

✨ SYNOPSIS ✨

struct dpu_hw_sspp_ops {
    void (*setup_format)(struct dpu_sw_pipe *pipe, const struct msm_format *fmt, u32 flags);
    void (*setup_rects)(struct dpu_sw_pipe *pipe, struct dpu_sw_pipe_cfg *cfg);
    void (*setup_pe)(struct dpu_hw_sspp *ctx, struct dpu_hw_pixel_ext *pe_ext);
    void (*setup_sourceaddress)(struct dpu_sw_pipe *ctx, struct dpu_hw_fmt_layout *layout);
    void (*setup_csc)(struct dpu_hw_sspp *ctx, const struct dpu_csc_cfg *data);
    void (*setup_solidfill)(struct dpu_sw_pipe *pipe, u32 color);
    void (*setup_multirect)(struct dpu_sw_pipe *pipe);
    void (*setup_sharpening)(struct dpu_hw_sspp *ctx, struct dpu_hw_sharp_cfg *cfg);
    void (*setup_qos_lut)(struct dpu_hw_sspp *ctx, struct dpu_hw_qos_cfg *cfg);
    void (*setup_qos_ctrl)(struct dpu_hw_sspp *ctx, bool danger_safe_en);
    bool (*setup_clk_force_ctrl)(struct dpu_hw_sspp *ctx, bool enable);
    void (*setup_histogram)(struct dpu_hw_sspp *ctx, void *cfg);
    void (*setup_scaler)(struct dpu_hw_sspp *ctx, struct dpu_hw_scaler3_cfg *scaler3_cfg, const struct msm_format *format);
    void (*setup_cdp)(struct dpu_sw_pipe *pipe, const struct msm_format *fmt, bool enable);
 };

like, look at her. fourteen pointers. each one a little main character πŸŽ€


πŸ‘‘ Members πŸ‘‘

πŸ’– setup_format

sets up the pixel format and the cropping rectangle and the flip β€” a triple threat, honestly

  • pipe: Pointer to software pipe context
  • cfg: Pointer to pipe config structure
  • flags: Extra flags for format config

πŸ’– setup_rects

sets up the pipe ROI rectangles πŸ“

  • pipe: Pointer to software pipe context
  • cfg: Pointer to pipe config structure

πŸ’– setup_pe

sets up the pipe pixel extension ✨

  • ctx: Pointer to pipe context
  • pe_ext: Pointer to pixel ext settings

πŸ’– setup_sourceaddress

sets up the pipe source addresses β€” this is the one that actually tells the hardware where the buffer lives, so she's kind of a big deal 🧚

  • pipe: Pointer to software pipe context
  • layout: format layout information for programming buffer to hardware

πŸ’– setup_csc

sets up color space coversion 🎨 (yes, that's spelled exactly like that in the original, we stan a typo)

  • ctx: Pointer to pipe context
  • data: Pointer to config structure

πŸ’– setup_solidfill

enables/disables colorfill 🌈

  • pipe: Pointer to software pipe context
  • const_color: Fill color value
  • flags: Pipe flags

πŸ’– setup_multirect

sets up multirect configuration πŸ‘― (two pipes, one vibe)

  • pipe: Pointer to software pipe context

πŸ’– setup_sharpening

sets up sharpening πŸ”ͺ✨ crisp edges only

  • ctx: Pointer to pipe context
  • cfg: Pointer to config structure

πŸ’– setup_qos_lut

sets up QoS LUTs πŸ“Š

  • ctx: Pointer to pipe context
  • cfg: LUT configuration

πŸ’– setup_qos_ctrl

sets up QoS control πŸŽ›οΈ

  • ctx: Pointer to pipe context
  • danger_safe_en: flags controlling enabling of danger/safe QoS/LUT
ngl the name danger_safe_en is sending me πŸ’€ but it's literally the flag name, don't touch it.

πŸ’– setup_clk_force_ctrl

sets up clock force control ⏰ β€” and heads up bestie, this one actually returns a bool, she's built different

  • ctx: Pointer to pipe context
  • enable: enable clock force if true

πŸ’– setup_histogram

sets up histograms πŸ“ˆ

  • ctx: Pointer to pipe context
  • cfg: Pointer to histogram configuration

πŸ’– setup_scaler

sets up scaler πŸ¦‹ (scaler3 era, we love an upgrade)

  • scaler3_cfg: Pointer to scaler configuration
  • format: pixel format parameters

πŸ’– setup_cdp

sets up client driven prefetch πŸš€ iykyk

  • pipe: Pointer to software pipe context
  • fmt: format used by the sw pipe
  • enable: whether the CDP should be enabled for this pipe

πŸ”₯ SEE ALSO πŸ”₯

  • Kernel file ./drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h
  • enum dpu_sspp_multirect_index(9)
  • struct dpu_sw_pipe_cfg(9)
  • struct dpu_hw_pipe_ts_cfg(9)
  • struct dpu_sw_pipe(9)
  • struct dpu_hw_sspp(9)

alright bestie, that's the whole page, you ate that πŸ’… this lil drop came from ./drivers/gpu/drm/msm/disp/dpu1, dated October 2026, serving struct dpu_hw_sspp_ops(9) realness. go forth and configure your pipes, and remember: init first, clocks on second, slay always πŸ’œπŸ«Ά

πŸ“¦ where this page comes from