#define NV_DEVICE_INFO_V0_KEPLER                                           0x08
 #define NV_DEVICE_INFO_V0_MAXWELL                                          0x09
 #define NV_DEVICE_INFO_V0_PASCAL                                           0x0a
+#define NV_DEVICE_INFO_V0_VOLTA                                            0x0b
        __u8  family;
        __u8  pad06[2];
        __u64 ram_size;
 
        case NV_DEVICE_INFO_V0_KEPLER:
        case NV_DEVICE_INFO_V0_MAXWELL:
        case NV_DEVICE_INFO_V0_PASCAL:
+       case NV_DEVICE_INFO_V0_VOLTA:
                return NVIF_CLASS_SW_GF100;
        }
 
 
        .sw = gf100_sw_new,
 };
 
+static const struct nvkm_device_chip
+nv140_chipset = {
+       .name = "GV100",
+};
+
 static int
 nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size,
                       struct nvkm_notify *notify)
                        case 0x110:
                        case 0x120: device->card_type = GM100; break;
                        case 0x130: device->card_type = GP100; break;
+                       case 0x140: device->card_type = GV100; break;
                        default:
                                break;
                        }
                case 0x137: device->chip = &nv137_chipset; break;
                case 0x138: device->chip = &nv138_chipset; break;
                case 0x13b: device->chip = &nv13b_chipset; break;
+               case 0x140: device->chip = &nv140_chipset; break;
                default:
                        nvdev_error(device, "unknown chipset (%08x)\n", boot0);
                        goto done;
 
        case NV_E0: args->v0.family = NV_DEVICE_INFO_V0_KEPLER; break;
        case GM100: args->v0.family = NV_DEVICE_INFO_V0_MAXWELL; break;
        case GP100: args->v0.family = NV_DEVICE_INFO_V0_PASCAL; break;
+       case GV100: args->v0.family = NV_DEVICE_INFO_V0_VOLTA; break;
        default:
                args->v0.family = 0;
                break;