Skip to content

Commit 4770094

Browse files
committed
Merge tag 'drm-fixes-2022-06-17' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "Regular drm fixes for rc3. Nothing too serious, i915, amdgpu and exynos all have a few small driver fixes, and two ttm fixes, and one compiler warning. atomic: - fix spurious compiler warning ttm: - add NULL ptr check in swapout code - fix bulk move handling i915: - Fix page fault on error state read - Fix memory leaks in per-gt sysfs - Fix multiple fence handling - Remove accidental static from a local variable amdgpu: - Fix regression in GTT size reporting - OLED backlight fix exynos: - Check a null pointer instead of IS_ERR() - Rework initialization code of Exynos MIC driver" * tag 'drm-fixes-2022-06-17' of git://anongit.freedesktop.org/drm/drm: drm/amd/display: Cap OLED brightness per max frame-average luminance drm/amdgpu: Fix GTT size reporting in amdgpu_ioctl drm/exynos: mic: Rework initialization drm/exynos: fix IS_ERR() vs NULL check in probe drm/ttm: fix bulk move handling v2 drm/i915/uc: remove accidental static from a local variable drm/i915: Individualize fences before adding to dma_resv obj drm/i915/gt: Fix memory leaks in per-gt sysfs drm/i915/reset: Fix error_state_read ptr + offset use drm/ttm: fix missing NULL check in ttm_device_swapout drm/atomic: fix warning of unused variable
2 parents 0639b59 + 65cf7c0 commit 4770094

17 files changed

Lines changed: 141 additions & 115 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,6 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
642642
atomic64_read(&adev->visible_pin_size),
643643
vram_gtt.vram_size);
644644
vram_gtt.gtt_size = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT)->size;
645-
vram_gtt.gtt_size *= PAGE_SIZE;
646645
vram_gtt.gtt_size -= atomic64_read(&adev->gart_pin_size);
647646
return copy_to_user(out, &vram_gtt,
648647
min((size_t)size, sizeof(vram_gtt))) ? -EFAULT : 0;
@@ -675,7 +674,6 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
675674
mem.cpu_accessible_vram.usable_heap_size * 3 / 4;
676675

