Commit 3b050680 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/core: recognise GA10[024]

GA100 hidden behind a module option, as it's not been as well verified
since initial bring-up and may need additional changes.

There's no display anyway, so this can wait for a bit.
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent caeb6ab8
...@@ -33,6 +33,7 @@ struct nv_device_info_v0 { ...@@ -33,6 +33,7 @@ struct nv_device_info_v0 {
#define NV_DEVICE_INFO_V0_PASCAL 0x0a #define NV_DEVICE_INFO_V0_PASCAL 0x0a
#define NV_DEVICE_INFO_V0_VOLTA 0x0b #define NV_DEVICE_INFO_V0_VOLTA 0x0b
#define NV_DEVICE_INFO_V0_TURING 0x0c #define NV_DEVICE_INFO_V0_TURING 0x0c
#define NV_DEVICE_INFO_V0_AMPERE 0x0d
__u8 family; __u8 family;
__u8 pad06[2]; __u8 pad06[2];
__u64 ram_size; __u64 ram_size;
......
...@@ -120,6 +120,7 @@ struct nvkm_device { ...@@ -120,6 +120,7 @@ struct nvkm_device {
GP100 = 0x130, GP100 = 0x130,
GV100 = 0x140, GV100 = 0x140,
TU100 = 0x160, TU100 = 0x160,
GA100 = 0x170,
} card_type; } card_type;
u32 chipset; u32 chipset;
u8 chiprev; u8 chiprev;
......
...@@ -256,6 +256,7 @@ nouveau_backlight_init(struct drm_connector *connector) ...@@ -256,6 +256,7 @@ nouveau_backlight_init(struct drm_connector *connector)
case NV_DEVICE_INFO_V0_PASCAL: case NV_DEVICE_INFO_V0_PASCAL:
case NV_DEVICE_INFO_V0_VOLTA: case NV_DEVICE_INFO_V0_VOLTA:
case NV_DEVICE_INFO_V0_TURING: case NV_DEVICE_INFO_V0_TURING:
case NV_DEVICE_INFO_V0_AMPERE: //XXX: not confirmed
ret = nv50_backlight_init(nv_encoder, &props, &ops); ret = nv50_backlight_init(nv_encoder, &props, &ops);
break; break;
default: default:
......
...@@ -2652,6 +2652,21 @@ nv168_chipset = { ...@@ -2652,6 +2652,21 @@ nv168_chipset = {
.sec2 = tu102_sec2_new, .sec2 = tu102_sec2_new,
}; };
static const struct nvkm_device_chip
nv170_chipset = {
.name = "GA100",
};
static const struct nvkm_device_chip
nv172_chipset = {
.name = "GA102",
};
static const struct nvkm_device_chip
nv174_chipset = {
.name = "GA104",
};
static int static int
nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size, nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size,
struct nvkm_notify *notify) struct nvkm_notify *notify)
...@@ -3063,6 +3078,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func, ...@@ -3063,6 +3078,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
case 0x130: device->card_type = GP100; break; case 0x130: device->card_type = GP100; break;
case 0x140: device->card_type = GV100; break; case 0x140: device->card_type = GV100; break;
case 0x160: device->card_type = TU100; break; case 0x160: device->card_type = TU100; break;
case 0x170: device->card_type = GA100; break;
default: default:
break; break;
} }
...@@ -3160,11 +3176,24 @@ nvkm_device_ctor(const struct nvkm_device_func *func, ...@@ -3160,11 +3176,24 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
case 0x166: device->chip = &nv166_chipset; break; case 0x166: device->chip = &nv166_chipset; break;
case 0x167: device->chip = &nv167_chipset; break; case 0x167: device->chip = &nv167_chipset; break;
case 0x168: device->chip = &nv168_chipset; break; case 0x168: device->chip = &nv168_chipset; break;
case 0x172: device->chip = &nv172_chipset; break;
case 0x174: device->chip = &nv174_chipset; break;
default: default:
if (nvkm_boolopt(device->cfgopt, "NvEnableUnsupportedChipsets", false)) {
switch (device->chipset) {
case 0x170: device->chip = &nv170_chipset; break;
default:
break;
}
}
if (!device->chip) {
nvdev_error(device, "unknown chipset (%08x)\n", boot0); nvdev_error(device, "unknown chipset (%08x)\n", boot0);
ret = -ENODEV; ret = -ENODEV;
goto done; goto done;
} }
break;
}
nvdev_info(device, "NVIDIA %s (%08x)\n", nvdev_info(device, "NVIDIA %s (%08x)\n",
device->chip->name, boot0); device->chip->name, boot0);
......
...@@ -176,6 +176,7 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size) ...@@ -176,6 +176,7 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size)
case GP100: args->v0.family = NV_DEVICE_INFO_V0_PASCAL; break; case GP100: args->v0.family = NV_DEVICE_INFO_V0_PASCAL; break;
case GV100: args->v0.family = NV_DEVICE_INFO_V0_VOLTA; break; case GV100: args->v0.family = NV_DEVICE_INFO_V0_VOLTA; break;
case TU100: args->v0.family = NV_DEVICE_INFO_V0_TURING; break; case TU100: args->v0.family = NV_DEVICE_INFO_V0_TURING; break;
case GA100: args->v0.family = NV_DEVICE_INFO_V0_AMPERE; break;
default: default:
args->v0.family = 0; args->v0.family = 0;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment