[PATCH] drm/ast: Remove TX-chip bitmask
Jocelyn Falempe
jfalempe at redhat.com
Thu Sep 5 09:19:12 UTC 2024
On 03/09/2024 15:25, Thomas Zimmermann wrote:
> The CRTC has only one output attached to it. Store the output's type
> of TX chip in a single field and remove the related bitmask.
>
> Turn the type-less output field in struct ast_device into a union, as
> only one of its fields will be used at a time.
Thanks for this simplification.
Reviewed-by: Jocelyn Falempe <jfalempe at redhat.com>
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
> drivers/gpu/drm/ast/ast_dp501.c | 2 +-
> drivers/gpu/drm/ast/ast_drv.h | 10 +++-------
> drivers/gpu/drm/ast/ast_main.c | 27 +++++++++++++--------------
> drivers/gpu/drm/ast/ast_mode.c | 26 +++++++++++---------------
> drivers/gpu/drm/ast/ast_post.c | 4 ++--
> 5 files changed, 30 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_dp501.c b/drivers/gpu/drm/ast/ast_dp501.c
> index e4c636f45082..99bf44eec7b3 100644
> --- a/drivers/gpu/drm/ast/ast_dp501.c
> +++ b/drivers/gpu/drm/ast/ast_dp501.c
> @@ -466,7 +466,7 @@ void ast_init_3rdtx(struct drm_device *dev)
> ast_init_dvo(dev);
> break;
> default:
> - if (ast->tx_chip_types & BIT(AST_TX_SIL164))
> + if (ast->tx_chip == AST_TX_SIL164)
> ast_init_dvo(dev);
> else
> ast_init_analog(dev);
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index 91fe07cf7b07..b6ca14a3b967 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -91,11 +91,6 @@ enum ast_tx_chip {
> AST_TX_ASTDP,
> };
>
> -#define AST_TX_NONE_BIT BIT(AST_TX_NONE)
> -#define AST_TX_SIL164_BIT BIT(AST_TX_SIL164)
> -#define AST_TX_DP501_BIT BIT(AST_TX_DP501)
> -#define AST_TX_ASTDP_BIT BIT(AST_TX_ASTDP)
> -
> enum ast_config_mode {
> ast_use_p2a,
> ast_use_dt,
> @@ -187,10 +182,12 @@ struct ast_device {
>
> struct mutex modeset_lock; /* Protects access to modeset I/O registers in ioregs */
>
> + enum ast_tx_chip tx_chip;
> +
> struct ast_plane primary_plane;
> struct ast_plane cursor_plane;
> struct drm_crtc crtc;
> - struct {
> + union {
> struct {
> struct drm_encoder encoder;
> struct ast_connector connector;
> @@ -211,7 +208,6 @@ struct ast_device {
>
> bool support_wide_screen;
>
> - unsigned long tx_chip_types; /* bitfield of enum ast_chip_type */
> u8 *dp501_fw_addr;
> const struct firmware *dp501_fw; /* dp501 fw */
> };
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index d836f2a4f9f3..d7d503e78e25 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -68,11 +68,18 @@ static void ast_detect_widescreen(struct ast_device *ast)
>
> static void ast_detect_tx_chip(struct ast_device *ast, bool need_post)
> {
> + static const char * const info_str[] = {
> + "analog VGA",
> + "Sil164 TMDS transmitter",
> + "DP501 DisplayPort transmitter",
> + "ASPEED DisplayPort transmitter",
> + };
> +
> struct drm_device *dev = &ast->base;
> u8 jreg;
>
> /* Check 3rd Tx option (digital output afaik) */
> - ast->tx_chip_types |= AST_TX_NONE_BIT;
> + ast->tx_chip = AST_TX_NONE;
>
> /*
> * VGACRA3 Enhanced Color Mode Register, check if DVO is already
> @@ -85,7 +92,7 @@ static void ast_detect_tx_chip(struct ast_device *ast, bool need_post)
> if (!need_post) {
> jreg = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xa3, 0xff);
> if (jreg & 0x80)
> - ast->tx_chip_types = AST_TX_SIL164_BIT;
> + ast->tx_chip = AST_TX_SIL164;
> }
>
> if (IS_AST_GEN4(ast) || IS_AST_GEN5(ast) || IS_AST_GEN6(ast)) {
> @@ -97,7 +104,7 @@ static void ast_detect_tx_chip(struct ast_device *ast, bool need_post)
> jreg = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd1, 0xff);
> switch (jreg) {
> case 0x04:
> - ast->tx_chip_types = AST_TX_SIL164_BIT;
> + ast->tx_chip = AST_TX_SIL164;
> break;
> case 0x08:
> ast->dp501_fw_addr = drmm_kzalloc(dev, 32*1024, GFP_KERNEL);
> @@ -110,7 +117,7 @@ static void ast_detect_tx_chip(struct ast_device *ast, bool need_post)
> }
> fallthrough;
> case 0x0c:
> - ast->tx_chip_types = AST_TX_DP501_BIT;
> + ast->tx_chip = AST_TX_DP501;
> }
> } else if (IS_AST_GEN7(ast)) {
> if (ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xD1, TX_TYPE_MASK) ==
> @@ -118,19 +125,11 @@ static void ast_detect_tx_chip(struct ast_device *ast, bool need_post)
> int ret = ast_dp_launch(ast);
>
> if (!ret)
> - ast->tx_chip_types = AST_TX_ASTDP_BIT;
> + ast->tx_chip = AST_TX_ASTDP;
> }
> }
>
> - /* Print stuff for diagnostic purposes */
> - if (ast->tx_chip_types & AST_TX_NONE_BIT)
> - drm_info(dev, "Using analog VGA\n");
> - if (ast->tx_chip_types & AST_TX_SIL164_BIT)
> - drm_info(dev, "Using Sil164 TMDS transmitter\n");
> - if (ast->tx_chip_types & AST_TX_DP501_BIT)
> - drm_info(dev, "Using DP501 DisplayPort transmitter\n");
> - if (ast->tx_chip_types & AST_TX_ASTDP_BIT)
> - drm_info(dev, "Using ASPEED DisplayPort transmitter\n");
> + drm_info(dev, "Using %s\n", info_str[ast->tx_chip]);
> }
>
> static int ast_get_dram_info(struct drm_device *dev)
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index ed496fb32bf3..784e8ac0e668 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -1398,26 +1398,22 @@ int ast_mode_config_init(struct ast_device *ast)
>
> ast_crtc_init(dev);
>
> - if (ast->tx_chip_types & AST_TX_NONE_BIT) {
> + switch (ast->tx_chip) {
> + case AST_TX_NONE:
> ret = ast_vga_output_init(ast);
> - if (ret)
> - return ret;
> - }
> - if (ast->tx_chip_types & AST_TX_SIL164_BIT) {
> + break;
> + case AST_TX_SIL164:
> ret = ast_sil164_output_init(ast);
> - if (ret)
> - return ret;
> - }
> - if (ast->tx_chip_types & AST_TX_DP501_BIT) {
> + break;
> + case AST_TX_DP501:
> ret = ast_dp501_output_init(ast);
> - if (ret)
> - return ret;
> - }
> - if (ast->tx_chip_types & AST_TX_ASTDP_BIT) {
> + break;
> + case AST_TX_ASTDP:
> ret = ast_astdp_output_init(ast);
> - if (ret)
> - return ret;
> + break;
> }
> + if (ret)
> + return ret;
>
> drm_mode_config_reset(dev);
>
> diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
> index 65755798ab94..902bf8114b6e 100644
> --- a/drivers/gpu/drm/ast/ast_post.c
> +++ b/drivers/gpu/drm/ast/ast_post.c
> @@ -350,7 +350,7 @@ void ast_post_gpu(struct drm_device *dev)
> ast_set_def_ext_reg(dev);
>
> if (IS_AST_GEN7(ast)) {
> - if (ast->tx_chip_types & AST_TX_ASTDP_BIT)
> + if (ast->tx_chip == AST_TX_ASTDP)
> ast_dp_launch(ast);
> } else if (ast->config_mode == ast_use_p2a) {
> if (IS_AST_GEN6(ast))
> @@ -362,7 +362,7 @@ void ast_post_gpu(struct drm_device *dev)
>
> ast_init_3rdtx(dev);
> } else {
> - if (ast->tx_chip_types & AST_TX_SIL164_BIT)
> + if (ast->tx_chip == AST_TX_SIL164)
> ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xa3, 0xcf, 0x80); /* Enable DVO */
> }
> }
More information about the dri-devel
mailing list