Samuel Pitoiset
2015-Jun-14 11:50 UTC
[Nouveau] [PATCH 1/2] pm: fix signals/sources for GT200+
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com> --- This patch should be squashed with "pm/nv50: add compute and graphics signals/sources". drm/nouveau/nvkm/engine/pm/gt200.c | 8 ++++---- drm/nouveau/nvkm/engine/pm/gt215.c | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/drm/nouveau/nvkm/engine/pm/gt200.c b/drm/nouveau/nvkm/engine/pm/gt200.c index 220a027..e92f9c7 100644 --- a/drm/nouveau/nvkm/engine/pm/gt200.c +++ b/drm/nouveau/nvkm/engine/pm/gt200.c @@ -26,7 +26,7 @@ const struct nvkm_specsrc gt200_crop_sources[] = { { 0x407008, (const struct nvkm_specmux[]) { - { 0x7, 0, "sel0", true }, + { 0xf, 0, "sel0", true }, { 0x1f, 16, "sel1", true }, {} }, "pgraph_rop0_crop_pm_mux" }, @@ -45,7 +45,7 @@ gt200_prop_sources[] = { const struct nvkm_specsrc gt200_tex_sources[] = { { 0x408508, (const struct nvkm_specmux[]) { - { 0x3fff, 0, "unk0" }, + { 0xfffff, 0, "unk0" }, {} }, "pgraph_tpc0_tex_unk08" }, {} @@ -94,7 +94,7 @@ gt200_pm[] = { { 0x5d, "pc01_vfetch_17", g84_vfetch_sources }, { 0x5e, "pc01_vfetch_18", g84_vfetch_sources }, { 0x5f, "pc01_vfetch_19", g84_vfetch_sources }, - { 0x07, "pc01_zcull_00", nv50_zcull_sources }, + { 0x07, "pc01_zcull_00", nv50_zcull_sources }, { 0x08, "pc01_zcull_01", nv50_zcull_sources }, { 0x09, "pc01_zcull_02", nv50_zcull_sources }, { 0x0a, "pc01_zcull_03", nv50_zcull_sources }, @@ -105,7 +105,7 @@ gt200_pm[] = { { 0xec, "pc01_trailer" }, {} }, &nv40_perfctr_func }, - { 0xe0, (const struct nvkm_specsig[]) { + { 0xf0, (const struct nvkm_specsig[]) { { 0x55, "pc02_crop_00", gt200_crop_sources }, { 0x56, "pc02_crop_01", gt200_crop_sources }, { 0x57, "pc02_crop_02", gt200_crop_sources }, diff --git a/drm/nouveau/nvkm/engine/pm/gt215.c b/drm/nouveau/nvkm/engine/pm/gt215.c index b5542dc..f5eae63 100644 --- a/drm/nouveau/nvkm/engine/pm/gt215.c +++ b/drm/nouveau/nvkm/engine/pm/gt215.c @@ -23,10 +23,9 @@ */ #include "nv40.h" -// TODO: check for GT200 static const struct nvkm_specsrc gt215_zcull_sources[] = { - { 0x4002ca4, (const struct nvkm_specmux[]) { + { 0x402ca4, (const struct nvkm_specmux[]) { { 0x7fff, 0, "unk0" }, { 0xff, 24, "unk24" }, {} -- 2.4.2
Samuel Pitoiset
2015-Jun-14 11:50 UTC
[Nouveau] [PATCH 2/2] pm: some fixes related to sources
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com> --- This patch should be squashed with "pm: allow the userspace to configure sources". drm/nouveau/nvkm/engine/pm/base.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drm/nouveau/nvkm/engine/pm/base.c b/drm/nouveau/nvkm/engine/pm/base.c index f505a11..7866e22 100644 --- a/drm/nouveau/nvkm/engine/pm/base.c +++ b/drm/nouveau/nvkm/engine/pm/base.c @@ -154,6 +154,8 @@ nvkm_perfsrc_enable(struct nvkm_pm *ppm, struct nvkm_perfctr *ctr) /* enable the source */ nv_mask(ppm, src->addr, mask, value); + nv_debug(ppm, "enabled source 0x%08x 0x%08x 0x%08x\n", + src->addr, mask, value); } } return 0; @@ -165,6 +167,7 @@ nvkm_perfsrc_disable(struct nvkm_pm *ppm, struct nvkm_perfctr *ctr) struct nvkm_perfdom *dom = NULL; struct nvkm_perfsig *sig; struct nvkm_perfsrc *src; + u32 mask; int i, j; for (i = 0; i < 4 && ctr->signal[i]; i++) { @@ -178,8 +181,16 @@ nvkm_perfsrc_disable(struct nvkm_pm *ppm, struct nvkm_perfctr *ctr) if (!src) return -EINVAL; + /* unset enable bit if needed */ + mask = 0x00000000; + if (src->enable) + mask = 0x80000000; + mask |= (src->mask << src->shift); + /* disable the source */ - nv_mask(ppm, src->addr, src->mask << src->shift, 0); + nv_mask(ppm, src->addr, mask, 0); + nv_debug(ppm, "disabled source 0x%08x 0x%08x\n", + src->addr, mask); } } return 0; @@ -309,7 +320,7 @@ nvkm_perfdom_dtor(struct nvkm_object *object) } static int -nvkm_perfctr_new(struct nvkm_perfdom *dom, int slot, +nvkm_perfctr_new(struct nvkm_perfdom *dom, int slot, uint8_t domain, struct nvkm_perfsig *signal[4], uint64_t source[4][8], uint16_t logic_op, struct nvkm_perfctr **pctr) { @@ -323,6 +334,7 @@ nvkm_perfctr_new(struct nvkm_perfdom *dom, int slot, if (!ctr) return -ENOMEM; + ctr->domain = domain; ctr->logic_op = logic_op; ctr->slot = slot; for (i = 0; i < 4; i++) { @@ -361,7 +373,7 @@ nvkm_perfdom_ctor(struct nvkm_object *parent, struct nvkm_object *engine, for (c = 0; c < ARRAY_SIZE(args->v0.ctr); c++) { struct nvkm_perfsig *sig[4] = {}; - u64 src[4][8]; + u64 src[4][8] = {}; for (s = 0; s < ARRAY_SIZE(args->v0.ctr[c].signal); s++) { sig[s] = nvkm_perfsig_find(ppm, args->v0.domain, @@ -378,11 +390,10 @@ nvkm_perfdom_ctor(struct nvkm_object *parent, struct nvkm_object *engine, } } - ret = nvkm_perfctr_new(sdom, c, sig, src, + ret = nvkm_perfctr_new(sdom, c, args->v0.domain, sig, src, args->v0.ctr[c].logic_op, &ctr[c]); if (ret) return ret; - ctr[c]->domain = args->v0.domain; } if (!sdom) -- 2.4.2