• Marc Zyngier's avatar
    ARM: 7298/1: realview: fix mapping of MPCore private memory region · 34ae6c96
    Marc Zyngier authored
    Since commit 0536bdf3 (ARM: move iotable mappings within
    the vmalloc region), the RealView PB11MP cannot boot anymore.
    
    This is caused by the way the mappings are described on this
    platform (define replaced by hex values for clarity):
    
    {	/* GIC CPU interface mapping */
            .virtual        = IO_ADDRESS(0x1F000100),
            .pfn            = __phys_to_pfn(0x1F000100),
            .length         = SZ_4K,
            .type           = MT_DEVICE,
    }, {	/* GIC distributor mapping */
            .virtual        = IO_ADDRESS(0x1F001000),
            .pfn            = __phys_to_pfn(0x1F001000),
            .length         = SZ_4K,
            .type           = MT_DEVICE,
    }
    
    The first mapping ends up reserving two pages, and clashes with
    the second one, which triggers a BUG_ON in vm_area_add_early().
    
    In order to solve this problem, treat the MPCore private memory
    region (containing the SCU, the GIC and the TWD) as a single region,
    as described in the TRM:
    http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACGDJJC.html
    
    The EB11MP is converted the same way, even if it manages to avoid
    the problem.
    
    Tested on both PB11MP and EB11MP.
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    34ae6c96
realview_pb11mp.c 10.5 KB