Skip to content

Commit 87d9862

Browse files
committed
Merge tag 'drm-misc-fixes-2022-09-15' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
Short summary of fixes pull: * gma500: Locking and IRQ fixes * meson: OSD1 display fixes * panel-edp: Fix Innolux timings * rockchip: DP/HDMI fixes Signed-off-by: Dave Airlie <[email protected]> From: Thomas Zimmermann <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/YyMUpP1w21CPXq+I@linux-uq9g
2 parents e2111ae + b0b9408 commit 87d9862

File tree

14 files changed

+38
-34
lines changed

14 files changed

+38
-34
lines changed

drivers/gpu/drm/gma500/cdv_device.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -581,11 +581,9 @@ static const struct psb_offset cdv_regmap[2] = {
581581
static int cdv_chip_setup(struct drm_device *dev)
582582
{
583583
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
584-
struct pci_dev *pdev = to_pci_dev(dev->dev);
585584
INIT_WORK(&dev_priv->hotplug_work, cdv_hotplug_work_func);
586585

587-
if (pci_enable_msi(pdev))
588-
dev_warn(dev->dev, "Enabling MSI failed!\n");
586+
dev_priv->use_msi = true;
589587
dev_priv->regmap = cdv_regmap;
590588
gma_get_core_freq(dev);
591589
psb_intel_opregion_init(dev);

drivers/gpu/drm/gma500/gem.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ static void psb_gem_free_object(struct drm_gem_object *obj)
112112
{
113113
struct psb_gem_object *pobj = to_psb_gem_object(obj);
114114

115-
drm_gem_object_release(obj);
116-
117115
/* Undo the mmap pin if we are destroying the object */
118116
if (pobj->mmapping)
119117
psb_gem_unpin(pobj);
120118

119+
drm_gem_object_release(obj);
120+
121121
WARN_ON(pobj->in_gart && !pobj->stolen);
122122

123123
release_resource(&pobj->resource);

drivers/gpu/drm/gma500/gma_display.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -532,15 +532,18 @@ int gma_crtc_page_flip(struct drm_crtc *crtc,
532532
WARN_ON(drm_crtc_vblank_get(crtc) != 0);
533533

534534
gma_crtc->page_flip_event = event;
535+
spin_unlock_irqrestore(&dev->event_lock, flags);
535536

536537
/* Call this locked if we want an event at vblank interrupt. */
537538
ret = crtc_funcs->mode_set_base(crtc, crtc->x, crtc->y, old_fb);
538539
if (ret) {
539-
gma_crtc->page_flip_event = NULL;
540-
drm_crtc_vblank_put(crtc);
540+
spin_lock_irqsave(&dev->event_lock, flags);
541+
if (gma_crtc->page_flip_event) {
542+
gma_crtc->page_flip_event = NULL;
543+
drm_crtc_vblank_put(crtc);
544+
}
545+
spin_unlock_irqrestore(&dev->event_lock, flags);
541546
}
542-
543-
spin_unlock_irqrestore(&dev->event_lock, flags);
544547
} else {
545548
ret = crtc_funcs->mode_set_base(crtc, crtc->x, crtc->y, old_fb);
546549
}

drivers/gpu/drm/gma500/oaktrail_device.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,12 +501,9 @@ static const struct psb_offset oaktrail_regmap[2] = {
501501
static int oaktrail_chip_setup(struct drm_device *dev)
502502
{
503503
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
504-
struct pci_dev *pdev = to_pci_dev(dev->dev);
505504
int ret;
506505

507-
if (pci_enable_msi(pdev))
508-
dev_warn(dev->dev, "Enabling MSI failed!\n");
509-
506+
dev_priv->use_msi = true;
510507
dev_priv->regmap = oaktrail_regmap;
511508

512509
ret = mid_chip_setup(dev);

drivers/gpu/drm/gma500/power.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,6 @@ static void gma_suspend_pci(struct pci_dev *pdev)
139139
dev_priv->regs.saveBSM = bsm;
140140
pci_read_config_dword(pdev, 0xFC, &vbt);
141141
dev_priv->regs.saveVBT = vbt;
142-
pci_read_config_dword(pdev, PSB_PCIx_MSI_ADDR_LOC, &dev_priv->msi_addr);
143-
pci_read_config_dword(pdev, PSB_PCIx_MSI_DATA_LOC, &dev_priv->msi_data);
144142

145143
pci_disable_device(pdev);
146144
pci_set_power_state(pdev, PCI_D3hot);
@@ -168,9 +166,6 @@ static bool gma_resume_pci(struct pci_dev *pdev)
168166
pci_restore_state(pdev);
169167
pci_write_config_dword(pdev, 0x5c, dev_priv->regs.saveBSM);
170168
pci_write_config_dword(pdev, 0xFC, dev_priv->regs.saveVBT);
171-
/* restoring MSI address and data in PCIx space */
172-
pci_write_config_dword(pdev, PSB_PCIx_MSI_ADDR_LOC, dev_priv->msi_addr);
173-
pci_write_config_dword(pdev, PSB_PCIx_MSI_DATA_LOC, dev_priv->msi_data);
174169
ret = pci_enable_device(pdev);
175170

176171
if (ret != 0)
@@ -223,8 +218,7 @@ int gma_power_resume(struct device *_dev)
223218
mutex_lock(&power_mutex);
224219
gma_resume_pci(pdev);
225220
gma_resume_display(pdev);
226-
gma_irq_preinstall(dev);
227-
gma_irq_postinstall(dev);
221+
gma_irq_install(dev);
228222
mutex_unlock(&power_mutex);
229223
return 0;
230224
}

drivers/gpu/drm/gma500/psb_drv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
383383
PSB_WVDC32(0xFFFFFFFF, PSB_INT_MASK_R);
384384
spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags);
385385

386-
gma_irq_install(dev, pdev->irq);
386+
gma_irq_install(dev);
387387

388388
dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
389389

drivers/gpu/drm/gma500/psb_drv.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ struct drm_psb_private {
490490
int rpm_enabled;
491491

492492
/* MID specific */
493+
bool use_msi;
493494
bool has_gct;
494495
struct oaktrail_gct_data gct_data;
495496

@@ -499,10 +500,6 @@ struct drm_psb_private {
499500
/* Register state */
500501
struct psb_save_area regs;
501502

502-
/* MSI reg save */
503-
uint32_t msi_addr;
504-
uint32_t msi_data;
505-
506503
/* Hotplug handling */
507504
struct work_struct hotplug_work;
508505

drivers/gpu/drm/gma500/psb_irq.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,17 +316,24 @@ void gma_irq_postinstall(struct drm_device *dev)
316316
spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags);
317317
}
318318

319-
int gma_irq_install(struct drm_device *dev, unsigned int irq)
319+
int gma_irq_install(struct drm_device *dev)
320320
{
321+
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
322+
struct pci_dev *pdev = to_pci_dev(dev->dev);
321323
int ret;
322324

323-
if (irq == IRQ_NOTCONNECTED)
325+
if (dev_priv->use_msi && pci_enable_msi(pdev)) {
326+
dev_warn(dev->dev, "Enabling MSI failed!\n");
327+
dev_priv->use_msi = false;
328+
}
329+
330+
if (pdev->irq == IRQ_NOTCONNECTED)
324331
return -ENOTCONN;
325332

326333
gma_irq_preinstall(dev);
327334

328335
/* PCI devices require shared interrupts. */
329-
ret = request_irq(irq, gma_irq_handler, IRQF_SHARED, dev->driver->name, dev);
336+
ret = request_irq(pdev->irq, gma_irq_handler, IRQF_SHARED, dev->driver->name, dev);
330337
if (ret)
331338
return ret;
332339

@@ -369,6 +376,8 @@ void gma_irq_uninstall(struct drm_device *dev)
369376
spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags);
370377

371378
free_irq(pdev->irq, dev);
379+
if (dev_priv->use_msi)
380+
pci_disable_msi(pdev);
372381
}
373382

374383
int gma_crtc_enable_vblank(struct drm_crtc *crtc)

drivers/gpu/drm/gma500/psb_irq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ struct drm_device;
1717

1818
void gma_irq_preinstall(struct drm_device *dev);
1919
void gma_irq_postinstall(struct drm_device *dev);
20-
int gma_irq_install(struct drm_device *dev, unsigned int irq);
20+
int gma_irq_install(struct drm_device *dev);
2121
void gma_irq_uninstall(struct drm_device *dev);
2222

2323
int gma_crtc_enable_vblank(struct drm_crtc *crtc);

drivers/gpu/drm/meson/meson_plane.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ static void meson_plane_atomic_update(struct drm_plane *plane,
170170

171171
/* Enable OSD and BLK0, set max global alpha */
172172
priv->viu.osd1_ctrl_stat = OSD_ENABLE |
173-
(0xFF << OSD_GLOBAL_ALPHA_SHIFT) |
173+
(0x100 << OSD_GLOBAL_ALPHA_SHIFT) |
174174
OSD_BLK0_ENABLE;
175175

176176
priv->viu.osd1_ctrl_stat2 = readl(priv->io_base +

0 commit comments

Comments
 (0)