Skip to content

Commit e5a3c24

Browse files
author
Thomas Zimmermann
committed
Revert "drm/mgag200: Add vblank support"
This reverts commit 6c9e14e. This reverts commit d5070c9. This reverts commit 89c6ea2. The VLINE interrupt doesn't work correctly on G200SE-A (at least). We have also seen missing interrupts on G200ER. So revert vblank support. Fixes frozen displays and warnings about missed vblanks. [ 33.818362] [CRTC:34:crtc-0] vblank wait timed out From the vblank code, the driver only keeps the register constants and the line that disables all interrupts in mgag200_device_init(). Both is still useful without vblank handling. Reported-by: Tony Luck <[email protected]> Closes: https://lore.kernel.org/dri-devel/[email protected]/raw Tested-by: Tony Luck <[email protected]> Signed-off-by: Thomas Zimmermann <[email protected]> Reviewed-by: Jocelyn Falempe <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent eb0c062 commit e5a3c24

File tree

11 files changed

+6
-178
lines changed

11 files changed

+6
-178
lines changed

drivers/gpu/drm/mgag200/mgag200_drv.c

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include <drm/drm_managed.h>
1919
#include <drm/drm_module.h>
2020
#include <drm/drm_pciids.h>
21-
#include <drm/drm_vblank.h>
2221

2322
#include "mgag200_drv.h"
2423

@@ -85,34 +84,6 @@ resource_size_t mgag200_probe_vram(void __iomem *mem, resource_size_t size)
8584
return offset - 65536;
8685
}
8786

88-
static irqreturn_t mgag200_irq_handler(int irq, void *arg)
89-
{
90-
struct drm_device *dev = arg;
91-
struct mga_device *mdev = to_mga_device(dev);
92-
struct drm_crtc *crtc;
93-
u32 status, ien;
94-
95-
status = RREG32(MGAREG_STATUS);
96-
97-
if (status & MGAREG_STATUS_VLINEPEN) {
98-
ien = RREG32(MGAREG_IEN);
99-
if (!(ien & MGAREG_IEN_VLINEIEN))
100-
goto out;
101-
102-
crtc = drm_crtc_from_index(dev, 0);
103-
if (WARN_ON_ONCE(!crtc))
104-
goto out;
105-
drm_crtc_handle_vblank(crtc);
106-
107-
WREG32(MGAREG_ICLEAR, MGAREG_ICLEAR_VLINEICLR);
108-
109-
return IRQ_HANDLED;
110-
}
111-
112-
out:
113-
return IRQ_NONE;
114-
}
115-
11687
/*
11788
* DRM driver
11889
*/
@@ -196,7 +167,6 @@ int mgag200_device_init(struct mga_device *mdev,
196167
const struct mgag200_device_funcs *funcs)
197168
{
198169
struct drm_device *dev = &mdev->base;
199-
struct pci_dev *pdev = to_pci_dev(dev->dev);
200170
u8 crtcext3, misc;
201171
int ret;
202172

@@ -223,14 +193,6 @@ int mgag200_device_init(struct mga_device *mdev,
223193
mutex_unlock(&mdev->rmmio_lock);
224194

225195
WREG32(MGAREG_IEN, 0);
226-
WREG32(MGAREG_ICLEAR, MGAREG_ICLEAR_VLINEICLR);
227-
228-
ret = devm_request_irq(&pdev->dev, pdev->irq, mgag200_irq_handler, IRQF_SHARED,
229-
dev->driver->name, dev);
230-
if (ret) {
231-
drm_err(dev, "Failed to acquire interrupt, error %d\n", ret);
232-
return ret;
233-
}
234196

235197
return 0;
236198
}

drivers/gpu/drm/mgag200/mgag200_drv.h

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -391,35 +391,25 @@ int mgag200_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_st
391391
void mgag200_crtc_helper_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_state *old_state);
392392
void mgag200_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_state *old_state);
393393
void mgag200_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *old_state);
394-
bool mgag200_crtc_helper_get_scanout_position(struct drm_crtc *crtc, bool in_vblank_irq,
395-
int *vpos, int *hpos,
396-
ktime_t *stime, ktime_t *etime,
397-
const struct drm_display_mode *mode);
398394

399395
#define MGAG200_CRTC_HELPER_FUNCS \
400396
.mode_valid = mgag200_crtc_helper_mode_valid, \
401397
.atomic_check = mgag200_crtc_helper_atomic_check, \
402398
.atomic_flush = mgag200_crtc_helper_atomic_flush, \
403399
.atomic_enable = mgag200_crtc_helper_atomic_enable, \
404-
.atomic_disable = mgag200_crtc_helper_atomic_disable, \
405-
.get_scanout_position = mgag200_crtc_helper_get_scanout_position
400+
.atomic_disable = mgag200_crtc_helper_atomic_disable
406401

407402
void mgag200_crtc_reset(struct drm_crtc *crtc);
408403
struct drm_crtc_state *mgag200_crtc_atomic_duplicate_state(struct drm_crtc *crtc);
409404
void mgag200_crtc_atomic_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state);
410-
int mgag200_crtc_enable_vblank(struct drm_crtc *crtc);
411-
void mgag200_crtc_disable_vblank(struct drm_crtc *crtc);
412405

