[coreboot] [PATCH]ich_gpio_dump util

Uwe Hermann uwe at hermann-uwe.de
Tue Feb 26 16:52:38 CET 2008


Maybe we want something like this in superiotool? It's not _really_
superio-related, but as we now start dumping EC information and other
stuff in superiotool we might also do this.

Having extra tools for such small stuff feels a bit strange.


On Sun, Feb 24, 2008 at 12:04:16PM -0500, joe at smittys.pointclark.net wrote:
> Index: intel-debugtools/ich_gpio_dump/ich_gpio.c
> ===================================================================
> --- intel-debugtools/ich_gpio_dump/ich_gpio.c	(revision 0)
> +++ intel-debugtools/ich_gpio_dump/ich_gpio.c	(revision 0)
> @@ -0,0 +1,95 @@
> +/*
> + * dump gpio on intel ICH series southbridges
> + *
> + * Copyright (C) 2008 by coresystems GmbH 
> + * written by Stefan Reinauer <stepan at coresystems.de> 
> + * modded for all ICH's by Joseph Smith <joe at smittys.pointclark.net>

If it's modded enough to be non-trivial, add

Copyright (C) 2008 Joseph Smith <joe at smittys.pointclark.net>

otherwise please drop this line. The license header should only contain
copyright holders IMO.


> +int map_gpio(uint16_t gpio)
> +{
> +	int i;
> +	unsigned long size=0x40;
> +
> +	for (i=0; i<size; i+=4) {
> +		printf("gpiobase+0x%04x: 0x%08x\n", i, inl(gpio+i));
> +	}
> +
> +	return 0;
> +}

Please run indent over the code so it complies with the coding
standards.


> +
> +int main(int argc, char *argv[])
> +{
> +	struct pci_access *pacc;
> +	struct pci_dev *sb;
> +	uint16_t gpiobadd;
> +	uint16_t device;
> +
> +	if (iopl(3)) { printf("You need to be root.\n"); exit(1); }
> +
> +	pacc = pci_alloc();
> +	pci_init(pacc);
> +	pci_scan_bus(pacc);
> +
> +	sb = pci_get_dev(pacc, 0, 0, 0x1f, 0);
> +	if (!sb) {
> +		printf("No southbridge found.\n");
> +		pci_cleanup(pacc);
> +		exit(1);
> +	}
> +
> +	if (pci_read_word(sb, 0) != 0x8086) {
> +		printf("Not an Intel southbridge.\n");
> +		
> +		pci_free_dev(sb);
> +		pci_cleanup(pacc);
> +		exit(1);
> +	}
> +
> +	printf("Intel Southbridge: %04x:%04x\n", 
> +		pci_read_word(sb, 0), pci_read_word(sb, 2));
> +
> +	device = pci_read_word(sb, 2);
> +
> +	if (device < 0x2640) {
> +		gpiobadd = pci_read_word(sb, 0x58) & 0xfffc; 
> +	} else if (device >= 0x2640) {
> +		gpiobadd = pci_read_word(sb, 0x48) & 0xfffc;
> +	}
> +	printf("GPIOBASE = 0x%04x\n\n", gpiobadd);

Hm, maybe this can even be done with some small shell script magic and
lspci and similar standard tools? If so, I'd prefer such a script
and / or just a small code snippet in the wiki?


Uwe.
-- 
http://www.hermann-uwe.de  | http://www.holsham-traders.de
http://www.crazy-hacks.org | http://www.unmaintained-free-software.org




More information about the coreboot mailing list