Commit a2ac09a0 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/core: allow detected chipset to be overridden

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent a0b694d0
...@@ -631,7 +631,8 @@ static int nouveau_drm_probe(struct pci_dev *pdev, ...@@ -631,7 +631,8 @@ static int nouveau_drm_probe(struct pci_dev *pdev,
/* We need to check that the chipset is supported before booting /* We need to check that the chipset is supported before booting
* fbdev off the hardware, as there's no way to put it back. * fbdev off the hardware, as there's no way to put it back.
*/ */
ret = nvkm_device_pci_new(pdev, NULL, "error", true, false, 0, &device); ret = nvkm_device_pci_new(pdev, nouveau_config, "error",
true, false, 0, &device);
if (ret) if (ret)
return ret; return ret;
......
...@@ -2824,8 +2824,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func, ...@@ -2824,8 +2824,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
u64 mmio_base, mmio_size; u64 mmio_base, mmio_size;
u32 boot0, strap; u32 boot0, strap;
void __iomem *map; void __iomem *map;
int ret = -EEXIST; int ret = -EEXIST, i;
int i; unsigned chipset;
mutex_lock(&nv_devices_mutex); mutex_lock(&nv_devices_mutex);
if (nvkm_device_find_locked(handle)) if (nvkm_device_find_locked(handle))
...@@ -2870,6 +2870,26 @@ nvkm_device_ctor(const struct nvkm_device_func *func, ...@@ -2870,6 +2870,26 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
strap = ioread32_native(map + 0x101000); strap = ioread32_native(map + 0x101000);
iounmap(map); iounmap(map);
/* chipset can be overridden for devel/testing purposes */
chipset = nvkm_longopt(device->cfgopt, "NvChipset", 0);
if (chipset) {
u32 override_boot0;
if (chipset >= 0x10) {
override_boot0 = ((chipset & 0x1ff) << 20);
override_boot0 |= 0x000000a1;
} else {
if (chipset != 0x04)
override_boot0 = 0x20104000;
else
override_boot0 = 0x20004000;
}
nvdev_warn(device, "CHIPSET OVERRIDE: %08x -> %08x\n",
boot0, override_boot0);
boot0 = override_boot0;
}
/* determine chipset and derive architecture from it */ /* determine chipset and derive architecture from it */
if ((boot0 & 0x1f000000) > 0) { if ((boot0 & 0x1f000000) > 0) {
device->chipset = (boot0 & 0x1ff00000) >> 20; device->chipset = (boot0 & 0x1ff00000) >> 20;
......
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