[PATCH 2/4] drm/mgag200: Start/stop BMC scanout in BMC encoder helpers
Thomas Zimmermann
tzimmermann at suse.de
Thu Jul 4 12:23:33 UTC 2024
Hi
Am 04.07.24 um 14:13 schrieb Jocelyn Falempe:
>
>
> On 03/07/2024 15:40, Thomas Zimmermann wrote:
>> Start and stop the BMC scanout from the BMC encoder's atomic_enable
>> and atomic_disable helpers. The BMC stops scanning out at the beginning
>> of a modeset operation and restarts the scanout at the end of the
>> modeset.
>>
>> Only G200EW3 and G200WB require this procedure. Drop the original
>> vidrst callbacks for these model's support, as they are now obsolete.
>
> Thanks, that makes the BMC connector more useful.
>
> I'm just wondering, in case you use both a VGA output and the BMC,
> before this patch, vidrst would be enabled, and after, as the BMC
> connector is "unconnected" it should be disabled ?
>
> Will that have a visible impact for users ?
Oh, I didn't think of this case. That could likely be a problem. Thanks
for pointing this out.
Let's drop patches 2 to 4 for now. I'd still like to take patch 1, as it
works on it own and makes sense.
Best regards
Thomas
>
>
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> ---
>> drivers/gpu/drm/mgag200/mgag200_bmc.c | 24 +++++++++++++++++++++--
>> drivers/gpu/drm/mgag200/mgag200_drv.h | 4 +---
>> drivers/gpu/drm/mgag200/mgag200_g200ew3.c | 2 --
>> drivers/gpu/drm/mgag200/mgag200_g200wb.c | 2 --
>> 4 files changed, 23 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_bmc.c
>> b/drivers/gpu/drm/mgag200/mgag200_bmc.c
>> index cb5400333862..74feb6d8db45 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_bmc.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_bmc.c
>> @@ -14,7 +14,7 @@ static struct mgag200_bmc_connector
>> *to_mgag200_bmc_connector(struct drm_connect
>> return container_of(connector, struct mgag200_bmc_connector,
>> base);
>> }
>> -void mgag200_bmc_disable_vidrst(struct mga_device *mdev)
>> +static void mgag200_bmc_disable_vidrst(struct mga_device *mdev)
>> {
>> u8 tmp;
>> int iter_max;
>> @@ -73,7 +73,16 @@ void mgag200_bmc_disable_vidrst(struct mga_device
>> *mdev)
>> }
>> }
>> -void mgag200_bmc_enable_vidrst(struct mga_device *mdev)
>> +static void mgag200_bmc_encoder_helper_atomic_disable(struct
>> drm_encoder *encoder,
>> + struct drm_atomic_state *state)
>> +{
>> + struct mga_device *mdev = to_mga_device(encoder->dev);
>> +
>> + if (mdev->info->has_vidrst)
>> + mgag200_bmc_disable_vidrst(mdev);
>> +}
>> +
>> +static void mgag200_bmc_enable_vidrst(struct mga_device *mdev)
>> {
>> u8 tmp;
>> @@ -103,6 +112,15 @@ void mgag200_bmc_enable_vidrst(struct
>> mga_device *mdev)
>> WREG_DAC(MGA1064_GEN_IO_DATA, tmp);
>> }
>> +static void mgag200_bmc_encoder_helper_atomic_enable(struct
>> drm_encoder *encoder,
>> + struct drm_atomic_state *state)
>> +{
>> + struct mga_device *mdev = to_mga_device(encoder->dev);
>> +
>> + if (mdev->info->has_vidrst)
>> + mgag200_bmc_enable_vidrst(mdev);
>> +}
>> +
>> static int mgag200_bmc_encoder_helper_atomic_check(struct
>> drm_encoder *encoder,
>> struct drm_crtc_state *crtc_state,
>> struct drm_connector_state *conn_state)
>> @@ -119,6 +137,8 @@ static int
>> mgag200_bmc_encoder_helper_atomic_check(struct drm_encoder *encoder,
>> }
>> static const struct drm_encoder_helper_funcs
>> mgag200_bmc_encoder_helper_funcs = {
>> + .atomic_disable = mgag200_bmc_encoder_helper_atomic_disable,
>> + .atomic_enable = mgag200_bmc_encoder_helper_atomic_enable,
>> .atomic_check = mgag200_bmc_encoder_helper_atomic_check,
>> };
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h
>> b/drivers/gpu/drm/mgag200/mgag200_drv.h
>> index 4b75613de882..b1365795234b 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_drv.h
>> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
>> @@ -442,9 +442,7 @@ int mgag200_mode_config_init(struct mga_device
>> *mdev, resource_size_t vram_avail
>> /* mgag200_vga.c */
>> int mgag200_vga_output_init(struct mga_device *mdev);
>> - /* mgag200_bmc.c */
>> -void mgag200_bmc_disable_vidrst(struct mga_device *mdev);
>> -void mgag200_bmc_enable_vidrst(struct mga_device *mdev);
>> +/* mgag200_bmc.c */
>> int mgag200_bmc_output_init(struct mga_device *mdev, struct
>> drm_connector *physical_connector);
>> #endif /* __MGAG200_DRV_H__ */
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> index 839401e8b465..265f3e95830a 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> @@ -146,8 +146,6 @@ static const struct mgag200_device_info
>> mgag200_g200ew3_device_info =
>> MGAG200_DEVICE_INFO_INIT(2048, 2048, 0, true, 0, 1, false);
>> static const struct mgag200_device_funcs
>> mgag200_g200ew3_device_funcs = {
>> - .disable_vidrst = mgag200_bmc_disable_vidrst,
>> - .enable_vidrst = mgag200_bmc_enable_vidrst,
>> .pixpllc_atomic_check = mgag200_g200ew3_pixpllc_atomic_check,
>> .pixpllc_atomic_update = mgag200_g200wb_pixpllc_atomic_update,
>> // same as G200WB
>> };
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> index 835df0f4fc13..e25477347c3e 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> @@ -280,8 +280,6 @@ static const struct mgag200_device_info
>> mgag200_g200wb_device_info =
>> MGAG200_DEVICE_INFO_INIT(1280, 1024, 31877, true, 0, 1, false);
>> static const struct mgag200_device_funcs
>> mgag200_g200wb_device_funcs = {
>> - .disable_vidrst = mgag200_bmc_disable_vidrst,
>> - .enable_vidrst = mgag200_bmc_enable_vidrst,
>> .pixpllc_atomic_check = mgag200_g200wb_pixpllc_atomic_check,
>> .pixpllc_atomic_update = mgag200_g200wb_pixpllc_atomic_update,
>> };
>
--
--
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