[Intel-gfx] [PATCH 09/10] quick_dump: Connect libpciaccess and other utils
Ben Widawsky
ben at bwidawsk.net
Sun Feb 3 19:15:58 CET 2013
On Sat, Feb 02, 2013 at 04:08:01PM -0800, Ben Widawsky wrote:
> Make a register access library with sample to do register reads
>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
> tools/quick_dump/Makefile.am | 14 +++++++++-----
> tools/quick_dump/chipset.i | 16 ++++++++++++++--
> tools/quick_dump/intel_chipset.c | 7 +++++++
> tools/quick_dump/quick_dump.py | 5 ++---
> tools/quick_dump/reg_access.py | 25 +++++++++++++++++++++++++
> 5 files changed, 57 insertions(+), 10 deletions(-)
> create mode 100755 tools/quick_dump/reg_access.py
>
> diff --git a/tools/quick_dump/Makefile.am b/tools/quick_dump/Makefile.am
> index 6c04dd5..4711830 100644
> --- a/tools/quick_dump/Makefile.am
> +++ b/tools/quick_dump/Makefile.am
> @@ -1,14 +1,18 @@
> BUILT_SOURCES = chipset_wrap_python.c
>
> -bin_SCRIPTS = quick_dump.py chipset.py
> +bin_SCRIPTS = quick_dump.py chipset.py reg_access.py
>
> lib_LTLIBRARIES = I915ChipsetPython.la
> -I915ChipsetPython_la_CFLAGS = -I$(top_srcdir)/lib $(PYTHON_CPPFLAGS)
> -I915ChipsetPython_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS)
> -I915ChipsetPython_la_SOURCES = chipset_wrap_python.c intel_chipset.c
> +I915ChipsetPython_la_CFLAGS = -I$(top_srcdir)/lib $(PYTHON_CPPFLAGS) $(CFLAGS) -I/usr/include/libdrm/
> +I915ChipsetPython_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) -lpciaccess
> +I915ChipsetPython_la_SOURCES = chipset_wrap_python.c intel_chipset.c \
> + ../../lib/intel_drm.c \
> + ../../lib/intel_pci.c \
> + ../../lib/intel_reg_map.c \
> + ../../lib/intel_mmio.c
I should probably $(top_srcdir)/lib these sources. Fixed locally.
>
> chipset_wrap_python.c: chipset.i
> - $(SWIG) $(AX_SWIG_PYTHON_OPT) -I$(top_srcdir)/lib -o $@ $<
> + $(SWIG) $(AX_SWIG_PYTHON_OPT) -I/usr/include -I$(top_srcdir)/lib -o $@ $<
>
> all-local: I915ChipsetPython.la
> $(LN_S) -f .libs/I915ChipsetPython.so _chipset.so
> diff --git a/tools/quick_dump/chipset.i b/tools/quick_dump/chipset.i
> index 16c4932..2f4f5ef 100644
> --- a/tools/quick_dump/chipset.i
> +++ b/tools/quick_dump/chipset.i
> @@ -1,12 +1,24 @@
> -%module chipset
> +%module chipset
> +%include "stdint.i"
> %{
> +#include <pciaccess.h>
> +#include <stdint.h>
> #include "intel_chipset.h"
> extern int is_sandybridge(unsigned short pciid);
> extern int is_ivybridge(unsigned short pciid);
> extern int is_valleyview(unsigned short pciid);
> +extern struct pci_device *intel_get_pci_device();
> +extern int intel_register_access_init(struct pci_device *pci_dev, int safe);
> +extern uint32_t intel_register_read(uint32_t reg);
> +extern void intel_register_access_fini();
> +extern unsigned short pcidev_to_devid(struct pci_device *pci_dev);
> %}
>
> -%include "intel_chipset.h"
> extern int is_sandybridge(unsigned short pciid);
> extern int is_ivybridge(unsigned short pciid);
> extern int is_valleyview(unsigned short pciid);
> +extern struct pci_device *intel_get_pci_device();
> +extern int intel_register_access_init(struct pci_device *pci_dev, int safe);
> +extern uint32_t intel_register_read(uint32_t reg);
> +extern void intel_register_access_fini();
> +extern unsigned short pcidev_to_devid(struct pci_device *pci_dev);
> diff --git a/tools/quick_dump/intel_chipset.c b/tools/quick_dump/intel_chipset.c
> index b242ffc..d6e7f91 100644
> --- a/tools/quick_dump/intel_chipset.c
> +++ b/tools/quick_dump/intel_chipset.c
> @@ -1,3 +1,4 @@
> +#include <pciaccess.h>
> #include "intel_chipset.h"
>
> int is_sandybridge(unsigned short pciid)
> @@ -14,3 +15,9 @@ int is_valleyview(unsigned short pciid)
> {
> return IS_VALLEYVIEW(pciid);
> }
> +
> +/* Simple helper because I couldn't make this work in the script */
> +unsigned short pcidev_to_devid(struct pci_device *pdev)
> +{
> + return pdev->device_id;
> +}
> diff --git a/tools/quick_dump/quick_dump.py b/tools/quick_dump/quick_dump.py
> index 59cae1f..44aa2ba 100755
> --- a/tools/quick_dump/quick_dump.py
> +++ b/tools/quick_dump/quick_dump.py
> @@ -32,9 +32,8 @@ if args.baseless == False:
> parse_file(file)
>
> if args.autodetect:
> - sysfs_file = open('/sys/class/drm/card0/device/device', 'r')
> - devid_str = sysfs_file.read()
> - devid = int(devid_str, 16)
> + pci_dev = chipset.intel_get_pci_device()
> + devid = chipset.pcidev_to_devid(pci_dev)
> if chipset.is_sandybridge(devid):
> args.profile = open('sandybridge', 'r')
> elif chipset.is_ivybridge(devid):
> diff --git a/tools/quick_dump/reg_access.py b/tools/quick_dump/reg_access.py
> new file mode 100755
> index 0000000..0f63424
> --- /dev/null
> +++ b/tools/quick_dump/reg_access.py
> @@ -0,0 +1,25 @@
> +#!/usr/bin/env python3
> +import chipset
> +
> +def read(reg):
> + reg = int(reg, 16)
> + val = chipset.intel_register_read(reg)
> + return val
> +
> +def init():
> + pci_dev = chipset.intel_get_pci_device()
> + ret = chipset.intel_register_access_init(pci_dev, 0)
> + if ret != 0:
> + print("Register access init failed");
> + return False
> + return True
> +
> +if __name__ == "__main__":
> + import sys
> +
> + if init() == False:
> + sys.exit()
> +
> + reg = sys.argv[1]
> + print(hex(read(reg)))
> + chipset.intel_register_access_fini()
> --
> 1.8.1.2
>
--
Ben Widawsky, Intel Open Source Technology Center
More information about the Intel-gfx
mailing list