413406
#define MGAG200_CRTC_FUNCS \
414407
.reset = mgag200_crtc_reset, \
415408
.destroy = drm_crtc_cleanup, \
416409
.set_config = drm_atomic_helper_set_config, \
417410
.page_flip = drm_atomic_helper_page_flip, \
418411
.atomic_duplicate_state = mgag200_crtc_atomic_duplicate_state, \
419-
.atomic_destroy_state = mgag200_crtc_atomic_destroy_state, \
420-
.enable_vblank = mgag200_crtc_enable_vblank, \
421-
.disable_vblank = mgag200_crtc_disable_vblank, \
422-
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp
412+
.atomic_destroy_state = mgag200_crtc_atomic_destroy_state
423413

424414
void mgag200_set_mode_regs(struct mga_device *mdev, const struct drm_display_mode *mode,
425415
bool set_vidrst);

drivers/gpu/drm/mgag200/mgag200_g200.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <drm/drm_drv.h>
99
#include <drm/drm_gem_atomic_helper.h>
1010
#include <drm/drm_probe_helper.h>
11-
#include <drm/drm_vblank.h>
1211

1312
#include "mgag200_drv.h"
1413

@@ -404,9 +403,5 @@ struct mga_device *mgag200_g200_device_create(struct pci_dev *pdev, const struct
404403
drm_mode_config_reset(dev);
405404
drm_kms_helper_poll_init(dev);
406405

407-
ret = drm_vblank_init(dev, 1);
408-
if (ret)
409-
return ERR_PTR(ret);
410-
411406
return mdev;
412407
}

drivers/gpu/drm/mgag200/mgag200_g200eh.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <drm/drm_drv.h>
99
#include <drm/drm_gem_atomic_helper.h>
1010
#include <drm/drm_probe_helper.h>
11-
#include <drm/drm_vblank.h>
1211

1312
#include "mgag200_drv.h"
1413

@@ -276,9 +275,5 @@ struct mga_device *mgag200_g200eh_device_create(struct pci_dev *pdev, const stru
276275
drm_mode_config_reset(dev);
277276
drm_kms_helper_poll_init(dev);
278277

279-
ret = drm_vblank_init(dev, 1);
280-
if (ret)
281-
return ERR_PTR(ret);
282-
283278
return mdev;
284279
}

drivers/gpu/drm/mgag200/mgag200_g200eh3.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include <drm/drm_drv.h>
88
#include <drm/drm_gem_atomic_helper.h>
99
#include <drm/drm_probe_helper.h>
10-
#include <drm/drm_vblank.h>
1110

1211
#include "mgag200_drv.h"
1312

@@ -181,9 +180,5 @@ struct mga_device *mgag200_g200eh3_device_create(struct pci_dev *pdev,
181180
drm_mode_config_reset(dev);
182181
drm_kms_helper_poll_init(dev);
183182

184-
ret = drm_vblank_init(dev, 1);
185-
if (ret)
186-
return ERR_PTR(ret);
187-
188183
return mdev;
189184
}

drivers/gpu/drm/mgag200/mgag200_g200er.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <drm/drm_drv.h>
99
#include <drm/drm_gem_atomic_helper.h>
1010
#include <drm/drm_probe_helper.h>
11-
#include <drm/drm_vblank.h>
1211

1312
#include "mgag200_drv.h"
1413

@@ -206,17 +205,14 @@ static void mgag200_g200er_crtc_helper_atomic_enable(struct drm_crtc *crtc,
206205
mgag200_crtc_set_gamma_linear(mdev, format);
207206

208207
mgag200_enable_display(mdev);
209-
210-
drm_crtc_vblank_on(crtc);
211208
}
212209

213210
static const struct drm_crtc_helper_funcs mgag200_g200er_crtc_helper_funcs = {
214211
.mode_valid = mgag200_crtc_helper_mode_valid,
215212
.atomic_check = mgag200_crtc_helper_atomic_check,
216213
.atomic_flush = mgag200_crtc_helper_atomic_flush,
217214
.atomic_enable = mgag200_g200er_crtc_helper_atomic_enable,
218-
.atomic_disable = mgag200_crtc_helper_atomic_disable,
219-
.get_scanout_position = mgag200_crtc_helper_get_scanout_position,
215+
.atomic_disable = mgag200_crtc_helper_atomic_disable
220216
};
221217

