Skip to content

Commit ed8c37e

Browse files
committed
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "Smattering of fixes, i915, exynos, tegra, msm, vmwgfx. A bit of framebuffer reference counting fallout fixes, i915 GM45 regression fix, DVI regression fix, vmware info leak between processes fix" * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm/exynos: use %pad for dma_addr_t drm/exynos: dsi: use IS_ERR() to check devm_ioremap_resource() results MAINTAINERS: update maintainer entry for Exynos DP driver drm/exynos: balance framebuffer refcount drm/i915: Move all ring resets before setting the HWS page drm/i915: Don't WARN nor handle unexpected hpd interrupts on gmch platforms drm/msm/mdp4: cure for the cursor blues (v2) drm/msm: default to XR24 rather than AR24 drm/msm: fix memory leak drm/tegra: restrict plane loops to legacy planes drm/i915: Allow full PPGTT with param override drm/i915: Discard BIOS framebuffers too small to accommodate chosen mode drm/vmwgfx: Make sure user-space can't DMA across buffer object boundaries v2 drm/i915: get power domain in case the BIOS enabled eDP VDD drm/i915: Don't check gmch state on inherited configs drm/i915: Allow user modes to exceed DVI 165MHz limit
2 parents 2aafe1a + b8eade2 commit ed8c37e

24 files changed

+166
-56
lines changed

MAINTAINERS

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3485,6 +3485,12 @@ S: Maintained
34853485
F: drivers/extcon/
34863486
F: Documentation/extcon/
34873487

3488+
EXYNOS DP DRIVER
3489+
M: Jingoo Han <[email protected]>
3490+
3491+
S: Maintained
3492+
F: drivers/gpu/drm/exynos/exynos_dp*
3493+
34883494
EXYNOS MIPI DISPLAY DRIVERS
34893495
M: Inki Dae <[email protected]>
34903496
M: Donghwa Lee <[email protected]>

drivers/gpu/drm/exynos/exynos_drm_crtc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ exynos_drm_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
145145

146146
plane->crtc = crtc;
147147
plane->fb = crtc->primary->fb;
148+
drm_framebuffer_reference(plane->fb);
148149

149150
return 0;
150151
}

drivers/gpu/drm/exynos/exynos_drm_dmabuf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev,
263263
buffer->sgt = sgt;
264264
exynos_gem_obj->base.import_attach = attach;
265265

