/sbus@1f,0/SUNW,fas@e,8800000 reg[0] -> 1ffe8800000 /sbus@1f,0/SUNW,fas@e,8800000 reg[1] -> 1ffe8810000 /sbus@1f,0/SUNW,hme@e,8c00000 reg[0] -> 1ffe8c00000 /sbus@1f,0/SUNW,hme@e,8c00000 reg[1] -> 1ffe8c02000 /sbus@1f,0/SUNW,hme@e,8c00000 reg[2] -> 1ffe8c04000 /sbus@1f,0/SUNW,hme@e,8c00000 reg[3] -> 1ffe8c06000 /sbus@1f,0/SUNW,hme@e,8c00000 reg[4] -> 1ffe8c07000 /sbus@1f,0/SUNW,hme@e,8c00000: prev regs overlap (e8c07fff), limiting e8c06fff. /sbus@1f,0/SUNW,bpp@e,c800000 reg[0] -> 1ffec800000 /sbus@1f,0/SUNW,hme@2,8c00000 reg[0] -> 1ff28c00000 /sbus@1f,0/SUNW,hme@2,8c00000 reg[1] -> 1ff28c02000 /sbus@1f,0/SUNW,hme@2,8c00000 reg[2] -> 1ff28c04000 /sbus@1f,0/SUNW,hme@2,8c00000 reg[3] -> 1ff28c06000 /sbus@1f,0/SUNW,hme@2,8c00000 reg[4] -> 1ff28c07000 /sbus@1f,0/SUNW,hme@2,8c00000: prev regs overlap (28c07fff), limiting 28c06fff. /sbus@1f,0/SUNW,fas@2,8800000 reg[0] -> 1ff28800000 /sbus@1f,0/SUNW,fas@2,8800000 reg[1] -> 1ff28810000 diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c index f53092b07b9e..8bd405cbc04f 100644 --- a/arch/sparc/kernel/of_device_64.c +++ b/arch/sparc/kernel/of_device_64.c @@ -412,6 +412,15 @@ static void __init build_device_resources(struct platform_device *op, r->start = result; r->end = result + size - 1; r->flags = flags; + + /* check for and correct simple bogusly overlapping resources */ + if (index > 0 && + op->resource[index-1].start <= r->end && + op->resource[index-1].end > r->start) { + printk(KERN_WARNING "%pOF: prev regs overlap (%x), limiting %x.\n", + op->dev.of_node, op->resource[index-1].end, r->start - 1); + op->resource[index-1].end = r->start - 1; + } } r->name = op->dev.of_node->full_name; }