222218
static const struct drm_crtc_funcs mgag200_g200er_crtc_funcs = {
@@ -312,9 +308,5 @@ struct mga_device *mgag200_g200er_device_create(struct pci_dev *pdev, const stru
312308
drm_mode_config_reset(dev);
313309
drm_kms_helper_poll_init(dev);
314310

315-
ret = drm_vblank_init(dev, 1);
316-
if (ret)
317-
return ERR_PTR(ret);
318-
319311
return mdev;
320312
}

drivers/gpu/drm/mgag200/mgag200_g200ev.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <drm/drm_drv.h>
99
#include <drm/drm_gem_atomic_helper.h>
1010
#include <drm/drm_probe_helper.h>
11-
#include <drm/drm_vblank.h>
1211

1312
#include "mgag200_drv.h"
1413

@@ -207,17 +206,14 @@ static void mgag200_g200ev_crtc_helper_atomic_enable(struct drm_crtc *crtc,
207206
mgag200_crtc_set_gamma_linear(mdev, format);
208207

209208
mgag200_enable_display(mdev);
210-
211-
drm_crtc_vblank_on(crtc);
212209
}
213210

214211
static const struct drm_crtc_helper_funcs mgag200_g200ev_crtc_helper_funcs = {
215212
.mode_valid = mgag200_crtc_helper_mode_valid,
216213
.atomic_check = mgag200_crtc_helper_atomic_check,
217214
.atomic_flush = mgag200_crtc_helper_atomic_flush,
218215
.atomic_enable = mgag200_g200ev_crtc_helper_atomic_enable,
219-
.atomic_disable = mgag200_crtc_helper_atomic_disable,
220-
.get_scanout_position = mgag200_crtc_helper_get_scanout_position,
216+
.atomic_disable = mgag200_crtc_helper_atomic_disable
221217
};
222218

223219
static const struct drm_crtc_funcs mgag200_g200ev_crtc_funcs = {
@@ -317,9 +313,5 @@ struct mga_device *mgag200_g200ev_device_create(struct pci_dev *pdev, const stru
317313
drm_mode_config_reset(dev);
318314
drm_kms_helper_poll_init(dev);
319315

320-
ret = drm_vblank_init(dev, 1);
321-
if (ret)
322-
return ERR_PTR(ret);
323-
324316
return mdev;
325317
}

drivers/gpu/drm/mgag200/mgag200_g200ew3.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include <drm/drm_drv.h>
88
#include <drm/drm_gem_atomic_helper.h>
99
#include <drm/drm_probe_helper.h>
10-
#include <drm/drm_vblank.h>
1110

1211
#include "mgag200_drv.h"
1312

@@ -199,9 +198,5 @@ struct mga_device *mgag200_g200ew3_device_create(struct pci_dev *pdev,
199198
drm_mode_config_reset(dev);
200199
drm_kms_helper_poll_init(dev);
201200

202-
ret = drm_vblank_init(dev, 1);
203-
if (ret)
204-
return ERR_PTR(ret);
205-
206201
return mdev;
207202
}

drivers/gpu/drm/mgag200/mgag200_g200se.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <drm/drm_drv.h>
99
#include <drm/drm_gem_atomic_helper.h>
1010
#include <drm/drm_probe_helper.h>
11-
#include <drm/drm_vblank.h>
1211

1312
#include "mgag200_drv.h"
1413

@@ -338,17 +337,14 @@ static void mgag200_g200se_crtc_helper_atomic_enable(struct drm_crtc *crtc,
338337
mgag200_crtc_set_gamma_linear(mdev, format);
339338

340339
mgag200_enable_display(mdev);
341-
342-
drm_crtc_vblank_on(crtc);
343340
}
344341

345342
static const struct drm_crtc_helper_funcs mgag200_g200se_crtc_helper_funcs = {
346343
.mode_valid = mgag200_crtc_helper_mode_valid,
347344
.atomic_check = mgag200_crtc_helper_atomic_check,
348345
.atomic_flush = mgag200_crtc_helper_atomic_flush,
349346
.atomic_enable = mgag200_g200se_crtc_helper_atomic_enable,
350-
.atomic_disable = mgag200_crtc_helper_atomic_disable,
351-
.get_scanout_position = mgag200_crtc_helper_get_scanout_position,
347+
.atomic_disable = mgag200_crtc_helper_atomic_disable
352348
};
353349

354350
static const struct drm_crtc_funcs mgag200_g200se_crtc_funcs = {
@@ -517,9 +513,5 @@ struct mga_device *mgag200_g200se_device_create(struct pci_dev *pdev, const stru
517513
drm_mode_config_reset(dev);
518514
drm_kms_helper_poll_init(dev);
519515

520-
ret = drm_vblank_init(dev, 1);
521-
if (ret)
522-
return ERR_PTR(ret);
523-
524516
return mdev;
525517
}

drivers/gpu/drm/mgag200/mgag200_g200wb.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <drm/drm_drv.h>
99
#include <drm/drm_gem_atomic_helper.h>
1010
#include <drm/drm_probe_helper.h>
11-
#include <drm/drm_vblank.h>
1211

1312
#include "mgag200_drv.h"
1413

@@ -323,9 +322,5 @@ struct mga_device *mgag200_g200wb_device_create(struct pci_dev *pdev, const stru
323322
drm_mode_config_reset(dev);
324323
drm_kms_helper_poll_init(dev);
325324

326-
ret = drm_vblank_init(dev, 1);
327-
if (ret)
328-
return ERR_PTR(ret);
329-
330325
return mdev;
331326
}

0 commit comments

Comments
 (0)