[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