Skip to content

Commit b3c8a40

Browse files
committed
Merge tag 'drm-misc-next-fixes-2019-07-11' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
Pull request for drm-misc-fixes-next for v5.3: - Revert properties exposed in komeda that need improvement before they become ABI. - Only add modes from the cmdline if they are valid. - Add orientation quirk for GPD MicroPC. - Reduce stack usage in drm selftests. - Fix bochs framebuffer setup. Signed-off-by: Dave Airlie <[email protected]> From: Maarten Lankhorst <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 3729fe2 + 7f3bbc0 commit b3c8a40

16 files changed

+109
-276
lines changed

MAINTAINERS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,7 @@ M: James (Qian) Wang <[email protected]>
12031203
M: Liviu Dudau <[email protected]>
12041204
L: Mali DP Maintainers <[email protected]>
12051205
S: Supported
1206-
T: git git://linux-arm.org/linux-ld.git for-upstream/mali-dp
1206+
T: git git://anongit.freedesktop.org/drm/drm-misc
12071207
F: drivers/gpu/drm/arm/display/include/
12081208
F: drivers/gpu/drm/arm/display/komeda/
12091209
F: Documentation/devicetree/bindings/display/arm,komeda.txt
@@ -1214,7 +1214,7 @@ M: Liviu Dudau <[email protected]>
12141214
M: Brian Starkey <[email protected]>
12151215
L: Mali DP Maintainers <[email protected]>
12161216
S: Supported
1217-
T: git git://linux-arm.org/linux-ld.git for-upstream/mali-dp
1217+
T: git git://anongit.freedesktop.org/drm/drm-misc
12181218
F: drivers/gpu/drm/arm/
12191219
F: Documentation/devicetree/bindings/display/arm,malidp.txt
12201220
F: Documentation/gpu/afbc.rst

drivers/gpu/drm/arm/display/komeda/komeda_crtc.c

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -454,24 +454,6 @@ static void komeda_crtc_vblank_disable(struct drm_crtc *crtc)
454454
mdev->funcs->on_off_vblank(mdev, kcrtc->master->id, false);
455455
}
456456