266-
DRM_DEBUG_PRIME("dma_addr = 0x%x, size = 0x%lx\n", buffer->dma_addr,
266+
DRM_DEBUG_PRIME("dma_addr = %pad, size = 0x%lx\n", &buffer->dma_addr,
267267
buffer->size);
268268

269269
return &exynos_gem_obj->base;

drivers/gpu/drm/exynos/exynos_drm_dsi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1426,9 +1426,9 @@ static int exynos_dsi_probe(struct platform_device *pdev)
14261426

14271427
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
14281428
dsi->reg_base = devm_ioremap_resource(&pdev->dev, res);
1429-
if (!dsi->reg_base) {
1429+
if (IS_ERR(dsi->reg_base)) {
14301430
dev_err(&pdev->dev, "failed to remap io region\n");
1431-
return -EADDRNOTAVAIL;
1431+
return PTR_ERR(dsi->reg_base);
14321432
}
14331433

14341434
dsi->phy = devm_phy_get(&pdev->dev, "dsim");

drivers/gpu/drm/exynos/exynos_drm_vidi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static void vidi_win_commit(struct exynos_drm_manager *mgr, int zpos)
220220

221221
win_data->enabled = true;
222222

223-
DRM_DEBUG_KMS("dma_addr = 0x%x\n", win_data->dma_addr);
223+
DRM_DEBUG_KMS("dma_addr = %pad\n", &win_data->dma_addr);
224224

225225
if (ctx->vblank_on)
226226
schedule_work(&ctx->work);

drivers/gpu/drm/i915/i915_gem_gtt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ bool intel_enable_ppgtt(struct drm_device *dev, bool full)
5050

5151
/* Full ppgtt disabled by default for now due to issues. */
5252
if (full)
53-
return false; /* HAS_PPGTT(dev) */
53+
return HAS_PPGTT(dev) && (i915.enable_ppgtt == 2);
5454
else
5555
return HAS_ALIASING_PPGTT(dev);
5656
}

drivers/gpu/drm/i915/i915_irq.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,10 +1362,20 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev,
13621362
spin_lock(&dev_priv->irq_lock);
13631363
for (i = 1; i < HPD_NUM_PINS; i++) {
13641364

1365-
WARN_ONCE(hpd[i] & hotplug_trigger &&
1366-
dev_priv->hpd_stats[i].hpd_mark == HPD_DISABLED,
1367-
"Received HPD interrupt (0x%08x) on pin %d (0x%08x) although disabled\n",
1368-
hotplug_trigger, i, hpd[i]);
1365+
if (hpd[i] & hotplug_trigger &&
1366+
dev_priv->hpd_stats[i].hpd_mark == HPD_DISABLED) {
1367+
/*
1368+
* On GMCH platforms the interrupt mask bits only
1369+
* prevent irq generation, not the setting of the
1370+
* hotplug bits itself. So only WARN about unexpected
1371+
* interrupts on saner platforms.
1372+
*/
1373+
WARN_ONCE(INTEL_INFO(dev)->gen >= 5 && !IS_VALLEYVIEW(dev),
1374+
"Received HPD interrupt (0x%08x) on pin %d (0x%08x) although disabled\n",
1375+
hotplug_trigger, i, hpd[i]);
1376+
1377+
continue;
1378+
}
13691379

13701380
if (!(hpd[i] & hotplug_trigger) ||
13711381
dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED)

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ enum punit_power_well {
827827
# define MI_FLUSH_ENABLE (1 << 12)
828828
# define ASYNC_FLIP_PERF_DISABLE (1 << 14)
829829
# define MODE_IDLE (1 << 9)
830+
# define STOP_RING (1 << 8)
830831

831832
#define GEN6_GT_MODE 0x20d0
832833
#define GEN7_GT_MODE 0x7008

drivers/gpu/drm/i915/intel_display.c

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9654,11 +9654,22 @@ intel_pipe_config_compare(struct drm_device *dev,
96549654
PIPE_CONF_CHECK_I(pipe_src_w);
96559655
PIPE_CONF_CHECK_I(pipe_src_h);
96569656

9657-
PIPE_CONF_CHECK_I(gmch_pfit.control);
9658-
/* pfit ratios are autocomputed by the hw on gen4+ */
9659-
if (INTEL_INFO(dev)->gen < 4)
9660-
PIPE_CONF_CHECK_I(gmch_pfit.pgm_ratios);
9661-
PIPE_CONF_CHECK_I(gmch_pfit.lvds_border_bits);
9657+
/*
9658+
* FIXME: BIOS likes to set up a cloned config with lvds+external
9659+
* screen. Since we don't yet re-compute the pipe config when moving
9660+
* just the lvds port away to another pipe the sw tracking won't match.
9661+
*
9662+
* Proper atomic modesets with recomputed global state will fix this.
9663+
* Until then just don't check gmch state for inherited modes.
9664+
*/
9665+
if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_INHERITED_MODE)) {
9666+
PIPE_CONF_CHECK_I(gmch_pfit.control);
9667+
/* pfit ratios are autocomputed by the hw on gen4+ */
9668+
if (INTEL_INFO(dev)->gen < 4)
9669+
PIPE_CONF_CHECK_I(gmch_pfit.pgm_ratios);
9670+
PIPE_CONF_CHECK_I(gmch_pfit.lvds_border_bits);
9671+
}
9672+
96629673
PIPE_CONF_CHECK_I(pch_pfit.enabled);
96639674
if (current_config->pch_pfit.enabled) {
96649675
PIPE_CONF_CHECK_I(pch_pfit.pos);
@@ -11616,6 +11627,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
1161611627
base.head) {
1161711628
memset(&crtc->config, 0, sizeof(crtc->config));
1161811629

11630+
crtc->config.quirks |= PIPE_CONFIG_QUIRK_INHERITED_MODE;
11631+
1161911632
crtc->active = dev_priv->display.get_pipe_config(crtc,
1162011633
&crtc->config);
1162111634

drivers/gpu/drm/i915/intel_dp.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3619,7 +3619,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
36193619
{
36203620
struct drm_connector *connector = &intel_connector->base;
36213621
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3622-
struct drm_device *dev = intel_dig_port->base.base.dev;
3622+
struct intel_encoder *intel_encoder = &intel_dig_port->base;
3623+
struct drm_device *dev = intel_encoder->base.dev;
36233624
struct drm_i915_private *dev_priv = dev->dev_private;
36243625
struct drm_display_mode *fixed_mode = NULL;
36253626
bool has_dpcd;
@@ -3629,6 +3630,14 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
36293630
if (!is_edp(intel_dp))
36303631
return true;
36313632

3633+
/* The VDD bit needs a power domain reference, so if the bit is already
3634+
* enabled when we boot, grab this reference. */
3635+
if (edp_have_panel_vdd(intel_dp)) {
3636+
enum intel_display_power_domain power_domain;
3637+
power_domain = intel_display_port_power_domain(intel_encoder);
3638+
intel_display_power_get(dev_priv, power_domain);
3639+
}
3640+
36323641
/* Cache DPCD and EDID for edp. */
36333642
intel_edp_panel_vdd_on(intel_dp);
36343643
has_dpcd = intel_dp_get_dpcd(intel_dp);

drivers/gpu/drm/i915/intel_drv.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ struct intel_crtc_config {
236236
* tracked with quirk flags so that fastboot and state checker can act
237237
* accordingly.
238238
*/
239-
#define PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS (1<<0) /* unreliable sync mode.flags */
239+
#define PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS (1<<0) /* unreliable sync mode.flags */
240+
#define PIPE_CONFIG_QUIRK_INHERITED_MODE (1<<1) /* mode inherited from firmware */
240241
unsigned long quirks;
241242

242243
/* User requested mode, only valid as a starting point to

drivers/gpu/drm/i915/intel_fbdev.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,16 @@ static int intelfb_create(struct drm_fb_helper *helper,
132132

133133
mutex_lock(&dev->struct_mutex);
134134

135+
if (intel_fb &&
136+
(sizes->fb_width > intel_fb->base.width ||
137+
sizes->fb_height > intel_fb->base.height)) {
138+
DRM_DEBUG_KMS("BIOS fb too small (%dx%d), we require (%dx%d),"
139+
" releasing it\n",
140+
intel_fb->base.width, intel_fb->base.height,
141+
sizes->fb_width, sizes->fb_height);
142+
drm_framebuffer_unreference(&intel_fb->base);
143+
intel_fb = ifbdev->fb = NULL;
144+
}
135145
if (!intel_fb || WARN_ON(!intel_fb->obj)) {
136146
DRM_DEBUG_KMS("no BIOS fb, allocating a new one\n");
137147
ret = intelfb_alloc(helper, sizes);

drivers/gpu/drm/i915/intel_hdmi.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -821,11 +821,11 @@ static void intel_disable_hdmi(struct intel_encoder *encoder)
821821
}
822822
}
823823

824-
static int hdmi_portclock_limit(struct intel_hdmi *hdmi)
824+
static int hdmi_portclock_limit(struct intel_hdmi *hdmi, bool respect_dvi_limit)
825825
{
826826
struct drm_device *dev = intel_hdmi_to_dev(hdmi);
827827

828-
if (!hdmi->has_hdmi_sink || IS_G4X(dev))
828+
if ((respect_dvi_limit && !hdmi->has_hdmi_sink) || IS_G4X(dev))
829829
return 165000;
830830
else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)
831831
return 300000;
@@ -837,7 +837,8 @@ static enum drm_mode_status
837837
intel_hdmi_mode_valid(struct drm_connector *connector,
838838
struct drm_display_mode *mode)
839839
{
840-
if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector)))
840+
if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
841+
true))
841842
return MODE_CLOCK_HIGH;
842843
if (mode->clock < 20000)
843844
return MODE_CLOCK_LOW;
@@ -879,7 +880,7 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
879880
struct drm_device *dev = encoder->base.dev;
880881
struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode;
881882
int clock_12bpc = pipe_config->adjusted_mode.crtc_clock * 3 / 2;
882-
int portclock_limit = hdmi_portclock_limit(intel_hdmi);
883+
int portclock_limit = hdmi_portclock_limit(intel_hdmi, false);
883884
int desired_bpp;
884885

885886
if (intel_hdmi->color_range_auto) {

drivers/gpu/drm/i915/intel_ringbuffer.c

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -437,32 +437,41 @@ static void ring_setup_phys_status_page(struct intel_ring_buffer *ring)
437437
I915_WRITE(HWS_PGA, addr);
438438
}
439439

440-
static int init_ring_common(struct intel_ring_buffer *ring)
440+
static bool stop_ring(struct intel_ring_buffer *ring)
441441
{
442-
struct drm_device *dev = ring->dev;
443-
struct drm_i915_private *dev_priv = dev->dev_private;
444-
struct drm_i915_gem_object *obj = ring->obj;
445-
int ret = 0;
446-
u32 head;
442+
struct drm_i915_private *dev_priv = to_i915(ring->dev);
447443

448-
gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
444+
if (!IS_GEN2(ring->dev)) {
445+
I915_WRITE_MODE(ring, _MASKED_BIT_ENABLE(STOP_RING));
446+
if (wait_for_atomic((I915_READ_MODE(ring) & MODE_IDLE) != 0, 1000)) {
447+
DRM_ERROR("%s :timed out trying to stop ring\n", ring->name);
448+
return false;
449+
}
450+
}
449451

450-
/* Stop the ring if it's running. */
451452
I915_WRITE_CTL(ring, 0);
452453
I915_WRITE_HEAD(ring, 0);
453454
ring->write_tail(ring, 0);
454-
if (wait_for_atomic((I915_READ_MODE(ring) & MODE_IDLE) != 0, 1000))
455-
DRM_ERROR("%s :timed out trying to stop ring\n", ring->name);
456455

457-
if (I915_NEED_GFX_HWS(dev))
458-
intel_ring_setup_status_page(ring);
459-
else
460-
ring_setup_phys_status_page(ring);
456+
if (!IS_GEN2(ring->dev)) {
457+
(void)I915_READ_CTL(ring);
458+
I915_WRITE_MODE(ring, _MASKED_BIT_DISABLE(STOP_RING));
459+
}
461460

462-
head = I915_READ_HEAD(ring) & HEAD_ADDR;
461+
return (I915_READ_HEAD(ring) & HEAD_ADDR) == 0;
462+
}
463463

464-
/* G45 ring initialization fails to reset head to zero */
465-
if (head != 0) {
464+
static int init_ring_common(struct intel_ring_buffer *ring)
465+
{
466+
struct drm_device *dev = ring->dev;
467+
struct drm_i915_private *dev_priv = dev->dev_private;
468+
struct drm_i915_gem_object *obj = ring->obj;
469+
int ret = 0;
470+
471+
gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
472+
473+
if (!stop_ring(ring)) {
474+
/* G45 ring initialization often fails to reset head to zero */
466475
DRM_DEBUG_KMS("%s head not reset to zero "
467476
"ctl %08x head %08x tail %08x start %08x\n",
468477
ring->name,
@@ -471,19 +480,24 @@ static int init_ring_common(struct intel_ring_buffer *ring)
471480
I915_READ_TAIL(ring),
472481
I915_READ_START(ring));
473482

474-
I915_WRITE_HEAD(ring, 0);
475-
476-
if (I915_READ_HEAD(ring) & HEAD_ADDR) {
483+
if (!stop_ring(ring)) {
477484
DRM_ERROR("failed to set %s head to zero "
478485
"ctl %08x head %08x tail %08x start %08x\n",
479486
ring->name,
480487
I915_READ_CTL(ring),
481488
I915_READ_HEAD(ring),
482489
I915_READ_TAIL(ring),
483490
I915_READ_START(ring));
491+
ret = -EIO;
492+
goto out;
484493
}
485494
}
486495

496+
if (I915_NEED_GFX_HWS(dev))
497+
intel_ring_setup_status_page(ring);
498+
else
499+
ring_setup_phys_status_page(ring);
500+
487501
/* Initialize the ring. This must happen _after_ we've cleared the ring
488502
* registers with the above sequence (the readback of the HEAD registers
489503
* also enforces ordering), otherwise the hw might lose the new ring

drivers/gpu/drm/i915/intel_ringbuffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ struct intel_hw_status_page {
3434
#define I915_WRITE_IMR(ring, val) I915_WRITE(RING_IMR((ring)->mmio_base), val)
3535

3636
#define I915_READ_MODE(ring) I915_READ(RING_MI_MODE((ring)->mmio_base))
37+
#define I915_WRITE_MODE(ring, val) I915_WRITE(RING_MI_MODE((ring)->mmio_base), val)
3738

3839
enum intel_ring_hangcheck_action {
3940
HANGCHECK_IDLE = 0,

drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -510,9 +510,8 @@ static void update_cursor(struct drm_crtc *crtc)
510510
MDP4_DMA_CURSOR_BLEND_CONFIG_CURSOR_EN);
511511
} else {
512512
/* disable cursor: */
513-
mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_BASE(dma), 0);
514-
mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_BLEND_CONFIG(dma),
515-
MDP4_DMA_CURSOR_BLEND_CONFIG_FORMAT(CURSOR_ARGB));
513+
mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_BASE(dma),
514+
mdp4_kms->blank_cursor_iova);
516515
}
517516

518517
/* and drop the iova ref + obj rev when done scanning out: */
@@ -574,11 +573,9 @@ static int mdp4_crtc_cursor_set(struct drm_crtc *crtc,
574573

575574
if (old_bo) {
576575
/* drop our previous reference: */
577-
msm_gem_put_iova(old_bo, mdp4_kms->id);
578-
drm_gem_object_unreference_unlocked(old_bo);
576+
drm_flip_work_queue(&mdp4_crtc->unref_cursor_work, old_bo);
579577
}
580578

581-
crtc_flush(crtc);
582579
request_pending(crtc, PENDING_CURSOR);
583580

584581
return 0;

drivers/gpu/drm/msm/mdp/mdp4/mdp4_irq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ irqreturn_t mdp4_irq(struct msm_kms *kms)
7070

7171
VERB("status=%08x", status);
7272

73+
mdp_dispatch_irqs(mdp_kms, status);
74+
7375
for (id = 0; id < priv->num_crtcs; id++)
7476
if (status & mdp4_crtc_vblank(priv->crtcs[id]))
7577
drm_handle_vblank(dev, id);
7678

77-
mdp_dispatch_irqs(mdp_kms, status);
78-
7979
return IRQ_HANDLED;
8080
}
8181

drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ static void mdp4_preclose(struct msm_kms *kms, struct drm_file *file)
144144
static void mdp4_destroy(struct msm_kms *kms)
145145
{
146146
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms));
147+
if (mdp4_kms->blank_cursor_iova)
148+
msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id);
149+
if (mdp4_kms->blank_cursor_bo)
150+
drm_gem_object_unreference(mdp4_kms->blank_cursor_bo);
147151
kfree(mdp4_kms);
148152
}
149153

