On Tue, Jan 17, 2006 at 01:41:39PM +0100, Janosch Machowinski wrote:
> >>>Sound like \_SB.INV7 is a bit into a GPIO.
> >>>More, the associated OR is defined like that:
> >>>   OperationRegion (GPIO, SystemIO, IO2B, 0x40) 
> >>>
> >>>Note that IO2B is given here:
> >>>  OperationRegion (BIOS, SystemMemory, 0x1FF50064, 0xFF)
> >>>  Field (BIOS, ByteAcc, NoLock, Preserve)
> >>>  {
> >>>      SS1,    1,
> >>>      SS2,    1,
> >>>      SS3,    1,
> >>>      SS4,    1,
> >>>      Offset (0x01),
> >>>      IOST,   16,
> >>>      SPIO,   16,
> >>>      PMBS,   16,
> >>>      PMLN,   8,
> >>>      SMBS,   16,
> >>>      SMLN,   8,
> >>>      IO1B,   16,
> >>>      IO1L,   8,
> >>>      IO2B,   16,
> >>>      IO2L,   8,
> >>>      TOPM,   32,
> >>>      ROMS,   32,
> >>>
> >>>Therefore one think to check is that IO2B is set correctly to point to
> >>>the GPIO's, then look if the GPIO is configured as a GPO (not as a GPI).
> >>>
> >>>For checking if IO2B is correct:
> >>>sudo dd if=/dev/mem bs=1c skip=536150130 count=2 | hexdump
> >>>
> >>
> >>Here it get's strange :
> >>scotchmobil scotch # dd if=/dev/mem bs=1c skip=536150130 count=2
> >>dd: reading `/dev/mem': Bad address
> >>0+0 records in
> >>0+0 records out
> >
> >
> >There is physical 512Mo RAM, isn't there? Or the DSDT have been
> >overriden?
> >How about a 'cat /proc/iomem'?
> >
> Jup, here is 512 MB of RAM, the DSDT hasen't been overidden.
> 
> 
> [EMAIL PROTECTED] ~ $ cat /proc/iomem
> 00000000-0009fbff : System RAM
> 0009fc00-0009ffff : reserved
> 000a0000-000bffff : Video RAM area
> 000c0000-000cffff : Video ROM
> 000f0000-000fffff : System ROM
> 00100000-1ff3ffff : System RAM
>   00100000-004853d6 : Kernel code
>   004853d7-00583193 : Kernel data
> 1ff40000-1ff4ffff : ACPI Tables
> 1ff50000-1fffffff : ACPI Non-volatile Storage
> 30000000-300003ff : 0000:00:1f.1
> 32000000-33ffffff : PCI CardBus #03
> 34000000-35ffffff : PCI CardBus #03
> 36000000-37ffffff : PCI CardBus #07
> 38000000-39ffffff : PCI CardBus #07
> ce900000-de9fffff : PCI Bus #01
>   d0000000-d7ffffff : 0000:01:00.0
>     d0000000-d7ffffff : radeon
> dea00000-deafffff : PCI Bus #02
> e0000000-efffffff : 0000:00:00.0
> ff800000-ff8fffff : PCI Bus #01
>   ff8c0000-ff8dffff : 0000:01:00.0
>   ff8f0000-ff8fffff : 0000:01:00.0
>     ff8f0000-ff8fffff : radeon
> ff900000-ff9fffff : PCI Bus #02
>   ff900000-ff900fff : 0000:02:01.0
>     ff900000-ff900fff : yenta_socket
>   ff901000-ff901fff : 0000:02:01.1
>     ff901000-ff901fff : yenta_socket
>   ff9ee000-ff9eefff : 0000:02:02.0
>   ff9ef800-ff9effff : 0000:02:01.2
>     ff9ef800-ff9effff : ohci1394
>   ff9f0000-ff9fffff : 0000:02:00.0
>     ff9f0000-ff9fffff : tg3
> ffaff400-ffaff4ff : 0000:00:1f.5
>   ffaff400-ffaff4ff : Intel 82801DB-ICH4
> ffaff800-ffaff9ff : 0000:00:1f.5
>   ffaff800-ffaff9ff : Intel 82801DB-ICH4
> ffaffc00-ffafffff : 0000:00:1d.7
>   ffaffc00-ffafffff : ehci_hcd

Ok.  Well maybe that little tool attached could give us the
information.

-- 
Bruno Ducrot

--  Which is worse:  ignorance or apathy?
--  Don't know.  Don't care.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <sys/types.h>
#include <sys/stat.h>


int main(void)
{
	int fd;
	off_t c;
	unsigned char t[2];

	fd = open("/dev/mem", O_RDONLY);
	if (fd < 0) {
		perror("open /dev/mem");
		exit(1);
	}

	/*
	 * SS1,    1,	<- 0
	 * SS2,    1,
	 * SS3,    1,
	 * SS4,    1,
	 * Offset (0x01),
	 * IOST,   16,	<-   1, 2
	 * SPIO,   16,	<-   3, 4
	 * PMBS,   16,	<-   5, 6
	 * PMLN,   8,	<-   7
	 * SMBS,   16,	<-   8, 9
	 * SMLN,   8,	<-   A
	 * IO1B,   16,	<-   B, C
	 * IO1L,   8,	<-   D
	 * IO2B,   16,	<-   E, F
	 * IO2L,   8,
	 * TOPM,   32,
	 * ROMS,   32,
	 */

	c = lseek(fd, 0x1FF50064 + 0xE, SEEK_SET);
	if (c != 0x1FF50064 + 0xE) {
		perror("lseek");
		exit(1);
	}

	if (read(fd, t, 2) != 2) {
		perror("read");
		close(fd);
		exit(1);
	}
	close(fd);

	printf("0x%x\n", ((t[0] & 0xff) << 8) | (t[1] & 0xff));

	return 0;
}

Reply via email to