These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / nvkm / subdev / devinit / gf100.c
index c61102f..22b0140 100644 (file)
 #include <subdev/clk/pll.h>
 
 int
-gf100_devinit_pll_set(struct nvkm_devinit *devinit, u32 type, u32 freq)
+gf100_devinit_pll_set(struct nvkm_devinit *init, u32 type, u32 freq)
 {
-       struct nv50_devinit_priv *priv = (void *)devinit;
-       struct nvkm_bios *bios = nvkm_bios(priv);
+       struct nvkm_subdev *subdev = &init->subdev;
+       struct nvkm_device *device = subdev->device;
        struct nvbios_pll info;
        int N, fN, M, P;
        int ret;
 
-       ret = nvbios_pll_parse(bios, type, &info);
+       ret = nvbios_pll_parse(device->bios, type, &info);
        if (ret)
                return ret;
 
-       ret = gt215_pll_calc(nv_subdev(devinit), &info, freq, &N, &fN, &M, &P);
+       ret = gt215_pll_calc(subdev, &info, freq, &N, &fN, &M, &P);
        if (ret < 0)
                return ret;
 
@@ -50,12 +50,12 @@ gf100_devinit_pll_set(struct nvkm_devinit *devinit, u32 type, u32 freq)
        case PLL_VPLL1:
        case PLL_VPLL2:
        case PLL_VPLL3:
-               nv_mask(priv, info.reg + 0x0c, 0x00000000, 0x00000100);
-               nv_wr32(priv, info.reg + 0x04, (P << 16) | (N << 8) | M);
-               nv_wr32(priv, info.reg + 0x10, fN << 16);
+               nvkm_mask(device, info.reg + 0x0c, 0x00000000, 0x00000100);
+               nvkm_wr32(device, info.reg + 0x04, (P << 16) | (N << 8) | M);
+               nvkm_wr32(device, info.reg + 0x10, fN << 16);
                break;
        default:
-               nv_warn(priv, "0x%08x/%dKhz unimplemented\n", type, freq);
+               nvkm_warn(subdev, "%08x/%dKhz unimplemented\n", type, freq);
                ret = -EINVAL;
                break;
        }
@@ -64,64 +64,44 @@ gf100_devinit_pll_set(struct nvkm_devinit *devinit, u32 type, u32 freq)
 }
 
 static u64
-gf100_devinit_disable(struct nvkm_devinit *devinit)
+gf100_devinit_disable(struct nvkm_devinit *init)
 {
-       struct nv50_devinit_priv *priv = (void *)devinit;
-       u32 r022500 = nv_rd32(priv, 0x022500);
+       struct nvkm_device *device = init->subdev.device;
+       u32 r022500 = nvkm_rd32(device, 0x022500);
        u64 disable = 0ULL;
 
        if (r022500 & 0x00000001)
-               disable |= (1ULL << NVDEV_ENGINE_DISP);
+               disable |= (1ULL << NVKM_ENGINE_DISP);
 
        if (r022500 & 0x00000002) {
-               disable |= (1ULL << NVDEV_ENGINE_MSPDEC);
-               disable |= (1ULL << NVDEV_ENGINE_MSPPP);
+               disable |= (1ULL << NVKM_ENGINE_MSPDEC);
+               disable |= (1ULL << NVKM_ENGINE_MSPPP);
        }
 
        if (r022500 & 0x00000004)
-               disable |= (1ULL << NVDEV_ENGINE_MSVLD);
+               disable |= (1ULL << NVKM_ENGINE_MSVLD);
        if (r022500 & 0x00000008)
-               disable |= (1ULL << NVDEV_ENGINE_MSENC);
+               disable |= (1ULL << NVKM_ENGINE_MSENC);
        if (r022500 & 0x00000100)
-               disable |= (1ULL << NVDEV_ENGINE_CE0);
+               disable |= (1ULL << NVKM_ENGINE_CE0);
        if (r022500 & 0x00000200)
-               disable |= (1ULL << NVDEV_ENGINE_CE1);
+               disable |= (1ULL << NVKM_ENGINE_CE1);
 
        return disable;
 }
 
+static const struct nvkm_devinit_func
+gf100_devinit = {
+       .preinit = nv50_devinit_preinit,
+       .init = nv50_devinit_init,
+       .post = nv04_devinit_post,
+       .pll_set = gf100_devinit_pll_set,
+       .disable = gf100_devinit_disable,
+};
+
 int
-gf100_devinit_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
-                  struct nvkm_oclass *oclass, void *data, u32 size,
-                  struct nvkm_object **pobject)
+gf100_devinit_new(struct nvkm_device *device, int index,
+               struct nvkm_devinit **pinit)
 {
-       struct nvkm_devinit_impl *impl = (void *)oclass;
-       struct nv50_devinit_priv *priv;
-       u64 disable;
-       int ret;
-
-       ret = nvkm_devinit_create(parent, engine, oclass, &priv);
-       *pobject = nv_object(priv);
-       if (ret)
-               return ret;
-
-       disable = impl->disable(&priv->base);
-       if (disable & (1ULL << NVDEV_ENGINE_DISP))
-               priv->base.post = true;
-
-       return 0;
+       return nv50_devinit_new_(&gf100_devinit, device, index, pinit);
 }
-
-struct nvkm_oclass *
-gf100_devinit_oclass = &(struct nvkm_devinit_impl) {
-       .base.handle = NV_SUBDEV(DEVINIT, 0xc0),
-       .base.ofuncs = &(struct nvkm_ofuncs) {
-               .ctor = gf100_devinit_ctor,
-               .dtor = _nvkm_devinit_dtor,
-               .init = nv50_devinit_init,
-               .fini = _nvkm_devinit_fini,
-       },
-       .pll_set = gf100_devinit_pll_set,
-       .disable = gf100_devinit_disable,
-       .post = nvbios_init,
-}.base;