0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include "nv50.h"
0025
0026 #include <subdev/bios.h>
0027 #include <subdev/bios/init.h>
0028
0029 static u64
0030 g98_devinit_disable(struct nvkm_devinit *init)
0031 {
0032 struct nvkm_device *device = init->subdev.device;
0033 u32 r001540 = nvkm_rd32(device, 0x001540);
0034 u32 r00154c = nvkm_rd32(device, 0x00154c);
0035
0036 if (!(r001540 & 0x40000000)) {
0037 nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0);
0038 nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0);
0039 nvkm_subdev_disable(device, NVKM_ENGINE_MSPPP, 0);
0040 }
0041
0042 if (!(r00154c & 0x00000004))
0043 nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0);
0044 if (!(r00154c & 0x00000020))
0045 nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0);
0046 if (!(r00154c & 0x00000040))
0047 nvkm_subdev_disable(device, NVKM_ENGINE_SEC, 0);
0048
0049 return 0ULL;
0050 }
0051
0052 static const struct nvkm_devinit_func
0053 g98_devinit = {
0054 .preinit = nv50_devinit_preinit,
0055 .init = nv50_devinit_init,
0056 .post = nv04_devinit_post,
0057 .pll_set = nv50_devinit_pll_set,
0058 .disable = g98_devinit_disable,
0059 };
0060
0061 int
0062 g98_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
0063 struct nvkm_devinit **pinit)
0064 {
0065 return nv50_devinit_new_(&g98_devinit, device, type, inst, pinit);
0066 }