S2885

Eric W. Biederman ebiederman at lnxi.com
Tue Oct 26 15:55:02 CEST 2004


YhLu <YhLu at tyan.com> writes:

> Comment out
> 
> //      resource->limit = info->mask | (step - 1);
> 
> In pnp_get_ioresource
> 
> Will make it works right.

That part of the code is correct.  Fixing that exposed the problem.

The chunk of code out of device.c:compute_allocate_resource() that
clamps the limit is below.

If you notice it currently ignores anything that is IORESOURCE_FIXED.
So if you hard code the problem resource in Config.lb the symptoms
will go away.

This is not a good long term solution, but it does work for now.
This is a general problem with taking resource limits into account
and compute_allocate_resource() needs an overhaul to do that properly.
I will get to that as soon as I get back to getting 64bit resource
handling properly and making it generic.  So it should not be delayed
too long.

		/* Do NOT I repeat do not ignore resources which have zero size.
		 * If they need to be ignored dev->read_resources should not even
		 * return them.   Some resources must be set even when they have
		 * no size.  PCI bridge resources are a good example of this.
		 */

		/* Propogate the resource alignment to the bridge register  */
		if (resource->align > bridge->align) {
			bridge->align = resource->align;
		}

		/* Make certain we are dealing with a good minimum size */
		size = resource->size;
		align = resource->align;
		if (align < min_align) {
			align = min_align;
		}
		if (resource->flags & IORESOURCE_FIXED) {
			continue;
		}
		/* Propogate the resource limit to the bridge register */
		if (bridge->limit > resource->limit) {
			bridge->limit = resource->limit;
		}
		/* Artificially deny limits between DEVICE_MEM_HIGH and 0xffffffff */
		if ((bridge->limit > DEVICE_MEM_HIGH) && (bridge->limit <= 0xffffffff)) {
			bridge->limit = DEVICE_MEM_HIGH;
		}


Eric



More information about the coreboot mailing list