On Mon, Oct 13, 2025 at 3:24 AM Jernej Skrabec <[email protected]> wrote:
>
> On DE2 and DE3, UI scalers are located right after VI scalers. So in
> order to calculate proper UI scaler base address, number of VI scalers
> must be known. In practice, it is same as number of VI channels, but it
> doesn't need to be.
>
> Let's make a quirk for this number. Code for configuring channels and
> associated functions won't have access to vi_num quirk anymore after
> rework for independent planes.
>
> Signed-off-by: Jernej Skrabec <[email protected]>
> ---
>  drivers/gpu/drm/sun4i/sun8i_mixer.c     | 11 +++++++++++
>  drivers/gpu/drm/sun4i/sun8i_mixer.h     |  2 ++
>  drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 10 +++++-----
>  3 files changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c 
> b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> index 78bbfbe62833..f9131396f22f 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> @@ -708,6 +708,7 @@ static const struct sun8i_mixer_cfg sun8i_a83t_mixer0_cfg 
> = {
>         .scaler_mask    = 0xf,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 3,
>         .vi_num         = 1,
>  };
> @@ -718,6 +719,7 @@ static const struct sun8i_mixer_cfg sun8i_a83t_mixer1_cfg 
> = {
>         .scaler_mask    = 0x3,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 1,
>         .vi_num         = 1,
>  };
> @@ -729,6 +731,7 @@ static const struct sun8i_mixer_cfg sun8i_h3_mixer0_cfg = 
> {
>         .scaler_mask    = 0xf,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 3,
>         .vi_num         = 1,
>  };
> @@ -740,6 +743,7 @@ static const struct sun8i_mixer_cfg sun8i_r40_mixer0_cfg 
> = {
>         .scaler_mask    = 0xf,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 3,
>         .vi_num         = 1,
>  };
> @@ -751,6 +755,7 @@ static const struct sun8i_mixer_cfg sun8i_r40_mixer1_cfg 
> = {
>         .scaler_mask    = 0x3,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 1,
>         .vi_num         = 1,
>  };
> @@ -761,6 +766,7 @@ static const struct sun8i_mixer_cfg sun8i_v3s_mixer_cfg = 
> {
>         .ui_num = 1,
>         .scaler_mask = 0x3,
>         .scanline_yuv = 2048,
> +       .vi_scaler_num  = 2,
>         .ccsc = CCSC_MIXER0_LAYOUT,
>         .mod_rate = 150000000,
>  };
> @@ -772,6 +778,7 @@ static const struct sun8i_mixer_cfg sun20i_d1_mixer0_cfg 
> = {
>         .scaler_mask    = 0x3,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 1,
>         .vi_num         = 1,
>  };
> @@ -783,6 +790,7 @@ static const struct sun8i_mixer_cfg sun20i_d1_mixer1_cfg 
> = {
>         .scaler_mask    = 0x1,
>         .scanline_yuv   = 1024,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 0,
>         .vi_num         = 1,
>  };
> @@ -794,6 +802,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer0_cfg 
> = {
>         .scaler_mask    = 0xf,
>         .scanline_yuv   = 4096,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 3,
>         .vi_num         = 1,
>  };
> @@ -805,6 +814,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer1_cfg 
> = {
>         .scaler_mask    = 0x3,
>         .scanline_yuv   = 2048,
>         .de2_fcc_alpha  = 1,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 1,
>         .vi_num         = 1,
>  };
> @@ -814,6 +824,7 @@ static const struct sun8i_mixer_cfg sun50i_h6_mixer0_cfg 
> = {
>         .mod_rate       = 600000000,
>         .scaler_mask    = 0xf,
>         .scanline_yuv   = 4096,
> +       .vi_scaler_num  = 1,
>         .ui_num         = 3,
>         .vi_num         = 1,
>  };
> diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h 
> b/drivers/gpu/drm/sun4i/sun8i_mixer.h
> index def07afd37e1..40b800022237 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h
> +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h
> @@ -178,6 +178,7 @@ enum sun8i_mixer_type {
>   * @scaline_yuv: size of a scanline for VI scaler for YUV formats.
>   * @de2_fcc_alpha: use FCC for missing DE2 VI alpha capability
>   *     Most DE2 cores has FCC. If number of VI planes is one, enable this.
> + * @vi_scaler_num: Number of VI scalers. Used on DE2 and DE3.
>   * @map: channel map for DE variants processing YUV separately (DE33)
>   */
>  struct sun8i_mixer_cfg {
> @@ -189,6 +190,7 @@ struct sun8i_mixer_cfg {
>         unsigned int    de_type;
>         unsigned int    scanline_yuv;
>         unsigned int    de2_fcc_alpha : 1;
> +       unsigned int    vi_scaler_num;

This could be a smaller type. Please do a sweep of the struct after the
refactoring is done and see if any of the types could be shrunk.

And just a nitpick, but I would probably insert it above scaler_mask.


Reviewed-by: Chen-Yu Tsai <[email protected]>

Reply via email to