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@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.