Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'drm-tda998x-3.12-fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-cubox into drm-fixes

These four patches fix a few issues discovered since the initial merge,
which have been reviewed by Rob Clark and Thierry Reding.

* 'drm-tda998x-3.12-fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-cubox:
DRM: Armada: prime refcounting bug fix
DRM: Armada: fix printing of phys_addr_t/dma_addr_t
DRM: Armada: destroy framebuffer after helper
DRM: Armada: implement lastclose() for fbhelper

+26 -9
+1
drivers/gpu/drm/armada/armada_drm.h
··· 103 103 extern const struct drm_mode_config_funcs armada_drm_mode_config_funcs; 104 104 105 105 int armada_fbdev_init(struct drm_device *); 106 + void armada_fbdev_lastclose(struct drm_device *); 106 107 void armada_fbdev_fini(struct drm_device *); 107 108 108 109 int armada_overlay_plane_create(struct drm_device *, unsigned long);
+6 -1
drivers/gpu/drm/armada/armada_drv.c
··· 321 321 DRM_UNLOCKED), 322 322 }; 323 323 324 + static void armada_drm_lastclose(struct drm_device *dev) 325 + { 326 + armada_fbdev_lastclose(dev); 327 + } 328 + 324 329 static const struct file_operations armada_drm_fops = { 325 330 .owner = THIS_MODULE, 326 331 .llseek = no_llseek, ··· 342 337 .open = NULL, 343 338 .preclose = NULL, 344 339 .postclose = NULL, 345 - .lastclose = NULL, 340 + .lastclose = armada_drm_lastclose, 346 341 .unload = armada_drm_unload, 347 342 .get_vblank_counter = drm_vblank_count, 348 343 .enable_vblank = armada_drm_enable_vblank,
+15 -5
drivers/gpu/drm/armada/armada_fbdev.c
··· 105 105 drm_fb_helper_fill_fix(info, dfb->fb.pitches[0], dfb->fb.depth); 106 106 drm_fb_helper_fill_var(info, fbh, sizes->fb_width, sizes->fb_height); 107 107 108 - DRM_DEBUG_KMS("allocated %dx%d %dbpp fb: 0x%08x\n", 109 - dfb->fb.width, dfb->fb.height, 110 - dfb->fb.bits_per_pixel, obj->phys_addr); 108 + DRM_DEBUG_KMS("allocated %dx%d %dbpp fb: 0x%08llx\n", 109 + dfb->fb.width, dfb->fb.height, dfb->fb.bits_per_pixel, 110 + (unsigned long long)obj->phys_addr); 111 111 112 112 return 0; 113 113 ··· 177 177 return ret; 178 178 } 179 179 180 + void armada_fbdev_lastclose(struct drm_device *dev) 181 + { 182 + struct armada_private *priv = dev->dev_private; 183 + 184 + drm_modeset_lock_all(dev); 185 + if (priv->fbdev) 186 + drm_fb_helper_restore_fbdev_mode(priv->fbdev); 187 + drm_modeset_unlock_all(dev); 188 + } 189 + 180 190 void armada_fbdev_fini(struct drm_device *dev) 181 191 { 182 192 struct armada_private *priv = dev->dev_private; ··· 202 192 framebuffer_release(info); 203 193 } 204 194 195 + drm_fb_helper_fini(fbh); 196 + 205 197 if (fbh->fb) 206 198 fbh->fb->funcs->destroy(fbh->fb); 207 - 208 - drm_fb_helper_fini(fbh); 209 199 210 200 priv->fbdev = NULL; 211 201 }
+4 -3
drivers/gpu/drm/armada/armada_gem.c
··· 172 172 obj->dev_addr = obj->linear->start; 173 173 } 174 174 175 - DRM_DEBUG_DRIVER("obj %p phys %#x dev %#x\n", 176 - obj, obj->phys_addr, obj->dev_addr); 175 + DRM_DEBUG_DRIVER("obj %p phys %#llx dev %#llx\n", obj, 176 + (unsigned long long)obj->phys_addr, 177 + (unsigned long long)obj->dev_addr); 177 178 178 179 return 0; 179 180 } ··· 558 557 * refcount on the gem object itself. 559 558 */ 560 559 drm_gem_object_reference(obj); 561 - dma_buf_put(buf); 562 560 return obj; 563 561 } 564 562 } ··· 573 573 } 574 574 575 575 dobj->obj.import_attach = attach; 576 + get_dma_buf(buf); 576 577 577 578 /* 578 579 * Don't call dma_buf_map_attachment() here - it maps the