nv170_chipset = {
.name = "GA100",
.bar = { 0x00000001, tu102_bar_new },
- .bios = { 0x00000001, nvkm_bios_new },
.devinit = { 0x00000001, ga100_devinit_new },
.fault = { 0x00000001, tu102_fault_new },
.fb = { 0x00000001, ga100_fb_new },
.vfn = { 0x00000001, ga100_vfn_new },
.ce = { 0x000003ff, ga100_ce_new },
.fifo = { 0x00000001, ga100_fifo_new },
+ .sec2 = { 0x00000001, tu102_sec2_new },
};
static const struct nvkm_device_chip
case 0x166: device->chip = &nv166_chipset; break;
case 0x167: device->chip = &nv167_chipset; break;
case 0x168: device->chip = &nv168_chipset; break;
+ case 0x170: device->chip = &nv170_chipset; break;
case 0x172: device->chip = &nv172_chipset; break;
case 0x173: device->chip = &nv173_chipset; break;
case 0x174: device->chip = &nv174_chipset; break;
case 0x1b6: device->chip = &nv1b6_chipset; break;
case 0x1b7: device->chip = &nv1b7_chipset; break;
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);
ret = -ENODEV;
static const struct nvkm_gsp_func
ga100_gsp = {
.flcn = &ga100_gsp_flcn,
- .fwsec = &tu102_gsp_fwsec,
.sig_section = ".fwsignature_ga100",
.booter.ctor = tu102_gsp_booter_ctor,
- .fwsec_sb.ctor = tu102_gsp_fwsec_sb_ctor,
- .fwsec_sb.dtor = tu102_gsp_fwsec_sb_dtor,
-
.dtor = r535_gsp_dtor,
.oneinit = tu102_gsp_oneinit,
.init = tu102_gsp_init,
if (ret)
return ret;
- /* Calculate FB layout. */
- gsp->fb.wpr2.frts.size = 0x100000;
+ /*
+ * Calculate FB layout. FRTS is a memory region created by the FWSEC-FRTS firmware.
+ * FWSEC comes from VBIOS. So on systems with no VBIOS (e.g. GA100), the FRTS does
+ * not exist. Therefore, use the existence of VBIOS to determine whether to reserve
+ * an FRTS region.
+ */
+ gsp->fb.wpr2.frts.size = device->bios ? 0x100000 : 0;
gsp->fb.wpr2.frts.addr = ALIGN_DOWN(gsp->fb.bios.addr, 0x20000) - gsp->fb.wpr2.frts.size;
gsp->fb.wpr2.boot.size = gsp->boot.fw.size;
if (ret)
return ret;
- ret = nvkm_gsp_fwsec_frts(gsp);
- if (WARN_ON(ret))
- return ret;
+ /* Only boot FWSEC-FRTS if it actually exists */
+ if (gsp->fb.wpr2.frts.size) {
+ ret = nvkm_gsp_fwsec_frts(gsp);
+ if (WARN_ON(ret))
+ return ret;
+ }
/* Reset GSP into RISC-V mode. */
ret = gsp->func->reset(gsp);