]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/nouveau/acr: allow module to load when HSFW(s) are missing
authorBen Skeggs <bskeggs@redhat.com>
Tue, 16 Jun 2020 00:47:07 +0000 (10:47 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 24 Jul 2020 08:50:48 +0000 (18:50 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.c
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.c
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.c
drivers/gpu/drm/nouveau/nvkm/subdev/acr/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.c

index 9a6394085cf05cee315969bc630cc14749df6bae..74ffcf1e8de89a13db4a61de9d02e3f2056a7154 100644 (file)
 #include <nvfw/acr.h>
 #include <nvfw/flcn.h>
 
+const struct nvkm_acr_func
+gm200_acr = {
+};
+
+int
+gm200_acr_nofw(struct nvkm_acr *acr, int ver, const struct nvkm_acr_fwif *fwif)
+{
+       nvkm_warn(&acr->subdev, "firmware unavailable\n");
+       return 0;
+}
+
 int
 gm200_acr_init(struct nvkm_acr *acr)
 {
@@ -425,7 +436,7 @@ gm200_acr_load_fwif[] = {
 };
 
 static const struct nvkm_acr_func
-gm200_acr = {
+gm200_acr_0 = {
        .load = gm200_acr_load_fwif,
        .unload = gm200_acr_unload_fwif,
        .wpr_parse = gm200_acr_wpr_parse,
@@ -459,7 +470,8 @@ gm200_acr_load(struct nvkm_acr *acr, int ver, const struct nvkm_acr_fwif *fwif)
 
 static const struct nvkm_acr_fwif
 gm200_acr_fwif[] = {
-       { 0, gm200_acr_load, &gm200_acr },
+       {  0, gm200_acr_load, &gm200_acr_0 },
+       { -1, gm200_acr_nofw, &gm200_acr },
        {}
 };
 
index 034a6ede70c74d079030fe50cb5b1669be78db89..b1ecc58152ccab978ceb027f24d8399ace1c2b5c 100644 (file)
@@ -123,7 +123,8 @@ gm20b_acr_load(struct nvkm_acr *acr, int ver, const struct nvkm_acr_fwif *fwif)
 
 static const struct nvkm_acr_fwif
 gm20b_acr_fwif[] = {
-       { 0, gm20b_acr_load, &gm20b_acr },
+       {  0, gm20b_acr_load, &gm20b_acr },
+       { -1, gm200_acr_nofw, &gm200_acr },
        {}
 };
 
index 49e11c46d525ee32cec749935805e36010ac46f2..80eb9d8dbc8037f5de38aaf0f25027298cef1ad1 100644 (file)
@@ -270,7 +270,8 @@ gp102_acr_load(struct nvkm_acr *acr, int ver, const struct nvkm_acr_fwif *fwif)
 
 static const struct nvkm_acr_fwif
 gp102_acr_fwif[] = {
-       { 0, gp102_acr_load, &gp102_acr },
+       {  0, gp102_acr_load, &gp102_acr },
+       { -1, gm200_acr_nofw, &gm200_acr },
        {}
 };
 
index f10dc9112678cd3ded37fc91bd15ed61b54f0edd..67a7c141004bd30a2b820731a4633da1a8b2e47f 100644 (file)
@@ -100,7 +100,8 @@ gp108_acr = {
 
 static const struct nvkm_acr_fwif
 gp108_acr_fwif[] = {
-       { 0, gp102_acr_load, &gp108_acr },
+       {  0, gp102_acr_load, &gp108_acr },
+       { -1, gm200_acr_nofw, &gm200_acr },
        {}
 };
 
index 39de64292a41bb4c2ad045c184e998cedb6f06dc..8249f0d2d81d7737281d125e058cc7b94dc56716 100644 (file)
@@ -46,7 +46,8 @@ gp10b_acr = {
 
 static const struct nvkm_acr_fwif
 gp10b_acr_fwif[] = {
-       { 0, gm20b_acr_load, &gp10b_acr },
+       {  0, gm20b_acr_load, &gp10b_acr },
+       { -1, gm200_acr_nofw, &gm200_acr },
        {}
 };
 
index d8ba72806d392847168961307eea3f0385aa2dba..9c10879051c8364f43a9e4d303aeb9170a055f43 100644 (file)
@@ -10,6 +10,7 @@ struct nvkm_acr_fwif {
        const struct nvkm_acr_func *func;
 };
 
+int gm200_acr_nofw(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);
 int gm20b_acr_load(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);
 int gp102_acr_load(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);
 
@@ -29,6 +30,7 @@ struct nvkm_acr_func {
        void (*fini)(struct nvkm_acr *);
 };
 
+extern const struct nvkm_acr_func gm200_acr;
 int gm200_acr_wpr_parse(struct nvkm_acr *);
 u32 gm200_acr_wpr_layout(struct nvkm_acr *);
 int gm200_acr_wpr_build(struct nvkm_acr *, struct nvkm_acr_lsf *);
index d28d8f36ae2484ac4d237ad0fb3750b2d52b53b7..c4981bce9a2b6a735de8e36c1d314fc416c1f5b7 100644 (file)
@@ -219,6 +219,7 @@ tu102_acr_load(struct nvkm_acr *acr, int version,
 static const struct nvkm_acr_fwif
 tu102_acr_fwif[] = {
        {  0, tu102_acr_load, &tu102_acr },
+       { -1, gm200_acr_nofw, &gm200_acr },
        {}
 };