From 333781045d84628417efa161d37256331abef64b Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 19 May 2017 23:59:35 +1000 Subject: [PATCH] drm/nouveau/disp/g94-: port OR DP lane mapping to nvkm_ior Signed-off-by: Ben Skeggs --- drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | 4 ++++ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c | 12 ++++-------- drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c | 5 ++++- drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c | 3 +++ 9 files changed, 30 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h index 0b5115dac4d6..f40819ead320 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h @@ -49,6 +49,10 @@ struct nvkm_ior_func { u8 max_ac_packet, u8 rekey, u8 *avi, u8 avi_size, u8 *vendor, u8 vendor_size); } hdmi; + + struct { + u8 lanes[4]; + } dp; }; int nvkm_ior_new_(const struct nvkm_ior_func *func, struct nvkm_disp *, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c index 3175bb3031b5..3bcd31adecd8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c @@ -44,14 +44,7 @@ g94_sor_loff(struct nvkm_output_dp *outp) u32 g94_sor_dp_lane_map(struct nvkm_device *device, u8 lane) { - static const u8 gm100[] = { 0, 8, 16, 24 }; - static const u8 mcp89[] = { 24, 16, 8, 0 }; /* thanks, apple.. */ - static const u8 g94[] = { 16, 8, 0, 24 }; - if (device->chipset >= 0x110) - return gm100[lane]; - if (device->chipset == 0xaf) - return mcp89[lane]; - return g94[lane]; + return nvkm_ior_find(device->disp, SOR, -1)->func->dp.lanes[lane] * 8; } static int @@ -305,6 +298,9 @@ static const struct nvkm_ior_func g94_sor = { .state = g94_sor_state, .power = nv50_sor_power, + .dp = { + .lanes = { 2, 1, 0, 3}, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c index c3ce42e7a12e..c97c178be3dc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c @@ -160,6 +160,9 @@ gf119_sor = { .hdmi = { .ctrl = gf119_hdmi_ctrl, }, + .dp = { + .lanes = { 2, 1, 0, 3 }, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c index 9f71f9438c6a..6d85a285e47b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c @@ -28,6 +28,9 @@ gk104_sor = { .hdmi = { .ctrl = gk104_hdmi_ctrl, }, + .dp = { + .lanes = { 2, 1, 0, 3 }, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c index acffeff59a70..bb055cd91b2f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c @@ -60,6 +60,9 @@ gm107_sor = { .hdmi = { .ctrl = gk104_hdmi_ctrl, }, + .dp = { + .lanes = { 0, 1, 2, 3 }, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c index c8773d058073..11fed49fa9b6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c @@ -41,7 +41,7 @@ gm200_sor_loff(struct nvkm_output_dp *outp) static inline u32 gm200_sor_dp_lane_map(struct nvkm_device *device, u8 lane) { - return lane * 0x08; + return nvkm_ior_find(device->disp, SOR, -1)->func->dp.lanes[lane] * 8; } static int @@ -137,6 +137,9 @@ gm200_sor = { .hdmi = { .ctrl = gk104_hdmi_ctrl, }, + .dp = { + .lanes = { 0, 1, 2, 3 }, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c index 7036eeeace57..221255228e04 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c @@ -28,6 +28,9 @@ gt215_sor = { .hdmi = { .ctrl = gt215_hdmi_ctrl, }, + .dp = { + .lanes = { 2, 1, 0, 3 }, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c index a074a4733ca0..a771d10f253b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c @@ -28,6 +28,9 @@ mcp77_sor = { .hdmi = { .ctrl = g84_hdmi_ctrl, }, + .dp = { + .lanes = { 2, 1, 0, 3}, + }, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c index 56cf11ff0659..aece6bec5ecf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c @@ -28,6 +28,9 @@ mcp89_sor = { .hdmi = { .ctrl = gt215_hdmi_ctrl, }, + .dp = { + .lanes = { 3, 2, 1, 0 }, + }, }; int