summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2017-05-19 23:59:34 +1000
committerBen Skeggs <bskeggs@redhat.com>2017-06-16 14:04:44 +1000
commitb88afa43967578741e3b258c80e01969fddd5fe6 (patch)
treedb5b2b729ed52b8f7b6d9f634899811616da09f7 /drivers/gpu/drm
parentca9c2d5b28b4d5aa1d229950b88f7c559eee4164 (diff)
drm/nouveau/bios/init: add or/link args separate from output path
As of DCB 4.1, these are not the same thing. Compatibility temporarily in place until callers have been updated. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/init.h2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c14
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/init.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/init.h
index ad5d993f7805..84d9e588af4d 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/init.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/init.h
@@ -7,6 +7,8 @@ struct nvbios_init {
u32 offset;
struct dcb_output *outp;
+ int or;
+ int link;
union {
int head;
int crtc;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
index 249d018ee32c..b1256aba2fdb 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
@@ -87,8 +87,8 @@ static inline int
init_or(struct nvbios_init *init)
{
if (init_exec(init)) {
- if (init->outp)
- return ffs(init->outp->or) - 1;
+ if (init->or >= 0)
+ return init->or;
error("script needs OR!!\n");
}
return 0;
@@ -98,8 +98,8 @@ static inline int
init_link(struct nvbios_init *init)
{
if (init_exec(init)) {
- if (init->outp)
- return !(init->outp->sorconf.link & 1);
+ if (init->link)
+ return init->link == 2;
error("script needs OR link\n");
}
return 0;
@@ -2277,6 +2277,12 @@ int
nvbios_exec(struct nvbios_init *init)
{
struct nvkm_bios *bios = init->subdev->device->bios;
+
+ if (init->bios) {
+ init->or = init->outp ? ffs(init->outp->or) - 1 : -1;
+ init->link = init->outp ? init->outp->sorconf.link : 0;
+ }
+
init->nested++;
while (init->offset) {
u8 opcode = nvbios_rd08(bios, init->offset);