YhLu <[EMAIL PROTECTED]> 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
_______________________________________________
Linuxbios mailing list
[EMAIL PROTECTED]
http://www.clustermatic.org/mailman/listinfo/linuxbios

Reply via email to