aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2014-05-23 12:49:25 -0400
committerArnd Bergmann <arnd@arndb.de>2014-05-23 15:58:10 -0400
commit9f0f10117228b73ec657aab8f303c9ae88fda070 (patch)
tree43bb4bb94bdf3d1ea2965282a66da8586c15405b
parenta36d82e9d3c92f692c7ad68b72b4c1ea87905090 (diff)
parent14f3791439b5a6cf12127fb80204265533d92664 (diff)
Merge tag 'keystone-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone into next/soc
Keystone SOC updates for 3.16 - Drop unused COMMON_CLK_DEBUG option - Enable MTD_SPI_NOR config needed for M25P80 - Enable coherent higher address memory space * tag 'keystone-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone: ARM: keystone: Update the dma offset for non-dt platform devices ARM: keystone: Switch over to coherent memory address space ARM: configs: keystone: add MTD_SPI_NOR (new dependency for M25P80) ARM: configs: keystone: drop CONFIG_COMMON_CLK_DEBUG Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--arch/arm/configs/integrator_defconfig1
-rw-r--r--arch/arm/configs/keystone_defconfig2
-rw-r--r--arch/arm/configs/sunxi_defconfig1
-rw-r--r--arch/arm/configs/vt8500_v6_v7_defconfig1
-rw-r--r--arch/arm/mach-keystone/keystone.c74
-rw-r--r--arch/arm/mach-keystone/memory.h24
-rw-r--r--arch/arm/mach-keystone/platsmp.c18
7 files changed, 116 insertions, 5 deletions
diff --git a/arch/arm/configs/integrator_defconfig b/arch/arm/configs/integrator_defconfig
index 5bae19557591..c1f5adc5493e 100644
--- a/arch/arm/configs/integrator_defconfig
+++ b/arch/arm/configs/integrator_defconfig
@@ -73,7 +73,6 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=y
73CONFIG_LEDS_TRIGGER_CPU=y 73CONFIG_LEDS_TRIGGER_CPU=y
74CONFIG_RTC_CLASS=y 74CONFIG_RTC_CLASS=y
75CONFIG_RTC_DRV_PL030=y 75CONFIG_RTC_DRV_PL030=y
76CONFIG_COMMON_CLK_DEBUG=y
77CONFIG_EXT2_FS=y 76CONFIG_EXT2_FS=y
78CONFIG_VFAT_FS=y 77CONFIG_VFAT_FS=y
79CONFIG_TMPFS=y 78CONFIG_TMPFS=y
diff --git a/arch/arm/configs/keystone_defconfig b/arch/arm/configs/keystone_defconfig
index ec9a41d50680..07b43277ccd3 100644
--- a/arch/arm/configs/keystone_defconfig
+++ b/arch/arm/configs/keystone_defconfig
@@ -112,6 +112,7 @@ CONFIG_MTD_PLATRAM=y
112CONFIG_MTD_M25P80=y 112CONFIG_MTD_M25P80=y
113CONFIG_MTD_NAND=y 113CONFIG_MTD_NAND=y
114CONFIG_MTD_NAND_DAVINCI=y 114CONFIG_MTD_NAND_DAVINCI=y
115CONFIG_MTD_SPI_NOR=y
115CONFIG_MTD_UBI=y 116CONFIG_MTD_UBI=y
116CONFIG_PROC_DEVICETREE=y 117CONFIG_PROC_DEVICETREE=y
117CONFIG_BLK_DEV_LOOP=y 118CONFIG_BLK_DEV_LOOP=y
@@ -146,7 +147,6 @@ CONFIG_USB_DWC3_VERBOSE=y
146CONFIG_KEYSTONE_USB_PHY=y 147CONFIG_KEYSTONE_USB_PHY=y
147CONFIG_DMADEVICES=y 148CONFIG_DMADEVICES=y
148CONFIG_TI_EDMA=y 149CONFIG_TI_EDMA=y
149CONFIG_COMMON_CLK_DEBUG=y
150CONFIG_MEMORY=y 150CONFIG_MEMORY=y
151CONFIG_TI_AEMIF=y 151CONFIG_TI_AEMIF=y
152CONFIG_EXT4_FS=y 152CONFIG_EXT4_FS=y
diff --git a/arch/arm/configs/sunxi_defconfig b/arch/arm/configs/sunxi_defconfig
index b5df4a511b0a..28287aebdc15 100644
--- a/arch/arm/configs/sunxi_defconfig
+++ b/arch/arm/configs/sunxi_defconfig
@@ -62,7 +62,6 @@ CONFIG_LEDS_GPIO=y
62CONFIG_LEDS_TRIGGERS=y 62CONFIG_LEDS_TRIGGERS=y
63CONFIG_LEDS_TRIGGER_HEARTBEAT=y 63CONFIG_LEDS_TRIGGER_HEARTBEAT=y
64CONFIG_LEDS_TRIGGER_DEFAULT_ON=y 64CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
65CONFIG_COMMON_CLK_DEBUG=y
66# CONFIG_IOMMU_SUPPORT is not set 65# CONFIG_IOMMU_SUPPORT is not set
67CONFIG_TMPFS=y 66CONFIG_TMPFS=y
68CONFIG_NFS_FS=y 67CONFIG_NFS_FS=y
diff --git a/arch/arm/configs/vt8500_v6_v7_defconfig b/arch/arm/configs/vt8500_v6_v7_defconfig
index f0520176acd0..9e7a25639690 100644
--- a/arch/arm/configs/vt8500_v6_v7_defconfig
+++ b/arch/arm/configs/vt8500_v6_v7_defconfig
@@ -73,7 +73,6 @@ CONFIG_LEDS_TRIGGERS=y
73CONFIG_RTC_CLASS=y 73CONFIG_RTC_CLASS=y
74CONFIG_RTC_DRV_VT8500=y 74CONFIG_RTC_DRV_VT8500=y
75CONFIG_DMADEVICES=y 75CONFIG_DMADEVICES=y
76CONFIG_COMMON_CLK_DEBUG=y
77# CONFIG_IOMMU_SUPPORT is not set 76# CONFIG_IOMMU_SUPPORT is not set
78CONFIG_PWM=y 77CONFIG_PWM=y
79CONFIG_PWM_VT8500=y 78CONFIG_PWM_VT8500=y
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
index e0b9e1b9cf30..59b8383cbdb0 100644
--- a/arch/arm/mach-keystone/keystone.c
+++ b/arch/arm/mach-keystone/keystone.c
@@ -20,6 +20,9 @@
20#include <asm/mach/arch.h> 20#include <asm/mach/arch.h>
21#include <asm/mach/time.h> 21#include <asm/mach/time.h>
22#include <asm/smp_plat.h> 22#include <asm/smp_plat.h>
23#include <asm/memory.h>
24
25#include "memory.h"
23 26
24#include "keystone.h" 27#include "keystone.h"
25 28
@@ -28,6 +31,27 @@
28#define PLL_RESET BIT(16) 31#define PLL_RESET BIT(16)
29 32
30static void __iomem *keystone_rstctrl; 33static void __iomem *keystone_rstctrl;
34static struct notifier_block platform_nb;
35static unsigned long keystone_dma_pfn_offset __read_mostly;
36
37static int keystone_platform_notifier(struct notifier_block *nb,
38 unsigned long event, void *data)
39{
40 struct device *dev = data;
41
42 if (event != BUS_NOTIFY_ADD_DEVICE)
43 return NOTIFY_DONE;
44
45 if (!dev)
46 return NOTIFY_BAD;
47
48 if (!dev->of_node) {
49 dev->dma_pfn_offset = keystone_dma_pfn_offset;
50 dev_err(dev, "set dma_pfn_offset%08lx\n",
51 dev->dma_pfn_offset);
52 }
53 return NOTIFY_OK;
54}
31 55
32static void __init keystone_init(void) 56static void __init keystone_init(void)
33{ 57{
@@ -42,9 +66,58 @@ static void __init keystone_init(void)
42 pr_warn("ti,keystone-reset iomap error\n"); 66 pr_warn("ti,keystone-reset iomap error\n");
43 67
44 keystone_pm_runtime_init(); 68 keystone_pm_runtime_init();
69 if (platform_nb.notifier_call)
70 bus_register_notifier(&platform_bus_type, &platform_nb);
45 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 71 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
46} 72}
47 73
74static phys_addr_t keystone_virt_to_idmap(unsigned long x)
75{
76 return (phys_addr_t)(x) - CONFIG_PAGE_OFFSET + KEYSTONE_LOW_PHYS_START;
77}
78
79static void __init keystone_init_meminfo(void)
80{
81 bool lpae = IS_ENABLED(CONFIG_ARM_LPAE);
82 bool pvpatch = IS_ENABLED(CONFIG_ARM_PATCH_PHYS_VIRT);
83 phys_addr_t offset = PHYS_OFFSET - KEYSTONE_LOW_PHYS_START;
84 phys_addr_t mem_start, mem_end;
85
86 BUG_ON(meminfo.nr_banks < 1);
87 mem_start = meminfo.bank[0].start;
88 mem_end = mem_start + meminfo.bank[0].size - 1;
89
90 /* nothing to do if we are running out of the <32-bit space */
91 if (mem_start >= KEYSTONE_LOW_PHYS_START &&
92 mem_end <= KEYSTONE_LOW_PHYS_END)
93 return;
94
95 if (!lpae || !pvpatch) {
96 pr_crit("Enable %s%s%s to run outside 32-bit space\n",
97 !lpae ? __stringify(CONFIG_ARM_LPAE) : "",
98 (!lpae && !pvpatch) ? " and " : "",
99 !pvpatch ? __stringify(CONFIG_ARM_PATCH_PHYS_VIRT) : "");
100 }
101
102 if (mem_start < KEYSTONE_HIGH_PHYS_START ||
103 mem_end > KEYSTONE_HIGH_PHYS_END) {
104 pr_crit("Invalid address space for memory (%08llx-%08llx)\n",
105 (u64)mem_start, (u64)mem_end);
106 }
107
108 offset += KEYSTONE_HIGH_PHYS_START;
109 __pv_phys_pfn_offset = PFN_DOWN(offset);
110 __pv_offset = (offset - PAGE_OFFSET);
111
112 /* Populate the arch idmap hook */
113 arch_virt_to_idmap = keystone_virt_to_idmap;
114 platform_nb.notifier_call = keystone_platform_notifier;
115 keystone_dma_pfn_offset = PFN_DOWN(KEYSTONE_HIGH_PHYS_START -
116 KEYSTONE_LOW_PHYS_START);
117
118 pr_info("Switching to high address space at 0x%llx\n", (u64)offset);
119}
120
48static const char *keystone_match[] __initconst = { 121static const char *keystone_match[] __initconst = {
49 "ti,keystone", 122 "ti,keystone",
50 NULL, 123 NULL,
@@ -76,4 +149,5 @@ DT_MACHINE_START(KEYSTONE, "Keystone")
76 .init_machine = keystone_init, 149 .init_machine = keystone_init,
77 .dt_compat = keystone_match, 150 .dt_compat = keystone_match,
78 .restart = keystone_restart, 151 .restart = keystone_restart,
152 .init_meminfo = keystone_init_meminfo,
79MACHINE_END 153MACHINE_END
diff --git a/arch/arm/mach-keystone/memory.h b/arch/arm/mach-keystone/memory.h
new file mode 100644
index 000000000000..b854fb18eef1
--- /dev/null
+++ b/arch/arm/mach-keystone/memory.h
@@ -0,0 +1,24 @@
1/*
2 * Copyright 2014 Texas Instruments, Inc.
3 * Santosh Shilimkar <santosh.shilimkar@ti.com>
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 */
9#ifndef __MEMORY_H
10#define __MEMORY_H
11
12#define MAX_PHYSMEM_BITS 36
13#define SECTION_SIZE_BITS 34
14
15#define KEYSTONE_LOW_PHYS_START 0x80000000ULL
16#define KEYSTONE_LOW_PHYS_SIZE 0x80000000ULL /* 2G */
17#define KEYSTONE_LOW_PHYS_END (KEYSTONE_LOW_PHYS_START + \
18 KEYSTONE_LOW_PHYS_SIZE - 1)
19
20#define KEYSTONE_HIGH_PHYS_START 0x800000000ULL
21#define KEYSTONE_HIGH_PHYS_SIZE 0x400000000ULL /* 16G */
22#define KEYSTONE_HIGH_PHYS_END (KEYSTONE_HIGH_PHYS_START + \
23 KEYSTONE_HIGH_PHYS_SIZE - 1)
24#endif /* __MEMORY_H */
diff --git a/arch/arm/mach-keystone/platsmp.c b/arch/arm/mach-keystone/platsmp.c
index 5cf0683577ea..5f46a7cf907b 100644
--- a/arch/arm/mach-keystone/platsmp.c
+++ b/arch/arm/mach-keystone/platsmp.c
@@ -17,13 +17,16 @@
17#include <linux/io.h> 17#include <linux/io.h>
18 18
19#include <asm/smp_plat.h> 19#include <asm/smp_plat.h>
20#include <asm/prom.h>
21#include <asm/tlbflush.h>
22#include <asm/pgtable.h>
20 23
21#include "keystone.h" 24#include "keystone.h"
22 25
23static int keystone_smp_boot_secondary(unsigned int cpu, 26static int keystone_smp_boot_secondary(unsigned int cpu,
24 struct task_struct *idle) 27 struct task_struct *idle)
25{ 28{
26 unsigned long start = virt_to_phys(&secondary_startup); 29 unsigned long start = virt_to_idmap(&secondary_startup);
27 int error; 30 int error;
28 31
29 pr_debug("keystone-smp: booting cpu %d, vector %08lx\n", 32 pr_debug("keystone-smp: booting cpu %d, vector %08lx\n",
@@ -36,6 +39,19 @@ static int keystone_smp_boot_secondary(unsigned int cpu,
36 return error; 39 return error;
37} 40}
38 41
42#ifdef CONFIG_ARM_LPAE
43static void __cpuinit keystone_smp_secondary_initmem(unsigned int cpu)
44{
45 pgd_t *pgd0 = pgd_offset_k(0);
46 cpu_set_ttbr(1, __pa(pgd0) + TTBR1_OFFSET);
47 local_flush_tlb_all();
48}
49#else
50static inline void __cpuinit keystone_smp_secondary_initmem(unsigned int cpu)
51{}
52#endif
53
39struct smp_operations keystone_smp_ops __initdata = { 54struct smp_operations keystone_smp_ops __initdata = {
40 .smp_boot_secondary = keystone_smp_boot_secondary, 55 .smp_boot_secondary = keystone_smp_boot_secondary,
56 .smp_secondary_init = keystone_smp_secondary_initmem,
41}; 57};