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