these are usually used for dynamic reclocking on gt215 and newer The counters are used to get the load of the core, memory, video and pcie loads currently I expose the loads through a debugfs "current_load" file, but I want to move that to nvif and just add a wrapper around that in debugfs for convenience. Using nvif would have the advantage, that userspace tools can easily get loads without requiring root access. Karol Herbst (4): subdev/pmu/fuc: add gk104 pmu/fuc: add macros for pdaemon pwr counters subdev/pmu/fuc: implement counter readout nouveau/debugfs: add interface for current load drm/nouveau/include/nvif/device.h | 1 + drm/nouveau/include/nvkm/subdev/pmu.h | 10 + drm/nouveau/nouveau_debugfs.c | 23 + drm/nouveau/nvkm/subdev/pmu/base.c | 18 + drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 411 +++--- drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 745 +++++----- drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 | 70 + drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 1866 ++++++++++++++++++++++++++ drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 725 ++++++---- drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 732 ++++++---- drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 25 + drm/nouveau/nvkm/subdev/pmu/fuc/os.h | 10 + drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc | 156 +++ drm/nouveau/nvkm/subdev/pmu/gk104.c | 4 +- drm/nouveau/nvkm/subdev/pmu/gk110.c | 6 +- 15 files changed, 3699 insertions(+), 1103 deletions(-) create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h -- 2.7.1
we need this, because since kepler there is PCOPY2 and this is needed for the counters later in this series NOTE: gk104.fuc4 is just a copy or gf119.fuc4, so the copyright stays the same Signed-off-by: Karol Herbst <nouveau at karolherbst.de> Reviewed-by: Martin Peres <martin.peres at free.fr> --- drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 | 70 + drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 1793 ++++++++++++++++++++++++++ drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 1 + drm/nouveau/nvkm/subdev/pmu/gk104.c | 4 +- drm/nouveau/nvkm/subdev/pmu/gk110.c | 6 +- 5 files changed, 1868 insertions(+), 6 deletions(-) create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 new file mode 100644 index 0000000..01e37ce --- /dev/null +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 @@ -0,0 +1,70 @@ +/* + * Copyright 2013 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Ben Skeggs + */ + +#define NVKM_PPWR_CHIPSET GK104 +#define HW_TICKS_PER_US 324 + +//#define NVKM_FALCON_PC24 +#define NVKM_FALCON_UNSHIFTED_IO +//#define NVKM_FALCON_MMIO_UAS +//#define NVKM_FALCON_MMIO_TRAP + +#include "macros.fuc" + +.section #gk104_pmu_data +#define INCLUDE_PROC +#include "kernel.fuc" +#include "arith.fuc" +#include "host.fuc" +#include "memx.fuc" +#include "perf.fuc" +#include "i2c_.fuc" +#include "test.fuc" +#include "idle.fuc" +#undef INCLUDE_PROC + +#define INCLUDE_DATA +#include "kernel.fuc" +#include "arith.fuc" +#include "host.fuc" +#include "memx.fuc" +#include "perf.fuc" +#include "i2c_.fuc" +#include "test.fuc" +#include "idle.fuc" +#undef INCLUDE_DATA +.align 256 + +.section #gk104_pmu_code +#define INCLUDE_CODE +#include "kernel.fuc" +#include "arith.fuc" +#include "host.fuc" +#include "memx.fuc" +#include "perf.fuc" +#include "i2c_.fuc" +#include "test.fuc" +#include "idle.fuc" +#undef INCLUDE_CODE +.align 256 diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h new file mode 100644 index 0000000..61893b1 --- /dev/null +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h @@ -0,0 +1,1793 @@ +uint32_t gk104_pmu_data[] = { +/* 0x0000: proc_kern */ + 0x52544e49, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +/* 0x0058: proc_list_head */ + 0x54534f48, + 0x00000492, + 0x0000043b, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x584d454d, + 0x00000680, + 0x00000672, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x46524550, + 0x00000684, + 0x00000682, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x5f433249, + 0x00000a9f, + 0x00000942, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x54534554, + 0x00000ac2, + 0x00000aa1, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x454c4449, + 0x00000ace, + 0x00000acc, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +/* 0x0268: proc_list_tail */ +/* 0x0268: time_prev */ + 0x00000000, +/* 0x026c: time_next */ + 0x00000000, +/* 0x0270: fifo_queue */ + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +/* 0x02f0: rfifo_queue */ + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +/* 0x0370: memx_func_head */ + 0x00000001, + 0x00000000, + 0x000004c8, +/* 0x037c: memx_func_next */ + 0x00000002, + 0x00000000, + 0x00000549, + 0x00000003, + 0x00000002, + 0x000005cd, + 0x00040004, + 0x00000000, + 0x000005e9, + 0x00010005, + 0x00000000, + 0x00000603, + 0x00010006, + 0x00000000, + 0x000005c8, + 0x00000007, + 0x00000000, + 0x0000060e, +/* 0x03c4: memx_func_tail */ +/* 0x03c4: memx_ts_start */ + 0x00000000, +/* 0x03c8: memx_ts_end */ + 0x00000000, +/* 0x03cc: memx_data_head */ + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +/* 0x0bcc: memx_data_tail */ +/* 0x0bcc: memx_train_head */ + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +/* 0x0ccc: memx_train_tail */ +/* 0x0ccc: i2c_scl_map */ + 0x00000400, + 0x00000800, + 0x00001000, + 0x00002000, + 0x00004000, + 0x00008000, + 0x00010000, + 0x00020000, + 0x00040000, + 0x00080000, +/* 0x0cf4: i2c_sda_map */ + 0x00100000, + 0x00200000, + 0x00400000, + 0x00800000, + 0x01000000, + 0x02000000, + 0x04000000, + 0x08000000, + 0x10000000, + 0x20000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +}; + +uint32_t gk104_pmu_code[] = { + 0x03420ef5, +/* 0x0004: rd32 */ + 0x07a007f1, + 0xbd000ed0, + 0x01d7f004, + 0xf101d3f0, + 0xd007ac07, + 0x04bd000d, +/* 0x001c: rd32_wait */ + 0x07acd7f1, + 0xf100ddcf, + 0xf47000d4, + 0xd7f1f51b, + 0xddcf07a4, +/* 0x0033: wr32 */ + 0xf100f800, + 0xd007a007, + 0x04bd000e, + 0x07a407f1, + 0xbd000dd0, + 0x02d7f004, + 0xf0f0d5f0, + 0x07f101d3, + 0x0dd007ac, +/* 0x0057: wr32_wait */ + 0xf104bd00, + 0xcf07acd7, + 0xd4f100dd, + 0x1bf47000, +/* 0x0067: nsec */ + 0xf900f8f5, + 0xf080f990, + 0x88cf2c87, +/* 0x0071: nsec_loop */ + 0x2c97f000, + 0xbb0099cf, + 0x9eb80298, + 0xf41ef406, + 0x90fc80fc, +/* 0x0086: wait */ + 0x90f900f8, + 0x87f080f9, + 0x0088cf2c, +/* 0x0090: wait_loop */ + 0xf402eeb9, + 0xdab90421, + 0x04adfd02, + 0xf406acb8, + 0x97f0120b, + 0x0099cf2c, + 0xb80298bb, + 0x1ef4069b, +/* 0x00b1: wait_done */ + 0xfc80fce2, +/* 0x00b7: intr_watchdog */ + 0x9800f890, + 0x96b003e9, + 0x2a0bf400, + 0xbb9a0a98, + 0x1cf4029a, + 0x01d7f00f, + 0x028121f5, + 0x0ef494bd, +/* 0x00d5: intr_watchdog_next_time */ + 0x9b0a9815, + 0xf400a6b0, + 0x9ab8090b, + 0x061cf406, +/* 0x00e4: intr_watchdog_next_time_set */ +/* 0x00e7: intr_watchdog_next_proc */ + 0x809b0980, + 0xe0b603e9, + 0x68e6b158, + 0xc61bf402, +/* 0x00f6: intr */ + 0x00f900f8, + 0x80f904bd, + 0xa0f990f9, + 0xc0f9b0f9, + 0xe0f9d0f9, + 0xf7f0f0f9, + 0x0188fe00, + 0x87f180f9, + 0x88cf05d0, + 0x0180b600, + 0x05d007f1, + 0xbd0008d0, + 0x0887f004, + 0xc40088cf, + 0x0bf40289, + 0x9b008020, + 0xf458e7f0, + 0x0998b721, + 0x0096b09b, + 0xf00e0bf4, + 0x09d03407, + 0x8004bd00, +/* 0x014e: intr_skip_watchdog */ + 0x89e49a09, + 0x0bf40800, + 0x8897f13c, + 0x0099cf06, + 0xf4029ac4, + 0xc7f1260b, + 0xcccf04c0, + 0xf1c0f900, + 0xf14f48e7, + 0xf05453e3, + 0x21f500d7, + 0xc0fc02e6, + 0x04c007f1, + 0xbd000cd0, +/* 0x0185: intr_subintr_skip_fifo */ + 0x8807f104, + 0x0009d006, +/* 0x018e: intr_skip_subintr */ + 0x97f104bd, + 0x90bd00e0, + 0xf00489fd, + 0x08d00407, + 0xfc04bd00, + 0x0088fe80, + 0xe0fcf0fc, + 0xc0fcd0fc, + 0xa0fcb0fc, + 0x80fc90fc, + 0x32f400fc, +/* 0x01bb: ticks_from_ns */ + 0xf901f800, + 0xf1b0f9c0, + 0xf00144d7, + 0x21f500d3, + 0xccec03a8, + 0xb4b003e8, + 0x120bf400, + 0x03e8eeec, + 0x0144d7f1, + 0xf500d3f0, +/* 0x01e3: ticks_from_ns_quit */ + 0xb903a821, + 0xb0fc02ce, + 0x00f8c0fc, +/* 0x01ec: ticks_from_us */ + 0xb0f9c0f9, + 0x0144d7f1, + 0xf500d3f0, + 0xb903a821, + 0xb4b002ce, + 0x050bf400, +/* 0x0206: ticks_from_us_quit */ + 0xb0fce4bd, + 0x00f8c0fc, +/* 0x020c: ticks_to_us */ + 0x0144d7f1, + 0xff00d3f0, + 0x00f8eced, +/* 0x0218: timer */ + 0x80f990f9, + 0x981032f4, + 0x86b003f8, + 0x531cf400, + 0x07f084bd, + 0x0008d038, + 0x87f004bd, + 0x0088cf34, + 0xbb9a0998, + 0xe9bb0298, + 0x03fe8000, + 0xcf0887f0, + 0x84f00088, + 0x201bf402, + 0xcf3487f0, + 0xe0b80088, + 0x090bf406, + 0xf406e8b8, +/* 0x0262: timer_reset */ + 0x07f00e1c, + 0x000ed034, + 0x0e8004bd, +/* 0x026d: timer_enable */ + 0x0187f09a, + 0xd03807f0, + 0x04bd0008, +/* 0x0278: timer_done */ + 0xfc1031f4, + 0xf890fc80, +/* 0x0281: send_proc */ + 0xf980f900, + 0x05e89890, + 0xf004e998, + 0x89b80486, + 0x2a0bf406, + 0x940398c4, + 0x80b60488, + 0x008ebb18, + 0x8000fa98, + 0x8d80008a, + 0x028c8001, + 0xb6038b80, + 0x94f00190, + 0x04e98007, +/* 0x02bb: send_done */ + 0xfc0231f4, + 0xf880fc90, +/* 0x02c1: find */ + 0xf080f900, + 0x31f45887, +/* 0x02c9: find_loop */ + 0x008a9801, + 0xf406aeb8, + 0x80b6100b, + 0x6886b158, + 0xf01bf402, +/* 0x02df: find_done */ + 0xb90132f4, + 0x80fc028e, +/* 0x02e6: send */ + 0x21f500f8, + 0x01f402c1, +/* 0x02ef: recv */ + 0xf900f897, + 0x9880f990, + 0xe99805e8, + 0x0132f404, + 0xf40689b8, + 0x89c43d0b, + 0x0180b603, + 0x800784f0, + 0xea9805e8, + 0xfef0f902, + 0xf0f9018f, + 0x9402efb9, + 0xe9bb0499, + 0x18e0b600, + 0x9803eb98, + 0xed9802ec, + 0x00ee9801, + 0xf0fca5f9, + 0xf400f8fe, + 0xf0fc0131, +/* 0x033c: recv_done */ + 0x90fc80fc, +/* 0x0342: init */ + 0x17f100f8, + 0x11cf0108, + 0x0911e700, + 0x0814b601, + 0xf10014fe, + 0xf000e017, + 0x07f00013, + 0x0001d01c, + 0x17f004bd, + 0x1407f0ff, + 0xbd0001d0, + 0x0217f004, + 0x080015f1, + 0xd01007f0, + 0x04bd0001, + 0x00f617f1, + 0xfe0013f0, + 0x31f40010, + 0x0117f010, + 0xd03807f0, + 0x04bd0001, +/* 0x0397: init_proc */ + 0x9858f7f0, + 0x16b001f1, + 0xfa0bf400, + 0xf0b615f9, + 0xf20ef458, +/* 0x03a8: mulu32_32_64 */ + 0x20f910f9, + 0x40f930f9, + 0x9510e195, + 0xc4bd10d2, + 0xedffb4bd, + 0x301dffc0, + 0xf10234b9, + 0xb6ffff34, + 0x45b61034, + 0x00c3bb10, + 0xff01b4bb, + 0x34b930e2, + 0xff34f102, + 0x1034b6ff, + 0xbb1045b6, + 0xb4bb00c3, + 0x3012ff01, + 0xfc00b3bb, + 0xfc30fc40, + 0xf810fc20, +/* 0x03f9: host_send */ + 0xb017f100, + 0x0011cf04, + 0x04a027f1, + 0xb80022cf, + 0x0bf40612, + 0x071ec42f, + 0xb704ee94, + 0x980270e0, + 0xec9803eb, + 0x01ed9802, + 0xf500ee98, + 0xb602e621, + 0x1ec40110, + 0xb007f10f, + 0x000ed004, + 0x0ef404bd, +/* 0x0439: host_send_done */ +/* 0x043b: host_recv */ + 0xf100f8c3, + 0xf14e4917, + 0xb8525413, + 0x0bf406e1, +/* 0x0449: host_recv_wait */ + 0xcc17f1b3, + 0x0011cf04, + 0x04c827f1, + 0xf00022cf, + 0x12b80816, + 0xec0bf406, + 0xb60723c4, + 0x30b70434, + 0x3b8002f0, + 0x023c8003, + 0x80013d80, + 0x20b6003e, + 0x0f24f001, + 0x04c807f1, + 0xbd0002d0, + 0x4027f004, + 0xd00007f0, + 0x04bd0002, +/* 0x0492: host_init */ + 0x17f100f8, + 0x14b60080, + 0x7015f110, + 0xd007f102, + 0x0001d004, + 0x17f104bd, + 0x14b60080, + 0xf015f110, + 0xdc07f102, + 0x0001d004, + 0x17f004bd, + 0xc407f101, + 0x0001d004, + 0x00f804bd, +/* 0x04c8: memx_func_enter */ + 0x162067f1, + 0xf55d77f1, + 0xffff73f1, + 0xf4026eb9, + 0xd8b90421, + 0x0487fd02, + 0x80f960f9, + 0xe0fcd0fc, + 0xf13321f4, + 0xf1fffe77, + 0xb9ffff73, + 0x21f4026e, + 0x02d8b904, + 0xf90487fd, + 0xfc80f960, + 0xf4e0fcd0, + 0x67f13321, + 0x6eb926f0, + 0x0421f402, + 0xfd02d8b9, + 0x60f90487, + 0xd0fc80f9, + 0x21f4e0fc, + 0x0467f033, + 0x07e007f1, + 0xbd0006d0, +/* 0x0531: memx_func_enter_wait */ + 0xc067f104, + 0x0066cf07, + 0xf40464f0, + 0x67f0f60b, + 0x0066cf2c, + 0xf8f10680, +/* 0x0549: memx_func_leave */ + 0x2c67f000, + 0x800066cf, + 0x67f0f206, + 0xe407f104, + 0x0006d007, +/* 0x055e: memx_func_leave_wait */ + 0x67f104bd, + 0x66cf07c0, + 0x0464f000, + 0xf1f61bf4, + 0xf126f067, + 0xf0000177, + 0x6eb90073, + 0x0421f402, + 0xfd02d8b9, + 0x60f90587, + 0xd0fc80f9, + 0x21f4e0fc, + 0x2067f133, + 0x026eb916, + 0xb90421f4, + 0x87fd02d8, + 0xf960f905, + 0xfcd0fc80, + 0x3321f4e0, + 0x0aa277f1, + 0xb90073f0, + 0x21f4026e, + 0x02d8b904, + 0xf90587fd, + 0xfc80f960, + 0xf4e0fcd0, + 0x00f83321, +/* 0x05c8: memx_func_wait_vblank */ + 0xf80410b6, +/* 0x05cd: memx_func_wr32 */ + 0x00169800, + 0xb6011598, + 0x60f90810, + 0xd0fc50f9, + 0x21f4e0fc, + 0x0242b633, + 0xf8e91bf4, +/* 0x05e9: memx_func_wait */ + 0x2c87f000, + 0x980088cf, + 0x1d98001e, + 0x021c9801, + 0xb6031b98, + 0x21f41010, +/* 0x0603: memx_func_delay */ + 0x9800f886, + 0x10b6001e, + 0x6721f404, +/* 0x060e: memx_func_train */ + 0x00f800f8, +/* 0x0610: memx_exec */ + 0xd0f9e0f9, + 0xb902c1b9, +/* 0x061a: memx_exec_next */ + 0x139802b2, + 0x0410b600, + 0x01f034e7, + 0x01e033e7, + 0xf00132b6, + 0x35980c30, + 0xb855f9de, + 0x1ef40612, + 0xf10b98e4, + 0xbbf20c98, + 0xb7f102cb, + 0xbbcf07c4, + 0xfcd0fc00, + 0xe621f5e0, +/* 0x0653: memx_info */ + 0x7000f802, + 0x0bf401c6, +/* 0x0659: memx_info_data */ + 0xccc7f10e, + 0x00b7f103, + 0x0b0ef408, +/* 0x0664: memx_info_train */ + 0x0bccc7f1, + 0x0100b7f1, +/* 0x066c: memx_info_send */ + 0x02e621f5, +/* 0x0672: memx_recv */ + 0xd6b000f8, + 0x9b0bf401, + 0xf400d6b0, + 0x00f8d80b, +/* 0x0680: memx_init */ +/* 0x0682: perf_recv */ + 0x00f800f8, +/* 0x0684: perf_init */ +/* 0x0686: i2c_drive_scl */ + 0x36b000f8, + 0x0e0bf400, + 0x07e007f1, + 0xbd0001d0, +/* 0x0697: i2c_drive_scl_lo */ + 0xf100f804, + 0xd007e407, + 0x04bd0001, +/* 0x06a2: i2c_drive_sda */ + 0x36b000f8, + 0x0e0bf400, + 0x07e007f1, + 0xbd0002d0, +/* 0x06b3: i2c_drive_sda_lo */ + 0xf100f804, + 0xd007e407, + 0x04bd0002, +/* 0x06be: i2c_sense_scl */ + 0x32f400f8, + 0xc437f101, + 0x0033cf07, + 0xf40431fd, + 0x31f4060b, +/* 0x06d1: i2c_sense_scl_done */ +/* 0x06d3: i2c_sense_sda */ + 0xf400f801, + 0x37f10132, + 0x33cf07c4, + 0x0432fd00, + 0xf4060bf4, +/* 0x06e6: i2c_sense_sda_done */ + 0x00f80131, +/* 0x06e8: i2c_raise_scl */ + 0x47f140f9, + 0x37f00898, + 0x8621f501, +/* 0x06f5: i2c_raise_scl_wait */ + 0xe8e7f106, + 0x6721f403, + 0x06be21f5, + 0xb60901f4, + 0x1bf40142, +/* 0x0709: i2c_raise_scl_done */ + 0xf840fcef, +/* 0x070d: i2c_start */ + 0xbe21f500, + 0x0d11f406, + 0x06d321f5, + 0xf40611f4, +/* 0x071e: i2c_start_rep */ + 0x37f0300e, + 0x8621f500, + 0x0137f006, + 0x06a221f5, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0xe821f550, + 0x0464b606, +/* 0x074b: i2c_start_send */ + 0xf01f11f4, + 0x21f50037, + 0xe7f106a2, + 0x21f41388, + 0x0037f067, + 0x068621f5, + 0x1388e7f1, +/* 0x0767: i2c_start_out */ + 0xf86721f4, +/* 0x0769: i2c_stop */ + 0x0037f000, + 0x068621f5, + 0xf50037f0, + 0xf106a221, + 0xf403e8e7, + 0x37f06721, + 0x8621f501, + 0x88e7f106, + 0x6721f413, + 0xf50137f0, + 0xf106a221, + 0xf41388e7, + 0x00f86721, +/* 0x079c: i2c_bitw */ + 0x06a221f5, + 0x03e8e7f1, + 0xbb6721f4, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x06e821f5, + 0xf40464b6, + 0xe7f11811, + 0x21f41388, + 0x0037f067, + 0x068621f5, + 0x1388e7f1, +/* 0x07db: i2c_bitw_out */ + 0xf86721f4, +/* 0x07dd: i2c_bitr */ + 0x0137f000, + 0x06a221f5, + 0x03e8e7f1, + 0xbb6721f4, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x06e821f5, + 0xf40464b6, + 0x21f51b11, + 0x37f006d3, + 0x8621f500, + 0x88e7f106, + 0x6721f413, + 0xf4013cf0, +/* 0x0822: i2c_bitr_done */ + 0x00f80131, +/* 0x0824: i2c_get_byte */ + 0xf00057f0, +/* 0x082a: i2c_get_byte_next */ + 0x54b60847, + 0x0076bb01, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b607dd, + 0x2b11f404, + 0xb60553fd, + 0x1bf40142, + 0x0137f0d8, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x9c21f550, + 0x0464b607, +/* 0x0874: i2c_get_byte_done */ +/* 0x0876: i2c_put_byte */ + 0x47f000f8, +/* 0x0879: i2c_put_byte_next */ + 0x0142b608, + 0xbb3854ff, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x079c21f5, + 0xf40464b6, + 0x46b03411, + 0xd81bf400, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0xdd21f550, + 0x0464b607, + 0xbb0f11f4, + 0x36b00076, + 0x061bf401, +/* 0x08cf: i2c_put_byte_done */ + 0xf80132f4, +/* 0x08d1: i2c_addr */ + 0x0076bb00, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b6070d, + 0x2911f404, + 0x012ec3e7, + 0xfd0134b6, + 0x76bb0553, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6087621, +/* 0x0916: i2c_addr_done */ + 0x00f80464, +/* 0x0918: i2c_acquire_addr */ + 0xb6f8cec7, + 0xe0b705e4, + 0x00f8d014, +/* 0x0924: i2c_acquire */ + 0x091821f5, + 0xf00421f4, + 0x21f403d9, +/* 0x0933: i2c_release */ + 0xf500f833, + 0xf4091821, + 0xdaf00421, + 0x3321f403, +/* 0x0942: i2c_recv */ + 0x32f400f8, + 0xf8c1c701, + 0xb00214b6, + 0x1ff52816, + 0x13a0013a, + 0x32980cf4, + 0xcc13a000, + 0x0031980c, + 0xf90231f4, + 0xf9e0f9d0, + 0x0067f1d0, + 0x0063f100, + 0x01679210, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x2421f550, + 0x0464b609, + 0xd6b0d0fc, + 0xb31bf500, + 0x0057f000, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0xd121f550, + 0x0464b608, + 0x00d011f5, + 0xbbe0c5c7, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x087621f5, + 0xf50464b6, + 0xf000ad11, + 0x76bb0157, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb608d121, + 0x11f50464, + 0x76bb008a, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6082421, + 0x11f40464, + 0xe05bcb6a, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x6921f550, + 0x0464b607, + 0xbd025bb9, + 0x430ef474, +/* 0x0a48: i2c_recv_not_rd08 */ + 0xf401d6b0, + 0x57f03d1b, + 0xd121f500, + 0x3311f408, + 0xf5e0c5c7, + 0xf4087621, + 0x57f02911, + 0xd121f500, + 0x1f11f408, + 0xf5e0b5c7, + 0xf4087621, + 0x21f51511, + 0x74bd0769, + 0xf408c5c7, + 0x32f4091b, + 0x030ef402, +/* 0x0a88: i2c_recv_not_wr08 */ +/* 0x0a88: i2c_recv_done */ + 0xf5f8cec7, + 0xfc093321, + 0xf4d0fce0, + 0x7cb90a12, + 0xe621f502, +/* 0x0a9d: i2c_recv_exit */ +/* 0x0a9f: i2c_init */ + 0xf800f802, +/* 0x0aa1: test_recv */ + 0xd817f100, + 0x0011cf05, + 0xf10110b6, + 0xd005d807, + 0x04bd0001, + 0xd900e7f1, + 0x134fe3f1, + 0x021821f5, +/* 0x0ac2: test_init */ + 0xe7f100f8, + 0x21f50800, + 0x00f80218, +/* 0x0acc: idle_recv */ +/* 0x0ace: idle */ + 0x31f400f8, + 0xd417f100, + 0x0011cf05, + 0xf10110b6, + 0xd005d407, + 0x04bd0001, +/* 0x0ae4: idle_loop */ + 0xf45817f0, +/* 0x0aea: idle_proc */ +/* 0x0aea: idle_proc_exec */ + 0x10f90232, + 0xf5021eb9, + 0xfc02ef21, + 0x0911f410, + 0xf40231f4, +/* 0x0afe: idle_proc_next */ + 0x10b6ef0e, + 0x061fb858, + 0xf4e61bf4, + 0x28f4dd02, + 0xc10ef400, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +}; diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc index 96fc984..c5ec61f 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc @@ -25,6 +25,7 @@ #define GT215 0xa3 #define GF100 0xc0 #define GF119 0xd9 +#define GK104 0xe4 #define GK208 0x108 #include "os.h" diff --git a/drm/nouveau/nvkm/subdev/pmu/gk104.c b/drm/nouveau/nvkm/subdev/pmu/gk104.c index 86f9f3b..20558aa 100644 --- a/drm/nouveau/nvkm/subdev/pmu/gk104.c +++ b/drm/nouveau/nvkm/subdev/pmu/gk104.c @@ -21,10 +21,8 @@ * * Authors: Ben Skeggs */ -#define gf119_pmu_code gk104_pmu_code -#define gf119_pmu_data gk104_pmu_data #include "priv.h" -#include "fuc/gf119.fuc4.h" +#include "fuc/gk104.fuc4.h" #include <core/option.h> #include <subdev/fuse.h> diff --git a/drm/nouveau/nvkm/subdev/pmu/gk110.c b/drm/nouveau/nvkm/subdev/pmu/gk110.c index ae25524..5b0796a 100644 --- a/drm/nouveau/nvkm/subdev/pmu/gk110.c +++ b/drm/nouveau/nvkm/subdev/pmu/gk110.c @@ -21,10 +21,10 @@ * * Authors: Ben Skeggs */ -#define gf119_pmu_code gk110_pmu_code -#define gf119_pmu_data gk110_pmu_data +#define gk104_pmu_code gk110_pmu_code +#define gk104_pmu_data gk110_pmu_data #include "priv.h" -#include "fuc/gf119.fuc4.h" +#include "fuc/gk104.fuc4.h" #include <subdev/timer.h> -- 2.7.1
Karol Herbst
2016-Feb-16 16:54 UTC
[Nouveau] [PATCH v2 2/4] pmu/fuc: add macros for pdaemon pwr counters
Signed-off-by: Karol Herbst <nouveau at karolherbst.de> Reviewed-by: Martin Peres <martin.peres at free.fr> --- drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc index c5ec61f..7b7afcb 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc @@ -66,6 +66,30 @@ #define NV_PPWR_RFIFO_GET 0x04cc #define NV_PPWR_H2D 0x04d0 #define NV_PPWR_D2H 0x04dc +#define NV_PPWR_COUNTER_MASK(i) (0x10 * (i) + 0x0504) +#define NV_PPWR_COUNTER_COUNT(i) (0x10 * (i) + 0x0508) +#define NV_PPWR_COUNTER_COUNT_RESET 0x80000000 +#define NV_PPWR_COUNTER_MODE(i) (0x10 * (i) + 0x050c) +#define NV_PPWR_COUNTER_MODE_NEVER 0 +#define NV_PPWR_COUNTER_MODE_IF_ALL 1 +#define NV_PPWR_COUNTER_MODE_IF_NOT_ALL 2 +#define NV_PPWR_COUNTER_MODE_ALWAYS 3 +#define NV_PPWR_COUNTER_SIG_GR 0x00000001 +#define NV_PPWR_COUNTER_SIG_GR_HUB 0x00000002 +#define NV_PPWR_COUNTER_SIG_GR_GPC 0x00000004 +#define NV_PPWR_COUNTER_SIG_GR_ROP 0x00000008 +#define NV_PPWR_COUNTER_SIG_PVLD 0x00000010 +#define NV_PPWR_COUNTER_SIG_PPDEC 0x00000020 +#define NV_PPWR_COUNTER_SIG_PPPP 0x00000040 +#define NV_PPWR_COUNTER_SIG_BFB_PART0_REQ 0x00000080 +#define NV_PPWR_COUNTER_SIG_FB_PART0_REQ 0x00000100 +#define NV_PPWR_COUNTER_SIG_BFB_NISO 0x00000200 +#define NV_PPWR_COUNTER_SIG_PMFB 0x00001000 +#define NV_PPWR_COUNTER_SIG_PVENC 0x00020000 +#define NV_PPWR_COUNTER_SIG_PCOPY0 0x00080000 +#define NV_PPWR_COUNTER_SIG_PCOPY1 0x00100000 +#define NV_PPWR_COUNTER_SIG_PCOPY2 0x00200000 +#define NV_PPWR_COUNTER_SIG_PCIE 0x20000000 #if NVKM_PPWR_CHIPSET < GK208 #define NV_PPWR_DSCRATCH(i) (4 * (i) + 0x05d0) #endif -- 2.7.1
Karol Herbst
2016-Feb-16 16:54 UTC
[Nouveau] [PATCH v2 3/4] subdev/pmu/fuc: implement counter readout
v2: read and reset counters faster Signed-off-by: Karol Herbst <nouveau at karolherbst.de> --- drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 411 +++++++++------ drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 745 +++++++++++++++------------ drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 745 +++++++++++++++------------ drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 725 +++++++++++++++----------- drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 732 +++++++++++++++----------- drm/nouveau/nvkm/subdev/pmu/fuc/os.h | 10 + drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc | 156 ++++++ 7 files changed, 2091 insertions(+), 1433 deletions(-) diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h index 7702944..43f4135 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h @@ -68,7 +68,7 @@ uint32_t gf100_pmu_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000757, + 0x00000877, 0x00000755, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t gf100_pmu_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000b87, - 0x00000a2a, + 0x00000d53, + 0x00000bf6, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t gf100_pmu_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000bb0, - 0x00000b89, + 0x00000d7c, + 0x00000d55, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t gf100_pmu_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000bbc, - 0x00000bba, + 0x00000d88, + 0x00000d86, 0x00000000, 0x00000000, 0x00000000, @@ -834,7 +834,15 @@ uint32_t gf100_pmu_data[] = { 0x00000000, 0x00000000, /* 0x0ccc: memx_train_tail */ -/* 0x0ccc: i2c_scl_map */ +/* 0x0ccc: perf_attr_start */ +/* 0x0ccc: perf_polling_period_us */ + 0x000186a0, +/* 0x0cd0: perf_eng_gr */ +/* 0x0cd1: perf_eng_vid */ +/* 0x0cd2: perf_eng_mc */ +/* 0x0cd3: perf_eng_pcie */ + 0x00000000, +/* 0x0cd4: i2c_scl_map */ 0x00001000, 0x00004000, 0x00010000, @@ -845,7 +853,7 @@ uint32_t gf100_pmu_data[] = { 0x01000000, 0x04000000, 0x10000000, -/* 0x0cf4: i2c_sda_map */ +/* 0x0cfc: i2c_sda_map */ 0x00002000, 0x00008000, 0x00020000, @@ -856,7 +864,7 @@ uint32_t gf100_pmu_data[] = { 0x02000000, 0x08000000, 0x20000000, -/* 0x0d1c: i2c_ctrl */ +/* 0x0d24: i2c_ctrl */ 0x0000e138, 0x0000e150, 0x0000e168, @@ -912,8 +920,6 @@ uint32_t gf100_pmu_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t gf100_pmu_code[] = { @@ -1451,139 +1457,257 @@ uint32_t gf100_pmu_code[] = { /* 0x0753: memx_init */ 0xf800f8d8, /* 0x0755: perf_recv */ -/* 0x0757: perf_init */ - 0xf800f800, -/* 0x0759: i2c_drive_scl */ + 0x48a7f100, + 0x53a3f14f, + 0x06eab854, + 0xb0411bf4, + 0x1bf401d6, + 0xbdb4bd50, + 0xd307f1c4, + 0x000c180c, + 0xc4b604bd, + 0xd207f108, + 0x000c180c, + 0xc4b604bd, + 0xd107f108, + 0x000c180c, + 0xc4b604bd, + 0xd007f108, + 0x000c180c, + 0x21f504bd, + 0x0ef40337, +/* 0x07a1: perf_recv_not_host */ + 0xb821f518, + 0xcc07f107, + 0x000e980c, + 0x21f504bd, + 0x21f5022b, +/* 0x07b6: perf_recv_exit */ + 0x00f80257, +/* 0x07b8: perf_counter_readout */ + 0x20f910f9, + 0x40f930f9, + 0x17f150f9, + 0x14b60508, + 0x0011cf06, + 0x051827f1, + 0xcf0624b6, + 0x37f10022, + 0x34b60528, + 0x0033cf06, + 0x053847f1, + 0xcf0644b6, + 0x57f10044, + 0x54b60548, + 0x0055cf06, + 0x0000e7f1, + 0x8000e3f1, + 0x050807f1, + 0xd00604b6, + 0x04bd000e, + 0x051807f1, + 0xd00604b6, + 0x04bd000e, + 0x052807f1, + 0xd00604b6, + 0x04bd000e, + 0x053807f1, + 0xd00604b6, + 0x04bd000e, + 0x054807f1, + 0xd00604b6, + 0x04bd000e, + 0xffff11cc, + 0x07f12c21, + 0x02000cd0, + 0xff04bd00, + 0x07f13c31, + 0x03000cd1, + 0xff04bd00, + 0x07f14c41, + 0x04000cd2, + 0xff04bd00, + 0x07f15c51, + 0x05000cd3, + 0xfc04bd00, + 0xfc40fc50, + 0xfc20fc30, +/* 0x0877: perf_init */ + 0xf100f810, + 0xf00003e7, + 0x07f100e3, + 0x04b6050c, + 0x000ed006, + 0xe7f104bd, + 0xe3f00002, + 0x1c07f100, + 0x0604b605, + 0xbd000ed0, + 0x2c07f104, + 0x0604b605, + 0xbd000ed0, + 0x3c07f104, + 0x0604b605, + 0xbd000ed0, + 0x4c07f104, + 0x0604b605, + 0xbd000ed0, + 0x0fe7f104, + 0x18e3f000, + 0x051407f1, + 0xd00604b6, + 0x04bd000e, + 0x0070e7f1, + 0xf100e3f0, + 0xb6052407, + 0x0ed00604, + 0xf104bd00, + 0xf00080e7, + 0x07f100e3, + 0x04b60534, + 0x000ed006, + 0xe7f104bd, + 0xe3f10000, + 0x07f12000, + 0x04b60544, + 0x000ed006, + 0x21f504bd, + 0x07f107b8, + 0x0e980ccc, + 0xf504bd00, + 0xf5022b21, + 0xf8025721, +/* 0x0925: i2c_drive_scl */ 0x0036b000, 0xf1110bf4, 0xb607e007, 0x01d00604, 0xf804bd00, -/* 0x076d: i2c_drive_scl_lo */ +/* 0x0939: i2c_drive_scl_lo */ 0xe407f100, 0x0604b607, 0xbd0001d0, -/* 0x077b: i2c_drive_sda */ +/* 0x0947: i2c_drive_sda */ 0xb000f804, 0x0bf40036, 0xe007f111, 0x0604b607, 0xbd0002d0, -/* 0x078f: i2c_drive_sda_lo */ +/* 0x095b: i2c_drive_sda_lo */ 0xf100f804, 0xb607e407, 0x02d00604, 0xf804bd00, -/* 0x079d: i2c_sense_scl */ +/* 0x0969: i2c_sense_scl */ 0x0132f400, 0x07c437f1, 0xcf0634b6, 0x31fd0033, 0x060bf404, -/* 0x07b3: i2c_sense_scl_done */ +/* 0x097f: i2c_sense_scl_done */ 0xf80131f4, -/* 0x07b5: i2c_sense_sda */ +/* 0x0981: i2c_sense_sda */ 0x0132f400, 0x07c437f1, 0xcf0634b6, 0x32fd0033, 0x060bf404, -/* 0x07cb: i2c_sense_sda_done */ +/* 0x0997: i2c_sense_sda_done */ 0xf80131f4, -/* 0x07cd: i2c_raise_scl */ +/* 0x0999: i2c_raise_scl */ 0xf140f900, 0xf0089847, 0x21f50137, -/* 0x07da: i2c_raise_scl_wait */ - 0xe7f10759, +/* 0x09a6: i2c_raise_scl_wait */ + 0xe7f10925, 0x21f403e8, - 0x9d21f57f, - 0x0901f407, + 0x6921f57f, + 0x0901f409, 0xf40142b6, -/* 0x07ee: i2c_raise_scl_done */ +/* 0x09ba: i2c_raise_scl_done */ 0x40fcef1b, -/* 0x07f2: i2c_start */ +/* 0x09be: i2c_start */ 0x21f500f8, - 0x11f4079d, - 0xb521f50d, - 0x0611f407, -/* 0x0803: i2c_start_rep */ + 0x11f40969, + 0x8121f50d, + 0x0611f409, +/* 0x09cf: i2c_start_rep */ 0xf0300ef4, 0x21f50037, - 0x37f00759, - 0x7b21f501, - 0x0076bb07, + 0x37f00925, + 0x4721f501, + 0x0076bb09, 0xf90465b6, 0x04659450, 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b607cd, + 0x64b60999, 0x1f11f404, -/* 0x0830: i2c_start_send */ +/* 0x09fc: i2c_start_send */ 0xf50037f0, - 0xf1077b21, + 0xf1094721, 0xf41388e7, 0x37f07f21, - 0x5921f500, - 0x88e7f107, + 0x2521f500, + 0x88e7f109, 0x7f21f413, -/* 0x084c: i2c_start_out */ -/* 0x084e: i2c_stop */ +/* 0x0a18: i2c_start_out */ +/* 0x0a1a: i2c_stop */ 0x37f000f8, - 0x5921f500, - 0x0037f007, - 0x077b21f5, + 0x2521f500, + 0x0037f009, + 0x094721f5, 0x03e8e7f1, 0xf07f21f4, 0x21f50137, - 0xe7f10759, + 0xe7f10925, 0x21f41388, 0x0137f07f, - 0x077b21f5, + 0x094721f5, 0x1388e7f1, 0xf87f21f4, -/* 0x0881: i2c_bitw */ - 0x7b21f500, - 0xe8e7f107, +/* 0x0a4d: i2c_bitw */ + 0x4721f500, + 0xe8e7f109, 0x7f21f403, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0xcd21f550, - 0x0464b607, + 0x9921f550, + 0x0464b609, 0xf11811f4, 0xf41388e7, 0x37f07f21, - 0x5921f500, - 0x88e7f107, + 0x2521f500, + 0x88e7f109, 0x7f21f413, -/* 0x08c0: i2c_bitw_out */ -/* 0x08c2: i2c_bitr */ +/* 0x0a8c: i2c_bitw_out */ +/* 0x0a8e: i2c_bitr */ 0x37f000f8, - 0x7b21f501, - 0xe8e7f107, + 0x4721f501, + 0xe8e7f109, 0x7f21f403, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0xcd21f550, - 0x0464b607, + 0x9921f550, + 0x0464b609, 0xf51b11f4, - 0xf007b521, + 0xf0098121, 0x21f50037, - 0xe7f10759, + 0xe7f10925, 0x21f41388, 0x013cf07f, -/* 0x0907: i2c_bitr_done */ +/* 0x0ad3: i2c_bitr_done */ 0xf80131f4, -/* 0x0909: i2c_get_byte */ +/* 0x0ad5: i2c_get_byte */ 0x0057f000, -/* 0x090f: i2c_get_byte_next */ +/* 0x0adb: i2c_get_byte_next */ 0xb60847f0, 0x76bb0154, 0x0465b600, @@ -1591,7 +1715,7 @@ uint32_t gf100_pmu_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb608c221, + 0xb60a8e21, 0x11f40464, 0x0553fd2b, 0xf40142b6, @@ -1602,11 +1726,11 @@ uint32_t gf100_pmu_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b60881, -/* 0x0959: i2c_get_byte_done */ -/* 0x095b: i2c_put_byte */ + 0x64b60a4d, +/* 0x0b25: i2c_get_byte_done */ +/* 0x0b27: i2c_put_byte */ 0xf000f804, -/* 0x095e: i2c_put_byte_next */ +/* 0x0b2a: i2c_put_byte_next */ 0x42b60847, 0x3854ff01, 0xb60076bb, @@ -1614,8 +1738,8 @@ uint32_t gf100_pmu_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x8121f550, - 0x0464b608, + 0x4d21f550, + 0x0464b60a, 0xb03411f4, 0x1bf40046, 0x0076bbd8, @@ -1624,20 +1748,20 @@ uint32_t gf100_pmu_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b608c2, + 0x64b60a8e, 0x0f11f404, 0xb00076bb, 0x1bf40136, 0x0132f406, -/* 0x09b4: i2c_put_byte_done */ -/* 0x09b6: i2c_addr */ +/* 0x0b80: i2c_put_byte_done */ +/* 0x0b82: i2c_addr */ 0x76bb00f8, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb607f221, + 0xb609be21, 0x11f40464, 0x2ec3e729, 0x0134b601, @@ -1647,31 +1771,31 @@ uint32_t gf100_pmu_code[] = { 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x095b21f5, -/* 0x09fb: i2c_addr_done */ + 0x0b2721f5, +/* 0x0bc7: i2c_addr_done */ 0xf80464b6, -/* 0x09fd: i2c_acquire_addr */ +/* 0x0bc9: i2c_acquire_addr */ 0xf8cec700, 0xb702e4b6, - 0x980d1ce0, + 0x980d24e0, 0x00f800ee, -/* 0x0a0c: i2c_acquire */ - 0x09fd21f5, +/* 0x0bd8: i2c_acquire */ + 0x0bc921f5, 0xf00421f4, 0x21f403d9, -/* 0x0a1b: i2c_release */ +/* 0x0be7: i2c_release */ 0xf500f83f, - 0xf409fd21, + 0xf40bc921, 0xdaf00421, 0x3f21f403, -/* 0x0a2a: i2c_recv */ +/* 0x0bf6: i2c_recv */ 0x32f400f8, 0xf8c1c701, 0xb00214b6, 0x1ff52816, 0x13a0013a, - 0x32980cf4, - 0xcc13a000, + 0x32980cfc, + 0xd413a000, 0x0031980c, 0xf90231f4, 0xf9e0f9d0, @@ -1683,8 +1807,8 @@ uint32_t gf100_pmu_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x0c21f550, - 0x0464b60a, + 0xd821f550, + 0x0464b60b, 0xd6b0d0fc, 0xb31bf500, 0x0057f000, @@ -1693,8 +1817,8 @@ uint32_t gf100_pmu_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0xb621f550, - 0x0464b609, + 0x8221f550, + 0x0464b60b, 0x00d011f5, 0xbbe0c5c7, 0x65b60076, @@ -1702,7 +1826,7 @@ uint32_t gf100_pmu_code[] = { 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x095b21f5, + 0x0b2721f5, 0xf50464b6, 0xf000ad11, 0x76bb0157, @@ -1711,7 +1835,7 @@ uint32_t gf100_pmu_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb609b621, + 0xb60b8221, 0x11f50464, 0x76bb008a, 0x0465b600, @@ -1719,7 +1843,7 @@ uint32_t gf100_pmu_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6090921, + 0xb60ad521, 0x11f40464, 0xe05bcb6a, 0xb60076bb, @@ -1727,38 +1851,38 @@ uint32_t gf100_pmu_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x4e21f550, - 0x0464b608, + 0x1a21f550, + 0x0464b60a, 0xbd025bb9, 0x430ef474, -/* 0x0b30: i2c_recv_not_rd08 */ +/* 0x0cfc: i2c_recv_not_rd08 */ 0xf401d6b0, 0x57f03d1b, - 0xb621f500, - 0x3311f409, + 0x8221f500, + 0x3311f40b, 0xf5e0c5c7, - 0xf4095b21, + 0xf40b2721, 0x57f02911, - 0xb621f500, - 0x1f11f409, + 0x8221f500, + 0x1f11f40b, 0xf5e0b5c7, - 0xf4095b21, + 0xf40b2721, 0x21f51511, - 0x74bd084e, + 0x74bd0a1a, 0xf408c5c7, 0x32f4091b, 0x030ef402, -/* 0x0b70: i2c_recv_not_wr08 */ -/* 0x0b70: i2c_recv_done */ +/* 0x0d3c: i2c_recv_not_wr08 */ +/* 0x0d3c: i2c_recv_done */ 0xf5f8cec7, - 0xfc0a1b21, + 0xfc0be721, 0xf4d0fce0, 0x7cb90a12, 0x3721f502, -/* 0x0b85: i2c_recv_exit */ -/* 0x0b87: i2c_init */ +/* 0x0d51: i2c_recv_exit */ +/* 0x0d53: i2c_init */ 0xf800f803, -/* 0x0b89: test_recv */ +/* 0x0d55: test_recv */ 0xd817f100, 0x0614b605, 0xb60011cf, @@ -1769,12 +1893,12 @@ uint32_t gf100_pmu_code[] = { 0xe3f1d900, 0x21f5134f, 0x00f80257, -/* 0x0bb0: test_init */ +/* 0x0d7c: test_init */ 0x0800e7f1, 0x025721f5, -/* 0x0bba: idle_recv */ +/* 0x0d86: idle_recv */ 0x00f800f8, -/* 0x0bbc: idle */ +/* 0x0d88: idle */ 0xf10031f4, 0xb605d417, 0x11cf0614, @@ -1782,16 +1906,16 @@ uint32_t gf100_pmu_code[] = { 0x05d407f1, 0xd00604b6, 0x04bd0001, -/* 0x0bd8: idle_loop */ +/* 0x0da4: idle_loop */ 0xf45817f0, -/* 0x0bde: idle_proc */ -/* 0x0bde: idle_proc_exec */ +/* 0x0daa: idle_proc */ +/* 0x0daa: idle_proc_exec */ 0x10f90232, 0xf5021eb9, 0xfc034021, 0x0911f410, 0xf40231f4, -/* 0x0bf2: idle_proc_next */ +/* 0x0dbe: idle_proc_next */ 0x10b6ef0e, 0x061fb858, 0xf4e61bf4, @@ -1809,55 +1933,4 @@ uint32_t gf100_pmu_code[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, }; diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h index 7bf6b39..47858cb 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h @@ -68,7 +68,7 @@ uint32_t gf119_pmu_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000684, + 0x00000786, 0x00000682, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t gf119_pmu_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000a9f, - 0x00000942, + 0x00000c32, + 0x00000ad5, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t gf119_pmu_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000ac2, - 0x00000aa1, + 0x00000c55, + 0x00000c34, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t gf119_pmu_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000ace, - 0x00000acc, + 0x00000c61, + 0x00000c5f, 0x00000000, 0x00000000, 0x00000000, @@ -834,7 +834,15 @@ uint32_t gf119_pmu_data[] = { 0x00000000, 0x00000000, /* 0x0ccc: memx_train_tail */ -/* 0x0ccc: i2c_scl_map */ +/* 0x0ccc: perf_attr_start */ +/* 0x0ccc: perf_polling_period_us */ + 0x000186a0, +/* 0x0cd0: perf_eng_gr */ +/* 0x0cd1: perf_eng_vid */ +/* 0x0cd2: perf_eng_mc */ +/* 0x0cd3: perf_eng_pcie */ + 0x00000000, +/* 0x0cd4: i2c_scl_map */ 0x00000400, 0x00000800, 0x00001000, @@ -845,7 +853,7 @@ uint32_t gf119_pmu_data[] = { 0x00020000, 0x00040000, 0x00080000, -/* 0x0cf4: i2c_sda_map */ +/* 0x0cfc: i2c_sda_map */ 0x00100000, 0x00200000, 0x00400000, @@ -911,8 +919,6 @@ uint32_t gf119_pmu_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t gf119_pmu_code[] = { @@ -1392,381 +1398,448 @@ uint32_t gf119_pmu_code[] = { 0x00f8d80b, /* 0x0680: memx_init */ /* 0x0682: perf_recv */ - 0x00f800f8, -/* 0x0684: perf_init */ -/* 0x0686: i2c_drive_scl */ - 0x36b000f8, - 0x0e0bf400, - 0x07e007f1, - 0xbd0001d0, -/* 0x0697: i2c_drive_scl_lo */ - 0xf100f804, - 0xd007e407, + 0xa7f100f8, + 0xa3f14f48, + 0xeab85453, + 0x411bf406, + 0xf401d6b0, + 0xb4bd501b, + 0x07f1c4bd, + 0x0c180cd3, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd2, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd1, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd0, + 0xf504bd00, + 0xf402e621, +/* 0x06ce: perf_recv_not_host */ + 0x21f5180e, + 0x07f106e5, + 0x0e980ccc, + 0xf504bd00, + 0xf501ec21, +/* 0x06e3: perf_recv_exit */ + 0xf8021821, +/* 0x06e5: perf_counter_readout */ + 0xf910f900, + 0xf930f920, + 0xf150f940, + 0xcf050817, + 0x27f10011, + 0x22cf0518, + 0x2837f100, + 0x0033cf05, + 0x053847f1, + 0xf10044cf, + 0xcf054857, + 0xe7f10055, + 0xe3f10000, + 0x07f18000, + 0x0ed00508, + 0xf104bd00, + 0xd0051807, + 0x04bd000e, + 0x052807f1, + 0xbd000ed0, + 0x3807f104, + 0x000ed005, + 0x07f104bd, + 0x0ed00548, + 0xcc04bd00, + 0x21ffff11, + 0xd007f12c, + 0x0002000c, + 0x31ff04bd, + 0xd107f13c, + 0x0003000c, + 0x41ff04bd, + 0xd207f14c, + 0x0004000c, + 0x51ff04bd, + 0xd307f15c, + 0x0005000c, + 0x50fc04bd, + 0x30fc40fc, + 0x10fc20fc, +/* 0x0786: perf_init */ + 0xe7f100f8, + 0xe3f00003, + 0x0c07f100, + 0x000ed005, + 0xe7f104bd, + 0xe3f00002, + 0x1c07f100, + 0x000ed005, + 0x07f104bd, + 0x0ed0052c, + 0xf104bd00, + 0xd0053c07, + 0x04bd000e, + 0x054c07f1, + 0xbd000ed0, + 0x0fe7f104, + 0x18e3f000, + 0x051407f1, + 0xbd000ed0, + 0x70e7f104, + 0x00e3f000, + 0x052407f1, + 0xbd000ed0, + 0x80e7f104, + 0x00e3f000, + 0x053407f1, + 0xbd000ed0, + 0x00e7f104, + 0x00e3f100, + 0x4407f120, + 0x000ed005, + 0x21f504bd, + 0x07f106e5, + 0x0e980ccc, + 0xf504bd00, + 0xf501ec21, + 0xf8021821, +/* 0x0819: i2c_drive_scl */ + 0x0036b000, + 0xf10e0bf4, + 0xd007e007, 0x04bd0001, -/* 0x06a2: i2c_drive_sda */ - 0x36b000f8, - 0x0e0bf400, - 0x07e007f1, - 0xbd0002d0, -/* 0x06b3: i2c_drive_sda_lo */ - 0xf100f804, - 0xd007e407, +/* 0x082a: i2c_drive_scl_lo */ + 0x07f100f8, + 0x01d007e4, + 0xf804bd00, +/* 0x0835: i2c_drive_sda */ + 0x0036b000, + 0xf10e0bf4, + 0xd007e007, 0x04bd0002, -/* 0x06be: i2c_sense_scl */ +/* 0x0846: i2c_drive_sda_lo */ + 0x07f100f8, + 0x02d007e4, + 0xf804bd00, +/* 0x0851: i2c_sense_scl */ + 0x0132f400, + 0x07c437f1, + 0xfd0033cf, + 0x0bf40431, + 0x0131f406, +/* 0x0864: i2c_sense_scl_done */ +/* 0x0866: i2c_sense_sda */ 0x32f400f8, 0xc437f101, 0x0033cf07, - 0xf40431fd, + 0xf40432fd, 0x31f4060b, -/* 0x06d1: i2c_sense_scl_done */ -/* 0x06d3: i2c_sense_sda */ - 0xf400f801, - 0x37f10132, - 0x33cf07c4, - 0x0432fd00, - 0xf4060bf4, -/* 0x06e6: i2c_sense_sda_done */ - 0x00f80131, -/* 0x06e8: i2c_raise_scl */ - 0x47f140f9, - 0x37f00898, - 0x8621f501, -/* 0x06f5: i2c_raise_scl_wait */ - 0xe8e7f106, - 0x6721f403, - 0x06be21f5, - 0xb60901f4, - 0x1bf40142, -/* 0x0709: i2c_raise_scl_done */ - 0xf840fcef, -/* 0x070d: i2c_start */ - 0xbe21f500, - 0x0d11f406, - 0x06d321f5, - 0xf40611f4, -/* 0x071e: i2c_start_rep */ - 0x37f0300e, - 0x8621f500, - 0x0137f006, - 0x06a221f5, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xe821f550, - 0x0464b606, -/* 0x074b: i2c_start_send */ - 0xf01f11f4, - 0x21f50037, - 0xe7f106a2, - 0x21f41388, - 0x0037f067, - 0x068621f5, - 0x1388e7f1, -/* 0x0767: i2c_start_out */ - 0xf86721f4, -/* 0x0769: i2c_stop */ - 0x0037f000, - 0x068621f5, - 0xf50037f0, - 0xf106a221, - 0xf403e8e7, - 0x37f06721, - 0x8621f501, - 0x88e7f106, - 0x6721f413, - 0xf50137f0, - 0xf106a221, - 0xf41388e7, - 0x00f86721, -/* 0x079c: i2c_bitw */ - 0x06a221f5, +/* 0x0879: i2c_sense_sda_done */ +/* 0x087b: i2c_raise_scl */ + 0xf900f801, + 0x9847f140, + 0x0137f008, + 0x081921f5, +/* 0x0888: i2c_raise_scl_wait */ 0x03e8e7f1, - 0xbb6721f4, + 0xf56721f4, + 0xf4085121, + 0x42b60901, + 0xef1bf401, +/* 0x089c: i2c_raise_scl_done */ + 0x00f840fc, +/* 0x08a0: i2c_start */ + 0x085121f5, + 0xf50d11f4, + 0xf4086621, + 0x0ef40611, +/* 0x08b1: i2c_start_rep */ + 0x0037f030, + 0x081921f5, + 0xf50137f0, + 0xbb083521, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x06e821f5, + 0x087b21f5, 0xf40464b6, - 0xe7f11811, - 0x21f41388, - 0x0037f067, - 0x068621f5, +/* 0x08de: i2c_start_send */ + 0x37f01f11, + 0x3521f500, + 0x88e7f108, + 0x6721f413, + 0xf50037f0, + 0xf1081921, + 0xf41388e7, +/* 0x08fa: i2c_start_out */ + 0x00f86721, +/* 0x08fc: i2c_stop */ + 0xf50037f0, + 0xf0081921, + 0x21f50037, + 0xe7f10835, + 0x21f403e8, + 0x0137f067, + 0x081921f5, 0x1388e7f1, -/* 0x07db: i2c_bitw_out */ - 0xf86721f4, -/* 0x07dd: i2c_bitr */ - 0x0137f000, - 0x06a221f5, - 0x03e8e7f1, - 0xbb6721f4, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x06e821f5, - 0xf40464b6, - 0x21f51b11, - 0x37f006d3, - 0x8621f500, - 0x88e7f106, + 0xf06721f4, + 0x21f50137, + 0xe7f10835, + 0x21f41388, +/* 0x092f: i2c_bitw */ + 0xf500f867, + 0xf1083521, + 0xf403e8e7, + 0x76bb6721, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6087b21, + 0x11f40464, + 0x88e7f118, 0x6721f413, - 0xf4013cf0, -/* 0x0822: i2c_bitr_done */ - 0x00f80131, -/* 0x0824: i2c_get_byte */ - 0xf00057f0, -/* 0x082a: i2c_get_byte_next */ - 0x54b60847, - 0x0076bb01, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b607dd, - 0x2b11f404, - 0xb60553fd, - 0x1bf40142, - 0x0137f0d8, + 0xf50037f0, + 0xf1081921, + 0xf41388e7, +/* 0x096e: i2c_bitw_out */ + 0x00f86721, +/* 0x0970: i2c_bitr */ + 0xf50137f0, + 0xf1083521, + 0xf403e8e7, + 0x76bb6721, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6087b21, + 0x11f40464, + 0x6621f51b, + 0x0037f008, + 0x081921f5, + 0x1388e7f1, + 0xf06721f4, + 0x31f4013c, +/* 0x09b5: i2c_bitr_done */ +/* 0x09b7: i2c_get_byte */ + 0xf000f801, + 0x47f00057, +/* 0x09bd: i2c_get_byte_next */ + 0x0154b608, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x9c21f550, - 0x0464b607, -/* 0x0874: i2c_get_byte_done */ -/* 0x0876: i2c_put_byte */ - 0x47f000f8, -/* 0x0879: i2c_put_byte_next */ - 0x0142b608, - 0xbb3854ff, + 0x7021f550, + 0x0464b609, + 0xfd2b11f4, + 0x42b60553, + 0xd81bf401, + 0xbb0137f0, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x079c21f5, + 0x092f21f5, +/* 0x0a07: i2c_get_byte_done */ + 0xf80464b6, +/* 0x0a09: i2c_put_byte */ + 0x0847f000, +/* 0x0a0c: i2c_put_byte_next */ + 0xff0142b6, + 0x76bb3854, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6092f21, + 0x11f40464, + 0x0046b034, + 0xbbd81bf4, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x097021f5, 0xf40464b6, - 0x46b03411, - 0xd81bf400, + 0x76bb0f11, + 0x0136b000, + 0xf4061bf4, +/* 0x0a62: i2c_put_byte_done */ + 0x00f80132, +/* 0x0a64: i2c_addr */ 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0xdd21f550, - 0x0464b607, - 0xbb0f11f4, - 0x36b00076, - 0x061bf401, -/* 0x08cf: i2c_put_byte_done */ - 0xf80132f4, -/* 0x08d1: i2c_addr */ - 0x0076bb00, + 0xa021f550, + 0x0464b608, + 0xe72911f4, + 0xb6012ec3, + 0x53fd0134, + 0x0076bb05, 0xf90465b6, 0x04659450, 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6070d, - 0x2911f404, - 0x012ec3e7, - 0xfd0134b6, - 0x76bb0553, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0xf550fc04, - 0xb6087621, -/* 0x0916: i2c_addr_done */ - 0x00f80464, -/* 0x0918: i2c_acquire_addr */ - 0xb6f8cec7, - 0xe0b705e4, - 0x00f8d014, -/* 0x0924: i2c_acquire */ - 0x091821f5, - 0xf00421f4, - 0x21f403d9, -/* 0x0933: i2c_release */ - 0xf500f833, - 0xf4091821, - 0xdaf00421, + 0x64b60a09, +/* 0x0aa9: i2c_addr_done */ +/* 0x0aab: i2c_acquire_addr */ + 0xc700f804, + 0xe4b6f8ce, + 0x14e0b705, +/* 0x0ab7: i2c_acquire */ + 0xf500f8d0, + 0xf40aab21, + 0xd9f00421, 0x3321f403, -/* 0x0942: i2c_recv */ - 0x32f400f8, - 0xf8c1c701, - 0xb00214b6, - 0x1ff52816, - 0x13a0013a, - 0x32980cf4, - 0xcc13a000, - 0x0031980c, - 0xf90231f4, - 0xf9e0f9d0, - 0x0067f1d0, - 0x0063f100, - 0x01679210, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x2421f550, - 0x0464b609, - 0xd6b0d0fc, - 0xb31bf500, - 0x0057f000, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xd121f550, - 0x0464b608, - 0x00d011f5, - 0xbbe0c5c7, +/* 0x0ac6: i2c_release */ + 0x21f500f8, + 0x21f40aab, + 0x03daf004, + 0xf83321f4, +/* 0x0ad5: i2c_recv */ + 0x0132f400, + 0xb6f8c1c7, + 0x16b00214, + 0x3a1ff528, + 0xfc13a001, + 0x0032980c, + 0x0cd413a0, + 0xf4003198, + 0xd0f90231, + 0xd0f9e0f9, + 0x000067f1, + 0x100063f1, + 0xbb016792, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x087621f5, + 0x0ab721f5, + 0xfc0464b6, + 0x00d6b0d0, + 0x00b31bf5, + 0xbb0057f0, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x0a6421f5, 0xf50464b6, - 0xf000ad11, - 0x76bb0157, + 0xc700d011, + 0x76bbe0c5, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb608d121, + 0xb60a0921, 0x11f50464, - 0x76bb008a, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0xf550fc04, - 0xb6082421, - 0x11f40464, - 0xe05bcb6a, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x6921f550, - 0x0464b607, - 0xbd025bb9, - 0x430ef474, -/* 0x0a48: i2c_recv_not_rd08 */ - 0xf401d6b0, - 0x57f03d1b, - 0xd121f500, - 0x3311f408, - 0xf5e0c5c7, - 0xf4087621, - 0x57f02911, - 0xd121f500, - 0x1f11f408, - 0xf5e0b5c7, - 0xf4087621, - 0x21f51511, - 0x74bd0769, - 0xf408c5c7, - 0x32f4091b, - 0x030ef402, -/* 0x0a88: i2c_recv_not_wr08 */ -/* 0x0a88: i2c_recv_done */ - 0xf5f8cec7, - 0xfc093321, - 0xf4d0fce0, - 0x7cb90a12, - 0xe621f502, -/* 0x0a9d: i2c_recv_exit */ -/* 0x0a9f: i2c_init */ + 0x57f000ad, + 0x0076bb01, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b60a64, + 0x8a11f504, + 0x0076bb00, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b609b7, + 0x6a11f404, + 0xbbe05bcb, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x08fc21f5, + 0xb90464b6, + 0x74bd025b, +/* 0x0bdb: i2c_recv_not_rd08 */ + 0xb0430ef4, + 0x1bf401d6, + 0x0057f03d, + 0x0a6421f5, + 0xc73311f4, + 0x21f5e0c5, + 0x11f40a09, + 0x0057f029, + 0x0a6421f5, + 0xc71f11f4, + 0x21f5e0b5, + 0x11f40a09, + 0xfc21f515, + 0xc774bd08, + 0x1bf408c5, + 0x0232f409, +/* 0x0c1b: i2c_recv_not_wr08 */ +/* 0x0c1b: i2c_recv_done */ + 0xc7030ef4, + 0x21f5f8ce, + 0xe0fc0ac6, + 0x12f4d0fc, + 0x027cb90a, + 0x02e621f5, +/* 0x0c30: i2c_recv_exit */ +/* 0x0c32: i2c_init */ + 0x00f800f8, +/* 0x0c34: test_recv */ + 0x05d817f1, + 0xb60011cf, + 0x07f10110, + 0x01d005d8, + 0xf104bd00, + 0xf1d900e7, + 0xf5134fe3, + 0xf8021821, +/* 0x0c55: test_init */ + 0x00e7f100, + 0x1821f508, +/* 0x0c5f: idle_recv */ 0xf800f802, -/* 0x0aa1: test_recv */ - 0xd817f100, - 0x0011cf05, - 0xf10110b6, - 0xd005d807, - 0x04bd0001, - 0xd900e7f1, - 0x134fe3f1, - 0x021821f5, -/* 0x0ac2: test_init */ - 0xe7f100f8, - 0x21f50800, - 0x00f80218, -/* 0x0acc: idle_recv */ -/* 0x0ace: idle */ - 0x31f400f8, - 0xd417f100, - 0x0011cf05, - 0xf10110b6, - 0xd005d407, - 0x04bd0001, -/* 0x0ae4: idle_loop */ - 0xf45817f0, -/* 0x0aea: idle_proc */ -/* 0x0aea: idle_proc_exec */ - 0x10f90232, - 0xf5021eb9, - 0xfc02ef21, - 0x0911f410, - 0xf40231f4, -/* 0x0afe: idle_proc_next */ - 0x10b6ef0e, - 0x061fb858, - 0xf4e61bf4, - 0x28f4dd02, - 0xc10ef400, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, +/* 0x0c61: idle */ + 0x0031f400, + 0x05d417f1, + 0xb60011cf, + 0x07f10110, + 0x01d005d4, +/* 0x0c77: idle_loop */ + 0xf004bd00, + 0x32f45817, +/* 0x0c7d: idle_proc */ +/* 0x0c7d: idle_proc_exec */ + 0xb910f902, + 0x21f5021e, + 0x10fc02ef, + 0xf40911f4, + 0x0ef40231, +/* 0x0c91: idle_proc_next */ + 0x5810b6ef, + 0xf4061fb8, + 0x02f4e61b, + 0x0028f4dd, + 0x00c10ef4, 0x00000000, 0x00000000, 0x00000000, diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h index 61893b1..4c8f5d4 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h @@ -68,7 +68,7 @@ uint32_t gk104_pmu_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000684, + 0x00000786, 0x00000682, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t gk104_pmu_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000a9f, - 0x00000942, + 0x00000c32, + 0x00000ad5, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t gk104_pmu_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000ac2, - 0x00000aa1, + 0x00000c55, + 0x00000c34, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t gk104_pmu_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000ace, - 0x00000acc, + 0x00000c61, + 0x00000c5f, 0x00000000, 0x00000000, 0x00000000, @@ -834,7 +834,15 @@ uint32_t gk104_pmu_data[] = { 0x00000000, 0x00000000, /* 0x0ccc: memx_train_tail */ -/* 0x0ccc: i2c_scl_map */ +/* 0x0ccc: perf_attr_start */ +/* 0x0ccc: perf_polling_period_us */ + 0x000186a0, +/* 0x0cd0: perf_eng_gr */ +/* 0x0cd1: perf_eng_vid */ +/* 0x0cd2: perf_eng_mc */ +/* 0x0cd3: perf_eng_pcie */ + 0x00000000, +/* 0x0cd4: i2c_scl_map */ 0x00000400, 0x00000800, 0x00001000, @@ -845,7 +853,7 @@ uint32_t gk104_pmu_data[] = { 0x00020000, 0x00040000, 0x00080000, -/* 0x0cf4: i2c_sda_map */ +/* 0x0cfc: i2c_sda_map */ 0x00100000, 0x00200000, 0x00400000, @@ -911,8 +919,6 @@ uint32_t gk104_pmu_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t gk104_pmu_code[] = { @@ -1392,381 +1398,448 @@ uint32_t gk104_pmu_code[] = { 0x00f8d80b, /* 0x0680: memx_init */ /* 0x0682: perf_recv */ - 0x00f800f8, -/* 0x0684: perf_init */ -/* 0x0686: i2c_drive_scl */ - 0x36b000f8, - 0x0e0bf400, - 0x07e007f1, - 0xbd0001d0, -/* 0x0697: i2c_drive_scl_lo */ - 0xf100f804, - 0xd007e407, + 0xa7f100f8, + 0xa3f14f48, + 0xeab85453, + 0x411bf406, + 0xf401d6b0, + 0xb4bd501b, + 0x07f1c4bd, + 0x0c180cd3, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd2, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd1, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd0, + 0xf504bd00, + 0xf402e621, +/* 0x06ce: perf_recv_not_host */ + 0x21f5180e, + 0x07f106e5, + 0x0e980ccc, + 0xf504bd00, + 0xf501ec21, +/* 0x06e3: perf_recv_exit */ + 0xf8021821, +/* 0x06e5: perf_counter_readout */ + 0xf910f900, + 0xf930f920, + 0xf150f940, + 0xcf050817, + 0x27f10011, + 0x22cf0518, + 0x2837f100, + 0x0033cf05, + 0x053847f1, + 0xf10044cf, + 0xcf054857, + 0xe7f10055, + 0xe3f10000, + 0x07f18000, + 0x0ed00508, + 0xf104bd00, + 0xd0051807, + 0x04bd000e, + 0x052807f1, + 0xbd000ed0, + 0x3807f104, + 0x000ed005, + 0x07f104bd, + 0x0ed00548, + 0xcc04bd00, + 0x21ffff11, + 0xd007f12c, + 0x0002000c, + 0x31ff04bd, + 0xd107f13c, + 0x0003000c, + 0x41ff04bd, + 0xd207f14c, + 0x0004000c, + 0x51ff04bd, + 0xd307f15c, + 0x0005000c, + 0x50fc04bd, + 0x30fc40fc, + 0x10fc20fc, +/* 0x0786: perf_init */ + 0xe7f100f8, + 0xe3f00003, + 0x0c07f100, + 0x000ed005, + 0xe7f104bd, + 0xe3f00002, + 0x1c07f100, + 0x000ed005, + 0x07f104bd, + 0x0ed0052c, + 0xf104bd00, + 0xd0053c07, + 0x04bd000e, + 0x054c07f1, + 0xbd000ed0, + 0x0fe7f104, + 0x38e3f000, + 0x051407f1, + 0xbd000ed0, + 0x70e7f104, + 0x02e3f000, + 0x052407f1, + 0xbd000ed0, + 0x80e7f104, + 0x00e3f000, + 0x053407f1, + 0xbd000ed0, + 0x00e7f104, + 0x00e3f100, + 0x4407f120, + 0x000ed005, + 0x21f504bd, + 0x07f106e5, + 0x0e980ccc, + 0xf504bd00, + 0xf501ec21, + 0xf8021821, +/* 0x0819: i2c_drive_scl */ + 0x0036b000, + 0xf10e0bf4, + 0xd007e007, 0x04bd0001, -/* 0x06a2: i2c_drive_sda */ - 0x36b000f8, - 0x0e0bf400, - 0x07e007f1, - 0xbd0002d0, -/* 0x06b3: i2c_drive_sda_lo */ - 0xf100f804, - 0xd007e407, +/* 0x082a: i2c_drive_scl_lo */ + 0x07f100f8, + 0x01d007e4, + 0xf804bd00, +/* 0x0835: i2c_drive_sda */ + 0x0036b000, + 0xf10e0bf4, + 0xd007e007, 0x04bd0002, -/* 0x06be: i2c_sense_scl */ +/* 0x0846: i2c_drive_sda_lo */ + 0x07f100f8, + 0x02d007e4, + 0xf804bd00, +/* 0x0851: i2c_sense_scl */ + 0x0132f400, + 0x07c437f1, + 0xfd0033cf, + 0x0bf40431, + 0x0131f406, +/* 0x0864: i2c_sense_scl_done */ +/* 0x0866: i2c_sense_sda */ 0x32f400f8, 0xc437f101, 0x0033cf07, - 0xf40431fd, + 0xf40432fd, 0x31f4060b, -/* 0x06d1: i2c_sense_scl_done */ -/* 0x06d3: i2c_sense_sda */ - 0xf400f801, - 0x37f10132, - 0x33cf07c4, - 0x0432fd00, - 0xf4060bf4, -/* 0x06e6: i2c_sense_sda_done */ - 0x00f80131, -/* 0x06e8: i2c_raise_scl */ - 0x47f140f9, - 0x37f00898, - 0x8621f501, -/* 0x06f5: i2c_raise_scl_wait */ - 0xe8e7f106, - 0x6721f403, - 0x06be21f5, - 0xb60901f4, - 0x1bf40142, -/* 0x0709: i2c_raise_scl_done */ - 0xf840fcef, -/* 0x070d: i2c_start */ - 0xbe21f500, - 0x0d11f406, - 0x06d321f5, - 0xf40611f4, -/* 0x071e: i2c_start_rep */ - 0x37f0300e, - 0x8621f500, - 0x0137f006, - 0x06a221f5, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xe821f550, - 0x0464b606, -/* 0x074b: i2c_start_send */ - 0xf01f11f4, - 0x21f50037, - 0xe7f106a2, - 0x21f41388, - 0x0037f067, - 0x068621f5, - 0x1388e7f1, -/* 0x0767: i2c_start_out */ - 0xf86721f4, -/* 0x0769: i2c_stop */ - 0x0037f000, - 0x068621f5, - 0xf50037f0, - 0xf106a221, - 0xf403e8e7, - 0x37f06721, - 0x8621f501, - 0x88e7f106, - 0x6721f413, - 0xf50137f0, - 0xf106a221, - 0xf41388e7, - 0x00f86721, -/* 0x079c: i2c_bitw */ - 0x06a221f5, +/* 0x0879: i2c_sense_sda_done */ +/* 0x087b: i2c_raise_scl */ + 0xf900f801, + 0x9847f140, + 0x0137f008, + 0x081921f5, +/* 0x0888: i2c_raise_scl_wait */ 0x03e8e7f1, - 0xbb6721f4, + 0xf56721f4, + 0xf4085121, + 0x42b60901, + 0xef1bf401, +/* 0x089c: i2c_raise_scl_done */ + 0x00f840fc, +/* 0x08a0: i2c_start */ + 0x085121f5, + 0xf50d11f4, + 0xf4086621, + 0x0ef40611, +/* 0x08b1: i2c_start_rep */ + 0x0037f030, + 0x081921f5, + 0xf50137f0, + 0xbb083521, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x06e821f5, + 0x087b21f5, 0xf40464b6, - 0xe7f11811, - 0x21f41388, - 0x0037f067, - 0x068621f5, +/* 0x08de: i2c_start_send */ + 0x37f01f11, + 0x3521f500, + 0x88e7f108, + 0x6721f413, + 0xf50037f0, + 0xf1081921, + 0xf41388e7, +/* 0x08fa: i2c_start_out */ + 0x00f86721, +/* 0x08fc: i2c_stop */ + 0xf50037f0, + 0xf0081921, + 0x21f50037, + 0xe7f10835, + 0x21f403e8, + 0x0137f067, + 0x081921f5, 0x1388e7f1, -/* 0x07db: i2c_bitw_out */ - 0xf86721f4, -/* 0x07dd: i2c_bitr */ - 0x0137f000, - 0x06a221f5, - 0x03e8e7f1, - 0xbb6721f4, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x06e821f5, - 0xf40464b6, - 0x21f51b11, - 0x37f006d3, - 0x8621f500, - 0x88e7f106, + 0xf06721f4, + 0x21f50137, + 0xe7f10835, + 0x21f41388, +/* 0x092f: i2c_bitw */ + 0xf500f867, + 0xf1083521, + 0xf403e8e7, + 0x76bb6721, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6087b21, + 0x11f40464, + 0x88e7f118, 0x6721f413, - 0xf4013cf0, -/* 0x0822: i2c_bitr_done */ - 0x00f80131, -/* 0x0824: i2c_get_byte */ - 0xf00057f0, -/* 0x082a: i2c_get_byte_next */ - 0x54b60847, - 0x0076bb01, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b607dd, - 0x2b11f404, - 0xb60553fd, - 0x1bf40142, - 0x0137f0d8, + 0xf50037f0, + 0xf1081921, + 0xf41388e7, +/* 0x096e: i2c_bitw_out */ + 0x00f86721, +/* 0x0970: i2c_bitr */ + 0xf50137f0, + 0xf1083521, + 0xf403e8e7, + 0x76bb6721, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6087b21, + 0x11f40464, + 0x6621f51b, + 0x0037f008, + 0x081921f5, + 0x1388e7f1, + 0xf06721f4, + 0x31f4013c, +/* 0x09b5: i2c_bitr_done */ +/* 0x09b7: i2c_get_byte */ + 0xf000f801, + 0x47f00057, +/* 0x09bd: i2c_get_byte_next */ + 0x0154b608, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x9c21f550, - 0x0464b607, -/* 0x0874: i2c_get_byte_done */ -/* 0x0876: i2c_put_byte */ - 0x47f000f8, -/* 0x0879: i2c_put_byte_next */ - 0x0142b608, - 0xbb3854ff, + 0x7021f550, + 0x0464b609, + 0xfd2b11f4, + 0x42b60553, + 0xd81bf401, + 0xbb0137f0, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x079c21f5, + 0x092f21f5, +/* 0x0a07: i2c_get_byte_done */ + 0xf80464b6, +/* 0x0a09: i2c_put_byte */ + 0x0847f000, +/* 0x0a0c: i2c_put_byte_next */ + 0xff0142b6, + 0x76bb3854, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6092f21, + 0x11f40464, + 0x0046b034, + 0xbbd81bf4, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x097021f5, 0xf40464b6, - 0x46b03411, - 0xd81bf400, + 0x76bb0f11, + 0x0136b000, + 0xf4061bf4, +/* 0x0a62: i2c_put_byte_done */ + 0x00f80132, +/* 0x0a64: i2c_addr */ 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0xdd21f550, - 0x0464b607, - 0xbb0f11f4, - 0x36b00076, - 0x061bf401, -/* 0x08cf: i2c_put_byte_done */ - 0xf80132f4, -/* 0x08d1: i2c_addr */ - 0x0076bb00, + 0xa021f550, + 0x0464b608, + 0xe72911f4, + 0xb6012ec3, + 0x53fd0134, + 0x0076bb05, 0xf90465b6, 0x04659450, 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6070d, - 0x2911f404, - 0x012ec3e7, - 0xfd0134b6, - 0x76bb0553, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0xf550fc04, - 0xb6087621, -/* 0x0916: i2c_addr_done */ - 0x00f80464, -/* 0x0918: i2c_acquire_addr */ - 0xb6f8cec7, - 0xe0b705e4, - 0x00f8d014, -/* 0x0924: i2c_acquire */ - 0x091821f5, - 0xf00421f4, - 0x21f403d9, -/* 0x0933: i2c_release */ - 0xf500f833, - 0xf4091821, - 0xdaf00421, + 0x64b60a09, +/* 0x0aa9: i2c_addr_done */ +/* 0x0aab: i2c_acquire_addr */ + 0xc700f804, + 0xe4b6f8ce, + 0x14e0b705, +/* 0x0ab7: i2c_acquire */ + 0xf500f8d0, + 0xf40aab21, + 0xd9f00421, 0x3321f403, -/* 0x0942: i2c_recv */ - 0x32f400f8, - 0xf8c1c701, - 0xb00214b6, - 0x1ff52816, - 0x13a0013a, - 0x32980cf4, - 0xcc13a000, - 0x0031980c, - 0xf90231f4, - 0xf9e0f9d0, - 0x0067f1d0, - 0x0063f100, - 0x01679210, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x2421f550, - 0x0464b609, - 0xd6b0d0fc, - 0xb31bf500, - 0x0057f000, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xd121f550, - 0x0464b608, - 0x00d011f5, - 0xbbe0c5c7, +/* 0x0ac6: i2c_release */ + 0x21f500f8, + 0x21f40aab, + 0x03daf004, + 0xf83321f4, +/* 0x0ad5: i2c_recv */ + 0x0132f400, + 0xb6f8c1c7, + 0x16b00214, + 0x3a1ff528, + 0xfc13a001, + 0x0032980c, + 0x0cd413a0, + 0xf4003198, + 0xd0f90231, + 0xd0f9e0f9, + 0x000067f1, + 0x100063f1, + 0xbb016792, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x087621f5, + 0x0ab721f5, + 0xfc0464b6, + 0x00d6b0d0, + 0x00b31bf5, + 0xbb0057f0, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x0a6421f5, 0xf50464b6, - 0xf000ad11, - 0x76bb0157, + 0xc700d011, + 0x76bbe0c5, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb608d121, + 0xb60a0921, 0x11f50464, - 0x76bb008a, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0xf550fc04, - 0xb6082421, - 0x11f40464, - 0xe05bcb6a, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x6921f550, - 0x0464b607, - 0xbd025bb9, - 0x430ef474, -/* 0x0a48: i2c_recv_not_rd08 */ - 0xf401d6b0, - 0x57f03d1b, - 0xd121f500, - 0x3311f408, - 0xf5e0c5c7, - 0xf4087621, - 0x57f02911, - 0xd121f500, - 0x1f11f408, - 0xf5e0b5c7, - 0xf4087621, - 0x21f51511, - 0x74bd0769, - 0xf408c5c7, - 0x32f4091b, - 0x030ef402, -/* 0x0a88: i2c_recv_not_wr08 */ -/* 0x0a88: i2c_recv_done */ - 0xf5f8cec7, - 0xfc093321, - 0xf4d0fce0, - 0x7cb90a12, - 0xe621f502, -/* 0x0a9d: i2c_recv_exit */ -/* 0x0a9f: i2c_init */ + 0x57f000ad, + 0x0076bb01, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b60a64, + 0x8a11f504, + 0x0076bb00, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b609b7, + 0x6a11f404, + 0xbbe05bcb, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x08fc21f5, + 0xb90464b6, + 0x74bd025b, +/* 0x0bdb: i2c_recv_not_rd08 */ + 0xb0430ef4, + 0x1bf401d6, + 0x0057f03d, + 0x0a6421f5, + 0xc73311f4, + 0x21f5e0c5, + 0x11f40a09, + 0x0057f029, + 0x0a6421f5, + 0xc71f11f4, + 0x21f5e0b5, + 0x11f40a09, + 0xfc21f515, + 0xc774bd08, + 0x1bf408c5, + 0x0232f409, +/* 0x0c1b: i2c_recv_not_wr08 */ +/* 0x0c1b: i2c_recv_done */ + 0xc7030ef4, + 0x21f5f8ce, + 0xe0fc0ac6, + 0x12f4d0fc, + 0x027cb90a, + 0x02e621f5, +/* 0x0c30: i2c_recv_exit */ +/* 0x0c32: i2c_init */ + 0x00f800f8, +/* 0x0c34: test_recv */ + 0x05d817f1, + 0xb60011cf, + 0x07f10110, + 0x01d005d8, + 0xf104bd00, + 0xf1d900e7, + 0xf5134fe3, + 0xf8021821, +/* 0x0c55: test_init */ + 0x00e7f100, + 0x1821f508, +/* 0x0c5f: idle_recv */ 0xf800f802, -/* 0x0aa1: test_recv */ - 0xd817f100, - 0x0011cf05, - 0xf10110b6, - 0xd005d807, - 0x04bd0001, - 0xd900e7f1, - 0x134fe3f1, - 0x021821f5, -/* 0x0ac2: test_init */ - 0xe7f100f8, - 0x21f50800, - 0x00f80218, -/* 0x0acc: idle_recv */ -/* 0x0ace: idle */ - 0x31f400f8, - 0xd417f100, - 0x0011cf05, - 0xf10110b6, - 0xd005d407, - 0x04bd0001, -/* 0x0ae4: idle_loop */ - 0xf45817f0, -/* 0x0aea: idle_proc */ -/* 0x0aea: idle_proc_exec */ - 0x10f90232, - 0xf5021eb9, - 0xfc02ef21, - 0x0911f410, - 0xf40231f4, -/* 0x0afe: idle_proc_next */ - 0x10b6ef0e, - 0x061fb858, - 0xf4e61bf4, - 0x28f4dd02, - 0xc10ef400, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, +/* 0x0c61: idle */ + 0x0031f400, + 0x05d417f1, + 0xb60011cf, + 0x07f10110, + 0x01d005d4, +/* 0x0c77: idle_loop */ + 0xf004bd00, + 0x32f45817, +/* 0x0c7d: idle_proc */ +/* 0x0c7d: idle_proc_exec */ + 0xb910f902, + 0x21f5021e, + 0x10fc02ef, + 0xf40911f4, + 0x0ef40231, +/* 0x0c91: idle_proc_next */ + 0x5810b6ef, + 0xf4061fb8, + 0x02f4e61b, + 0x0028f4dd, + 0x00c10ef4, 0x00000000, 0x00000000, 0x00000000, diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h index 8a2b628..9b0da65 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h @@ -68,7 +68,7 @@ uint32_t gk208_pmu_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000625, + 0x00000718, 0x00000623, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t gk208_pmu_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000a29, - 0x000008d0, + 0x00000ba4, + 0x00000a4b, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t gk208_pmu_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000a4a, - 0x00000a2b, + 0x00000bc5, + 0x00000ba6, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t gk208_pmu_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000a55, - 0x00000a53, + 0x00000bd0, + 0x00000bce, 0x00000000, 0x00000000, 0x00000000, @@ -834,7 +834,15 @@ uint32_t gk208_pmu_data[] = { 0x00000000, 0x00000000, /* 0x0ccc: memx_train_tail */ -/* 0x0ccc: i2c_scl_map */ +/* 0x0ccc: perf_attr_start */ +/* 0x0ccc: perf_polling_period_us */ + 0x000186a0, +/* 0x0cd0: perf_eng_gr */ +/* 0x0cd1: perf_eng_vid */ +/* 0x0cd2: perf_eng_mc */ +/* 0x0cd3: perf_eng_pcie */ + 0x00000000, +/* 0x0cd4: i2c_scl_map */ 0x00000400, 0x00000800, 0x00001000, @@ -845,7 +853,7 @@ uint32_t gk208_pmu_data[] = { 0x00020000, 0x00040000, 0x00080000, -/* 0x0cf4: i2c_sda_map */ +/* 0x0cfc: i2c_sda_map */ 0x00100000, 0x00200000, 0x00400000, @@ -911,8 +919,6 @@ uint32_t gk208_pmu_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t gk208_pmu_code[] = { @@ -1368,337 +1374,468 @@ uint32_t gk208_pmu_code[] = { 0xf8dc0bf4, /* 0x0621: memx_init */ /* 0x0623: perf_recv */ - 0xf800f800, -/* 0x0625: perf_init */ -/* 0x0627: i2c_drive_scl */ - 0xb000f800, - 0x0bf40036, - 0x07e0400d, - 0xbd0001f6, -/* 0x0637: i2c_drive_scl_lo */ - 0x4000f804, - 0x01f607e4, - 0xf804bd00, -/* 0x0641: i2c_drive_sda */ - 0x0036b000, - 0x400d0bf4, - 0x02f607e0, - 0xf804bd00, -/* 0x0651: i2c_drive_sda_lo */ - 0x07e44000, - 0xbd0002f6, -/* 0x065b: i2c_sense_scl */ - 0xf400f804, - 0xc4430132, - 0x0033cf07, - 0xf40431fd, - 0x31f4060b, -/* 0x066d: i2c_sense_scl_done */ -/* 0x066f: i2c_sense_sda */ - 0xf400f801, - 0xc4430132, - 0x0033cf07, - 0xf40432fd, - 0x31f4060b, -/* 0x0681: i2c_sense_sda_done */ -/* 0x0683: i2c_raise_scl */ - 0xf900f801, - 0x08984440, - 0x277e0103, -/* 0x068e: i2c_raise_scl_wait */ - 0xe84e0006, - 0x005d7e03, - 0x065b7e00, - 0x0901f400, - 0xf40142b6, -/* 0x06a2: i2c_raise_scl_done */ - 0x40fcef1b, -/* 0x06a6: i2c_start */ - 0x5b7e00f8, - 0x11f40006, - 0x066f7e0d, - 0x0611f400, -/* 0x06b7: i2c_start_rep */ - 0x032e0ef4, - 0x06277e00, + 0xf100f800, + 0xf14f48a7, + 0xa65453a3, + 0x411bf4ea, + 0xf401d6b0, + 0xb4bd501b, + 0x07f1c4bd, + 0x0c180cd3, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd2, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd1, + 0xb604bd00, + 0x07f108c4, + 0x0c180cd0, + 0x7e04bd00, + 0xf40002b6, +/* 0x066e: perf_recv_not_host */ + 0x857e180e, + 0x07f10006, + 0x0e980ccc, + 0xf504bd00, + 0x7e01ca21, +/* 0x0683: perf_recv_exit */ + 0xf80001f5, +/* 0x0685: perf_counter_readout */ + 0xf910f900, + 0xf930f920, + 0x4150f940, + 0x11cf0508, + 0x05184200, + 0x430022cf, + 0x33cf0528, + 0x05384400, + 0x450044cf, + 0x55cf0548, + 0x00e7f100, + 0x00e3f100, + 0x05084080, + 0xbd000ef6, + 0x05184004, + 0xbd000ef6, + 0x05284004, + 0xbd000ef6, + 0x05384004, + 0xbd000ef6, + 0x05484004, + 0xbd000ef6, + 0xff11cc04, + 0xf12c21ff, + 0x200cd007, + 0xff04bd02, + 0x07f13c31, + 0x03200cd1, + 0x41ff04bd, + 0xd207f14c, + 0xbd04200c, + 0x5c51ff04, + 0x0cd307f1, + 0x04bd0520, + 0x40fc50fc, + 0x20fc30fc, + 0x00f810fc, +/* 0x0718: perf_init */ + 0x0003e7f1, + 0x4000e3f0, + 0x0ef6050c, + 0xf104bd00, + 0xf00002e7, + 0x1c4000e3, + 0x000ef605, + 0x2c4004bd, + 0x000ef605, + 0x3c4004bd, + 0x000ef605, + 0x4c4004bd, + 0x000ef605, + 0xe7f104bd, + 0xe3f0000f, + 0x05144038, + 0xbd000ef6, + 0x70e7f104, + 0x02e3f000, + 0xf6052440, + 0x04bd000e, + 0x0080e7f1, + 0x4000e3f0, + 0x0ef60534, + 0xf104bd00, + 0xf10000e7, + 0x402000e3, + 0x0ef60544, + 0x7e04bd00, + 0xf1000685, + 0x980ccc07, + 0x04bd000e, + 0x01ca21f5, + 0x0001f57e, +/* 0x07a2: i2c_drive_scl */ + 0x36b000f8, + 0x0d0bf400, + 0xf607e040, + 0x04bd0001, +/* 0x07b2: i2c_drive_scl_lo */ + 0xe44000f8, + 0x0001f607, + 0x00f804bd, +/* 0x07bc: i2c_drive_sda */ + 0xf40036b0, + 0xe0400d0b, + 0x0002f607, + 0x00f804bd, +/* 0x07cc: i2c_drive_sda_lo */ + 0xf607e440, + 0x04bd0002, +/* 0x07d6: i2c_sense_scl */ + 0x32f400f8, + 0x07c44301, + 0xfd0033cf, + 0x0bf40431, + 0x0131f406, +/* 0x07e8: i2c_sense_scl_done */ +/* 0x07ea: i2c_sense_sda */ + 0x32f400f8, + 0x07c44301, + 0xfd0033cf, + 0x0bf40432, + 0x0131f406, +/* 0x07fc: i2c_sense_sda_done */ +/* 0x07fe: i2c_raise_scl */ + 0x40f900f8, + 0x03089844, + 0x07a27e01, +/* 0x0809: i2c_raise_scl_wait */ + 0x03e84e00, + 0x00005d7e, + 0x0007d67e, + 0xb60901f4, + 0x1bf40142, +/* 0x081d: i2c_raise_scl_done */ + 0xf840fcef, +/* 0x0821: i2c_start */ + 0x07d67e00, + 0x0d11f400, + 0x0007ea7e, + 0xf40611f4, +/* 0x0832: i2c_start_rep */ + 0x00032e0e, + 0x0007a27e, + 0xbc7e0103, + 0x76bb0007, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0x7e50fc04, + 0xb60007fe, + 0x11f40464, +/* 0x085d: i2c_start_send */ + 0x7e00031d, + 0x4e0007bc, + 0x5d7e1388, + 0x00030000, + 0x0007a27e, + 0x7e13884e, +/* 0x0877: i2c_start_out */ + 0xf800005d, +/* 0x0879: i2c_stop */ + 0x7e000300, + 0x030007a2, + 0x07bc7e00, + 0x03e84e00, + 0x00005d7e, + 0xa27e0103, + 0x884e0007, + 0x005d7e13, 0x7e010300, - 0xbb000641, + 0x4e0007bc, + 0x5d7e1388, + 0x00f80000, +/* 0x08a8: i2c_bitw */ + 0x0007bc7e, + 0x7e03e84e, + 0xbb00005d, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x0006837e, + 0x0007fe7e, 0xf40464b6, -/* 0x06e2: i2c_start_send */ - 0x00031d11, - 0x0006417e, - 0x7e13884e, - 0x0300005d, - 0x06277e00, - 0x13884e00, - 0x00005d7e, -/* 0x06fc: i2c_start_out */ -/* 0x06fe: i2c_stop */ - 0x000300f8, - 0x0006277e, - 0x417e0003, - 0xe84e0006, - 0x005d7e03, - 0x7e010300, - 0x4e000627, + 0x884e1711, + 0x005d7e13, + 0x7e000300, + 0x4e0007a2, 0x5d7e1388, - 0x01030000, - 0x0006417e, - 0x7e13884e, - 0xf800005d, -/* 0x072d: i2c_bitw */ - 0x06417e00, - 0x03e84e00, - 0x00005d7e, +/* 0x08e6: i2c_bitw_out */ + 0x00f80000, +/* 0x08e8: i2c_bitr */ + 0xbc7e0103, + 0xe84e0007, + 0x005d7e03, + 0x0076bb00, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0xfe7e50fc, + 0x64b60007, + 0x1a11f404, + 0x0007ea7e, + 0xa27e0003, + 0x884e0007, + 0x005d7e13, + 0x013cf000, +/* 0x092b: i2c_bitr_done */ + 0xf80131f4, +/* 0x092d: i2c_get_byte */ + 0x04000500, +/* 0x0931: i2c_get_byte_next */ + 0x0154b608, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x06837e50, + 0x08e87e50, 0x0464b600, - 0x4e1711f4, - 0x5d7e1388, - 0x00030000, - 0x0006277e, - 0x7e13884e, -/* 0x076b: i2c_bitw_out */ - 0xf800005d, -/* 0x076d: i2c_bitr */ - 0x7e010300, - 0x4e000641, - 0x5d7e03e8, - 0x76bb0000, + 0xfd2a11f4, + 0x42b60553, + 0xd81bf401, + 0x76bb0103, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0x7e50fc04, - 0xb6000683, - 0x11f40464, - 0x066f7e1a, - 0x7e000300, - 0x4e000627, - 0x5d7e1388, - 0x3cf00000, - 0x0131f401, -/* 0x07b0: i2c_bitr_done */ -/* 0x07b2: i2c_get_byte */ - 0x000500f8, -/* 0x07b6: i2c_get_byte_next */ - 0x54b60804, - 0x0076bb01, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x6d7e50fc, - 0x64b60007, - 0x2a11f404, - 0xb60553fd, - 0x1bf40142, - 0xbb0103d8, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x00072d7e, -/* 0x07ff: i2c_get_byte_done */ - 0xf80464b6, -/* 0x0801: i2c_put_byte */ -/* 0x0803: i2c_put_byte_next */ - 0xb6080400, - 0x54ff0142, - 0x0076bb38, + 0xb60008a8, +/* 0x097a: i2c_get_byte_done */ + 0x00f80464, +/* 0x097c: i2c_put_byte */ +/* 0x097e: i2c_put_byte_next */ + 0x42b60804, + 0x3854ff01, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x08a87e50, + 0x0464b600, + 0xb03411f4, + 0x1bf40046, + 0x0076bbd8, 0xf90465b6, 0x04659450, 0xbd0256bb, 0x0475fd50, - 0x2d7e50fc, - 0x64b60007, - 0x3411f404, - 0xf40046b0, - 0x76bbd81b, + 0xe87e50fc, + 0x64b60008, + 0x0f11f404, + 0xb00076bb, + 0x1bf40136, + 0x0132f406, +/* 0x09d4: i2c_put_byte_done */ +/* 0x09d6: i2c_addr */ + 0x76bb00f8, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0x7e50fc04, - 0xb600076d, + 0xb6000821, 0x11f40464, - 0x0076bb0f, - 0xf40136b0, - 0x32f4061b, -/* 0x0859: i2c_put_byte_done */ -/* 0x085b: i2c_addr */ - 0xbb00f801, + 0x2ec3e729, + 0x0134b601, + 0xbb0553fd, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x0006a67e, - 0xf40464b6, - 0xc3e72911, - 0x34b6012e, - 0x0553fd01, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x08017e50, - 0x0464b600, -/* 0x08a0: i2c_addr_done */ -/* 0x08a2: i2c_acquire_addr */ - 0xcec700f8, - 0x05e4b6f8, - 0xd014e0b7, -/* 0x08ae: i2c_acquire */ - 0xa27e00f8, - 0x047e0008, - 0xd9f00000, + 0x00097c7e, +/* 0x0a1b: i2c_addr_done */ + 0xf80464b6, +/* 0x0a1d: i2c_acquire_addr */ + 0xf8cec700, + 0xb705e4b6, + 0xf8d014e0, +/* 0x0a29: i2c_acquire */ + 0x0a1d7e00, + 0x00047e00, + 0x03d9f000, + 0x00002e7e, +/* 0x0a3a: i2c_release */ + 0x1d7e00f8, + 0x047e000a, + 0xdaf00000, 0x002e7e03, -/* 0x08bf: i2c_release */ - 0x7e00f800, - 0x7e0008a2, - 0xf0000004, - 0x2e7e03da, - 0x00f80000, -/* 0x08d0: i2c_recv */ - 0xc70132f4, - 0x14b6f8c1, - 0x2816b002, - 0x01371ff5, - 0x0cf413b8, - 0x00329800, - 0x0ccc13b8, - 0x00319800, - 0xf90231f4, - 0xf9e0f9d0, - 0x0067f1d0, - 0x0063f100, - 0x01679210, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x08ae7e50, - 0x0464b600, - 0xd6b0d0fc, - 0xb01bf500, - 0xbb000500, +/* 0x0a4b: i2c_recv */ + 0xf400f800, + 0xc1c70132, + 0x0214b6f8, + 0xf52816b0, + 0xb801371f, + 0x000cfc13, + 0xb8003298, + 0x000cd413, + 0xf4003198, + 0xd0f90231, + 0xd0f9e0f9, + 0x000067f1, + 0x100063f1, + 0xbb016792, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x00085b7e, - 0xf50464b6, - 0xc700cc11, - 0x76bbe0c5, + 0x000a297e, + 0xfc0464b6, + 0x00d6b0d0, + 0x00b01bf5, + 0x76bb0005, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0x7e50fc04, - 0xb6000801, + 0xb60009d6, 0x11f50464, - 0x010500a9, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x085b7e50, - 0x0464b600, - 0x008711f5, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x07b27e50, - 0x0464b600, - 0xcb6711f4, - 0x76bbe05b, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0x7e50fc04, - 0xb60006fe, - 0x5bb20464, - 0x0ef474bd, -/* 0x09d5: i2c_recv_not_rd08 */ - 0x01d6b041, - 0x053b1bf4, - 0x085b7e00, - 0x3211f400, - 0x7ee0c5c7, - 0xf4000801, - 0x00052811, - 0x00085b7e, - 0xc71f11f4, - 0x017ee0b5, - 0x11f40008, - 0x06fe7e15, - 0xc774bd00, - 0x1bf408c5, - 0x0232f409, -/* 0x0a13: i2c_recv_not_wr08 */ -/* 0x0a13: i2c_recv_done */ - 0xc7030ef4, - 0xbf7ef8ce, - 0xe0fc0008, - 0x12f4d0fc, - 0x7e7cb209, -/* 0x0a27: i2c_recv_exit */ - 0xf80002b6, -/* 0x0a29: i2c_init */ -/* 0x0a2b: test_recv */ - 0x4100f800, - 0x11cf0458, + 0xc5c700cc, + 0x0076bbe0, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x7c7e50fc, + 0x64b60009, + 0xa911f504, + 0xbb010500, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x0009d67e, + 0xf50464b6, + 0xbb008711, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x00092d7e, + 0xf40464b6, + 0x5bcb6711, + 0x0076bbe0, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x797e50fc, + 0x64b60008, + 0xbd5bb204, + 0x410ef474, +/* 0x0b50: i2c_recv_not_rd08 */ + 0xf401d6b0, + 0x00053b1b, + 0x0009d67e, + 0xc73211f4, + 0x7c7ee0c5, + 0x11f40009, + 0x7e000528, + 0xf40009d6, + 0xb5c71f11, + 0x097c7ee0, + 0x1511f400, + 0x0008797e, + 0xc5c774bd, + 0x091bf408, + 0xf40232f4, +/* 0x0b8e: i2c_recv_not_wr08 */ +/* 0x0b8e: i2c_recv_done */ + 0xcec7030e, + 0x0a3a7ef8, + 0xfce0fc00, + 0x0912f4d0, + 0xb67e7cb2, +/* 0x0ba2: i2c_recv_exit */ + 0x00f80002, +/* 0x0ba4: i2c_init */ +/* 0x0ba6: test_recv */ + 0x584100f8, + 0x0011cf04, + 0x400110b6, + 0x01f60458, + 0xf104bd00, + 0xf1d900e7, + 0x7e134fe3, + 0xf80001f5, +/* 0x0bc5: test_init */ + 0x08004e00, + 0x0001f57e, +/* 0x0bce: idle_recv */ + 0x00f800f8, +/* 0x0bd0: idle */ + 0x410031f4, + 0x11cf0454, 0x0110b600, - 0xf6045840, + 0xf6045440, 0x04bd0001, - 0xd900e7f1, - 0x134fe3f1, - 0x0001f57e, -/* 0x0a4a: test_init */ - 0x004e00f8, - 0x01f57e08, -/* 0x0a53: idle_recv */ - 0xf800f800, -/* 0x0a55: idle */ - 0x0031f400, - 0xcf045441, - 0x10b60011, - 0x04544001, - 0xbd0001f6, -/* 0x0a69: idle_loop */ - 0xf4580104, -/* 0x0a6e: idle_proc */ -/* 0x0a6e: idle_proc_exec */ - 0x10f90232, - 0xbf7e1eb2, - 0x10fc0002, - 0xf40911f4, - 0x0ef40231, -/* 0x0a81: idle_proc_next */ - 0x5810b6f0, - 0x1bf41fa6, - 0xe002f4e8, - 0xf40028f4, - 0x0000c60e, +/* 0x0be4: idle_loop */ + 0x32f45801, +/* 0x0be9: idle_proc */ +/* 0x0be9: idle_proc_exec */ + 0xb210f902, + 0x02bf7e1e, + 0xf410fc00, + 0x31f40911, + 0xf00ef402, +/* 0x0bfc: idle_proc_next */ + 0xa65810b6, + 0xe81bf41f, + 0xf4e002f4, + 0x0ef40028, + 0x000000c6, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h index 5165692..ca36297 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h @@ -68,7 +68,7 @@ uint32_t gt215_pmu_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x0000083b, + 0x00000929, 0x00000839, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t gt215_pmu_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000c6b, - 0x00000b0e, + 0x00000de5, + 0x00000c88, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t gt215_pmu_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000c94, - 0x00000c6d, + 0x00000e0e, + 0x00000de7, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t gt215_pmu_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000ca0, - 0x00000c9e, + 0x00000e1a, + 0x00000e18, 0x00000000, 0x00000000, 0x00000000, @@ -834,7 +834,14 @@ uint32_t gt215_pmu_data[] = { 0x00000000, 0x00000000, /* 0x0ccc: memx_train_tail */ -/* 0x0ccc: i2c_scl_map */ +/* 0x0ccc: perf_attr_start */ +/* 0x0ccc: perf_polling_period_us */ + 0x000186a0, +/* 0x0cd0: perf_eng_gr */ +/* 0x0cd1: perf_eng_vid */ +/* 0x0cd2: perf_eng_mc */ + 0x00000000, +/* 0x0cd4: i2c_scl_map */ 0x00001000, 0x00004000, 0x00010000, @@ -845,7 +852,7 @@ uint32_t gt215_pmu_data[] = { 0x01000000, 0x04000000, 0x10000000, -/* 0x0cf4: i2c_sda_map */ +/* 0x0cfc: i2c_sda_map */ 0x00002000, 0x00008000, 0x00020000, @@ -856,7 +863,7 @@ uint32_t gt215_pmu_data[] = { 0x02000000, 0x08000000, 0x20000000, -/* 0x0d1c: i2c_ctrl */ +/* 0x0d24: i2c_ctrl */ 0x0000e138, 0x0000e150, 0x0000e168, @@ -912,8 +919,6 @@ uint32_t gt215_pmu_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t gt215_pmu_code[] = { @@ -1511,352 +1516,483 @@ uint32_t gt215_pmu_code[] = { /* 0x0837: memx_init */ 0xf800f8d8, /* 0x0839: perf_recv */ -/* 0x083b: perf_init */ - 0xf800f800, -/* 0x083d: i2c_drive_scl */ - 0x0036b000, - 0xf1110bf4, - 0xb607e007, - 0x01d00604, - 0xf804bd00, -/* 0x0851: i2c_drive_scl_lo */ - 0xe407f100, - 0x0604b607, - 0xbd0001d0, -/* 0x085f: i2c_drive_sda */ - 0xb000f804, + 0x48a7f100, + 0x53a3f14f, + 0x06eab854, + 0xb0351bf4, + 0x1bf401d6, + 0xbdb4bd44, + 0xd207f1c4, + 0x000c180c, + 0xc4b604bd, + 0xd107f108, + 0x000c180c, + 0xc4b604bd, + 0xd007f108, + 0x000c180c, + 0x21f504bd, + 0x0ef40337, +/* 0x0879: perf_recv_not_host */ + 0x9021f518, + 0xcc07f108, + 0x000e980c, + 0x21f504bd, + 0x21f5022b, +/* 0x088e: perf_recv_exit */ + 0x00f80257, +/* 0x0890: perf_counter_readout */ + 0x20f910f9, + 0x40f930f9, + 0x050817f1, + 0xcf0614b6, + 0x27f10011, + 0x24b60518, + 0x0022cf06, + 0x052837f1, + 0xcf0634b6, + 0x47f10033, + 0x44b60538, + 0x0044cf06, + 0x0000e7f1, + 0x8000e3f1, + 0x050807f1, + 0xd00604b6, + 0x04bd000e, + 0x051807f1, + 0xd00604b6, + 0x04bd000e, + 0x052807f1, + 0xd00604b6, + 0x04bd000e, + 0x053807f1, + 0xd00604b6, + 0x04bd000e, + 0xffff11cc, + 0x07f12c21, + 0x02000cd0, + 0xff04bd00, + 0x07f13c31, + 0x03000cd1, + 0xff04bd00, + 0x07f14c41, + 0x04000cd2, + 0xfc04bd00, + 0xfc30fc40, + 0xf810fc20, +/* 0x0929: perf_init */ + 0x03e7f100, + 0x00e3f000, + 0x050c07f1, + 0xd00604b6, + 0x04bd000e, + 0x0002e7f1, + 0xf100e3f0, + 0xb6051c07, + 0x0ed00604, + 0xf104bd00, + 0xb6052c07, + 0x0ed00604, + 0xf104bd00, + 0xb6053c07, + 0x0ed00604, + 0xf104bd00, + 0xf0000de7, + 0x07f100e3, + 0x04b60514, + 0x000ed006, + 0xe7f104bd, + 0xe3f00070, + 0x2407f100, + 0x0604b605, + 0xbd000ed0, + 0x00e7f104, + 0x00e3f001, + 0x053407f1, + 0xd00604b6, + 0x04bd000e, + 0x089021f5, + 0x0ccc07f1, + 0xbd000e98, + 0x2b21f504, + 0x5721f502, +/* 0x09b7: i2c_drive_scl */ + 0xb000f802, 0x0bf40036, 0xe007f111, 0x0604b607, - 0xbd0002d0, -/* 0x0873: i2c_drive_sda_lo */ + 0xbd0001d0, +/* 0x09cb: i2c_drive_scl_lo */ 0xf100f804, 0xb607e407, + 0x01d00604, + 0xf804bd00, +/* 0x09d9: i2c_drive_sda */ + 0x0036b000, + 0xf1110bf4, + 0xb607e007, 0x02d00604, 0xf804bd00, -/* 0x0881: i2c_sense_scl */ - 0x0132f400, - 0x07c437f1, - 0xcf0634b6, - 0x31fd0033, - 0x060bf404, -/* 0x0897: i2c_sense_scl_done */ - 0xf80131f4, -/* 0x0899: i2c_sense_sda */ - 0x0132f400, - 0x07c437f1, - 0xcf0634b6, - 0x32fd0033, - 0x060bf404, -/* 0x08af: i2c_sense_sda_done */ - 0xf80131f4, -/* 0x08b1: i2c_raise_scl */ - 0xf140f900, - 0xf0089847, - 0x21f50137, -/* 0x08be: i2c_raise_scl_wait */ - 0xe7f1083d, - 0x21f403e8, - 0x8121f57f, - 0x0901f408, - 0xf40142b6, -/* 0x08d2: i2c_raise_scl_done */ - 0x40fcef1b, -/* 0x08d6: i2c_start */ - 0x21f500f8, - 0x11f40881, - 0x9921f50d, - 0x0611f408, -/* 0x08e7: i2c_start_rep */ - 0xf0300ef4, - 0x21f50037, - 0x37f0083d, - 0x5f21f501, - 0x0076bb08, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b608b1, - 0x1f11f404, -/* 0x0914: i2c_start_send */ +/* 0x09ed: i2c_drive_sda_lo */ + 0xe407f100, + 0x0604b607, + 0xbd0002d0, +/* 0x09fb: i2c_sense_scl */ + 0xf400f804, + 0x37f10132, + 0x34b607c4, + 0x0033cf06, + 0xf40431fd, + 0x31f4060b, +/* 0x0a11: i2c_sense_scl_done */ +/* 0x0a13: i2c_sense_sda */ + 0xf400f801, + 0x37f10132, + 0x34b607c4, + 0x0033cf06, + 0xf40432fd, + 0x31f4060b, +/* 0x0a29: i2c_sense_sda_done */ +/* 0x0a2b: i2c_raise_scl */ + 0xf900f801, + 0x9847f140, + 0x0137f008, + 0x09b721f5, +/* 0x0a38: i2c_raise_scl_wait */ + 0x03e8e7f1, + 0xf57f21f4, + 0xf409fb21, + 0x42b60901, + 0xef1bf401, +/* 0x0a4c: i2c_raise_scl_done */ + 0x00f840fc, +/* 0x0a50: i2c_start */ + 0x09fb21f5, + 0xf50d11f4, + 0xf40a1321, + 0x0ef40611, +/* 0x0a61: i2c_start_rep */ + 0x0037f030, + 0x09b721f5, + 0xf50137f0, + 0xbb09d921, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x0a2b21f5, + 0xf40464b6, +/* 0x0a8e: i2c_start_send */ + 0x37f01f11, + 0xd921f500, + 0x88e7f109, + 0x7f21f413, 0xf50037f0, - 0xf1085f21, + 0xf109b721, 0xf41388e7, - 0x37f07f21, - 0x3d21f500, - 0x88e7f108, - 0x7f21f413, -/* 0x0930: i2c_start_out */ -/* 0x0932: i2c_stop */ - 0x37f000f8, - 0x3d21f500, - 0x0037f008, - 0x085f21f5, - 0x03e8e7f1, +/* 0x0aaa: i2c_start_out */ + 0x00f87f21, +/* 0x0aac: i2c_stop */ + 0xf50037f0, + 0xf009b721, + 0x21f50037, + 0xe7f109d9, + 0x21f403e8, + 0x0137f07f, + 0x09b721f5, + 0x1388e7f1, 0xf07f21f4, 0x21f50137, - 0xe7f1083d, + 0xe7f109d9, 0x21f41388, - 0x0137f07f, - 0x085f21f5, - 0x1388e7f1, - 0xf87f21f4, -/* 0x0965: i2c_bitw */ - 0x5f21f500, - 0xe8e7f108, - 0x7f21f403, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xb121f550, - 0x0464b608, - 0xf11811f4, - 0xf41388e7, - 0x37f07f21, - 0x3d21f500, - 0x88e7f108, +/* 0x0adf: i2c_bitw */ + 0xf500f87f, + 0xf109d921, + 0xf403e8e7, + 0x76bb7f21, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb60a2b21, + 0x11f40464, + 0x88e7f118, 0x7f21f413, -/* 0x09a4: i2c_bitw_out */ -/* 0x09a6: i2c_bitr */ - 0x37f000f8, - 0x5f21f501, - 0xe8e7f108, - 0x7f21f403, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xb121f550, - 0x0464b608, - 0xf51b11f4, - 0xf0089921, - 0x21f50037, - 0xe7f1083d, - 0x21f41388, - 0x013cf07f, -/* 0x09eb: i2c_bitr_done */ - 0xf80131f4, -/* 0x09ed: i2c_get_byte */ - 0x0057f000, -/* 0x09f3: i2c_get_byte_next */ - 0xb60847f0, - 0x76bb0154, + 0xf50037f0, + 0xf109b721, + 0xf41388e7, +/* 0x0b1e: i2c_bitw_out */ + 0x00f87f21, +/* 0x0b20: i2c_bitr */ + 0xf50137f0, + 0xf109d921, + 0xf403e8e7, + 0x76bb7f21, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb609a621, + 0xb60a2b21, 0x11f40464, - 0x0553fd2b, - 0xf40142b6, - 0x37f0d81b, - 0x0076bb01, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b60965, -/* 0x0a3d: i2c_get_byte_done */ -/* 0x0a3f: i2c_put_byte */ - 0xf000f804, -/* 0x0a42: i2c_put_byte_next */ - 0x42b60847, - 0x3854ff01, + 0x1321f51b, + 0x0037f00a, + 0x09b721f5, + 0x1388e7f1, + 0xf07f21f4, + 0x31f4013c, +/* 0x0b65: i2c_bitr_done */ +/* 0x0b67: i2c_get_byte */ + 0xf000f801, + 0x47f00057, +/* 0x0b6d: i2c_get_byte_next */ + 0x0154b608, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x6521f550, - 0x0464b609, - 0xb03411f4, - 0x1bf40046, - 0x0076bbd8, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b609a6, - 0x0f11f404, - 0xb00076bb, - 0x1bf40136, - 0x0132f406, -/* 0x0a98: i2c_put_byte_done */ -/* 0x0a9a: i2c_addr */ - 0x76bb00f8, + 0x2021f550, + 0x0464b60b, + 0xfd2b11f4, + 0x42b60553, + 0xd81bf401, + 0xbb0137f0, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x0adf21f5, +/* 0x0bb7: i2c_get_byte_done */ + 0xf80464b6, +/* 0x0bb9: i2c_put_byte */ + 0x0847f000, +/* 0x0bbc: i2c_put_byte_next */ + 0xff0142b6, + 0x76bb3854, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb608d621, + 0xb60adf21, 0x11f40464, - 0x2ec3e729, - 0x0134b601, - 0xbb0553fd, + 0x0046b034, + 0xbbd81bf4, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x0a3f21f5, -/* 0x0adf: i2c_addr_done */ - 0xf80464b6, -/* 0x0ae1: i2c_acquire_addr */ - 0xf8cec700, - 0xb702e4b6, - 0x980d1ce0, - 0x00f800ee, -/* 0x0af0: i2c_acquire */ - 0x0ae121f5, - 0xf00421f4, - 0x21f403d9, -/* 0x0aff: i2c_release */ - 0xf500f83f, - 0xf40ae121, - 0xdaf00421, - 0x3f21f403, -/* 0x0b0e: i2c_recv */ - 0x32f400f8, - 0xf8c1c701, - 0xb00214b6, - 0x1ff52816, - 0x13a0013a, - 0x32980cf4, - 0xcc13a000, - 0x0031980c, - 0xf90231f4, - 0xf9e0f9d0, - 0x0067f1d0, - 0x0063f100, - 0x01679210, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xf021f550, - 0x0464b60a, - 0xd6b0d0fc, - 0xb31bf500, - 0x0057f000, + 0x0b2021f5, + 0xf40464b6, + 0x76bb0f11, + 0x0136b000, + 0xf4061bf4, +/* 0x0c12: i2c_put_byte_done */ + 0x00f80132, +/* 0x0c14: i2c_addr */ 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x9a21f550, + 0x5021f550, 0x0464b60a, - 0x00d011f5, - 0xbbe0c5c7, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x0a3f21f5, - 0xf50464b6, - 0xf000ad11, - 0x76bb0157, + 0xe72911f4, + 0xb6012ec3, + 0x53fd0134, + 0x0076bb05, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b60bb9, +/* 0x0c59: i2c_addr_done */ +/* 0x0c5b: i2c_acquire_addr */ + 0xc700f804, + 0xe4b6f8ce, + 0x24e0b702, + 0x00ee980d, +/* 0x0c6a: i2c_acquire */ + 0x21f500f8, + 0x21f40c5b, + 0x03d9f004, + 0xf83f21f4, +/* 0x0c79: i2c_release */ + 0x5b21f500, + 0x0421f40c, + 0xf403daf0, + 0x00f83f21, +/* 0x0c88: i2c_recv */ + 0xc70132f4, + 0x14b6f8c1, + 0x2816b002, + 0x013a1ff5, + 0x0cfc13a0, + 0xa0003298, + 0x980cd413, + 0x31f40031, + 0xf9d0f902, + 0xf1d0f9e0, + 0xf1000067, + 0x92100063, + 0x76bb0167, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb60a9a21, - 0x11f50464, - 0x76bb008a, + 0xb60c6a21, + 0xd0fc0464, + 0xf500d6b0, + 0xf000b31b, + 0x76bb0057, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb609ed21, - 0x11f40464, - 0xe05bcb6a, + 0xb60c1421, + 0x11f50464, + 0xc5c700d0, + 0x0076bbe0, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b60bb9, + 0xad11f504, + 0x0157f000, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x3221f550, - 0x0464b609, - 0xbd025bb9, - 0x430ef474, -/* 0x0c14: i2c_recv_not_rd08 */ - 0xf401d6b0, - 0x57f03d1b, - 0x9a21f500, - 0x3311f40a, - 0xf5e0c5c7, - 0xf40a3f21, - 0x57f02911, - 0x9a21f500, - 0x1f11f40a, - 0xf5e0b5c7, - 0xf40a3f21, - 0x21f51511, - 0x74bd0932, - 0xf408c5c7, - 0x32f4091b, - 0x030ef402, -/* 0x0c54: i2c_recv_not_wr08 */ -/* 0x0c54: i2c_recv_done */ - 0xf5f8cec7, - 0xfc0aff21, - 0xf4d0fce0, - 0x7cb90a12, - 0x3721f502, -/* 0x0c69: i2c_recv_exit */ -/* 0x0c6b: i2c_init */ - 0xf800f803, -/* 0x0c6d: test_recv */ - 0xd817f100, - 0x0614b605, - 0xb60011cf, - 0x07f10110, - 0x04b605d8, - 0x0001d006, - 0xe7f104bd, - 0xe3f1d900, - 0x21f5134f, - 0x00f80257, -/* 0x0c94: test_init */ - 0x0800e7f1, - 0x025721f5, -/* 0x0c9e: idle_recv */ - 0x00f800f8, -/* 0x0ca0: idle */ - 0xf10031f4, - 0xb605d417, + 0x1421f550, + 0x0464b60c, + 0x008a11f5, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x6721f550, + 0x0464b60b, + 0xcb6a11f4, + 0x76bbe05b, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb60aac21, + 0x5bb90464, + 0xf474bd02, +/* 0x0d8e: i2c_recv_not_rd08 */ + 0xd6b0430e, + 0x3d1bf401, + 0xf50057f0, + 0xf40c1421, + 0xc5c73311, + 0xb921f5e0, + 0x2911f40b, + 0xf50057f0, + 0xf40c1421, + 0xb5c71f11, + 0xb921f5e0, + 0x1511f40b, + 0x0aac21f5, + 0xc5c774bd, + 0x091bf408, + 0xf40232f4, +/* 0x0dce: i2c_recv_not_wr08 */ +/* 0x0dce: i2c_recv_done */ + 0xcec7030e, + 0x7921f5f8, + 0xfce0fc0c, + 0x0a12f4d0, + 0xf5027cb9, +/* 0x0de3: i2c_recv_exit */ + 0xf8033721, +/* 0x0de5: i2c_init */ +/* 0x0de7: test_recv */ + 0xf100f800, + 0xb605d817, 0x11cf0614, 0x0110b600, - 0x05d407f1, + 0x05d807f1, 0xd00604b6, 0x04bd0001, -/* 0x0cbc: idle_loop */ - 0xf45817f0, -/* 0x0cc2: idle_proc */ -/* 0x0cc2: idle_proc_exec */ - 0x10f90232, - 0xf5021eb9, - 0xfc034021, - 0x0911f410, - 0xf40231f4, -/* 0x0cd6: idle_proc_next */ - 0x10b6ef0e, - 0x061fb858, - 0xf4e61bf4, - 0x28f4dd02, - 0xbb0ef400, + 0xd900e7f1, + 0x134fe3f1, + 0x025721f5, +/* 0x0e0e: test_init */ + 0xe7f100f8, + 0x21f50800, + 0x00f80257, +/* 0x0e18: idle_recv */ +/* 0x0e1a: idle */ + 0x31f400f8, + 0xd417f100, + 0x0614b605, + 0xb60011cf, + 0x07f10110, + 0x04b605d4, + 0x0001d006, +/* 0x0e36: idle_loop */ + 0x17f004bd, + 0x0232f458, +/* 0x0e3c: idle_proc */ +/* 0x0e3c: idle_proc_exec */ + 0x1eb910f9, + 0x4021f502, + 0xf410fc03, + 0x31f40911, + 0xef0ef402, +/* 0x0e50: idle_proc_next */ + 0xb85810b6, + 0x1bf4061f, + 0xdd02f4e6, + 0xf40028f4, + 0x0000bb0e, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h index c8b06cb..1633825 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h @@ -49,4 +49,14 @@ #define I2C__MSG_DATA0_WR08_REG 0:7 #define I2C__MSG_DATA1_WR08_VAL 0:7 + +/* PERF: message identifiers */ + +// OUT: load 0x0 - 0xff +// - byte 3: PCIe load (GF100+) +// - byte 2: Memory load +// - byte 1: Video engines' load +// - byte 0: GR load +#define PERF_MSG_LOAD 1 + #endif diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc index 38eadf7..4b17b3e 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc @@ -30,6 +30,18 @@ process(PROC_PERF, #perf_init, #perf_recv) * PERF data segment *****************************************************************************/ #ifdef INCLUDE_DATA +perf_attr_start: +// parameters +perf_polling_period_us: .b32 100000 + +// engine usage (0x0-0xff) +perf_eng_gr: .b8 0 +perf_eng_vid: .b8 0 +perf_eng_mc: .b8 0 +#if NVKM_PPWR_CHIPSET >= GF100 +perf_eng_pcie: .b8 0 +#endif +.align 4 #endif /****************************************************************************** @@ -46,6 +58,86 @@ process(PROC_PERF, #perf_init, #perf_recv) // $r11 - data1 // $r0 - zero perf_recv: + imm32($r10, PROC_HOST) + cmp b32 $r14 $r10 + bra ne #perf_recv_not_host + cmp b32 $r13 PERF_MSG_LOAD + bra ne #perf_recv_exit + clear b32 $r11 + clear b32 $r12 +#if NVKM_PPWR_CHIPSET >= GF100 + ld(b8, $r12, #perf_eng_pcie) + shl b32 $r12 8 +#endif + ld(b8, $r12, #perf_eng_mc) + shl b32 $r12 8 + ld(b8, $r12, #perf_eng_vid) + shl b32 $r12 8 + ld(b8, $r12, #perf_eng_gr) + call(send) + bra #perf_recv_exit +perf_recv_not_host: + call(perf_counter_readout) + ld(b32, $r14, #perf_polling_period_us) + call #ticks_from_us + call(timer) +perf_recv_exit: + ret + +// description +// +// $r15 - current (perf) +// $r0 - zero +perf_counter_readout: + push $r1 // ticks + push $r2 // gr + push $r3 // video + push $r4 // mc +#if NVKM_PPWR_CHIPSET >= GF100 + push $r5 // pcie +#endif + + nv_iord($r1, NV_PPWR_COUNTER_COUNT(0)) + nv_iord($r2, NV_PPWR_COUNTER_COUNT(1)) + nv_iord($r3, NV_PPWR_COUNTER_COUNT(2)) + nv_iord($r4, NV_PPWR_COUNTER_COUNT(3)) +#if NVKM_PPWR_CHIPSET >= GF100 + nv_iord($r5, NV_PPWR_COUNTER_COUNT(4)) +#endif + + // reset the counters + imm32($r14, NV_PPWR_COUNTER_COUNT_RESET) + nv_iowr(NV_PPWR_COUNTER_COUNT(0), $r14) + nv_iowr(NV_PPWR_COUNTER_COUNT(1), $r14) + nv_iowr(NV_PPWR_COUNTER_COUNT(2), $r14) + nv_iowr(NV_PPWR_COUNTER_COUNT(3), $r14) +#if NVKM_PPWR_CHIPSET >= GF100 + nv_iowr(NV_PPWR_COUNTER_COUNT(4), $r14) +#endif + + div $r1 $r1 0xff + + div $r2 $r2 $r1 + st(b8, #perf_eng_gr, $r2) + + div $r3 $r3 $r1 + st(b8, #perf_eng_vid, $r3) + + div $r4 $r4 $r1 + st(b8, #perf_eng_mc, $r4) + +#if NVKM_PPWR_CHIPSET >= GF100 + div $r5 $r5 $r1 + st(b8, #perf_eng_pcie, $r5) +#endif + +#if NVKM_PPWR_CHIPSET >= GF100 + pop $r5 +#endif + pop $r4 + pop $r3 + pop $r2 + pop $r1 ret // description @@ -53,5 +145,69 @@ perf_recv: // $r15 - current (perf) // $r0 - zero perf_init: + // set up the total ticks counter first + imm32($r14, NV_PPWR_COUNTER_MODE_ALWAYS) + nv_iowr(NV_PPWR_COUNTER_MODE(0), $r14) + + // set up the other counters, with fermi there are more + imm32($r14, NV_PPWR_COUNTER_MODE_IF_NOT_ALL) + nv_iowr(NV_PPWR_COUNTER_MODE(1), $r14) + nv_iowr(NV_PPWR_COUNTER_MODE(2), $r14) + nv_iowr(NV_PPWR_COUNTER_MODE(3), $r14) +#if NVKM_PPWR_CHIPSET >= GF100 + nv_iowr(NV_PPWR_COUNTER_MODE(4), $r14) +#endif + + // core load counter + imm32($r14, + NV_PPWR_COUNTER_SIG_GR + | NV_PPWR_COUNTER_SIG_GR_GPC + | NV_PPWR_COUNTER_SIG_GR_ROP +#if NVKM_PPWR_CHIPSET >= GF100 + | NV_PPWR_COUNTER_SIG_GR_HUB + | NV_PPWR_COUNTER_SIG_PCOPY0 + | NV_PPWR_COUNTER_SIG_PCOPY1 +#endif +#if NVKM_PPWR_CHIPSET >= GK104 + | NV_PPWR_COUNTER_SIG_PCOPY2 +#endif + ) + nv_iowr(NV_PPWR_COUNTER_MASK(1), $r14) + + // video load counter + imm32($r14, + NV_PPWR_COUNTER_SIG_PVLD + | NV_PPWR_COUNTER_SIG_PPDEC + | NV_PPWR_COUNTER_SIG_PPPP +#if NVKM_PPWR_CHIPSET >= GK104 + | NV_PPWR_COUNTER_SIG_PVENC +#endif + ) + nv_iowr(NV_PPWR_COUNTER_MASK(2), $r14) + + // memory load counter + imm32($r14, +#if NVKM_PPWR_CHIPSET >= GF100 + NV_PPWR_COUNTER_SIG_BFB_PART0_REQ +#else + NV_PPWR_COUNTER_SIG_FB_PART0_REQ +#endif + ) + nv_iowr(NV_PPWR_COUNTER_MASK(3), $r14) + + // pcie load counter +#if NVKM_PPWR_CHIPSET >= GF100 + imm32($r14, NV_PPWR_COUNTER_SIG_PCIE) + nv_iowr(NV_PPWR_COUNTER_MASK(4), $r14) +#endif + + // initial read out + call(perf_counter_readout) + + // schedule the next read out + ld(b32, $r14, #perf_polling_period_us) + call #ticks_from_us + call(timer) + ret #endif -- 2.7.1
Karol Herbst
2016-Feb-16 16:54 UTC
[Nouveau] [PATCH v2 4/4] nouveau/debugfs: add interface for current load
output of the file will be something like that: core, mem, vid, pci 0xfd, 0x15, 0x00, 0xa2 v2: relayout the debugfs file Signed-off-by: Karol Herbst <nouveau at karolherbst.de> --- drm/nouveau/include/nvif/device.h | 1 + drm/nouveau/include/nvkm/subdev/pmu.h | 10 ++++++++++ drm/nouveau/nouveau_debugfs.c | 23 +++++++++++++++++++++++ drm/nouveau/nvkm/subdev/pmu/base.c | 18 ++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/drm/nouveau/include/nvif/device.h b/drm/nouveau/include/nvif/device.h index e0ed2f4..cba6d0f 100644 --- a/drm/nouveau/include/nvif/device.h +++ b/drm/nouveau/include/nvif/device.h @@ -64,6 +64,7 @@ u64 nvif_device_time(struct nvif_device *); #define nvxx_i2c(a) nvxx_device(a)->i2c #define nvxx_therm(a) nvxx_device(a)->therm #define nvxx_volt(a) nvxx_device(a)->volt +#define nvxx_pmu(a) nvxx_device(a)->pmu #include <core/device.h> #include <engine/fifo.h> diff --git a/drm/nouveau/include/nvkm/subdev/pmu.h b/drm/nouveau/include/nvkm/subdev/pmu.h index e61923d..be3c60e 100644 --- a/drm/nouveau/include/nvkm/subdev/pmu.h +++ b/drm/nouveau/include/nvkm/subdev/pmu.h @@ -23,6 +23,13 @@ struct nvkm_pmu { } recv; }; +struct nvkm_pmu_load_data { + u8 core; + u8 mem; + u8 video; + u8 pcie; +}; + int nvkm_pmu_send(struct nvkm_pmu *, u32 reply[2], u32 process, u32 message, u32 data0, u32 data1); void nvkm_pmu_pgob(struct nvkm_pmu *, bool enable); @@ -48,4 +55,7 @@ void nvkm_memx_train(struct nvkm_memx *); int nvkm_memx_train_result(struct nvkm_pmu *, u32 *, int); void nvkm_memx_block(struct nvkm_memx *); void nvkm_memx_unblock(struct nvkm_memx *); + +/* interface to PERF process running on PMU */ +int nvkm_pmu_get_perf_data(struct nvkm_pmu *, struct nvkm_pmu_load_data *); #endif diff --git a/drm/nouveau/nouveau_debugfs.c b/drm/nouveau/nouveau_debugfs.c index 3d0dc19..1c725a3 100644 --- a/drm/nouveau/nouveau_debugfs.c +++ b/drm/nouveau/nouveau_debugfs.c @@ -31,6 +31,8 @@ #include <linux/debugfs.h> #include <nvif/class.h> #include <nvif/if0001.h> +#include <nvkm/subdev/pmu.h> + #include "nouveau_debugfs.h" #include "nouveau_drm.h" @@ -180,8 +182,29 @@ static const struct file_operations nouveau_pstate_fops = { .write = nouveau_debugfs_pstate_set, }; +static int +nouveau_debugfs_current_load(struct seq_file *m, void *data) +{ + struct drm_info_node *node = (struct drm_info_node *) m->private; + struct nouveau_drm *drm = nouveau_drm(node->minor->dev); + struct nvkm_pmu *pmu = nvxx_pmu(&drm->device); + struct nvkm_pmu_load_data load_data = { 0 }; + + if (!pm_runtime_suspended(drm->dev->dev)) { + int ret = nvkm_pmu_get_perf_data(pmu, &load_data); + if (ret < 0) + return ret; + } + + seq_printf(m, "core, mem, vid, pci\n"); + seq_printf(m, "0x%2.2x, 0x%2.2x, 0x%2.2x, 0x%2.2x\n", load_data.core, + load_data.mem, load_data.video, load_data.pcie); + return 0; +} + static struct drm_info_list nouveau_debugfs_list[] = { { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL }, + { "current_load", nouveau_debugfs_current_load, 0, NULL }, }; #define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list) diff --git a/drm/nouveau/nvkm/subdev/pmu/base.c b/drm/nouveau/nvkm/subdev/pmu/base.c index d95eb86..6594812 100644 --- a/drm/nouveau/nvkm/subdev/pmu/base.c +++ b/drm/nouveau/nvkm/subdev/pmu/base.c @@ -140,6 +140,24 @@ nvkm_pmu_recv(struct work_struct *work) process, message, data0, data1); } +#define get_counter_index(v, i) (((v) >> ((i)*8)) & 0xff) + +int +nvkm_pmu_get_perf_data(struct nvkm_pmu *pmu, struct nvkm_pmu_load_data *data) +{ + u32 result[2]; + + int ret = nvkm_pmu_send(pmu, result, PROC_PERF, PERF_MSG_LOAD, 0, 0); + if (ret < 0) + return ret; + + data->core = get_counter_index(result[0], 0); + data->video = get_counter_index(result[0], 1); + data->mem = get_counter_index(result[0], 2); + data->pcie = get_counter_index(result[0], 3); + return 0; +} + static void nvkm_pmu_intr(struct nvkm_subdev *subdev) { -- 2.7.1