aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2017-05-19 09:59:35 -0400
committerBen Skeggs <bskeggs@redhat.com>2017-06-16 00:04:58 -0400
commit32a232c5144d754674f05de3c452af324fe13cac (patch)
tree14ea450aba12a96323e9a9a78b184cf2902317f1
parent9648da5a71c25e17d14feb0d7dc9ee73319e8a24 (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.c68
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)
293static void 289static void
294nvkm_dp_train_fini(struct nvkm_dp *dp) 290nvkm_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
310static void 300static void
311nvkm_dp_train_init(struct nvkm_dp *dp) 301nvkm_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
334static const struct dp_rates { 326static const struct dp_rates {