[PATCH v2 9/9] drm/ast: Remove BMC output

Thomas Zimmermann tzimmermann at suse.de
Tue Aug 13 13:37:17 UTC 2024


Hi

Am 13.08.24 um 15:20 schrieb Jocelyn Falempe:
>
>
> On 12/08/2024 11:30, Thomas Zimmermann wrote:
>> Ast's BMC connector tracks the status of an underlying physical
>> connector and updates the BMC status accordingly. This functionality
>> works around GNOME's settings app, which cannot handle multiple
>> outputs on the same CRTC.
>>
>> The workaround is now obsolete as all code for physical outputs
>> handle BMC support internally. Hence, remove the driver's code and
>> the BMC output entirely.
>>
> Thanks, it looks good to me.
>
> Reviewed-by: Jocelyn Falempe <jfalempe at redhat.com> +

Thanks for reviewing. If no further comments come in, I'll merge the 
patchset later this week.

Best regards
Thomas

>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> ---
>>   drivers/gpu/drm/ast/ast_drv.h  |   4 --
>>   drivers/gpu/drm/ast/ast_mode.c | 107 ---------------------------------
>>   2 files changed, 111 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ast/ast_drv.h 
>> b/drivers/gpu/drm/ast/ast_drv.h
>> index 3a4f80cb5c0f..a4cde495fde4 100644
>> --- a/drivers/gpu/drm/ast/ast_drv.h
>> +++ b/drivers/gpu/drm/ast/ast_drv.h
>> @@ -206,10 +206,6 @@ struct ast_device {
>>               struct drm_encoder encoder;
>>               struct drm_connector connector;
>>           } astdp;
>> -        struct {
>> -            struct drm_encoder encoder;
>> -            struct ast_bmc_connector bmc_connector;
>> -        } bmc;
>>       } output;
>>         bool support_wide_screen;
>> diff --git a/drivers/gpu/drm/ast/ast_mode.c 
>> b/drivers/gpu/drm/ast/ast_mode.c
>> index d823e9d85b04..ed496fb32bf3 100644
>> --- a/drivers/gpu/drm/ast/ast_mode.c
>> +++ b/drivers/gpu/drm/ast/ast_mode.c
>> @@ -34,10 +34,8 @@
>>     #include <drm/drm_atomic.h>
>>   #include <drm/drm_atomic_helper.h>
>> -#include <drm/drm_atomic_state_helper.h>
>>   #include <drm/drm_crtc.h>
>>   #include <drm/drm_damage_helper.h>
>> -#include <drm/drm_edid.h>
>>   #include <drm/drm_format_helper.h>
>>   #include <drm/drm_fourcc.h>
>>   #include <drm/drm_gem_atomic_helper.h>
>> @@ -1309,103 +1307,6 @@ static int ast_crtc_init(struct drm_device *dev)
>>       return 0;
>>   }
>>   -/*
>> - * BMC virtual Connector
>> - */
>> -
>> -static const struct drm_encoder_funcs ast_bmc_encoder_funcs = {
>> -    .destroy = drm_encoder_cleanup,
>> -};
>> -
>> -static int ast_bmc_connector_helper_detect_ctx(struct drm_connector 
>> *connector,
>> -                           struct drm_modeset_acquire_ctx *ctx,
>> -                           bool force)
>> -{
>> -    struct ast_bmc_connector *bmc_connector = 
>> to_ast_bmc_connector(connector);
>> -    struct drm_connector *physical_connector = 
>> bmc_connector->physical_connector;
>> -
>> -    /*
>> -     * Most user-space compositors cannot handle more than one 
>> connected
>> -     * connector per CRTC. Hence, we only mark the BMC as connected 
>> if the
>> -     * physical connector is disconnected. If the physical 
>> connector's status
>> -     * is connected or unknown, the BMC remains disconnected. This 
>> has no
>> -     * effect on the output of the BMC.
>> -     *
>> -     * FIXME: Remove this logic once user-space compositors can 
>> handle more
>> -     *        than one connector per CRTC. The BMC should always be 
>> connected.
>> -     */
>> -
>> -    if (physical_connector && physical_connector->status == 
>> connector_status_disconnected)
>> -        return connector_status_connected;
>> -
>> -    return connector_status_disconnected;
>> -}
>> -
>> -static int ast_bmc_connector_helper_get_modes(struct drm_connector 
>> *connector)
>> -{
>> -    return drm_add_modes_noedid(connector, 4096, 4096);
>> -}
>> -
>> -static const struct drm_connector_helper_funcs 
>> ast_bmc_connector_helper_funcs = {
>> -    .get_modes = ast_bmc_connector_helper_get_modes,
>> -    .detect_ctx = ast_bmc_connector_helper_detect_ctx,
>> -};
>> -
>> -static const struct drm_connector_funcs ast_bmc_connector_funcs = {
>> -    .reset = drm_atomic_helper_connector_reset,
>> -    .fill_modes = drm_helper_probe_single_connector_modes,
>> -    .destroy = drm_connector_cleanup,
>> -    .atomic_duplicate_state = 
>> drm_atomic_helper_connector_duplicate_state,
>> -    .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
>> -};
>> -
>> -static int ast_bmc_connector_init(struct drm_device *dev,
>> -                  struct ast_bmc_connector *bmc_connector,
>> -                  struct drm_connector *physical_connector)
>> -{
>> -    struct drm_connector *connector = &bmc_connector->base;
>> -    int ret;
>> -
>> -    ret = drm_connector_init(dev, connector, &ast_bmc_connector_funcs,
>> -                 DRM_MODE_CONNECTOR_VIRTUAL);
>> -    if (ret)
>> -        return ret;
>> -
>> -    drm_connector_helper_add(connector, 
>> &ast_bmc_connector_helper_funcs);
>> -
>> -    bmc_connector->physical_connector = physical_connector;
>> -
>> -    return 0;
>> -}
>> -
>> -static int ast_bmc_output_init(struct ast_device *ast,
>> -                   struct drm_connector *physical_connector)
>> -{
>> -    struct drm_device *dev = &ast->base;
>> -    struct drm_crtc *crtc = &ast->crtc;
>> -    struct drm_encoder *encoder = &ast->output.bmc.encoder;
>> -    struct ast_bmc_connector *bmc_connector = 
>> &ast->output.bmc.bmc_connector;
>> -    struct drm_connector *connector = &bmc_connector->base;
>> -    int ret;
>> -
>> -    ret = drm_encoder_init(dev, encoder,
>> -                   &ast_bmc_encoder_funcs,
>> -                   DRM_MODE_ENCODER_VIRTUAL, "ast_bmc");
>> -    if (ret)
>> -        return ret;
>> -    encoder->possible_crtcs = drm_crtc_mask(crtc);
>> -
>> -    ret = ast_bmc_connector_init(dev, bmc_connector, 
>> physical_connector);
>> -    if (ret)
>> -        return ret;
>> -
>> -    ret = drm_connector_attach_encoder(connector, encoder);
>> -    if (ret)
>> -        return ret;
>> -
>> -    return 0;
>> -}
>> -
>>   /*
>>    * Mode config
>>    */
>> @@ -1457,7 +1358,6 @@ static const struct drm_mode_config_funcs 
>> ast_mode_config_funcs = {
>>   int ast_mode_config_init(struct ast_device *ast)
>>   {
>>       struct drm_device *dev = &ast->base;
>> -    struct drm_connector *physical_connector = NULL;
>>       int ret;
>>         ret = drmm_mutex_init(dev, &ast->modeset_lock);
>> @@ -1502,29 +1402,22 @@ int ast_mode_config_init(struct ast_device *ast)
>>           ret = ast_vga_output_init(ast);
>>           if (ret)
>>               return ret;
>> -        physical_connector = &ast->output.vga.connector;
>>       }
>>       if (ast->tx_chip_types & AST_TX_SIL164_BIT) {
>>           ret = ast_sil164_output_init(ast);
>>           if (ret)
>>               return ret;
>> -        physical_connector = &ast->output.sil164.connector;
>>       }
>>       if (ast->tx_chip_types & AST_TX_DP501_BIT) {
>>           ret = ast_dp501_output_init(ast);
>>           if (ret)
>>               return ret;
>> -        physical_connector = &ast->output.dp501.connector;
>>       }
>>       if (ast->tx_chip_types & AST_TX_ASTDP_BIT) {
>>           ret = ast_astdp_output_init(ast);
>>           if (ret)
>>               return ret;
>> -        physical_connector = &ast->output.astdp.connector;
>>       }
>> -    ret = ast_bmc_output_init(ast, physical_connector);
>> -    if (ret)
>> -        return ret;
>>         drm_mode_config_reset(dev);
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)



More information about the dri-devel mailing list