[coreboot-gerrit] New patch to review for coreboot: e4351ac util/inteltool: Allow GPIO dumps to be in binary map format
Edward O'Callaghan (eocallaghan@alterapraxis.com)
gerrit at coreboot.org
Mon Aug 25 20:39:53 CEST 2014
Edward O'Callaghan (eocallaghan at alterapraxis.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6763
-gerrit
commit e4351accc183bc36dbba47b7e6535d4175bbcd26
Author: Edward O'Callaghan <eocallaghan at alterapraxis.com>
Date: Tue Aug 26 04:36:26 2014 +1000
util/inteltool: Allow GPIO dumps to be in binary map format
NOTFORMERGE: needs a little more work..
Essentially we wish to have the machine parse the GPIO dump in other
tools (sic intelgpio) and generate source based off the dumped map.
Change-Id: I06a2777e6ea3a90bf509c323496b5980d06071ad
Signed-off-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>
---
util/inteltool/gpio.c | 59 ++++++++++++++++++++++++++++++++++------------
util/inteltool/inteltool.c | 16 +++++++++----
util/inteltool/inteltool.h | 2 +-
3 files changed, 57 insertions(+), 20 deletions(-)
diff --git a/util/inteltool/gpio.c b/util/inteltool/gpio.c
index 49c1325..c96f1d0 100644
--- a/util/inteltool/gpio.c
+++ b/util/inteltool/gpio.c
@@ -333,24 +333,45 @@ static const gpio_default_t pp_pch_mobile_defaults[] = {
static uint16_t gpiobase;
-static void print_reg(const io_register_t *const reg)
+static void dump_reg(const io_register_t *const reg)
{
switch (reg->size) {
case 4:
- printf("gpiobase+0x%04x: 0x%08x (%s)\n",
- reg->addr, inl(gpiobase+reg->addr), reg->name);
+ printf("0x%04x 0x%08x\n",
+ reg->addr, inl(gpiobase+reg->addr));
break;
case 2:
- printf("gpiobase+0x%04x: 0x%04x (%s)\n",
- reg->addr, inw(gpiobase+reg->addr), reg->name);
+ printf("0x%04x 0x%04x\n",
+ reg->addr, inw(gpiobase+reg->addr));
break;
case 1:
- printf("gpiobase+0x%04x: 0x%02x (%s)\n",
- reg->addr, inb(gpiobase+reg->addr), reg->name);
+ printf("0x%04x 0x%02x\n",
+ reg->addr, inb(gpiobase+reg->addr));
break;
}
}
+static void print_reg(const io_register_t *const reg, int dump)
+{
+ if (dump)
+ dump_reg(reg);
+ else
+ switch (reg->size) {
+ case 4:
+ printf("gpiobase+0x%04x: 0x%08x (%s)\n",
+ reg->addr, inl(gpiobase+reg->addr), reg->name);
+ break;
+ case 2:
+ printf("gpiobase+0x%04x: 0x%04x (%s)\n",
+ reg->addr, inw(gpiobase+reg->addr), reg->name);
+ break;
+ case 1:
+ printf("gpiobase+0x%04x: 0x%02x (%s)\n",
+ reg->addr, inb(gpiobase+reg->addr), reg->name);
+ break;
+ }
+}
+
static uint32_t get_diff(const io_register_t *const reg, const uint32_t def)
{
uint32_t gpio_diff = 0;
@@ -393,17 +414,19 @@ static void print_diff(const io_register_t *const reg,
}
}
-int print_gpios(struct pci_dev *sb, int show_all, int show_diffs)
+int print_gpios(struct pci_dev *sb, int show_all, int show_diffs, int bin_dump)
{
int i, j, size, defaults_size = 0;
const io_register_t *gpio_registers;
const gpio_default_t *gpio_defaults = NULL;
uint32_t gpio_diff;
- if (show_diffs && !show_all)
- printf("\n========== GPIO DIFFS ===========\n\n");
- else
- printf("\n============= GPIOS =============\n\n");
+ if (!bin_dump) {
+ if (show_diffs && !show_all)
+ printf("\n========== GPIO DIFFS ===========\n\n");
+ else
+ printf("\n============= GPIOS =============\n\n");
+ }
switch (sb->device_id) {
case PCI_DEVICE_ID_INTEL_Z68:
@@ -556,12 +579,15 @@ int print_gpios(struct pci_dev *sb, int show_all, int show_diffs)
return 1;
}
- printf("GPIOBASE = 0x%04x (IO)\n\n", gpiobase);
+ if (bin_dump)
+ printf("\n<--------- GPIOBASE = 0x%04x --------->\n\n", gpiobase);
+ else
+ printf("GPIOBASE = 0x%04x (IO)\n\n", gpiobase);
j = 0;
for (i = 0; i < size; i++) {
if (show_all)
- print_reg(&gpio_registers[i]);
+ print_reg(&gpio_registers[i], bin_dump);
if (show_diffs &&
(j < defaults_size) &&
@@ -570,7 +596,7 @@ int print_gpios(struct pci_dev *sb, int show_all, int show_diffs)
gpio_defaults[j].def);
if (gpio_diff) {
if (!show_all)
- print_reg(&gpio_registers[i]);
+ print_reg(&gpio_registers[i], bin_dump);
print_diff(&gpio_registers[i],
gpio_defaults[j].def, gpio_diff);
if (!show_all)
@@ -580,5 +606,8 @@ int print_gpios(struct pci_dev *sb, int show_all, int show_diffs)
}
}
+ if (bin_dump)
+ printf("\n<------------------------------------->\n");
+
return 0;
}
diff --git a/util/inteltool/inteltool.c b/util/inteltool/inteltool.c
index c6e2a67..ad7ed7f 100644
--- a/util/inteltool/inteltool.c
+++ b/util/inteltool/inteltool.c
@@ -203,6 +203,7 @@ void print_usage(const char *name)
printf("\n"
" -v | --version: print the version\n"
" -h | --help: print this help\n\n"
+ " -b | --gpios-bin: dump soutbridge GPIO registers in binary format\n"
" -g | --gpio: dump soutbridge GPIO registers\n"
" -G | --gpio-diffs: show GPIO differences from defaults\n"
" -r | --rcba: dump soutbridge RCBA registers\n"
@@ -227,7 +228,7 @@ int main(int argc, char *argv[])
char *sbname = "unknown", *nbname = "unknown";
- int dump_gpios = 0, dump_mchbar = 0, dump_rcba = 0;
+ int dump_gpios = 0, dump_gpios_bin = 0, dump_mchbar = 0, dump_rcba = 0;
int dump_pmbase = 0, dump_epbar = 0, dump_dmibar = 0;
int dump_pciexbar = 0, dump_coremsrs = 0, dump_ambs = 0;
int show_gpio_diffs = 0;
@@ -235,6 +236,7 @@ int main(int argc, char *argv[])
static struct option long_options[] = {
{"version", 0, 0, 'v'},
{"help", 0, 0, 'h'},
+ {"gpios-bin", 0, 0, 'b'},
{"gpios", 0, 0, 'g'},
{"gpio-diffs", 0, 0, 'G'},
{"mchbar", 0, 0, 'm'},
@@ -249,13 +251,16 @@ int main(int argc, char *argv[])
{0, 0, 0, 0}
};
- while ((opt = getopt_long(argc, argv, "vh?gGrpmedPMaA",
+ while ((opt = getopt_long(argc, argv, "vh?bgGrpmedPMaA",
long_options, &option_index)) != EOF) {
switch (opt) {
case 'v':
print_version();
exit(0);
break;
+ case 'b':
+ dump_gpios_bin = 1;
+ break;
case 'g':
dump_gpios = 1;
break;
@@ -398,10 +403,13 @@ int main(int argc, char *argv[])
/* Now do the deed */
if (dump_gpios) {
- print_gpios(sb, 1, show_gpio_diffs);
+ print_gpios(sb, 1, show_gpio_diffs, 0);
+ printf("\n\n");
+ } else if (dump_gpios_bin) {
+ print_gpios(sb, 1, show_gpio_diffs, 1);
printf("\n\n");
} else if (show_gpio_diffs) {
- print_gpios(sb, 0, show_gpio_diffs);
+ print_gpios(sb, 0, show_gpio_diffs, 0);
printf("\n\n");
}
diff --git a/util/inteltool/inteltool.h b/util/inteltool/inteltool.h
index a06c70d..4edbff2 100644
--- a/util/inteltool/inteltool.h
+++ b/util/inteltool/inteltool.h
@@ -185,7 +185,7 @@ int print_intel_core_msrs(void);
int print_mchbar(struct pci_dev *nb, struct pci_access *pacc);
int print_pmbase(struct pci_dev *sb, struct pci_access *pacc);
int print_rcba(struct pci_dev *sb);
-int print_gpios(struct pci_dev *sb, int show_all, int show_diffs);
+int print_gpios(struct pci_dev *sb, int show_all, int show_diffs, int bin_dump);
int print_epbar(struct pci_dev *nb);
int print_dmibar(struct pci_dev *nb);
int print_pciexbar(struct pci_dev *nb);
More information about the coreboot-gerrit
mailing list