=?gb2312?b?tPC4tA==?=: Prefmem of bus 3
Eric W. Biederman
ebiederman at lnxi.com
Wed Mar 10 20:14:00 CET 2004
ron minnich <rminnich at lanl.gov> writes:
> On Tue, 9 Mar 2004, YhLu wrote:
> > I mean
> > /* Get the base address */
> > base = resource->base;
> > /* Get the resource alignment */
> > align = 1UL << resource->align;
> > /* Get the limit (rounded up) */
> > limit = base + ((resource->size + align - 1UL) & ~(align - 1UL))
> > -1UL;
> I am thinking now about what you said. Granularity is the units of
> allocation. Alignment is the alignment of the data.
> Examples: 64 byte granularity, 32-byte alignment, you can see that
> addresses of 32, 64, 96, etc. are acceptable.
> 64 byte granularity, 64 byte alignment, only addresses of
> 64, 128, ... are acceptable.
> If memory serves, behind a bridge, the memory space granularity is 16 bits
> (or is it 20? memory fails). Alignment is more or less the size of the
> Looking at quadrics, the resource is 28 bits, so that will have to be the
> alignment, and granularity is 20 bits.
> So the expression above is wrong, I think you are correct. It will work in
> many cases but fail in some. I think it should be this:
> limit = base + ((resource->size + gran - 1UL) & ~(gran - 1UL)) -1UL
> as you already said.
> I.e. take the base, add a size rounded up to gran, and add it to base.
That is right. I feel quite silly that is the code that is sitting in
my tree and I feel for not getting it pushed out earlier. I'm going
to many directions at once or something like that.
It has the additional comment:
/* Get the resource granularity */
gran = 1UL << resource->gran;
/* For a non bridge resource granularity and alignment are the same.
* For a bridge resource align is the largest needed alignment below
* the bridge. While the granularity is simply how many low bits of the
* address cannot be set.
/* Get the limit (rounded up) */
limit = base + ((resource->size + gran - 1UL) & ~(gran - 1UL)) -1UL;
I will get this committed shortly. At least I chose sane names so this
could be reasoned out.
More information about the coreboot