drm/nouveau/core: allow detected chipset to be overridden
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
a0b694d0af
commit
a2ac09a03d
|
@ -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,
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue