diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2017-05-19 09:59:35 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2017-06-16 00:04:58 -0400 |
commit | 32a232c5144d754674f05de3c452af324fe13cac (patch) | |
tree | 14ea450aba12a96323e9a9a78b184cf2902317f1 | |
parent | 9648da5a71c25e17d14feb0d7dc9ee73319e8a24 (diff) |
drm/nouveau/disp/dp: use new devinit script interpreter entry-point
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 68 |
1 files changed, 30 insertions, 38 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c index 4ad31302aaf4..da5aa4683d16 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | |||
@@ -222,14 +222,6 @@ nvkm_dp_train_links(struct nvkm_dp *dp) | |||
222 | struct nvkm_disp *disp = dp->outp.disp; | 222 | struct nvkm_disp *disp = dp->outp.disp; |
223 | struct nvkm_subdev *subdev = &disp->engine.subdev; | 223 | struct nvkm_subdev *subdev = &disp->engine.subdev; |
224 | struct nvkm_bios *bios = subdev->device->bios; | 224 | struct nvkm_bios *bios = subdev->device->bios; |
225 | struct nvbios_init init = { | ||
226 | .subdev = subdev, | ||
227 | .bios = bios, | ||
228 | .offset = 0x0000, | ||
229 | .outp = &dp->outp.info, | ||
230 | .crtc = -1, | ||
231 | .execute = 1, | ||
232 | }; | ||
233 | struct lt_state lt = { | 225 | struct lt_state lt = { |
234 | .dp = dp, | 226 | .dp = dp, |
235 | }; | 227 | }; |
@@ -250,14 +242,18 @@ nvkm_dp_train_links(struct nvkm_dp *dp) | |||
250 | if (dp->version < 0x30) { | 242 | if (dp->version < 0x30) { |
251 | while ((ior->dp.bw * 2700) < nvbios_rd16(bios, lnkcmp)) | 243 | while ((ior->dp.bw * 2700) < nvbios_rd16(bios, lnkcmp)) |
252 | lnkcmp += 4; | 244 | lnkcmp += 4; |
253 | init.offset = nvbios_rd16(bios, lnkcmp + 2); | 245 | lnkcmp = nvbios_rd16(bios, lnkcmp + 2); |
254 | } else { | 246 | } else { |
255 | while (ior->dp.bw < nvbios_rd08(bios, lnkcmp)) | 247 | while (ior->dp.bw < nvbios_rd08(bios, lnkcmp)) |
256 | lnkcmp += 3; | 248 | lnkcmp += 3; |
257 | init.offset = nvbios_rd16(bios, lnkcmp + 1); | 249 | lnkcmp = nvbios_rd16(bios, lnkcmp + 1); |
258 | } | 250 | } |
259 | 251 | ||
260 | nvbios_exec(&init); | 252 | nvbios_init(subdev, lnkcmp, |
253 | init.outp = &dp->outp.info; | ||
254 | init.or = ior->id; | ||
255 | init.link = ior->asy.link; | ||
256 | ); | ||
261 | } | 257 | } |
262 | 258 | ||
263 | ret = ior->func->dp.links(ior, dp->aux); | 259 | ret = ior->func->dp.links(ior, dp->aux); |
@@ -293,42 +289,38 @@ nvkm_dp_train_links(struct nvkm_dp *dp) | |||
293 | static void | 289 | static void |
294 | nvkm_dp_train_fini(struct nvkm_dp *dp) | 290 | nvkm_dp_train_fini(struct nvkm_dp *dp) |
295 | { | 291 | { |
296 | struct nvkm_subdev *subdev = &dp->outp.disp->engine.subdev; | ||
297 | struct nvbios_init init = { | ||
298 | .subdev = subdev, | ||
299 | .bios = subdev->device->bios, | ||
300 | .outp = &dp->outp.info, | ||
301 | .crtc = -1, | ||
302 | .execute = 1, | ||
303 | }; | ||
304 | |||
305 | /* Execute AfterLinkTraining script from DP Info table. */ | 292 | /* Execute AfterLinkTraining script from DP Info table. */ |
306 | init.offset = dp->info.script[1], | 293 | nvbios_init(&dp->outp.disp->engine.subdev, dp->info.script[1], |
307 | nvbios_exec(&init); | 294 | init.outp = &dp->outp.info; |
295 | init.or = dp->outp.ior->id; | ||
296 | init.link = dp->outp.ior->asy.link; | ||
297 | ); | ||
308 | } | 298 | } |
309 | 299 | ||
310 | static void | 300 | static void |
311 | nvkm_dp_train_init(struct nvkm_dp *dp) | 301 | nvkm_dp_train_init(struct nvkm_dp *dp) |
312 | { | 302 | { |
313 | struct nvkm_subdev *subdev = &dp->outp.disp->engine.subdev; | ||
314 | struct nvbios_init init = { | ||
315 | .subdev = subdev, | ||
316 | .bios = subdev->device->bios, | ||
317 | .outp = &dp->outp.info, | ||
318 | .crtc = -1, | ||
319 | .execute = 1, | ||
320 | }; | ||
321 | |||
322 | /* Execute EnableSpread/DisableSpread script from DP Info table. */ | 303 | /* Execute EnableSpread/DisableSpread script from DP Info table. */ |
323 | if (dp->dpcd[DPCD_RC03] & DPCD_RC03_MAX_DOWNSPREAD) | 304 | if (dp->dpcd[DPCD_RC03] & DPCD_RC03_MAX_DOWNSPREAD) { |
324 | init.offset = dp->info.script[2]; | 305 | nvbios_init(&dp->outp.disp->engine.subdev, dp->info.script[2], |
325 | else | 306 | init.outp = &dp->outp.info; |
326 | init.offset = dp->info.script[3]; | 307 | init.or = dp->outp.ior->id; |
327 | nvbios_exec(&init); | 308 | init.link = dp->outp.ior->asy.link; |
309 | ); | ||
310 | } else { | ||
311 | nvbios_init(&dp->outp.disp->engine.subdev, dp->info.script[3], | ||
312 | init.outp = &dp->outp.info; | ||
313 | init.or = dp->outp.ior->id; | ||
314 | init.link = dp->outp.ior->asy.link; | ||
315 | ); | ||
316 | } | ||
328 | 317 | ||
329 | /* Execute BeforeLinkTraining script from DP Info table. */ | 318 | /* Execute BeforeLinkTraining script from DP Info table. */ |
330 | init.offset = dp->info.script[0]; | 319 | nvbios_init(&dp->outp.disp->engine.subdev, dp->info.script[0], |
331 | nvbios_exec(&init); | 320 | init.outp = &dp->outp.info; |
321 | init.or = dp->outp.ior->id; | ||
322 | init.link = dp->outp.ior->asy.link; | ||
323 | ); | ||
332 | } | 324 | } |
333 | 325 | ||
334 | static const struct dp_rates { | 326 | static const struct dp_rates { |