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

drm/nouveau/disp: introduce proper init/fini, separate from create/destroy

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

+39 -31
+5 -1
drivers/gpu/drm/nouveau/nouveau_display.c
··· 262 262 if (ret) 263 263 return ret; 264 264 265 - return 0; 265 + ret = disp->init(dev); 266 + if (ret) 267 + disp->destroy(dev); 268 + return ret; 266 269 } 267 270 268 271 void ··· 274 271 struct drm_nouveau_private *dev_priv = dev->dev_private; 275 272 struct nouveau_display_engine *disp = &dev_priv->engine.display; 276 273 274 + disp->fini(dev); 277 275 disp->destroy(dev); 278 276 drm_mode_config_cleanup(dev); 279 277 }
+6 -3
drivers/gpu/drm/nouveau/nouveau_drv.h
··· 396 396 int (*early_init)(struct drm_device *); 397 397 void (*late_takedown)(struct drm_device *); 398 398 int (*create)(struct drm_device *); 399 - int (*init)(struct drm_device *); 400 399 void (*destroy)(struct drm_device *); 400 + int (*init)(struct drm_device *); 401 + void (*fini)(struct drm_device *); 401 402 402 403 struct drm_property *dithering_mode; 403 404 struct drm_property *dithering_depth; ··· 1344 1343 extern int nv04_display_early_init(struct drm_device *); 1345 1344 extern void nv04_display_late_takedown(struct drm_device *); 1346 1345 extern int nv04_display_create(struct drm_device *); 1347 - extern int nv04_display_init(struct drm_device *); 1348 1346 extern void nv04_display_destroy(struct drm_device *); 1347 + extern int nv04_display_init(struct drm_device *); 1348 + extern void nv04_display_fini(struct drm_device *); 1349 1349 1350 1350 /* nvd0_display.c */ 1351 1351 extern int nvd0_display_create(struct drm_device *); 1352 - extern int nvd0_display_init(struct drm_device *); 1353 1352 extern void nvd0_display_destroy(struct drm_device *); 1353 + extern int nvd0_display_init(struct drm_device *); 1354 + extern void nvd0_display_fini(struct drm_device *); 1354 1355 1355 1356 /* nv04_crtc.c */ 1356 1357 extern int nv04_crtc_create(struct drm_device *, int index);
+16 -8
drivers/gpu/drm/nouveau/nouveau_state.c
··· 80 80 engine->display.early_init = nv04_display_early_init; 81 81 engine->display.late_takedown = nv04_display_late_takedown; 82 82 engine->display.create = nv04_display_create; 83 - engine->display.init = nv04_display_init; 84 83 engine->display.destroy = nv04_display_destroy; 84 + engine->display.init = nv04_display_init; 85 + engine->display.fini = nv04_display_fini; 85 86 engine->gpio.init = nouveau_stub_init; 86 87 engine->gpio.takedown = nouveau_stub_takedown; 87 88 engine->gpio.get = NULL; ··· 130 129 engine->display.early_init = nv04_display_early_init; 131 130 engine->display.late_takedown = nv04_display_late_takedown; 132 131 engine->display.create = nv04_display_create; 133 - engine->display.init = nv04_display_init; 134 132 engine->display.destroy = nv04_display_destroy; 133 + engine->display.init = nv04_display_init; 134 + engine->display.fini = nv04_display_fini; 135 135 engine->gpio.init = nouveau_stub_init; 136 136 engine->gpio.takedown = nouveau_stub_takedown; 137 137 engine->gpio.get = nv10_gpio_get; ··· 180 178 engine->display.early_init = nv04_display_early_init; 181 179 engine->display.late_takedown = nv04_display_late_takedown; 182 180 engine->display.create = nv04_display_create; 183 - engine->display.init = nv04_display_init; 184 181 engine->display.destroy = nv04_display_destroy; 182 + engine->display.init = nv04_display_init; 183 + engine->display.fini = nv04_display_fini; 185 184 engine->gpio.init = nouveau_stub_init; 186 185 engine->gpio.takedown = nouveau_stub_takedown; 187 186 engine->gpio.get = nv10_gpio_get; ··· 230 227 engine->display.early_init = nv04_display_early_init; 231 228 engine->display.late_takedown = nv04_display_late_takedown; 232 229 engine->display.create = nv04_display_create; 233 - engine->display.init = nv04_display_init; 234 230 engine->display.destroy = nv04_display_destroy; 231 + engine->display.init = nv04_display_init; 232 + engine->display.fini = nv04_display_fini; 235 233 engine->gpio.init = nouveau_stub_init; 236 234 engine->gpio.takedown = nouveau_stub_takedown; 237 235 engine->gpio.get = nv10_gpio_get; ··· 283 279 engine->display.early_init = nv04_display_early_init; 284 280 engine->display.late_takedown = nv04_display_late_takedown; 285 281 engine->display.create = nv04_display_create; 286 - engine->display.init = nv04_display_init; 287 282 engine->display.destroy = nv04_display_destroy; 283 + engine->display.init = nv04_display_init; 284 + engine->display.fini = nv04_display_fini; 288 285 engine->gpio.init = nouveau_stub_init; 289 286 engine->gpio.takedown = nouveau_stub_takedown; 290 287 engine->gpio.get = nv10_gpio_get; ··· 341 336 engine->display.early_init = nv50_display_early_init; 342 337 engine->display.late_takedown = nv50_display_late_takedown; 343 338 engine->display.create = nv50_display_create; 344 - engine->display.init = nv50_display_init; 345 339 engine->display.destroy = nv50_display_destroy; 340 + engine->display.init = nv50_display_init; 341 + engine->display.fini = nv50_display_fini; 346 342 engine->gpio.init = nv50_gpio_init; 347 343 engine->gpio.takedown = nv50_gpio_fini; 348 344 engine->gpio.get = nv50_gpio_get; ··· 417 411 engine->display.early_init = nv50_display_early_init; 418 412 engine->display.late_takedown = nv50_display_late_takedown; 419 413 engine->display.create = nv50_display_create; 420 - engine->display.init = nv50_display_init; 421 414 engine->display.destroy = nv50_display_destroy; 415 + engine->display.init = nv50_display_init; 416 + engine->display.fini = nv50_display_fini; 422 417 engine->gpio.init = nv50_gpio_init; 423 418 engine->gpio.takedown = nouveau_stub_takedown; 424 419 engine->gpio.get = nv50_gpio_get; ··· 470 463 engine->display.early_init = nouveau_stub_init; 471 464 engine->display.late_takedown = nouveau_stub_takedown; 472 465 engine->display.create = nvd0_display_create; 473 - engine->display.init = nvd0_display_init; 474 466 engine->display.destroy = nvd0_display_destroy; 467 + engine->display.init = nvd0_display_init; 468 + engine->display.fini = nvd0_display_fini; 475 469 engine->gpio.init = nv50_gpio_init; 476 470 engine->gpio.takedown = nouveau_stub_takedown; 477 471 engine->gpio.get = nvd0_gpio_get;
+5
drivers/gpu/drm/nouveau/nv04_display.c
··· 243 243 return 0; 244 244 } 245 245 246 + void 247 + nv04_display_fini(struct drm_device *dev) 248 + { 249 + } 250 + 246 251 static void 247 252 nv04_vblank_crtc0_isr(struct drm_device *dev) 248 253 {
+5 -12
drivers/gpu/drm/nouveau/nv50_display.c
··· 264 264 return nv50_display_sync(dev); 265 265 } 266 266 267 - static int nv50_display_disable(struct drm_device *dev) 267 + void 268 + nv50_display_fini(struct drm_device *dev) 268 269 { 269 270 struct drm_nouveau_private *dev_priv = dev->dev_private; 270 271 struct nv50_display *disp = nv50_display(dev); ··· 338 337 nv_wr32(dev, 0xe074, 0xffffffff); 339 338 nv_wr32(dev, 0xe070, 0x00000000); 340 339 } 341 - return 0; 342 340 } 343 341 344 - int nv50_display_create(struct drm_device *dev) 342 + int 343 + nv50_display_create(struct drm_device *dev) 345 344 { 346 345 struct drm_nouveau_private *dev_priv = dev->dev_private; 347 346 struct dcb_table *dcb = &dev_priv->vbios.dcb; 348 347 struct drm_connector *connector, *ct; 349 348 struct nv50_display *priv; 350 - int ret, i; 349 + int i; 351 350 352 351 NV_DEBUG_KMS(dev, "\n"); 353 352 ··· 400 399 401 400 tasklet_init(&priv->tasklet, nv50_display_bh, (unsigned long)dev); 402 401 nouveau_irq_register(dev, 26, nv50_display_isr); 403 - 404 - ret = nv50_display_init(dev); 405 - if (ret) { 406 - nv50_display_destroy(dev); 407 - return ret; 408 - } 409 - 410 402 return 0; 411 403 } 412 404 ··· 410 416 411 417 NV_DEBUG_KMS(dev, "\n"); 412 418 413 - nv50_display_disable(dev); 414 419 nouveau_irq_unregister(dev, 26); 415 420 kfree(disp); 416 421 }
+1
drivers/gpu/drm/nouveau/nv50_display.h
··· 69 69 void nv50_display_late_takedown(struct drm_device *dev); 70 70 int nv50_display_create(struct drm_device *dev); 71 71 int nv50_display_init(struct drm_device *dev); 72 + void nv50_display_fini(struct drm_device *dev); 72 73 void nv50_display_destroy(struct drm_device *dev); 73 74 int nv50_crtc_blank(struct nouveau_crtc *, bool blank); 74 75 int nv50_crtc_set_clock(struct drm_device *, int head, int pclk);
+1 -7
drivers/gpu/drm/nouveau/nvd0_display.c
··· 1341 1341 /****************************************************************************** 1342 1342 * Init 1343 1343 *****************************************************************************/ 1344 - static void 1344 + void 1345 1345 nvd0_display_fini(struct drm_device *dev) 1346 1346 { 1347 1347 int i; ··· 1460 1460 struct drm_nouveau_private *dev_priv = dev->dev_private; 1461 1461 struct nvd0_display *disp = nvd0_display(dev); 1462 1462 struct pci_dev *pdev = dev->pdev; 1463 - 1464 - nvd0_display_fini(dev); 1465 1463 1466 1464 pci_free_consistent(pdev, PAGE_SIZE, disp->evo[0].ptr, disp->evo[0].handle); 1467 1465 nouveau_gpuobj_ref(NULL, &disp->mem); ··· 1585 1587 ret = -ENOMEM; 1586 1588 goto out; 1587 1589 } 1588 - 1589 - ret = nvd0_display_init(dev); 1590 - if (ret) 1591 - goto out; 1592 1590 1593 1591 out: 1594 1592 if (ret)