[coreboot] V3 simpler resource allocator

Myles Watson mylesgw at gmail.com
Tue Dec 30 19:11:53 CET 2008


These two patches are the resource allocator I've been working on.  The
biggest thing it does is simplify the resource allocator by splitting it
into distinct phases:
1. read resources
2. constrain resources around fixed resources
3. sum resource needs
4. assign values

This means that there are no more calls to compute_allocate_resources from
specific devices, which makes the process easier to follow.

Boot tested (with patches that will be coming shortly) on qemu, serengeti,
kontron, and dbe62.

Signed-off-by: Myles Watson <mylesgw at gmail.com>

Thanks,
Myles

I split it into two patches: one which implements most of the changes, and
the other which updates device code.

resource-allocation.diff:

device/device.c:
    Remove references to have_resources.
    Remove read_resources from compute allocate resources.
    Split compute_allocate_resources into two
    1. compute_resource_needs
        A. Traverse the tree depth first
        B. Sum resources
        C. Adjust limits and bases
        D. Update bridge resources sizes
    2. assign_resource_values
        A. Traverse the tree breadth first
        B. Assign resource values

device/device_util.c:
    Remove references to have_resources.

device/pci_device.c:
    Remove saved values stubs (they're not needed now.)
        1. Sizing function restores values
    Fix 64-bit flag masking.
    Add an error message for an invalid value.
    Update pci_record_bridge_resource:
        1. remove compute_allocate_resource call
        2. remove pci_set_resource call
    Update pci_bus_read_resources to read children's too.
    Update pci_set_resource:
        1. change logic for setting zero-size resources
            A. Set range to [limit->limit-2^gran]
                (Could have been any range with base > limit)
        2. remove compute_allocate_resource calls
        3. Change phase4_assign_resources ->phase4_set_resources

device/pci_ops.c:
    Change an error message to be more helpful.

device/root_device.c:
    Remove code for read_resources and set resources.
    Add a .id to the ops.

include/device/device.h:
    Remove have_resources.
    Comment out assign_resources.  I think we could comment out more here.
    Add debugging function prototypes.
    Change phase4_assign_resources to phase4_set_resources.

include/device/resource.h
    Add a IORESOURCE_BRIDGE flag.

device/cardbus_device.c
    Remove compute_allocate_resource call.
    Use probe_resource (doesn't die) instead of find_resource.

specific-resources.diff:

This patch makes specific devices use the updated resource allocation code.

The changes necessary are:
    1. Remove all calls to compute_allocate_resources.
    2. Don't store resources except in phase4_set_resources.

northbridge/amd/k8/pci.c:
    Remove calls to compute_allocate_resource.
    Change phase4_assign_resources to phase4_set_resources

southbridge/amd/amd8132/amd8132_bridge.c:
    Remove NPUML and NPUMB.
    Add a warning for bus disabling.
    Remove bridge_{read|set}_resources (they were there for NPUML)

southbridge/nvidia/mcp55/lpc.c:
southbridge/amd/sb600/lpc.c:
    Remove references to have_resources.

southbridge/amd/amd8111/lpc.c:
    Add resources for subtractive IO and ROM.

northbridge/amd/k8/domain.c:
northbridge/intel/i440bxemulation/i440bx.c:
northbridge/amd/geodelx/geodelx.c:
northbridge/intel/i945/northbridge.c:
northbridge/via/cn700/stage2.c:
    Change phase4_assign_resources->phase4_set_resources.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20081230/34743c31/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: resource-allocation.diff
Type: text/x-patch
Size: 50359 bytes
Desc: not available
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20081230/34743c31/attachment.diff>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: specific-resources.diff
Type: text/x-patch
Size: 11343 bytes
Desc: not available
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20081230/34743c31/attachment-0001.diff>


More information about the coreboot mailing list