677676
mem.gtt.total_heap_size = gtt_man->size;
678-
mem.gtt.total_heap_size *= PAGE_SIZE;
679677
mem.gtt.usable_heap_size = mem.gtt.total_heap_size -
680678
atomic64_read(&adev->gart_pin_size);
681679
mem.gtt.heap_usage = ttm_resource_manager_usage(gtt_man);

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2812,7 +2812,7 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = {
28122812

28132813
static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
28142814
{
2815-
u32 max_cll, min_cll, max, min, q, r;
2815+
u32 max_avg, min_cll, max, min, q, r;
28162816
struct amdgpu_dm_backlight_caps *caps;
28172817
struct amdgpu_display_manager *dm;
28182818
struct drm_connector *conn_base;
@@ -2842,7 +2842,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
28422842
caps = &dm->backlight_caps[i];
28432843
caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps;
28442844
caps->aux_support = false;
2845-
max_cll = conn_base->hdr_sink_metadata.hdmi_type1.max_cll;
2845+
max_avg = conn_base->hdr_sink_metadata.hdmi_type1.max_fall;
28462846
min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll;
28472847

28482848
if (caps->ext_caps->bits.oled == 1 /*||
@@ -2870,8 +2870,8 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
28702870
* The results of the above expressions can be verified at
28712871
* pre_computed_values.
28722872
*/
2873-
q = max_cll >> 5;
2874-
r = max_cll % 32;
2873+
q = max_avg >> 5;
2874+
r = max_avg % 32;
28752875
max = (1 << q) * pre_computed_values[r];
28762876

28772877
// min luminance: maxLum * (CV/255)^2 / 100

drivers/gpu/drm/exynos/exynos_drm_drv.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,15 +176,15 @@ static struct exynos_drm_driver_info exynos_drm_drivers[] = {
176176
}, {
177177
DRV_PTR(mixer_driver, CONFIG_DRM_EXYNOS_MIXER),
178178
DRM_COMPONENT_DRIVER
179-
}, {
180-
DRV_PTR(mic_driver, CONFIG_DRM_EXYNOS_MIC),
181-
DRM_COMPONENT_DRIVER
182179
}, {
183180
DRV_PTR(dp_driver, CONFIG_DRM_EXYNOS_DP),
184181
DRM_COMPONENT_DRIVER
185182
}, {
186183
DRV_PTR(dsi_driver, CONFIG_DRM_EXYNOS_DSI),
187184
DRM_COMPONENT_DRIVER
185+
}, {
186+
DRV_PTR(mic_driver, CONFIG_DRM_EXYNOS_MIC),
187+
DRM_COMPONENT_DRIVER
188188
}, {
189189
DRV_PTR(hdmi_driver, CONFIG_DRM_EXYNOS_HDMI),
190190
DRM_COMPONENT_DRIVER

drivers/gpu/drm/exynos/exynos_drm_mic.c

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <drm/drm_print.h>
2727

2828
#include "exynos_drm_drv.h"
29+
#include "exynos_drm_crtc.h"
2930

3031
/* Sysreg registers for MIC */
3132
#define DSD_CFG_MUX 0x1004
@@ -100,9 +101,7 @@ struct exynos_mic {
100101

101102
bool i80_mode;
102103
struct videomode vm;
103-
struct drm_encoder *encoder;
104104
struct drm_bridge bridge;
105-
struct drm_bridge *next_bridge;
106105

107106
bool enabled;
108107
};
@@ -229,8 +228,6 @@ static void mic_set_reg_on(struct exynos_mic *mic, bool enable)
229228
writel(reg, mic->reg + MIC_OP);
230229
}
231230

232-
static void mic_disable(struct drm_bridge *bridge) { }
233-
234231
static void mic_post_disable(struct drm_bridge *bridge)
235232
{
236233
struct exynos_mic *mic = bridge->driver_private;
@@ -297,34 +294,30 @@ static void mic_pre_enable(struct drm_bridge *bridge)
297294
mutex_unlock(&mic_mutex);
298295
}
299296

300-
static void mic_enable(struct drm_bridge *bridge) { }
301-
302-
static int mic_attach(struct drm_bridge *bridge,
303-
enum drm_bridge_attach_flags flags)
304-
{
305-
struct exynos_mic *mic = bridge->driver_private;
306-
307-
return drm_bridge_attach(bridge->encoder, mic->next_bridge,
308-
&mic->bridge, flags);
309-
}
310-
311297
static const struct drm_bridge_funcs mic_bridge_funcs = {
312-
.disable = mic_disable,
313298
.post_disable = mic_post_disable,
314299
.mode_set = mic_mode_set,
315300
.pre_enable = mic_pre_enable,
316-
.enable = mic_enable,
317-
.attach = mic_attach,
318301
};
319302

320303
static int exynos_mic_bind(struct device *dev, struct device *master,
321304
void *data)
322305
{
323306
struct exynos_mic *mic = dev_get_drvdata(dev);
307+
struct drm_device *drm_dev = data;
308+
struct exynos_drm_crtc *crtc = exynos_drm_crtc_get_by_type(drm_dev,
309+
EXYNOS_DISPLAY_TYPE_LCD);
310+
struct drm_encoder *e, *encoder = NULL;
311+
312+
drm_for_each_encoder(e, drm_dev)
313+
if (e->possible_crtcs == drm_crtc_mask(&crtc->base))
314+
encoder = e;
315+
if (!encoder)
316+
return -ENODEV;
324317

325318
mic->bridge.driver_private = mic;
326319

327-
return 0;
320+
return drm_bridge_attach(encoder, &mic->bridge, NULL, 0);
328321
}
329322

330323
static void exynos_mic_unbind(struct device *dev, struct device *master,
@@ -388,7 +381,6 @@ static int exynos_mic_probe(struct platform_device *pdev)
388381
{
389382
struct device *dev = &pdev->dev;
390383
struct exynos_mic *mic;
391-
struct device_node *remote;
392384
struct resource res;
393385
int ret, i;
394386

@@ -432,16 +424,6 @@ static int exynos_mic_probe(struct platform_device *pdev)
432424
}
433425
}
434426

435-
remote = of_graph_get_remote_node(dev->of_node, 1, 0);
436-
mic->next_bridge = of_drm_find_bridge(remote);
437-
if (IS_ERR(mic->next_bridge)) {
438-
DRM_DEV_ERROR(dev, "mic: Failed to find next bridge\n");
439-
ret = PTR_ERR(mic->next_bridge);
440-
goto err;
441-
}
442-
443-
of_node_put(remote);
444-
445427
platform_set_drvdata(pdev, mic);
446428

447429
mic->bridge.funcs = &mic_bridge_funcs;

drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,8 @@ static int eb_validate_vmas(struct i915_execbuffer *eb)
999999
}
10001000
}
10011001

1002-
err = dma_resv_reserve_fences(vma->obj->base.resv, 1);
1002+
/* Reserve enough slots to accommodate composite fences */
1003+
err = dma_resv_reserve_fences(vma->obj->base.resv, eb->num_batches);
10031004
if (err)
10041005
return err;
10051006

drivers/gpu/drm/i915/gt/intel_gt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,7 @@ void intel_gt_driver_unregister(struct intel_gt *gt)
785785
{
786786
intel_wakeref_t wakeref;
787787

788+
intel_gt_sysfs_unregister(gt);
788789
intel_rps_driver_unregister(&gt->rps);
789790
intel_gsc_fini(&gt->gsc);
790791

drivers/gpu/drm/i915/gt/intel_gt_sysfs.c

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ bool is_object_gt(struct kobject *kobj)
2424

2525
static struct intel_gt *kobj_to_gt(struct kobject *kobj)
2626
{
27-
return container_of(kobj, struct kobj_gt, base)->gt;
27+
return container_of(kobj, struct intel_gt, sysfs_gt);
2828
}
2929

3030
struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
@@ -72,9 +72,9 @@ static struct attribute *id_attrs[] = {
7272
};
7373
ATTRIBUTE_GROUPS(id);
7474

75+
/* A kobject needs a release() method even if it does nothing */
7576
static void kobj_gt_release(struct kobject *kobj)
7677
{
77-
kfree(kobj);
7878
}
7979

8080
static struct kobj_type kobj_gt_type = {
@@ -85,8 +85,6 @@ static struct kobj_type kobj_gt_type = {
8585

8686
void intel_gt_sysfs_register(struct intel_gt *gt)
8787
{
88-
struct kobj_gt *kg;
89-
9088
/*
9189
* We need to make things right with the
9290
* ABI compatibility. The files were originally
@@ -98,25 +96,22 @@ void intel_gt_sysfs_register(struct intel_gt *gt)
9896
if (gt_is_root(gt))
9997
intel_gt_sysfs_pm_init(gt, gt_get_parent_obj(gt));
10098

101-
kg = kzalloc(sizeof(*kg), GFP_KERNEL);
102-
if (!kg)
99+
/* init and xfer ownership to sysfs tree */
100+
if (kobject_init_and_add(&gt->sysfs_gt, &kobj_gt_type,
101+
gt->i915->sysfs_gt, "gt%d", gt->info.id))
103102
goto exit_fail;
104103

105-
kobject_init(&kg->base, &kobj_gt_type);
106-
kg->gt = gt;
107-
108-
/* xfer ownership to sysfs tree */
109-
if (kobject_add(&kg->base, gt->i915->sysfs_gt, "gt%d", gt->info.id))
110-
goto exit_kobj_put;
111-
112-
intel_gt_sysfs_pm_init(gt, &kg->base);
104+
intel_gt_sysfs_pm_init(gt, &gt->sysfs_gt);
113105

114106
return;
115107

116-
exit_kobj_put:
117-
kobject_put(&kg->base);
118-
119108
exit_fail:
109+
kobject_put(&gt->sysfs_gt);
120110
drm_warn(&gt->i915->drm,
121111
"failed to initialize gt%d sysfs root\n", gt->info.id);
122112
}
113+
114+
void intel_gt_sysfs_unregister(struct intel_gt *gt)
115+
{
116+
kobject_put(&gt->sysfs_gt);
117+
}

drivers/gpu/drm/i915/gt/intel_gt_sysfs.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@
1313

1414
struct intel_gt;
1515

16-
struct kobj_gt {
17-
struct kobject base;
18-
struct intel_gt *gt;
19-
};
20-
2116
bool is_object_gt(struct kobject *kobj);
2217

2318
struct drm_i915_private *kobj_to_i915(struct kobject *kobj);
@@ -28,6 +23,7 @@ intel_gt_create_kobj(struct intel_gt *gt,
2823
const char *name);
2924

3025
void intel_gt_sysfs_register(struct intel_gt *gt);
26+
void intel_gt_sysfs_unregister(struct intel_gt *gt);
3127
struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
3228
const char *name);
3329

drivers/gpu/drm/i915/gt/intel_gt_types.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ struct intel_gt {
224224
} mocs;
225225

226226
struct intel_pxp pxp;
227+
228+
/* gt/gtN sysfs */
229+
struct kobject sysfs_gt;
227230
};
228231

229232
enum intel_gt_scratch_field {

drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct intel_uc_fw *uc_fw)
156156
[INTEL_UC_FW_TYPE_GUC] = { blobs_guc, ARRAY_SIZE(blobs_guc) },
157157
[INTEL_UC_FW_TYPE_HUC] = { blobs_huc, ARRAY_SIZE(blobs_huc) },
158158
};
159-
static const struct uc_fw_platform_requirement *fw_blobs;
159+
const struct uc_fw_platform_requirement *fw_blobs;
160160
enum intel_platform p = INTEL_INFO(i915)->platform;
161161
u32 fw_count;
162162
u8 rev = INTEL_REVID(i915);

0 commit comments

Comments
 (0)