From d6917cf72d823cc478f4ad8c21386e65ab503328 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Thu, 25 Apr 2013 14:43:03 -0700 Subject: [PATCH] add punit and nc read/write tools for vlv Good for testing/debugging. --- lib/intel_gpu_tools.h | 2 ++ tools/Makefile.am | 2 ++ tools/intel_iosf_read.c | 70 +++++++++++++++++++++++++++++++++++++++++++ tools/intel_nc_write.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++ tools/intel_punit_write.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 224 insertions(+) create mode 100644 tools/intel_iosf_read.c create mode 100644 tools/intel_nc_write.c create mode 100644 tools/intel_punit_write.c diff --git a/lib/intel_gpu_tools.h b/lib/intel_gpu_tools.h index 88c3eb4..77aac5d 100644 --- a/lib/intel_gpu_tools.h +++ b/lib/intel_gpu_tools.h @@ -50,7 +50,9 @@ uint32_t intel_dpio_reg_read(uint32_t reg); void intel_dpio_reg_write(uint32_t reg, uint32_t val); int intel_punit_read(uint8_t addr, uint32_t *val); +int intel_punit_write(uint8_t addr, uint32_t val); int intel_nc_read(uint8_t addr, uint32_t *val); +int intel_nc_write(uint8_t addr, uint32_t val); #define INTEL_RANGE_RSVD (0<<0) /* Shouldn't be read or written */ #define INTEL_RANGE_READ (1<<0) diff --git a/tools/Makefile.am b/tools/Makefile.am index d253a67..2519169 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -24,6 +24,8 @@ bin_PROGRAMS = \ intel_dpio_write \ intel_l3_parity \ intel_punit_read \ + intel_punit_write \ + intel_nc_write \ intel_nc_read noinst_PROGRAMS = \ diff --git a/tools/intel_iosf_read.c b/tools/intel_iosf_read.c new file mode 100644 index 0000000..15cd82c --- /dev/null +++ b/tools/intel_iosf_read.c @@ -0,0 +1,70 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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: + * Vijay Purushothaman + * + */ + +#include +#include +#include +#include +#include +#include "intel_gpu_tools.h" + +static void usage(char *cmdname) +{ + printf("Warning : This program will work only on Valleyview\n"); + printf("Usage: %s [addr]\n", cmdname); + printf("\t addr : in 0xXXXX format\n"); +} + +int main(int argc, char** argv) +{ + int ret = 0; + uint32_t reg, val; + char *cmdname = strdup(argv[0]); + struct pci_device *dev = intel_get_pci_device(); + + if (argc != 2 || !IS_VALLEYVIEW(dev->device_id)) { + usage(cmdname); + ret = 1; + goto out; + } + + sscanf(argv[1], "0x%x", ®); + + intel_register_access_init(dev, 0); + + ret = intel_iosf_read(reg, &val); + if (ret) + fprintf(stderr, "iosf read failed: %d\n", ret); + + printf("Read IOSF register: 0x%x - Value : 0x%x\n", reg, val); + + intel_register_access_fini(); + +out: + free(cmdname); + return ret; +} diff --git a/tools/intel_nc_write.c b/tools/intel_nc_write.c new file mode 100644 index 0000000..58be79a --- /dev/null +++ b/tools/intel_nc_write.c @@ -0,0 +1,75 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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: + * Vijay Purushothaman + * + */ + +#include +#include +#include +#include +#include +#include "intel_gpu_tools.h" + +static void usage(char *cmdname) +{ + printf("Warning : This program will work only on Valleyview\n"); + printf("Usage: %s addr value\n", cmdname); + printf("\t addr : in 0xXXXX format\n"); +} + +int main(int argc, char** argv) +{ + int ret = 0; + uint32_t reg, val, tmp; + char *cmdname = strdup(argv[0]); + struct pci_device *dev = intel_get_pci_device(); + + if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { + usage(cmdname); + ret = 1; + goto out; + } + + sscanf(argv[1], "0x%x", ®); + sscanf(argv[2], "0x%x", &val); + + intel_register_access_init(dev, 0); + + intel_nc_read(reg, &tmp); + printf("Value before: 0x%X\n", tmp); + + ret = intel_nc_write(reg, val); + if (ret) + fprintf(stderr, "Nc write failed: %d\n", ret); + + intel_nc_read(reg, &tmp); + printf("Value after: 0x%X\n", tmp); + + intel_register_access_fini(); + +out: + free(cmdname); + return ret; +} diff --git a/tools/intel_punit_write.c b/tools/intel_punit_write.c new file mode 100644 index 0000000..eb036ba --- /dev/null +++ b/tools/intel_punit_write.c @@ -0,0 +1,75 @@ +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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: + * Vijay Purushothaman + * + */ + +#include +#include +#include +#include +#include +#include "intel_gpu_tools.h" + +static void usage(char *cmdname) +{ + printf("Warning : This program will work only on Valleyview\n"); + printf("Usage: %s addr value\n", cmdname); + printf("\t addr : in 0xXXXX format\n"); +} + +int main(int argc, char** argv) +{ + int ret = 0; + uint32_t reg, val, tmp; + char *cmdname = strdup(argv[0]); + struct pci_device *dev = intel_get_pci_device(); + + if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { + usage(cmdname); + ret = 1; + goto out; + } + + sscanf(argv[1], "0x%x", ®); + sscanf(argv[2], "0x%x", &val); + + intel_register_access_init(dev, 0); + + intel_punit_read(reg, &tmp); + printf("Value before: 0x%X\n", tmp); + + ret = intel_punit_write(reg, val); + if (ret) + fprintf(stderr, "Punit write failed: %d\n", ret); + + intel_punit_read(reg, &tmp); + printf("Value after: 0x%X\n", tmp); + + intel_register_access_fini(); + +out: + free(cmdname); + return ret; +} -- 2.7.4