Lines Matching +full:t +full:- +full:head
41 struct drm_device *dev = to_drm_encoder(encoder)->dev; in nv04_encoder_get_connector()
48 if (connector->encoder == to_drm_encoder(encoder)) in nv04_encoder_get_connector()
64 nvif_event_block(&disp->flip); in nv04_display_fini()
71 if (!runtime && !drm->headless) in nv04_display_fini()
72 cancel_work_sync(&drm->hpd_work); in nv04_display_fini()
77 /* Un-pin FB and cursors so they'll be evicted to system memory. */ in nv04_display_fini()
78 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_fini()
79 struct drm_framebuffer *fb = crtc->primary->fb; in nv04_display_fini()
82 if (!fb || !fb->obj[0]) in nv04_display_fini()
84 nvbo = nouveau_gem_object(fb->obj[0]); in nv04_display_fini()
88 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_fini()
90 if (nv_crtc->cursor.nvbo) { in nv04_display_fini()
91 if (nv_crtc->cursor.set_offset) in nv04_display_fini()
92 nouveau_bo_unmap(nv_crtc->cursor.nvbo); in nv04_display_fini()
93 nouveau_bo_unpin(nv_crtc->cursor.nvbo); in nv04_display_fini()
107 /* meh.. modeset apparently doesn't setup all the regs and depends in nv04_display_init()
108 * on pre-existing state, for now load the state of the card *before* in nv04_display_init()
112 * save/restore "pre-load" state, but more general so we can save in nv04_display_init()
115 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_init()
117 nv_crtc->save(&nv_crtc->base); in nv04_display_init()
120 list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.base.head) in nv04_display_init()
121 encoder->enc_save(&encoder->base.base); in nv04_display_init()
124 nvif_event_allow(&disp->flip); in nv04_display_init()
129 /* Re-pin FB/cursors. */ in nv04_display_init()
130 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_init()
131 struct drm_framebuffer *fb = crtc->primary->fb; in nv04_display_init()
134 if (!fb || !fb->obj[0]) in nv04_display_init()
136 nvbo = nouveau_gem_object(fb->obj[0]); in nv04_display_init()
142 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_init()
144 if (!nv_crtc->cursor.nvbo) in nv04_display_init()
147 ret = nouveau_bo_pin(nv_crtc->cursor.nvbo, in nv04_display_init()
149 if (!ret && nv_crtc->cursor.set_offset) in nv04_display_init()
150 ret = nouveau_bo_map(nv_crtc->cursor.nvbo); in nv04_display_init()
155 /* Force CLUT to get re-loaded during modeset. */ in nv04_display_init()
156 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_init()
159 nv_crtc->lut.depth = 0; in nv04_display_init()
162 /* This should ensure we don't hit a locking problem when someone in nv04_display_init()
172 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in nv04_display_init()
175 if (!nv_crtc->cursor.nvbo) in nv04_display_init()
178 if (nv_crtc->cursor.set_offset) in nv04_display_init()
179 nv_crtc->cursor.set_offset(nv_crtc, in nv04_display_init()
180 nv_crtc->cursor.nvbo->offset); in nv04_display_init()
181 nv_crtc->cursor.set_pos(nv_crtc, nv_crtc->cursor_saved_x, in nv04_display_init()
182 nv_crtc->cursor_saved_y); in nv04_display_init()
196 list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.base.head) in nv04_display_destroy()
197 encoder->enc_restore(&encoder->base.base); in nv04_display_destroy()
199 list_for_each_entry(nv_crtc, &dev->mode_config.crtc_list, base.head) in nv04_display_destroy()
200 nv_crtc->restore(&nv_crtc->base); in nv04_display_destroy()
204 nvif_event_dtor(&disp->flip); in nv04_display_destroy()
206 nouveau_display(dev)->priv = NULL; in nv04_display_destroy()
215 struct dcb_table *dcb = &drm->vbios.dcb; in nv04_display_create()
225 return -ENOMEM; in nv04_display_create()
227 disp->drm = drm; in nv04_display_create()
229 nouveau_display(dev)->priv = disp; in nv04_display_create()
230 nouveau_display(dev)->dtor = nv04_display_destroy; in nv04_display_create()
231 nouveau_display(dev)->init = nv04_display_init; in nv04_display_create()
232 nouveau_display(dev)->fini = nv04_display_fini; in nv04_display_create()
234 /* Pre-nv50 doesn't support atomic, so don't expose the ioctls */ in nv04_display_create()
235 dev->driver_features &= ~DRIVER_ATOMIC; in nv04_display_create()
238 if (drm->channel) { in nv04_display_create()
239 ret = nvif_event_ctor(&drm->channel->nvsw, "kmsFlip", 0, nv04_flip_complete, in nv04_display_create()
240 true, NULL, 0, &disp->flip); in nv04_display_create()
251 for (i = 0; i < dcb->entries; i++) { in nv04_display_create()
252 struct dcb_output *dcbent = &dcb->entry[i]; in nv04_display_create()
254 connector = nouveau_connector_create(dev, dcbent->connector); in nv04_display_create()
258 switch (dcbent->type) { in nv04_display_create()
267 if (dcbent->location == DCB_LOC_ON_CHIP) in nv04_display_create()
273 NV_WARN(drm, "DCB type %d not known\n", dcbent->type); in nv04_display_create()
282 &dev->mode_config.connector_list, head) { in nv04_display_create()
283 if (!connector->possible_encoders) { in nv04_display_create()
285 connector->name); in nv04_display_create()
286 connector->funcs->destroy(connector); in nv04_display_create()
290 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { in nv04_display_create()
293 nvkm_i2c_bus_find(i2c, nv_encoder->dcb->i2c_index); in nv04_display_create()
294 nv_encoder->i2c = bus ? &bus->i2c : NULL; in nv04_display_create()
298 list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) in nv04_display_create()
299 crtc->save(&crtc->base); in nv04_display_create()
301 list_for_each_entry(nv_encoder, &dev->mode_config.encoder_list, base.base.head) in nv04_display_create()
302 nv_encoder->enc_save(&nv_encoder->base.base); in nv04_display_create()