x86: SGI UV: Map MMIO-High memory range
authorJack Steiner <steiner@sgi.com>
Wed, 9 Sep 2009 15:43:39 +0000 (10:43 -0500)
committerIngo Molnar <mingo@elte.hu>
Fri, 18 Sep 2009 12:06:40 +0000 (14:06 +0200)
UV depends on the MMRHI space being identity mapped. The patch:

x86: Make 64-bit efi_ioremap use ioremap on MMIO regions

changed this to make efi regions at a different address using
ioremap. Add the identity mapping to uv_system_init.

( Note this code was previously present but was deleted when BIOS
  added the ranges to the EFI map - previous efi code identify
  mapped the ranges. )

Signed-off-by: Jack Steiner <steiner@sgi.com>
LKML-Reference: <20090909154339.GA7946@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/apic/x2apic_uv_x.c

index 6011593..f5f5886 100644 (file)
@@ -389,6 +389,16 @@ static __init void map_gru_high(int max_pnode)
                map_high("GRU", gru.s.base, shift, max_pnode, map_wb);
 }
 
+static __init void map_mmr_high(int max_pnode)
+{
+       union uvh_rh_gam_mmr_overlay_config_mmr_u mmr;
+       int shift = UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR_BASE_SHFT;
+
+       mmr.v = uv_read_local_mmr(UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR);
+       if (mmr.s.enable)
+               map_high("MMR", mmr.s.base, shift, max_pnode, map_uc);
+}
+
 static __init void map_mmioh_high(int max_pnode)
 {
        union uvh_rh_gam_mmioh_overlay_config_mmr_u mmioh;
@@ -643,6 +653,7 @@ void __init uv_system_init(void)
        }
 
        map_gru_high(max_pnode);
+       map_mmr_high(max_pnode);
        map_mmioh_high(max_pnode);
 
        uv_cpu_init();