@@ -372,6 +376,23 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
372376
goto fail;
373377
}
374378

379+
mutex_lock(&dev->struct_mutex);
380+
mdp4_kms->blank_cursor_bo = msm_gem_new(dev, SZ_16K, MSM_BO_WC);
381+
mutex_unlock(&dev->struct_mutex);
382+
if (IS_ERR(mdp4_kms->blank_cursor_bo)) {
383+
ret = PTR_ERR(mdp4_kms->blank_cursor_bo);
384+
dev_err(dev->dev, "could not allocate blank-cursor bo: %d\n", ret);
385+
mdp4_kms->blank_cursor_bo = NULL;
386+
goto fail;
387+
}
388+
389+
ret = msm_gem_get_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id,
390+
&mdp4_kms->blank_cursor_iova);
391+
if (ret) {
392+
dev_err(dev->dev, "could not pin blank-cursor bo: %d\n", ret);
393+
goto fail;
394+
}
395+
375396
return kms;
376397

377398
fail:

drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ struct mdp4_kms {
4444
struct clk *lut_clk;
4545

4646
struct mdp_irq error_handler;
47+
48+
/* empty/blank cursor bo to use when cursor is "disabled" */
49+
struct drm_gem_object *blank_cursor_bo;
50+
uint32_t blank_cursor_iova;
4751
};
4852
#define to_mdp4_kms(x) container_of(x, struct mdp4_kms, base)
4953

0 commit comments

Comments
 (0)