Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/mgag200: Remove vidrst callbacks from struct mgag200_device_funcs

The callbacks disable_vidrst and enable_vidrst are obsolete. Remove
the fields from struct mgag200_device_funcs. Instead call their
implementations directly of the field 'has_vidrst' has been set in
struct mgag200_device_info.

Also change the logic slightly. The BMC used to start and stop scanout
during the CRTC's atomic_enable and atomic_disable. Plane updates were
done while the BMC scanned out the display. Now only stop once in
atomic_disable at the beginning of a modeset and then restart the
scanout at the end of a modeset in atomic_enable. While the modeset
takes place, the BMC does not scanout at all.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240711072415.11831-3-tzimmermann@suse.de

+10 -42
-12
drivers/gpu/drm/mgag200/mgag200_drv.h
··· 248 248 249 249 struct mgag200_device_funcs { 250 250 /* 251 - * Disables an external reset source (i.e., BMC) before programming 252 - * a new display mode. 253 - */ 254 - void (*disable_vidrst)(struct mga_device *mdev); 255 - 256 - /* 257 - * Enables an external reset source (i.e., BMC) after programming 258 - * a new display mode. 259 - */ 260 - void (*enable_vidrst)(struct mga_device *mdev); 261 - 262 - /* 263 251 * Validate that the given state can be programmed into PIXPLLC. On 264 252 * success, the calculated parameters should be stored in the CRTC's 265 253 * state in struct @mgag200_crtc_state.pixpllc.
+2 -5
drivers/gpu/drm/mgag200/mgag200_g200er.c
··· 191 191 struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state); 192 192 const struct drm_format_info *format = mgag200_crtc_state->format; 193 193 194 - if (funcs->disable_vidrst) 195 - funcs->disable_vidrst(mdev); 196 - 197 194 mgag200_set_format_regs(mdev, format); 198 195 mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst); 199 196 ··· 206 209 207 210 mgag200_enable_display(mdev); 208 211 209 - if (funcs->enable_vidrst) 210 - funcs->enable_vidrst(mdev); 212 + if (mdev->info->has_vidrst) 213 + mgag200_bmc_enable_vidrst(mdev); 211 214 } 212 215 213 216 static const struct drm_crtc_helper_funcs mgag200_g200er_crtc_helper_funcs = {
+2 -5
drivers/gpu/drm/mgag200/mgag200_g200ev.c
··· 192 192 struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state); 193 193 const struct drm_format_info *format = mgag200_crtc_state->format; 194 194 195 - if (funcs->disable_vidrst) 196 - funcs->disable_vidrst(mdev); 197 - 198 195 mgag200_set_format_regs(mdev, format); 199 196 mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst); 200 197 ··· 207 210 208 211 mgag200_enable_display(mdev); 209 212 210 - if (funcs->enable_vidrst) 211 - funcs->enable_vidrst(mdev); 213 + if (mdev->info->has_vidrst) 214 + mgag200_bmc_enable_vidrst(mdev); 212 215 } 213 216 214 217 static const struct drm_crtc_helper_funcs mgag200_g200ev_crtc_helper_funcs = {
-2
drivers/gpu/drm/mgag200/mgag200_g200ew3.c
··· 146 146 MGAG200_DEVICE_INFO_INIT(2048, 2048, 0, true, 0, 1, false); 147 147 148 148 static const struct mgag200_device_funcs mgag200_g200ew3_device_funcs = { 149 - .disable_vidrst = mgag200_bmc_disable_vidrst, 150 - .enable_vidrst = mgag200_bmc_enable_vidrst, 151 149 .pixpllc_atomic_check = mgag200_g200ew3_pixpllc_atomic_check, 152 150 .pixpllc_atomic_update = mgag200_g200wb_pixpllc_atomic_update, // same as G200WB 153 151 };
+2 -5
drivers/gpu/drm/mgag200/mgag200_g200se.c
··· 323 323 struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state); 324 324 const struct drm_format_info *format = mgag200_crtc_state->format; 325 325 326 - if (funcs->disable_vidrst) 327 - funcs->disable_vidrst(mdev); 328 - 329 326 mgag200_set_format_regs(mdev, format); 330 327 mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst); 331 328 ··· 338 341 339 342 mgag200_enable_display(mdev); 340 343 341 - if (funcs->enable_vidrst) 342 - funcs->enable_vidrst(mdev); 344 + if (mdev->info->has_vidrst) 345 + mgag200_bmc_enable_vidrst(mdev); 343 346 } 344 347 345 348 static const struct drm_crtc_helper_funcs mgag200_g200se_crtc_helper_funcs = {
-2
drivers/gpu/drm/mgag200/mgag200_g200wb.c
··· 280 280 MGAG200_DEVICE_INFO_INIT(1280, 1024, 31877, true, 0, 1, false); 281 281 282 282 static const struct mgag200_device_funcs mgag200_g200wb_device_funcs = { 283 - .disable_vidrst = mgag200_bmc_disable_vidrst, 284 - .enable_vidrst = mgag200_bmc_enable_vidrst, 285 283 .pixpllc_atomic_check = mgag200_g200wb_pixpllc_atomic_check, 286 284 .pixpllc_atomic_update = mgag200_g200wb_pixpllc_atomic_update, 287 285 };
+4 -11
drivers/gpu/drm/mgag200/mgag200_mode.c
··· 655 655 struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state); 656 656 const struct drm_format_info *format = mgag200_crtc_state->format; 657 657 658 - if (funcs->disable_vidrst) 659 - funcs->disable_vidrst(mdev); 660 - 661 658 mgag200_set_format_regs(mdev, format); 662 659 mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst); 663 660 ··· 668 671 669 672 mgag200_enable_display(mdev); 670 673 671 - if (funcs->enable_vidrst) 672 - funcs->enable_vidrst(mdev); 674 + if (mdev->info->has_vidrst) 675 + mgag200_bmc_enable_vidrst(mdev); 673 676 } 674 677 675 678 void mgag200_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *old_state) 676 679 { 677 680 struct mga_device *mdev = to_mga_device(crtc->dev); 678 - const struct mgag200_device_funcs *funcs = mdev->funcs; 679 681 680 - if (funcs->disable_vidrst) 681 - funcs->disable_vidrst(mdev); 682 + if (mdev->info->has_vidrst) 683 + mgag200_bmc_disable_vidrst(mdev); 682 684 683 685 mgag200_disable_display(mdev); 684 - 685 - if (funcs->enable_vidrst) 686 - funcs->enable_vidrst(mdev); 687 686 } 688 687 689 688 void mgag200_crtc_reset(struct drm_crtc *crtc)