Skip to content

Commit b34c1d5

Browse files
committed
Merge tag 'drm-misc-fixes-2022-09-08' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
Short summary of fixes pull: * edid: Fix EDID 1.4 range-descriptor parsing * panfrost: Fix devfreq OPP * ttm: Fix ghost-object bulk moves Signed-off-by: Dave Airlie <[email protected]> From: Thomas Zimmermann <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/YxniKN4rK4qPp+J9@linux-uq9g
2 parents c052159 + d76034a commit b34c1d5

File tree

6 files changed

+46
-15
lines changed

6 files changed

+46
-15
lines changed

drivers/gpu/drm/drm_debugfs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,8 @@ static int vrr_range_show(struct seq_file *m, void *data)
377377
if (connector->status != connector_status_connected)
378378
return -ENODEV;
379379

380-
seq_printf(m, "Min: %u\n", (u8)connector->display_info.monitor_range.min_vfreq);
381-
seq_printf(m, "Max: %u\n", (u8)connector->display_info.monitor_range.max_vfreq);
380+
seq_printf(m, "Min: %u\n", connector->display_info.monitor_range.min_vfreq);
381+
seq_printf(m, "Max: %u\n", connector->display_info.monitor_range.max_vfreq);
382382

383383
return 0;
384384
}

drivers/gpu/drm/drm_edid.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5971,12 +5971,14 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
59715971
}
59725972

59735973
static
5974-
void get_monitor_range(const struct detailed_timing *timing,
5975-
void *info_monitor_range)
5974+
void get_monitor_range(const struct detailed_timing *timing, void *c)
59765975
{
5977-
struct drm_monitor_range_info *monitor_range = info_monitor_range;
5976+
struct detailed_mode_closure *closure = c;
5977+
struct drm_display_info *info = &closure->connector->display_info;
5978+
struct drm_monitor_range_info *monitor_range = &info->monitor_range;
59785979
const struct detailed_non_pixel *data = &timing->data.other_data;
59795980
const struct detailed_data_monitor_range *range = &data->data.range;
5981+
const struct edid *edid = closure->drm_edid->edid;
59805982

59815983
if (!is_display_descriptor(timing, EDID_DETAIL_MONITOR_RANGE))
59825984
return;
@@ -5992,18 +5994,28 @@ void get_monitor_range(const struct detailed_timing *timing,
59925994

59935995
monitor_range->min_vfreq = range->min_vfreq;
59945996
monitor_range->max_vfreq = range->max_vfreq;
5997+
5998+
if (edid->revision >= 4) {
5999+
if (data->pad2 & DRM_EDID_RANGE_OFFSET_MIN_VFREQ)
6000+
monitor_range->min_vfreq += 255;
6001+
if (data->pad2 & DRM_EDID_RANGE_OFFSET_MAX_VFREQ)
6002+
monitor_range->max_vfreq += 255;
6003+
}
59956004
}
59966005

59976006
static void drm_get_monitor_range(struct drm_connector *connector,
59986007
const struct drm_edid *drm_edid)
59996008
{
6000-
struct drm_display_info *info = &connector->display_info;
6009+
const struct drm_display_info *info = &connector->display_info;
6010+
struct detailed_mode_closure closure = {
6011+
.connector = connector,
6012+
.drm_edid = drm_edid,
6013+
};
60016014

60026015
if (!version_greater(drm_edid, 1, 1))
60036016
return;
60046017

6005-
drm_for_each_detailed_block(drm_edid, get_monitor_range,
6006-
&info->monitor_range);
6018+
drm_for_each_detailed_block(drm_edid, get_monitor_range, &closure);
60076019

60086020
DRM_DEBUG_KMS("Supported Monitor Refresh rate range is %d Hz - %d Hz\n",
60096021
info->monitor_range.min_vfreq,

drivers/gpu/drm/panfrost/panfrost_devfreq.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,17 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
131131
return PTR_ERR(opp);
132132

133133
panfrost_devfreq_profile.initial_freq = cur_freq;
134+
135+
/*
136+
* Set the recommend OPP this will enable and configure the regulator
137+
* if any and will avoid a switch off by regulator_late_cleanup()
138+
*/
139+
ret = dev_pm_opp_set_opp(dev, opp);
140+
if (ret) {
141+
DRM_DEV_ERROR(dev, "Couldn't set recommended OPP\n");
142+
return ret;
143+
}
144+
134145
dev_pm_opp_put(opp);
135146

136147
/*

drivers/gpu/drm/ttm/ttm_bo_util.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -236,16 +236,19 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
236236
if (bo->type != ttm_bo_type_sg)
237237
fbo->base.base.resv = &fbo->base.base._resv;
238238

239-
if (fbo->base.resource) {
240-
ttm_resource_set_bo(fbo->base.resource, &fbo->base);
241-
bo->resource = NULL;
242-
}
243-
244239
dma_resv_init(&fbo->base.base._resv);
245240
fbo->base.base.dev = NULL;
246241
ret = dma_resv_trylock(&fbo->base.base._resv);
247242
WARN_ON(!ret);
248243

244+
if (fbo->base.resource) {
245+
ttm_resource_set_bo(fbo->base.resource, &fbo->base);
246+
bo->resource = NULL;
247+
ttm_bo_set_bulk_move(&fbo->base, NULL);
248+
} else {
249+
fbo->base.bulk_move = NULL;
250+
}
251+
249252
ret = dma_resv_reserve_fences(&fbo->base.base._resv, 1);
250253
if (ret) {
251254
kfree(fbo);

include/drm/drm_connector.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ enum drm_panel_orientation {
319319
* EDID's detailed monitor range
320320
*/
321321
struct drm_monitor_range_info {
322-
u8 min_vfreq;
323-
u8 max_vfreq;
322+
u16 min_vfreq;
323+
u16 max_vfreq;
324324
};
325325

326326
/**

include/drm/drm_edid.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ struct detailed_data_string {
9292
u8 str[13];
9393
} __attribute__((packed));
9494

95+
#define DRM_EDID_RANGE_OFFSET_MIN_VFREQ (1 << 0) /* 1.4 */
96+
#define DRM_EDID_RANGE_OFFSET_MAX_VFREQ (1 << 1) /* 1.4 */
97+
#define DRM_EDID_RANGE_OFFSET_MIN_HFREQ (1 << 2) /* 1.4 */
98+
#define DRM_EDID_RANGE_OFFSET_MAX_HFREQ (1 << 3) /* 1.4 */
99+
95100
#define DRM_EDID_DEFAULT_GTF_SUPPORT_FLAG 0x00
96101
#define DRM_EDID_RANGE_LIMITS_ONLY_FLAG 0x01
97102
#define DRM_EDID_SECONDARY_GTF_SUPPORT_FLAG 0x02

0 commit comments

Comments
 (0)