These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / arm / mach-ux500 / cpu-db8500.c
index 6f63954..f805603 100644 (file)
 #include <linux/mfd/dbx500-prcmu.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
+#include <linux/perf/arm_pmu.h>
 #include <linux/regulator/machine.h>
 #include <linux/random.h>
 
-#include <asm/pmu.h>
 #include <asm/mach/map.h>
 
 #include "setup.h"
@@ -43,60 +43,10 @@ static struct prcmu_pdata db8500_prcmu_pdata = {
        .legacy_offset  = DB8500_PRCMU_LEGACY_OFFSET,
 };
 
-/* minimum static i/o mapping required to boot U8500 platforms */
-static struct map_desc u8500_uart_io_desc[] __initdata = {
-       __IO_DEV_DESC(U8500_UART0_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_UART2_BASE, SZ_4K),
-};
-/*  U8500 and U9540 common io_desc */
-static struct map_desc u8500_common_io_desc[] __initdata = {
-       /* SCU base also covers GIC CPU BASE and TWD with its 4K page */
-       __IO_DEV_DESC(U8500_SCU_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_GIC_DIST_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_L2CC_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_MTU0_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_BACKUPRAM0_BASE, SZ_8K),
-
-       __IO_DEV_DESC(U8500_CLKRST1_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_CLKRST2_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_CLKRST3_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_CLKRST5_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_CLKRST6_BASE, SZ_4K),
-
-       __IO_DEV_DESC(U8500_GPIO0_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_GPIO1_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_GPIO2_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_GPIO3_BASE, SZ_4K),
-};
-
-/* U8500 IO map specific description */
-static struct map_desc u8500_io_desc[] __initdata = {
-       __IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K),
-       __IO_DEV_DESC(U8500_PRCMU_TCDM_BASE, SZ_4K),
-
-};
-
-/* U9540 IO map specific description */
-static struct map_desc u9540_io_desc[] __initdata = {
-       __IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K + SZ_8K),
-       __IO_DEV_DESC(U8500_PRCMU_TCDM_BASE, SZ_4K + SZ_8K),
-};
-
 static void __init u8500_map_io(void)
 {
-       /*
-        * Map the UARTs early so that the DEBUG_LL stuff continues to work.
-        */
-       iotable_init(u8500_uart_io_desc, ARRAY_SIZE(u8500_uart_io_desc));
-
-       ux500_map_io();
-
-       iotable_init(u8500_common_io_desc, ARRAY_SIZE(u8500_common_io_desc));
-
-       if (cpu_is_ux540_family())
-               iotable_init(u9540_io_desc, ARRAY_SIZE(u9540_io_desc));
-       else
-               iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc));
+       debug_ll_io_init();
+       ux500_setup_id();
 }
 
 /*
@@ -125,14 +75,18 @@ static struct arm_pmu_platdata db8500_pmu_platdata = {
 
 static const char *db8500_read_soc_id(void)
 {
-       void __iomem *uid = __io_address(U8500_BB_UID_BASE);
+       void __iomem *uid;
 
+       uid = ioremap(U8500_BB_UID_BASE, 0x20);
+       if (!uid)
+               return NULL;
        /* Throw these device-specific numbers into the entropy pool */
        add_device_randomness(uid, 0x14);
        return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
                         readl((u32 *)uid+0),
                         readl((u32 *)uid+1), readl((u32 *)uid+2),
                         readl((u32 *)uid+3), readl((u32 *)uid+4));
+       iounmap(uid);
 }
 
 static struct device * __init db8500_soc_device_init(void)
@@ -200,7 +154,6 @@ static const char * stericsson_dt_platform_compat[] = {
 };
 
 DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)")
-       .smp            = smp_ops(ux500_smp_ops),
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */