<p>Evgeny Zinoviev has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/27776">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/pmh7tool<br><br>A tool that dumps PMH7 registers.<br><br>Change-Id: I05ccb5a9a861fe44efec794aafe1805062543d53<br>Signed-off-by: Evgeny Zinoviev <me@ch1p.com><br>---<br>A util/pmh7tool/Makefile<br>A util/pmh7tool/pmh7tool.c<br>A util/pmh7tool/pmh7tool.h<br>3 files changed, 96 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/76/27776/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/util/pmh7tool/Makefile b/util/pmh7tool/Makefile</span><br><span>new file mode 100644</span><br><span>index 0000000..07a7a28</span><br><span>--- /dev/null</span><br><span>+++ b/util/pmh7tool/Makefile</span><br><span>@@ -0,0 +1,23 @@</span><br><span style="color: hsl(120, 100%, 40%);">+CC = gcc</span><br><span style="color: hsl(120, 100%, 40%);">+CFLAGS = -O2 -Wall -W -Werror</span><br><span style="color: hsl(120, 100%, 40%);">+PROGRAM = pmh7tool</span><br><span style="color: hsl(120, 100%, 40%);">+INSTALL = /usr/bin/install</span><br><span style="color: hsl(120, 100%, 40%);">+PREFIX      = /usr/local</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+all: $(PROGRAM)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+$(PROGRAM): pmh7tool.o</span><br><span style="color: hsl(120, 100%, 40%);">+     $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+install: $(PROGRAM)</span><br><span style="color: hsl(120, 100%, 40%);">+    $(INSTALL) $(PROGRAM) $(PREFIX)/sbin</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+clean:</span><br><span style="color: hsl(120, 100%, 40%);">+        rm -f *.o $(PROGRAM)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+distclean: clean</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+%.o: %.c</span><br><span style="color: hsl(120, 100%, 40%);">+  $(CC) $(CFLAGS) -c $^ -I. -o $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.PHONY: all install clean distclean</span><br><span>diff --git a/util/pmh7tool/pmh7tool.c b/util/pmh7tool/pmh7tool.c</span><br><span>new file mode 100644</span><br><span>index 0000000..26807de7</span><br><span>--- /dev/null</span><br><span>+++ b/util/pmh7tool/pmh7tool.c</span><br><span>@@ -0,0 +1,62 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdio.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdlib.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <getopt.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <sys/io.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include "pmh7tool.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+unsigned char pmh7_register_read(int reg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    outb(reg, EC_LENOVO_PMH7_ADDR);</span><br><span style="color: hsl(120, 100%, 40%);">+       return inb(EC_LENOVO_PMH7_DATA);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void pmh7_register_write(int reg, int val)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  outb(reg, EC_LENOVO_PMH7_ADDR);</span><br><span style="color: hsl(120, 100%, 40%);">+       outb(val, EC_LENOVO_PMH7_DATA);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void print_usage(const char *name)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("usage: %s\n", name);</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("\n"</span><br><span style="color: hsl(120, 100%, 40%);">+            "       -h | --help:    print this help\n"</span><br><span style="color: hsl(120, 100%, 40%);">+                  "       -d | --dump:    print registers\n"</span><br><span style="color: hsl(120, 100%, 40%);">+                  "\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   exit(1);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int main(int argc, char *argv[])</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    int opt, option_index = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    static struct option long_options[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               {"help", 0, 0, 'h'},</span><br><span style="color: hsl(120, 100%, 40%);">+                {"dump", 0, 0, 'd'},</span><br><span style="color: hsl(120, 100%, 40%);">+                {0, 0, 0, 0}</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  while ((opt = getopt_long(argc, argv, "hd",</span><br><span style="color: hsl(120, 100%, 40%);">+                           long_options, &option_index)) != EOF) {</span><br><span style="color: hsl(120, 100%, 40%);">+         switch (opt) {</span><br><span style="color: hsl(120, 100%, 40%);">+                case 'd':</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 'h':</span><br><span style="color: hsl(120, 100%, 40%);">+             default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      print_usage(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ioperm(EC_LENOVO_PMH7_BASE, 0x100, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        for (int i = 0; i < 0x100; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if ((i % 0x10) == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (i != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                           printf("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                       printf("%02x: ", i);</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("%02x ", pmh7_register_read(i));</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/util/pmh7tool/pmh7tool.h b/util/pmh7tool/pmh7tool.h</span><br><span>new file mode 100644</span><br><span>index 0000000..651526f</span><br><span>--- /dev/null</span><br><span>+++ b/util/pmh7tool/pmh7tool.h</span><br><span>@@ -0,0 +1,11 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef PMH7TOOL_H</span><br><span style="color: hsl(120, 100%, 40%);">+#define PMH7TOOL_H</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define EC_LENOVO_PMH7_BASE 0x15e0</span><br><span style="color: hsl(120, 100%, 40%);">+#define EC_LENOVO_PMH7_ADDR (EC_LENOVO_PMH7_BASE + 0x0c)</span><br><span style="color: hsl(120, 100%, 40%);">+#define EC_LENOVO_PMH7_DATA (EC_LENOVO_PMH7_BASE + 0x0e)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+unsigned char pmh7_register_read(int reg);</span><br><span style="color: hsl(120, 100%, 40%);">+void pmh7_register_write(int reg, int val);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* PMH7TOOL_H */</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/27776">change 27776</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/27776"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I05ccb5a9a861fe44efec794aafe1805062543d53 </div>
<div style="display:none"> Gerrit-Change-Number: 27776 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Evgeny Zinoviev <me@ch1p.com> </div>