public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Unable to read memory mapped PCI memory the second time == freezeup..
       [not found] <Pine.GSO.3.96.990710104147.7017A-100000@ext1>
@ 1999-07-11 12:03 ` Jes Sorensen
  0 siblings, 0 replies; only message in thread
From: Jes Sorensen @ 1999-07-11 12:03 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Klaus Nielsen, Linux Kernel list

>>>>> "Jeff" == Jeff Garzik <jgarzik@pobox.com> writes:

Jeff> Read linux/Documentation/IO-mapping.txt, and then use read?()
Jeff> and write?() for MMIO.  For example:

Jeff> 	byArgh = readb(global_vmemaddr); if(byArgh==0)
Jeff> printk(KERN_DEBUG "byArgh\n"); writeb (0x5a, global_vmemaddr);
Jeff> byArgh = readb(global_vmemaddr);

There is a number of memory barrier instructions missing in that
example, you need to put an mb() in after the writeb to make sure the
compiler doesn't cache the value written to the register. On
architectures which do not guarantee write ordering this shows up even
more since the CPU may decide to issue the instructions in a different
order (though this is mainly of interest if you are accessing several
different registers in the mapped area). Anyway the correct way to do
things is this way:

	byArgh = readb(global_vmemaddr);
	if(byArgh==0) printk(KERN_DEBUG "byArgh\n");
	writeb (0x5a, global_vmemaddr);
	mb();
	byArgh = readb(global_vmemaddr);

You are absolutely right about the use of readb/writeb though, one
should _never_ access PCI shared memory directly.

Jes

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~1999-07-11 12:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <Pine.GSO.3.96.990710104147.7017A-100000@ext1>
1999-07-11 12:03 ` Unable to read memory mapped PCI memory the second time == freezeup Jes Sorensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox