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 g84_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 u64 disable = 0ULL;
0036
0037 if (!(r001540 & 0x40000000)) {
0038 nvkm_subdev_disable(device, NVKM_ENGINE_MPEG, 0);
0039 nvkm_subdev_disable(device, NVKM_ENGINE_VP, 0);
0040 nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0);
0041 nvkm_subdev_disable(device, NVKM_ENGINE_CIPHER, 0);
0042 }
0043
0044 if (!(r00154c & 0x00000004))
0045 nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0);
0046 if (!(r00154c & 0x00000020))
0047 nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0);
0048 if (!(r00154c & 0x00000040))
0049 nvkm_subdev_disable(device, NVKM_ENGINE_CIPHER, 0);
0050
0051 return disable;
0052 }
0053
0054 static const struct nvkm_devinit_func
0055 g84_devinit = {
0056 .preinit = nv50_devinit_preinit,
0057 .init = nv50_devinit_init,
0058 .post = nv04_devinit_post,
0059 .pll_set = nv50_devinit_pll_set,
0060 .disable = g84_devinit_disable,
0061 };
0062
0063 int
0064 g84_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
0065 struct nvkm_devinit **pinit)
0066 {
0067 return nv50_devinit_new_(&g84_devinit, device, type, inst, pinit);
0068 }