[PATCH] drm/amd/display: Constify struct timing_generator_funcs

Alex Hung alex.hung at amd.com
Tue May 27 02:43:57 UTC 2025


Reviewed-by: Alex Hung <alex.hung at amd.com>

On 5/24/25 10:51, Christophe JAILLET wrote:
> 'struct timing_generator_funcs' are not modified in these drivers.
> 
> Constifying these structures moves some data to a read-only section, so
> increases overall security, especially when the structure holds some
> function pointers.
> 
> Signed-off-by: Christophe JAILLET <christophe.jaillet at wanadoo.fr>
> ---
> This is NOT compile tested, because apparently some .h files are missing on
> my system ("reg_helper.h")
> 
> However, I've checked how these struct timing_generator_funcs are used.
> They end in "struct optc->base.funcs" which is a
> "const struct timing_generator_funcs", so evething should be fine.
> ---
>   drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c   | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn201/dcn201_optc.c | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn30/dcn30_optc.c   | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn301/dcn301_optc.c | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.c   | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.c | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c   | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.c   | 2 +-
>   drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.c | 2 +-
>   9 files changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c
> index 81857ce6d68d..e7a90a437fff 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c
> @@ -502,7 +502,7 @@ void optc2_get_last_used_drr_vtotal(struct timing_generator *optc, uint32_t *ref
>   	REG_GET(OTG_DRR_CONTROL, OTG_V_TOTAL_LAST_USED_BY_DRR, refresh_rate);
>   }
>   
> -static struct timing_generator_funcs dcn20_tg_funcs = {
> +static const struct timing_generator_funcs dcn20_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn201/dcn201_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn201/dcn201_optc.c
> index f2415eebdc09..772a8bfb949c 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn201/dcn201_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn201/dcn201_optc.c
> @@ -129,7 +129,7 @@ static void optc201_get_optc_source(struct timing_generator *optc,
>   	*num_of_src_opp = 1;
>   }
>   
> -static struct timing_generator_funcs dcn201_tg_funcs = {
> +static const struct timing_generator_funcs dcn201_tg_funcs = {
>   		.validate_timing = optc201_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn30/dcn30_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn30/dcn30_optc.c
> index 78b58a449fa4..ee4665aa49e9 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn30/dcn30_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn30/dcn30_optc.c
> @@ -357,7 +357,7 @@ void optc3_tg_init(struct timing_generator *optc)
>   	optc1_clear_optc_underflow(optc);
>   }
>   
> -static struct timing_generator_funcs dcn30_tg_funcs = {
> +static const struct timing_generator_funcs dcn30_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn301/dcn301_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn301/dcn301_optc.c
> index 65e9089b7f31..38f85bc2681a 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn301/dcn301_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn301/dcn301_optc.c
> @@ -109,7 +109,7 @@ void optc301_setup_manual_trigger(struct timing_generator *optc)
>   			OTG_TRIGA_CLEAR, 1);
>   }
>   
> -static struct timing_generator_funcs dcn30_tg_funcs = {
> +static const struct timing_generator_funcs dcn30_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.c
> index ef536f37b4ed..4f1830ba619f 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn31/dcn31_optc.c
> @@ -315,7 +315,7 @@ void optc31_read_otg_state(struct timing_generator *optc,
>   	s->otg_double_buffer_control = REG_READ(OTG_DOUBLE_BUFFER_CONTROL);
>   }
>   
> -static struct timing_generator_funcs dcn31_tg_funcs = {
> +static const struct timing_generator_funcs dcn31_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.c
> index 0e603bad0d12..4a2caca37255 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn314/dcn314_optc.c
> @@ -192,7 +192,7 @@ static void optc314_set_h_timing_div_manual_mode(struct timing_generator *optc,
>   }
>   
>   
> -static struct timing_generator_funcs dcn314_tg_funcs = {
> +static const struct timing_generator_funcs dcn314_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c
> index 2cdd19ba634b..b2b226bcd871 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c
> @@ -297,7 +297,7 @@ static void optc32_set_drr(
>   	optc32_setup_manual_trigger(optc);
>   }
>   
> -static struct timing_generator_funcs dcn32_tg_funcs = {
> +static const struct timing_generator_funcs dcn32_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.c
> index 4cfc6c0fa147..72bff94cb57d 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn35/dcn35_optc.c
> @@ -428,7 +428,7 @@ static void optc35_set_long_vtotal(
>   	}
>   }
>   
> -static struct timing_generator_funcs dcn35_tg_funcs = {
> +static const struct timing_generator_funcs dcn35_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,
> diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.c
> index 382ac18e7854..ff79c38287df 100644
> --- a/drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.c
> +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn401/dcn401_optc.c
> @@ -459,7 +459,7 @@ bool optc401_wait_update_lock_status(struct timing_generator *tg, bool locked)
>   	return true;
>   }
>   
> -static struct timing_generator_funcs dcn401_tg_funcs = {
> +static const struct timing_generator_funcs dcn401_tg_funcs = {
>   		.validate_timing = optc1_validate_timing,
>   		.program_timing = optc1_program_timing,
>   		.setup_vertical_interrupt0 = optc1_setup_vertical_interrupt0,



More information about the dri-devel mailing list