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
This commit is contained in:
@@ -247,18 +247,6 @@ struct mgag200_device_info {
|
||||
}
|
||||
|
||||
struct mgag200_device_funcs {
|
||||
/*
|
||||
* Disables an external reset source (i.e., BMC) before programming
|
||||
* a new display mode.
|
||||
*/
|
||||
void (*disable_vidrst)(struct mga_device *mdev);
|
||||
|
||||
/*
|
||||
* Enables an external reset source (i.e., BMC) after programming
|
||||
* a new display mode.
|
||||
*/
|
||||
void (*enable_vidrst)(struct mga_device *mdev);
|
||||
|
||||
/*
|
||||
* Validate that the given state can be programmed into PIXPLLC. On
|
||||
* success, the calculated parameters should be stored in the CRTC's
|
||||
|
||||
@@ -191,9 +191,6 @@ static void mgag200_g200er_crtc_helper_atomic_enable(struct drm_crtc *crtc,
|
||||
struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state);
|
||||
const struct drm_format_info *format = mgag200_crtc_state->format;
|
||||
|
||||
if (funcs->disable_vidrst)
|
||||
funcs->disable_vidrst(mdev);
|
||||
|
||||
mgag200_set_format_regs(mdev, format);
|
||||
mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst);
|
||||
|
||||
@@ -209,8 +206,8 @@ static void mgag200_g200er_crtc_helper_atomic_enable(struct drm_crtc *crtc,
|
||||
|
||||
mgag200_enable_display(mdev);
|
||||
|
||||
if (funcs->enable_vidrst)
|
||||
funcs->enable_vidrst(mdev);
|
||||
if (mdev->info->has_vidrst)
|
||||
mgag200_bmc_enable_vidrst(mdev);
|
||||
}
|
||||
|
||||
static const struct drm_crtc_helper_funcs mgag200_g200er_crtc_helper_funcs = {
|
||||
|
||||
@@ -192,9 +192,6 @@ static void mgag200_g200ev_crtc_helper_atomic_enable(struct drm_crtc *crtc,
|
||||
struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state);
|
||||
const struct drm_format_info *format = mgag200_crtc_state->format;
|
||||
|
||||
if (funcs->disable_vidrst)
|
||||
funcs->disable_vidrst(mdev);
|
||||
|
||||
mgag200_set_format_regs(mdev, format);
|
||||
mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst);
|
||||
|
||||
@@ -210,8 +207,8 @@ static void mgag200_g200ev_crtc_helper_atomic_enable(struct drm_crtc *crtc,
|
||||
|
||||
mgag200_enable_display(mdev);
|
||||
|
||||
if (funcs->enable_vidrst)
|
||||
funcs->enable_vidrst(mdev);
|
||||
if (mdev->info->has_vidrst)
|
||||
mgag200_bmc_enable_vidrst(mdev);
|
||||
}
|
||||
|
||||
static const struct drm_crtc_helper_funcs mgag200_g200ev_crtc_helper_funcs = {
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -323,9 +323,6 @@ static void mgag200_g200se_crtc_helper_atomic_enable(struct drm_crtc *crtc,
|
||||
struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state);
|
||||
const struct drm_format_info *format = mgag200_crtc_state->format;
|
||||
|
||||
if (funcs->disable_vidrst)
|
||||
funcs->disable_vidrst(mdev);
|
||||
|
||||
mgag200_set_format_regs(mdev, format);
|
||||
mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst);
|
||||
|
||||
@@ -341,8 +338,8 @@ static void mgag200_g200se_crtc_helper_atomic_enable(struct drm_crtc *crtc,
|
||||
|
||||
mgag200_enable_display(mdev);
|
||||
|
||||
if (funcs->enable_vidrst)
|
||||
funcs->enable_vidrst(mdev);
|
||||
if (mdev->info->has_vidrst)
|
||||
mgag200_bmc_enable_vidrst(mdev);
|
||||
}
|
||||
|
||||
static const struct drm_crtc_helper_funcs mgag200_g200se_crtc_helper_funcs = {
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -655,9 +655,6 @@ void mgag200_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_
|
||||
struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state);
|
||||
const struct drm_format_info *format = mgag200_crtc_state->format;
|
||||
|
||||
if (funcs->disable_vidrst)
|
||||
funcs->disable_vidrst(mdev);
|
||||
|
||||
mgag200_set_format_regs(mdev, format);
|
||||
mgag200_set_mode_regs(mdev, adjusted_mode, mgag200_crtc_state->set_vidrst);
|
||||
|
||||
@@ -671,22 +668,18 @@ void mgag200_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_
|
||||
|
||||
mgag200_enable_display(mdev);
|
||||
|
||||
if (funcs->enable_vidrst)
|
||||
funcs->enable_vidrst(mdev);
|
||||
if (mdev->info->has_vidrst)
|
||||
mgag200_bmc_enable_vidrst(mdev);
|
||||
}
|
||||
|
||||
void mgag200_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *old_state)
|
||||
{
|
||||
struct mga_device *mdev = to_mga_device(crtc->dev);
|
||||
const struct mgag200_device_funcs *funcs = mdev->funcs;
|
||||
|
||||
if (funcs->disable_vidrst)
|
||||
funcs->disable_vidrst(mdev);
|
||||
if (mdev->info->has_vidrst)
|
||||
mgag200_bmc_disable_vidrst(mdev);
|
||||
|
||||
mgag200_disable_display(mdev);
|
||||
|
||||
if (funcs->enable_vidrst)
|
||||
funcs->enable_vidrst(mdev);
|
||||
}
|
||||
|
||||
void mgag200_crtc_reset(struct drm_crtc *crtc)
|
||||
|
||||
Reference in New Issue
Block a user