Skip to content

Commit f858f63

Browse files
committed
Merge tag 'drm-misc-next-fixes-2025-08-12' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes
Short summary of fixes pull: bridge: - fix OF-node leak - fix documentation fbdev-emulation: - pass correct format info to drm_helper_mode_fill_fb_struct() panfrost: - print correct RSS size Signed-off-by: Dave Airlie <[email protected]> From: Thomas Zimmermann <[email protected]> Link: https://lore.kernel.org/r/20250812064712.GA14554@2a02-2454-fd5e-fd00-2c49-c639-c55f-a125.dyn6.pyur.net
2 parents 8f5ae30 + 54d4f44 commit f858f63

File tree

12 files changed

+85
-28
lines changed

12 files changed

+85
-28
lines changed

drivers/gpu/drm/bridge/aux-bridge.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ static void drm_aux_bridge_release(struct device *dev)
1818
{
1919
struct auxiliary_device *adev = to_auxiliary_dev(dev);
2020

21+
of_node_put(dev->of_node);
2122
ida_free(&drm_aux_bridge_ida, adev->id);
2223

2324
kfree(adev);
@@ -65,6 +66,7 @@ int drm_aux_bridge_register(struct device *parent)
6566

6667
ret = auxiliary_device_init(adev);
6768
if (ret) {
69+
of_node_put(adev->dev.of_node);
6870
ida_free(&drm_aux_bridge_ida, adev->id);
6971
kfree(adev);
7072
return ret;

drivers/gpu/drm/drm_bridge.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,6 +1227,7 @@ EXPORT_SYMBOL(drm_atomic_bridge_chain_check);
12271227
/**
12281228
* drm_bridge_detect - check if anything is attached to the bridge output
12291229
* @bridge: bridge control structure
1230+
* @connector: attached connector
12301231
*
12311232
* If the bridge supports output detection, as reported by the
12321233
* DRM_BRIDGE_OP_DETECT bridge ops flag, call &drm_bridge_funcs.detect for the

drivers/gpu/drm/nouveau/nouveau_display.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -253,14 +253,14 @@ nouveau_check_bl_size(struct nouveau_drm *drm, struct nouveau_bo *nvbo,
253253

254254
int
255255
nouveau_framebuffer_new(struct drm_device *dev,
256+
const struct drm_format_info *info,
256257
const struct drm_mode_fb_cmd2 *mode_cmd,
257258
struct drm_gem_object *gem,
258259
struct drm_framebuffer **pfb)
259260
{
260261
struct nouveau_drm *drm = nouveau_drm(dev);
261262
struct nouveau_bo *nvbo = nouveau_gem_object(gem);
262263
struct drm_framebuffer *fb;
263-
const struct drm_format_info *info;
264264
unsigned int height, i;
265265
uint32_t tile_mode;
266266
uint8_t kind;
@@ -295,9 +295,6 @@ nouveau_framebuffer_new(struct drm_device *dev,
295295
kind = nvbo->kind;
296296
}
297297

298-
info = drm_get_format_info(dev, mode_cmd->pixel_format,
299-
mode_cmd->modifier[0]);
300-
301298
for (i = 0; i < info->num_planes; i++) {
302299
height = drm_format_info_plane_height(info,
303300
mode_cmd->height,
@@ -321,7 +318,7 @@ nouveau_framebuffer_new(struct drm_device *dev,
321318
if (!(fb = *pfb = kzalloc(sizeof(*fb), GFP_KERNEL)))
322319
return -ENOMEM;
323320

324-
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
321+
drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
325322
fb->obj[0] = gem;
326323

327324
ret = drm_framebuffer_init(dev, fb, &nouveau_framebuffer_funcs);
@@ -344,7 +341,7 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
344341
if (!gem)
345342
return ERR_PTR(-ENOENT);
346343

347-
ret = nouveau_framebuffer_new(dev, mode_cmd, gem, &fb);
344+
ret = nouveau_framebuffer_new(dev, info, mode_cmd, gem, &fb);
348345
if (ret == 0)
349346
return fb;
350347

drivers/gpu/drm/nouveau/nouveau_display.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88

99
#include <drm/drm_framebuffer.h>
1010

11+
struct drm_format_info;
12+
1113
int
1214
nouveau_framebuffer_new(struct drm_device *dev,
15+
const struct drm_format_info *info,
1316
const struct drm_mode_fb_cmd2 *mode_cmd,
1417
struct drm_gem_object *gem,
1518
struct drm_framebuffer **pfb);

drivers/gpu/drm/omapdrm/omap_fb.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
351351
}
352352
}
353353

354-
fb = omap_framebuffer_init(dev, mode_cmd, bos);
354+
fb = omap_framebuffer_init(dev, info, mode_cmd, bos);
355355
if (IS_ERR(fb))
356356
goto error;
357357

@@ -365,9 +365,9 @@ struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
365365
}
366366

367367
struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
368+
const struct drm_format_info *info,
368369
const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos)
369370
{
370-
const struct drm_format_info *format = NULL;
371371
struct omap_framebuffer *omap_fb = NULL;
372372
struct drm_framebuffer *fb = NULL;
373373
unsigned int pitch = mode_cmd->pitches[0];
@@ -377,15 +377,12 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
377377
dev, mode_cmd, mode_cmd->width, mode_cmd->height,
378378
(char *)&mode_cmd->pixel_format);
379379

380-
format = drm_get_format_info(dev, mode_cmd->pixel_format,
381-
mode_cmd->modifier[0]);
382-
383380
for (i = 0; i < ARRAY_SIZE(formats); i++) {
384381
if (formats[i] == mode_cmd->pixel_format)
385382
break;
386383
}
387384

388-
if (!format || i == ARRAY_SIZE(formats)) {
385+
if (i == ARRAY_SIZE(formats)) {
389386
dev_dbg(dev->dev, "unsupported pixel format: %4.4s\n",
390387
(char *)&mode_cmd->pixel_format);
391388
ret = -EINVAL;
@@ -399,31 +396,31 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
399396
}
400397

401398
fb = &omap_fb->base;
402-
omap_fb->format = format;
399+
omap_fb->format = info;
403400
mutex_init(&omap_fb->lock);
404401

405402
/*
406403
* The code below assumes that no format use more than two planes, and
407404
* that the two planes of multiplane formats need the same number of
408405
* bytes per pixel.
409406
*/
410-
if (format->num_planes == 2 && pitch != mode_cmd->pitches[1]) {
407+
if (info->num_planes == 2 && pitch != mode_cmd->pitches[1]) {
411408
dev_dbg(dev->dev, "pitches differ between planes 0 and 1\n");
412409
ret = -EINVAL;
413410
goto fail;
414411
}
415412

416-
if (pitch % format->cpp[0]) {
413+
if (pitch % info->cpp[0]) {
417414
dev_dbg(dev->dev,
418415
"buffer pitch (%u bytes) is not a multiple of pixel size (%u bytes)\n",
419-
pitch, format->cpp[0]);
416+
pitch, info->cpp[0]);
420417
ret = -EINVAL;
421418
goto fail;
422419
}
423420

424-
for (i = 0; i < format->num_planes; i++) {
421+
for (i = 0; i < info->num_planes; i++) {
425422
struct plane *plane = &omap_fb->planes[i];
426-
unsigned int vsub = i == 0 ? 1 : format->vsub;
423+
unsigned int vsub = i == 0 ? 1 : info->vsub;
427424
unsigned int size;
428425

429426
size = pitch * mode_cmd->height / vsub;
@@ -440,7 +437,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
440437
plane->dma_addr = 0;
441438
}
442439

443-
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
440+
drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
444441

445442
ret = drm_framebuffer_init(dev, fb, &omap_framebuffer_funcs);
446443
if (ret) {

drivers/gpu/drm/omapdrm/omap_fb.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ struct drm_connector;
1313
struct drm_device;
1414
struct drm_file;
1515
struct drm_framebuffer;
16+
struct drm_format_info;
1617
struct drm_gem_object;
1718
struct drm_mode_fb_cmd2;
1819
struct drm_plane_state;
@@ -23,6 +24,7 @@ struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
2324
struct drm_file *file, const struct drm_format_info *info,
2425
const struct drm_mode_fb_cmd2 *mode_cmd);
2526
struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
27+
const struct drm_format_info *info,
2628
const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos);
2729
int omap_framebuffer_pin(struct drm_framebuffer *fb);
2830
void omap_framebuffer_unpin(struct drm_framebuffer *fb);

drivers/gpu/drm/omapdrm/omap_fbdev.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ int omap_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
197197
goto fail;
198198
}
199199

200-
fb = omap_framebuffer_init(dev, &mode_cmd, &bo);
200+
fb = omap_framebuffer_init(dev,
201+
drm_get_format_info(dev, mode_cmd.pixel_format,
202+
mode_cmd.modifier[0]),
203+
&mode_cmd, &bo);
201204
if (IS_ERR(fb)) {
202205
dev_err(dev->dev, "failed to allocate fb\n");
203206
/* note: if fb creation failed, we can't rely on fb destroy

drivers/gpu/drm/panfrost/panfrost_gem.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ static void panfrost_gem_debugfs_bo_print(struct panfrost_gem_object *bo,
432432
if (!refcount)
433433
return;
434434

435-
resident_size = bo->base.pages ? bo->base.base.size : 0;
435+
resident_size = panfrost_gem_rss(&bo->base.base);
436436

437437
snprintf(creator_info, sizeof(creator_info),
438438
"%s/%d", bo->debugfs.creator.process_name, bo->debugfs.creator.tgid);

drivers/gpu/drm/radeon/radeon_display.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,12 +1297,13 @@ static const struct drm_framebuffer_funcs radeon_fb_funcs = {
12971297
int
12981298
radeon_framebuffer_init(struct drm_device *dev,
12991299
struct drm_framebuffer *fb,
1300+
const struct drm_format_info *info,
13001301
const struct drm_mode_fb_cmd2 *mode_cmd,
13011302
struct drm_gem_object *obj)
13021303
{
13031304
int ret;
13041305
fb->obj[0] = obj;
1305-
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
1306+
drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
13061307
ret = drm_framebuffer_init(dev, fb, &radeon_fb_funcs);
13071308
if (ret) {
13081309
fb->obj[0] = NULL;
@@ -1341,7 +1342,7 @@ radeon_user_framebuffer_create(struct drm_device *dev,
13411342
return ERR_PTR(-ENOMEM);
13421343
}
13431344

1344-
ret = radeon_framebuffer_init(dev, fb, mode_cmd, obj);
1345+
ret = radeon_framebuffer_init(dev, fb, info, mode_cmd, obj);
13451346
if (ret) {
13461347
kfree(fb);
13471348
drm_gem_object_put(obj);

drivers/gpu/drm/radeon/radeon_fbdev.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ static void radeon_fbdev_destroy_pinned_object(struct drm_gem_object *gobj)
5353
}
5454

5555
static int radeon_fbdev_create_pinned_object(struct drm_fb_helper *fb_helper,
56+
const struct drm_format_info *info,
5657
struct drm_mode_fb_cmd2 *mode_cmd,
5758
struct drm_gem_object **gobj_p)
5859
{
59-
const struct drm_format_info *info;
6060
struct radeon_device *rdev = fb_helper->dev->dev_private;
6161
struct drm_gem_object *gobj = NULL;
6262
struct radeon_bo *rbo = NULL;
@@ -67,8 +67,6 @@ static int radeon_fbdev_create_pinned_object(struct drm_fb_helper *fb_helper,
6767
int height = mode_cmd->height;
6868
u32 cpp;
6969

70-
info = drm_get_format_info(rdev_to_drm(rdev), mode_cmd->pixel_format,
71-
mode_cmd->modifier[0]);
7270
cpp = info->cpp[0];
7371

7472
/* need to align pitch with crtc limits */
@@ -206,6 +204,7 @@ int radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper,
206204
struct drm_fb_helper_surface_size *sizes)
207205
{
208206
struct radeon_device *rdev = fb_helper->dev->dev_private;
207+
const struct drm_format_info *format_info;
209208
struct drm_mode_fb_cmd2 mode_cmd = { };
210209
struct fb_info *info;
211210
struct drm_gem_object *gobj;
@@ -224,7 +223,9 @@ int radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper,
224223
mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp,
225224
sizes->surface_depth);
226225

227-
ret = radeon_fbdev_create_pinned_object(fb_helper, &mode_cmd, &gobj);
226+
format_info = drm_get_format_info(rdev_to_drm(rdev), mode_cmd.pixel_format,
227+
mode_cmd.modifier[0]);
228+
ret = radeon_fbdev_create_pinned_object(fb_helper, format_info, &mode_cmd, &gobj);
228229
if (ret) {
229230
DRM_ERROR("failed to create fbcon object %d\n", ret);
230231
return ret;
@@ -236,7 +237,7 @@ int radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper,
236237
ret = -ENOMEM;
237238
goto err_radeon_fbdev_destroy_pinned_object;
238239
}
239-
ret = radeon_framebuffer_init(rdev_to_drm(rdev), fb, &mode_cmd, gobj);
240+
ret = radeon_framebuffer_init(rdev_to_drm(rdev), fb, format_info, &mode_cmd, gobj);
240241
if (ret) {
241242
DRM_ERROR("failed to initialize framebuffer %d\n", ret);
242243
goto err_kfree;

0 commit comments

Comments
 (0)