457-
static int
458-
komeda_crtc_atomic_get_property(struct drm_crtc *crtc,
459-
const struct drm_crtc_state *state,
460-
struct drm_property *property, uint64_t *val)
461-
{
462-
struct komeda_crtc *kcrtc = to_kcrtc(crtc);
463-
struct komeda_crtc_state *kcrtc_st = to_kcrtc_st(state);
464-
465-
if (property == kcrtc->clock_ratio_property) {
466-
*val = kcrtc_st->clock_ratio;
467-
} else {
468-
DRM_DEBUG_DRIVER("Unknown property %s\n", property->name);
469-
return -EINVAL;
470-
}
471-
472-
return 0;
473-
}
474-
475457
static const struct drm_crtc_funcs komeda_crtc_funcs = {
476458
.gamma_set = drm_atomic_helper_legacy_gamma_set,
477459
.destroy = drm_crtc_cleanup,
@@ -482,7 +464,6 @@ static const struct drm_crtc_funcs komeda_crtc_funcs = {
482464
.atomic_destroy_state = komeda_crtc_atomic_destroy_state,
483465
.enable_vblank = komeda_crtc_vblank_enable,
484466
.disable_vblank = komeda_crtc_vblank_disable,
485-
.atomic_get_property = komeda_crtc_atomic_get_property,
486467
};
487468

488469
int komeda_kms_setup_crtcs(struct komeda_kms_dev *kms,
@@ -518,42 +499,6 @@ int komeda_kms_setup_crtcs(struct komeda_kms_dev *kms,
518499
return 0;
519500
}
520501

521-
static int komeda_crtc_create_clock_ratio_property(struct komeda_crtc *kcrtc)
522-
{
523-
struct drm_crtc *crtc = &kcrtc->base;
524-
struct drm_property *prop;
525-
526-
prop = drm_property_create_range(crtc->dev, DRM_MODE_PROP_ATOMIC,
527-
"CLOCK_RATIO", 0, U64_MAX);
528-
if (!prop)
529-
return -ENOMEM;
530-
531-
drm_object_attach_property(&crtc->base, prop, 0);
532-
kcrtc->clock_ratio_property = prop;
533-
534-
return 0;
535-
}
536-
537-
static int komeda_crtc_create_slave_planes_property(struct komeda_crtc *kcrtc)
538-
{
539-
struct drm_crtc *crtc = &kcrtc->base;
540-
struct drm_property *prop;
541-
542-
if (kcrtc->slave_planes == 0)
543-
return 0;
544-
545-
prop = drm_property_create_range(crtc->dev, DRM_MODE_PROP_IMMUTABLE,
546-
"slave_planes", 0, U32_MAX);
547-
if (!prop)
548-
return -ENOMEM;
549-
550-
drm_object_attach_property(&crtc->base, prop, kcrtc->slave_planes);
551-
552-
kcrtc->slave_planes_property = prop;
553-
554-
return 0;
555-
}
556-
557502
static struct drm_plane *
558503
get_crtc_primary(struct komeda_kms_dev *kms, struct komeda_crtc *crtc)
559504
{
@@ -590,14 +535,6 @@ static int komeda_crtc_add(struct komeda_kms_dev *kms,
590535

591536
crtc->port = kcrtc->master->of_output_port;
592537

593-
err = komeda_crtc_create_clock_ratio_property(kcrtc);
594-
if (err)
595-
return err;
596-
597-
err = komeda_crtc_create_slave_planes_property(kcrtc);
598-
if (err)
599-
return err;
600-
601538
return err;
602539
}
603540

drivers/gpu/drm/arm/display/komeda/komeda_kms.h

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,6 @@ struct komeda_plane {
3333
* Layers with same capabilities.
3434
*/
3535
struct komeda_layer *layer;
36-
37-
/** @prop_img_enhancement: for on/off image enhancement */
38-
struct drm_property *prop_img_enhancement;
39-
/** @prop_layer_split: for on/off layer_split */
40-
struct drm_property *prop_layer_split;
4136
};
4237

4338
/**
@@ -52,11 +47,8 @@ struct komeda_plane_state {
5247
/** @zlist_node: zorder list node */
5348
struct list_head zlist_node;
5449

55-
/* @img_enhancement: on/off image enhancement
56-
* @layer_split: on/off layer_split
57-
*/
58-
u8 img_enhancement : 1,
59-
layer_split : 1;
50+
/** @layer_split: on/off layer_split */
51+
u8 layer_split : 1;
6052
};
6153

6254
/**
@@ -94,12 +86,6 @@ struct komeda_crtc {
9486

9587
/** @disable_done: this flip_done is for tracing the disable */
9688
struct completion *disable_done;
97-
98-
/** @clock_ratio_property: property for ratio of (aclk << 32)/pxlclk */
99-
struct drm_property *clock_ratio_property;
100-
101-
/** @slave_planes_property: property for slaves of the planes */
102-
struct drm_property *slave_planes_property;
10389
};
10490

10591
/**

drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,8 @@ void komeda_pipeline_disable(struct komeda_pipeline *pipe,
537537
void komeda_pipeline_update(struct komeda_pipeline *pipe,
538538
struct drm_atomic_state *old_state);
539539

540-
void komeda_complete_data_flow_cfg(struct komeda_data_flow_cfg *dflow,
540+
void komeda_complete_data_flow_cfg(struct komeda_layer *layer,
541+
struct komeda_data_flow_cfg *dflow,
541542
struct drm_framebuffer *fb);
542543

543544
#endif /* _KOMEDA_PIPELINE_H_*/

drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,9 +784,11 @@ komeda_timing_ctrlr_validate(struct komeda_timing_ctrlr *ctrlr,
784784
return 0;
785785
}
786786

787-
void komeda_complete_data_flow_cfg(struct komeda_data_flow_cfg *dflow,
787+
void komeda_complete_data_flow_cfg(struct komeda_layer *layer,
788+
struct komeda_data_flow_cfg *dflow,
788789
struct drm_framebuffer *fb)
789790
{
791+
struct komeda_scaler *scaler = layer->base.pipeline->scalers[0];
790792
u32 w = dflow->in_w;
791793
u32 h = dflow->in_h;
792794

@@ -803,6 +805,17 @@ void komeda_complete_data_flow_cfg(struct komeda_data_flow_cfg *dflow,
803805

804806
dflow->en_scaling = (w != dflow->out_w) || (h != dflow->out_h);
805807
dflow->is_yuv = fb->format->is_yuv;
808+
809+
/* try to enable image enhancer if data flow is a 2x+ upscaling */
810+
dflow->en_img_enhancement = dflow->out_w >= 2 * w ||
811+
dflow->out_h >= 2 * h;
812+
813+
/* try to enable split if scaling exceed the scaler's acceptable
814+
* input/output range.
815+
*/
816+
if (dflow->en_scaling && scaler)
817+
dflow->en_split = !in_range(&scaler->hsize, dflow->in_w) ||
818+
!in_range(&scaler->hsize, dflow->out_w);
806819
}
807820

808821
static bool merger_is_available(struct komeda_pipeline *pipe,

drivers/gpu/drm/arm/display/komeda/komeda_plane.c

Lines changed: 1 addition & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ komeda_plane_init_data_flow(struct drm_plane_state *st,
1818
struct komeda_data_flow_cfg *dflow)
1919
{
2020
struct komeda_plane *kplane = to_kplane(st->plane);
21-
struct komeda_plane_state *kplane_st = to_kplane_st(st);
2221
struct drm_framebuffer *fb = st->fb;
2322
const struct komeda_format_caps *caps = to_kfb(fb)->format_caps;
2423
struct komeda_pipeline *pipe = kplane->layer->base.pipeline;
@@ -57,10 +56,7 @@ komeda_plane_init_data_flow(struct drm_plane_state *st,
5756
return -EINVAL;
5857
}
5958

60-
dflow->en_img_enhancement = !!kplane_st->img_enhancement;
61-
dflow->en_split = !!kplane_st->layer_split;
62-
63-
komeda_complete_data_flow_cfg(dflow, fb);
59+
komeda_complete_data_flow_cfg(kplane->layer, dflow, fb);
6460

6561
return 0;
6662
}
@@ -175,8 +171,6 @@ komeda_plane_atomic_duplicate_state(struct drm_plane *plane)
175171

176172
old = to_kplane_st(plane->state);
177173

178-
new->img_enhancement = old->img_enhancement;
179-
180174
return &new->base;
181175
}
182176

@@ -188,44 +182,6 @@ komeda_plane_atomic_destroy_state(struct drm_plane *plane,
188182
kfree(to_kplane_st(state));
189183
}
190184

191-
static int
192-
komeda_plane_atomic_get_property(struct drm_plane *plane,
193-
const struct drm_plane_state *state,
194-
struct drm_property *property,
195-
uint64_t *val)
196-
{
197-
struct komeda_plane *kplane = to_kplane(plane);
198-
struct komeda_plane_state *st = to_kplane_st(state);
199-
200-
if (property == kplane->prop_img_enhancement)
201-
*val = st->img_enhancement;
202-
else if (property == kplane->prop_layer_split)
203-
*val = st->layer_split;
204-
else
205-
return -EINVAL;
206-
207-
return 0;
208-
}
209-
210-
static int
211-
komeda_plane_atomic_set_property(struct drm_plane *plane,
212-
struct drm_plane_state *state,
213-
struct drm_property *property,
214-
uint64_t val)
215-
{
216-
struct komeda_plane *kplane = to_kplane(plane);
217-
struct komeda_plane_state *st = to_kplane_st(state);
218-
219-
if (property == kplane->prop_img_enhancement)
220-
st->img_enhancement = !!val;
221-
else if (property == kplane->prop_layer_split)
222-
st->layer_split = !!val;
223-
else
224-
return -EINVAL;
225-
226-
return 0;
227-
}
228-
229185
static bool
230186
komeda_plane_format_mod_supported(struct drm_plane *plane,
231187
u32 format, u64 modifier)
@@ -245,43 +201,9 @@ static const struct drm_plane_funcs komeda_plane_funcs = {
245201
.reset = komeda_plane_reset,
246202
.atomic_duplicate_state = komeda_plane_atomic_duplicate_state,
247203
.atomic_destroy_state = komeda_plane_atomic_destroy_state,
248-
.atomic_get_property = komeda_plane_atomic_get_property,
249-
.atomic_set_property = komeda_plane_atomic_set_property,
250204
.format_mod_supported = komeda_plane_format_mod_supported,
251205
};
252206

253-
static int
254-
komeda_plane_create_layer_properties(struct komeda_plane *kplane,
255-
struct komeda_layer *layer)
256-
{
257-
struct drm_device *drm = kplane->base.dev;
258-
struct drm_plane *plane = &kplane->base;
259-
struct drm_property *prop = NULL;
260-
261-
/* property: layer image_enhancement */
262-
if (layer->base.supported_outputs & KOMEDA_PIPELINE_SCALERS) {
263-
prop = drm_property_create_bool(drm, DRM_MODE_PROP_ATOMIC,
264-
"img_enhancement");
265-
if (!prop)
266-
return -ENOMEM;
267-
268-
drm_object_attach_property(&plane->base, prop, 0);
269-
kplane->prop_img_enhancement = prop;
270-
}
271-
272-
/* property: layer split */
273-
if (layer->right) {
274-
prop = drm_property_create_bool(drm, DRM_MODE_PROP_ATOMIC,
275-
"layer_split");
276-
if (!prop)
277-
return -ENOMEM;
278-
kplane->prop_layer_split = prop;
279-
drm_object_attach_property(&plane->base, prop, 0);
280-
}
281-
282-
return 0;
283-
}
284-
285207
/* for komeda, which is pipeline can be share between crtcs */
286208
static u32 get_possible_crtcs(struct komeda_kms_dev *kms,
287209
struct komeda_pipeline *pipe)
@@ -375,10 +297,6 @@ static int komeda_plane_add(struct komeda_kms_dev *kms,
375297
if (err)
376298
goto cleanup;
377299

378-
err = komeda_plane_create_layer_properties(kplane, layer);
379-
if (err)
380-
goto cleanup;
381-
382300
err = drm_plane_create_color_properties(plane,
383301
BIT(DRM_COLOR_YCBCR_BT601) |
384302
BIT(DRM_COLOR_YCBCR_BT709) |

drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ komeda_wb_init_data_flow(struct komeda_layer *wb_layer,
1313
struct komeda_crtc_state *kcrtc_st,
1414
struct komeda_data_flow_cfg *dflow)
1515
{
16-
struct komeda_scaler *scaler = wb_layer->base.pipeline->scalers[0];
1716
struct drm_framebuffer *fb = conn_st->writeback_job->fb;
1817

1918
memset(dflow, 0, sizeof(*dflow));
@@ -28,14 +27,7 @@ komeda_wb_init_data_flow(struct komeda_layer *wb_layer,
2827
dflow->pixel_blend_mode = DRM_MODE_BLEND_PIXEL_NONE;
2928
dflow->rot = DRM_MODE_ROTATE_0;
3029

31-
komeda_complete_data_flow_cfg(dflow, fb);
32-
33-
/* if scaling exceed the acceptable scaler input/output range, try to
34-
* enable split.
35-
*/
36-
if (dflow->en_scaling && scaler)
37-
dflow->en_split = !in_range(&scaler->hsize, dflow->in_w) ||
38-
!in_range(&scaler->hsize, dflow->out_w);
30+
komeda_complete_data_flow_cfg(wb_layer, dflow, fb);
3931

4032
return 0;
4133
}

drivers/gpu/drm/bochs/bochs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void bochs_hw_setmode(struct bochs_device *bochs,
8686
void bochs_hw_setformat(struct bochs_device *bochs,
8787
const struct drm_format_info *format);
8888
void bochs_hw_setbase(struct bochs_device *bochs,
89-
int x, int y, u64 addr);
89+
int x, int y, int stride, u64 addr);
9090
int bochs_hw_load_edid(struct bochs_device *bochs);
9191

9292
/* bochs_mm.c */

drivers/gpu/drm/bochs/bochs_hw.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,16 +255,22 @@ void bochs_hw_setformat(struct bochs_device *bochs,
255255
}
256256

257257
void bochs_hw_setbase(struct bochs_device *bochs,
258-
int x, int y, u64 addr)
258+
int x, int y, int stride, u64 addr)
259259
{
260-
unsigned long offset = (unsigned long)addr +
260+
unsigned long offset;
261+
unsigned int vx, vy, vwidth;
262+
263+
bochs->stride = stride;
264+
offset = (unsigned long)addr +
261265
y * bochs->stride +
262266
x * (bochs->bpp / 8);
263-
int vy = offset / bochs->stride;
264-
int vx = (offset % bochs->stride) * 8 / bochs->bpp;
267+
vy = offset / bochs->stride;
268+
vx = (offset % bochs->stride) * 8 / bochs->bpp;
269+
vwidth = stride * 8 / bochs->bpp;
265270

266271
DRM_DEBUG_DRIVER("x %d, y %d, addr %llx -> offset %lx, vx %d, vy %d\n",
267272
x, y, addr, offset, vx, vy);
273+
bochs_dispi_write(bochs, VBE_DISPI_INDEX_VIRT_WIDTH, vwidth);
268274
bochs_dispi_write(bochs, VBE_DISPI_INDEX_X_OFFSET, vx);
269275
bochs_dispi_write(bochs, VBE_DISPI_INDEX_Y_OFFSET, vy);
270276
}

drivers/gpu/drm/bochs/bochs_kms.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ static void bochs_plane_update(struct bochs_device *bochs,
3636
bochs_hw_setbase(bochs,
3737
state->crtc_x,
3838
state->crtc_y,
39-
gbo->bo.offset);
39+
state->fb->pitches[0],
40+
state->fb->offsets[0] + gbo->bo.offset);
4041
bochs_hw_setformat(bochs, state->fb->format);
4142
}
4243

0 commit comments

Comments
 (0)