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 mcp89_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_MSPPP, 0);
0039 }
0040
0041 if (!(r00154c & 0x00000004))
0042 nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0);
0043 if (!(r00154c & 0x00000020))
0044 nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0);
0045 if (!(r00154c & 0x00000040))
0046 nvkm_subdev_disable(device, NVKM_ENGINE_VIC, 0);
0047 if (!(r00154c & 0x00000200))
0048 nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0);
0049
0050 return 0;
0051 }
0052
0053 static const struct nvkm_devinit_func
0054 mcp89_devinit = {
0055 .preinit = nv50_devinit_preinit,
0056 .init = nv50_devinit_init,
0057 .post = nv04_devinit_post,
0058 .pll_set = gt215_devinit_pll_set,
0059 .disable = mcp89_devinit_disable,
0060 };
0061
0062 int
0063 mcp89_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
0064 struct nvkm_devinit **pinit)
0065 {
0066 return nv50_devinit_new_(&mcp89_devinit, device, type, inst, pinit);
0067 }