drm/nouveau/bios/pll: limits table 5.0
authorBen Skeggs <bskeggs@redhat.com>
Tue, 8 May 2018 10:39:47 +0000 (20:39 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 18 May 2018 05:01:31 +0000 (15:01 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.c

index 2ca23a9157ab9345af8d99681b204ab4cc6f52bd..e6e804cee2bc8d40b0bdd3a829fbb95b67222677 100644 (file)
@@ -193,7 +193,10 @@ pll_map_type(struct nvkm_bios *bios, u8 type, u32 *reg, u8 *ver, u8 *len)
                data += hdr;
                while (cnt--) {
                        if (nvbios_rd08(bios, data + 0) == type) {
-                               *reg = nvbios_rd32(bios, data + 3);
+                               if (*ver < 0x50)
+                                       *reg = nvbios_rd32(bios, data + 3);
+                               else
+                                       *reg = 0;
                                return data;
                        }
                        data += *len;
@@ -361,6 +364,20 @@ nvbios_pll_parse(struct nvkm_bios *bios, u32 type, struct nvbios_pll *info)
                info->min_p = nvbios_rd08(bios, data + 12);
                info->max_p = nvbios_rd08(bios, data + 13);
                break;
+       case 0x50:
+               info->refclk = nvbios_rd16(bios, data + 1) * 1000;
+               /* info->refclk_alt = nvbios_rd16(bios, data + 3) * 1000; */
+               info->vco1.min_freq = nvbios_rd16(bios, data + 5) * 1000;
+               info->vco1.max_freq = nvbios_rd16(bios, data + 7) * 1000;
+               info->vco1.min_inputfreq = nvbios_rd16(bios, data + 9) * 1000;
+               info->vco1.max_inputfreq = nvbios_rd16(bios, data + 11) * 1000;
+               info->vco1.min_m = nvbios_rd08(bios, data + 13);
+               info->vco1.max_m = nvbios_rd08(bios, data + 14);
+               info->vco1.min_n = nvbios_rd08(bios, data + 15);
+               info->vco1.max_n = nvbios_rd08(bios, data + 16);
+               info->min_p = nvbios_rd08(bios, data + 17);
+               info->max_p = nvbios_rd08(bios, data + 18);
+               break;
        default:
                nvkm_error(subdev, "unknown pll limits version 0x%02x\n", ver);
                return -EINVAL;