|
@@ -43,49 +43,10 @@ static struct prcmu_pdata db8500_prcmu_pdata = {
|
|
|
.legacy_offset = DB8500_PRCMU_LEGACY_OFFSET,
|
|
.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_BACKUPRAM0_BASE, SZ_8K),
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-/* 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)
|
|
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();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -114,14 +75,18 @@ static struct arm_pmu_platdata db8500_pmu_platdata = {
|
|
|
|
|
|
|
|
static const char *db8500_read_soc_id(void)
|
|
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 */
|
|
/* Throw these device-specific numbers into the entropy pool */
|
|
|
add_device_randomness(uid, 0x14);
|
|
add_device_randomness(uid, 0x14);
|
|
|
return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
|
|
return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
|
|
|
readl((u32 *)uid+0),
|
|
readl((u32 *)uid+0),
|
|
|
readl((u32 *)uid+1), readl((u32 *)uid+2),
|
|
readl((u32 *)uid+1), readl((u32 *)uid+2),
|
|
|
readl((u32 *)uid+3), readl((u32 *)uid+4));
|
|
readl((u32 *)uid+3), readl((u32 *)uid+4));
|
|
|
|
|
+ iounmap(uid);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static struct device * __init db8500_soc_device_init(void)
|
|
static struct device * __init db8500_soc_device_init(void)
|