1ebb58dc2SBen Skeggs /* 2ebb58dc2SBen Skeggs * Copyright 2013 Red Hat Inc. 3ebb58dc2SBen Skeggs * 4ebb58dc2SBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 5ebb58dc2SBen Skeggs * copy of this software and associated documentation files (the "Software"), 6ebb58dc2SBen Skeggs * to deal in the Software without restriction, including without limitation 7ebb58dc2SBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8ebb58dc2SBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 9ebb58dc2SBen Skeggs * Software is furnished to do so, subject to the following conditions: 10ebb58dc2SBen Skeggs * 11ebb58dc2SBen Skeggs * The above copyright notice and this permission notice shall be included in 12ebb58dc2SBen Skeggs * all copies or substantial portions of the Software. 13ebb58dc2SBen Skeggs * 14ebb58dc2SBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15ebb58dc2SBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16ebb58dc2SBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17ebb58dc2SBen Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18ebb58dc2SBen Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19ebb58dc2SBen Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20ebb58dc2SBen Skeggs * OTHER DEALINGS IN THE SOFTWARE. 21ebb58dc2SBen Skeggs * 22ebb58dc2SBen Skeggs * Authors: Ben Skeggs 23ebb58dc2SBen Skeggs */ 24ebb58dc2SBen Skeggs 25ebb58dc2SBen Skeggs #include "priv.h" 26ebb58dc2SBen Skeggs 27ebb58dc2SBen Skeggs #define nvd0_pmu_code gk104_pmu_code 28ebb58dc2SBen Skeggs #define nvd0_pmu_data gk104_pmu_data 29ebb58dc2SBen Skeggs #include "fuc/nvd0.fuc4.h" 30ebb58dc2SBen Skeggs 31ebb58dc2SBen Skeggs static void 32ebb58dc2SBen Skeggs gk104_pmu_pgob(struct nouveau_pmu *pmu, bool enable) 33ebb58dc2SBen Skeggs { 34ebb58dc2SBen Skeggs nv_mask(pmu, 0x000200, 0x00001000, 0x00000000); 35ebb58dc2SBen Skeggs nv_rd32(pmu, 0x000200); 36ebb58dc2SBen Skeggs nv_mask(pmu, 0x000200, 0x08000000, 0x08000000); 37ebb58dc2SBen Skeggs msleep(50); 38ebb58dc2SBen Skeggs 39ebb58dc2SBen Skeggs nv_mask(pmu, 0x10a78c, 0x00000002, 0x00000002); 40ebb58dc2SBen Skeggs nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000001); 41ebb58dc2SBen Skeggs nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000000); 42ebb58dc2SBen Skeggs 43ebb58dc2SBen Skeggs nv_mask(pmu, 0x020004, 0xc0000000, enable ? 0xc0000000 : 0x40000000); 44ebb58dc2SBen Skeggs msleep(50); 45ebb58dc2SBen Skeggs 46ebb58dc2SBen Skeggs nv_mask(pmu, 0x10a78c, 0x00000002, 0x00000000); 47ebb58dc2SBen Skeggs nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000001); 48ebb58dc2SBen Skeggs nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000000); 49ebb58dc2SBen Skeggs 50ebb58dc2SBen Skeggs nv_mask(pmu, 0x000200, 0x08000000, 0x00000000); 51ebb58dc2SBen Skeggs nv_mask(pmu, 0x000200, 0x00001000, 0x00001000); 52ebb58dc2SBen Skeggs nv_rd32(pmu, 0x000200); 53ebb58dc2SBen Skeggs } 54ebb58dc2SBen Skeggs 55ebb58dc2SBen Skeggs struct nouveau_oclass * 56ebb58dc2SBen Skeggs gk104_pmu_oclass = &(struct nvkm_pmu_impl) { 57ebb58dc2SBen Skeggs .base.handle = NV_SUBDEV(PMU, 0xe4), 58ebb58dc2SBen Skeggs .base.ofuncs = &(struct nouveau_ofuncs) { 59ebb58dc2SBen Skeggs .ctor = _nouveau_pmu_ctor, 60ebb58dc2SBen Skeggs .dtor = _nouveau_pmu_dtor, 61ebb58dc2SBen Skeggs .init = _nouveau_pmu_init, 62ebb58dc2SBen Skeggs .fini = _nouveau_pmu_fini, 63ebb58dc2SBen Skeggs }, 64ebb58dc2SBen Skeggs .code.data = gk104_pmu_code, 65ebb58dc2SBen Skeggs .code.size = sizeof(gk104_pmu_code), 66ebb58dc2SBen Skeggs .data.data = gk104_pmu_data, 67ebb58dc2SBen Skeggs .data.size = sizeof(gk104_pmu_data), 68ebb58dc2SBen Skeggs .pgob = gk104_pmu_pgob, 69ebb58dc2SBen Skeggs }.base; 70