195484b57265caa671a57efed06e322d56461774bBen Skeggs/* 295484b57265caa671a57efed06e322d56461774bBen Skeggs * Copyright 2012 Red Hat Inc. 395484b57265caa671a57efed06e322d56461774bBen Skeggs * 495484b57265caa671a57efed06e322d56461774bBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 595484b57265caa671a57efed06e322d56461774bBen Skeggs * copy of this software and associated documentation files (the "Software"), 695484b57265caa671a57efed06e322d56461774bBen Skeggs * to deal in the Software without restriction, including without limitation 795484b57265caa671a57efed06e322d56461774bBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 895484b57265caa671a57efed06e322d56461774bBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 995484b57265caa671a57efed06e322d56461774bBen Skeggs * Software is furnished to do so, subject to the following conditions: 1095484b57265caa671a57efed06e322d56461774bBen Skeggs * 1195484b57265caa671a57efed06e322d56461774bBen Skeggs * The above copyright notice and this permission notice shall be included in 1295484b57265caa671a57efed06e322d56461774bBen Skeggs * all copies or substantial portions of the Software. 1395484b57265caa671a57efed06e322d56461774bBen Skeggs * 1495484b57265caa671a57efed06e322d56461774bBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1595484b57265caa671a57efed06e322d56461774bBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1695484b57265caa671a57efed06e322d56461774bBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1795484b57265caa671a57efed06e322d56461774bBen Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 1895484b57265caa671a57efed06e322d56461774bBen Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 1995484b57265caa671a57efed06e322d56461774bBen Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2095484b57265caa671a57efed06e322d56461774bBen Skeggs * OTHER DEALINGS IN THE SOFTWARE. 2195484b57265caa671a57efed06e322d56461774bBen Skeggs * 2295484b57265caa671a57efed06e322d56461774bBen Skeggs * Authors: Ben Skeggs 2395484b57265caa671a57efed06e322d56461774bBen Skeggs */ 2495484b57265caa671a57efed06e322d56461774bBen Skeggs 2595484b57265caa671a57efed06e322d56461774bBen Skeggs#include "priv.h" 2695484b57265caa671a57efed06e322d56461774bBen Skeggs 2795484b57265caa671a57efed06e322d56461774bBen Skeggsstatic int 2895484b57265caa671a57efed06e322d56461774bBen Skeggsgk104_ltc_init(struct nouveau_object *object) 2995484b57265caa671a57efed06e322d56461774bBen Skeggs{ 3095484b57265caa671a57efed06e322d56461774bBen Skeggs struct nvkm_ltc_priv *priv = (void *)object; 31fe3d9c4b87bb98222a502cc585844a0b950786fbBen Skeggs u32 lpg128 = !(nv_rd32(priv, 0x100c80) & 0x00000001); 3295484b57265caa671a57efed06e322d56461774bBen Skeggs int ret; 3395484b57265caa671a57efed06e322d56461774bBen Skeggs 3495484b57265caa671a57efed06e322d56461774bBen Skeggs ret = nvkm_ltc_init(priv); 3595484b57265caa671a57efed06e322d56461774bBen Skeggs if (ret) 3695484b57265caa671a57efed06e322d56461774bBen Skeggs return ret; 3795484b57265caa671a57efed06e322d56461774bBen Skeggs 3895484b57265caa671a57efed06e322d56461774bBen Skeggs nv_wr32(priv, 0x17e8d8, priv->ltc_nr); 3995484b57265caa671a57efed06e322d56461774bBen Skeggs nv_wr32(priv, 0x17e000, priv->ltc_nr); 4095484b57265caa671a57efed06e322d56461774bBen Skeggs nv_wr32(priv, 0x17e8d4, priv->tag_base); 41fe3d9c4b87bb98222a502cc585844a0b950786fbBen Skeggs nv_mask(priv, 0x17e8c0, 0x00000002, lpg128 ? 0x00000002 : 0x00000000); 4295484b57265caa671a57efed06e322d56461774bBen Skeggs return 0; 4395484b57265caa671a57efed06e322d56461774bBen Skeggs} 4495484b57265caa671a57efed06e322d56461774bBen Skeggs 4595484b57265caa671a57efed06e322d56461774bBen Skeggsstruct nouveau_oclass * 4695484b57265caa671a57efed06e322d56461774bBen Skeggsgk104_ltc_oclass = &(struct nvkm_ltc_impl) { 4795484b57265caa671a57efed06e322d56461774bBen Skeggs .base.handle = NV_SUBDEV(LTC, 0xe4), 4895484b57265caa671a57efed06e322d56461774bBen Skeggs .base.ofuncs = &(struct nouveau_ofuncs) { 4995484b57265caa671a57efed06e322d56461774bBen Skeggs .ctor = gf100_ltc_ctor, 5095484b57265caa671a57efed06e322d56461774bBen Skeggs .dtor = gf100_ltc_dtor, 5195484b57265caa671a57efed06e322d56461774bBen Skeggs .init = gk104_ltc_init, 5295484b57265caa671a57efed06e322d56461774bBen Skeggs .fini = _nvkm_ltc_fini, 5395484b57265caa671a57efed06e322d56461774bBen Skeggs }, 5495484b57265caa671a57efed06e322d56461774bBen Skeggs .intr = gf100_ltc_intr, 5595484b57265caa671a57efed06e322d56461774bBen Skeggs .cbc_clear = gf100_ltc_cbc_clear, 5695484b57265caa671a57efed06e322d56461774bBen Skeggs .cbc_wait = gf100_ltc_cbc_wait, 57f38fdb6a376ead4ce8c6c1c75f71cc35b9e40bfcBen Skeggs .zbc = 16, 58f38fdb6a376ead4ce8c6c1c75f71cc35b9e40bfcBen Skeggs .zbc_clear_color = gf100_ltc_zbc_clear_color, 59f38fdb6a376ead4ce8c6c1c75f71cc35b9e40bfcBen Skeggs .zbc_clear_depth = gf100_ltc_zbc_clear_depth, 6095484b57265caa671a57efed06e322d56461774bBen Skeggs}.base; 61