RE: ((struct pci_dev*)dev)->resource[...].start

From: Khachaturov, Vassilii (Vassilii.Khachaturov@comverse.com)
Date: Wed May 16 2001 - 17:13:28 EST


Jeff,
Many thanks for the clarifications.

> From: Jeff Garzik
> "Khachaturov, Vassilii" wrote:
[snip]
> > bootup, the mapping of the PCI base address registers to
> virtual memory will
> > remain the same (just as seen in /proc/pci, and as
> reflected in <subj>)? If
> > not, is there a way to freeze it for the time I want to access it?
>
> This is not a safe assumption, because the OS may reprogram
> the PCI BARs
> at certain times. The rule is: ALWAYS read from
> dev->resource[] unless
> you are a bus driver (PCI bridges, for example, need to assign
> resources).
[snip]

I am not a bus driver, and I do call pci_enable_device once my device gets
probed and recognized by my driver. I always read from dev->resource[].
But what are the "certain times" you've mentioned? What is the scope
within which I know the BARs didn't change?
 
> Finally, make sure to use pci_resource_{start,end,len,flags} macros to
> make your core more portable and future-proof.
I didn't use the macros - now I do, thanks for the tip!

> > 2) (Basically, the question is "Do I understand
> Documentation/IO-mapping.txt
> > right?")
> > PCI memory, whenever IO type or memory type, can not be
> dereferenced but
> > should be accessed with readb() etc. On i386, PCI mem
> (memory type) can be
> > accessed by direct pointer access, but this is not portable.
>
> We will yell at you mightily if you directly access PCI mem with a
> pointer. As you say it only works on i386 -- but IIRC since

Right now I am porting a driver to Linux which has so much i386 things in it

(esp. byte order stuff). So far I haven't spoilt it with PCI i386 hacks
though...

> ioremap is
> required, we are perfectly free to change or modify that assumption.
> For example ioremap might [have to] care about whether or not
> a pci mem
> region is prefetchable.

A really silly q. (I don't quite understand the Linux internals yet):
Is ioremap() needed (in general vs. i386) for memory type PCI memory too,
or only for IO type?
(In case the default size of the region associated with a BAR is fine with
me?)

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



This archive was generated by hypermail 2b29 : Wed May 23 2001 - 21:00:19 EST