diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-09 11:58:57 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-09 11:58:57 -0500 |
| commit | 5c49985c21bba4d2f899e3a97121868a5c58a876 (patch) | |
| tree | f877cde6c0effa6c8cd6e1d0d7e116358eb41ee8 | |
| parent | 57a0c1e2d6cb70ad0f8549ae730fc58fd0553429 (diff) | |
| parent | 8a3a180d21793f2e4386b3cb61c48322564fc80a (diff) | |
Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM fixes from Russell King.
* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: 7616/1: cache-l2x0: aurora: Use writel_relaxed instead of writel
ARM: 7615/1: cache-l2x0: aurora: Invalidate during clean operation with WT enable
ARM: 7614/1: mm: fix wrong branch from Cortex-A9 to PJ4b
ARM: 7612/1: imx: Do not select some errata that depends on !ARCH_MULTIPLATFORM
ARM: 7611/1: VIC: fix bug in VIC irqdomain code
ARM: 7610/1: versatile: bump IRQ numbers
ARM: 7609/1: disable errata work-arounds which access secure registers
ARM: 7608/1: l2x0: Only set .set_debug on PL310 r3p0 and earlier
| -rw-r--r-- | arch/arm/Kconfig | 6 | ||||
| -rw-r--r-- | arch/arm/common/vic.c | 9 | ||||
| -rw-r--r-- | arch/arm/mach-imx/Kconfig | 2 | ||||
| -rw-r--r-- | arch/arm/mach-versatile/include/mach/irqs.h | 6 | ||||
| -rw-r--r-- | arch/arm/mach-vexpress/Kconfig | 1 | ||||
| -rw-r--r-- | arch/arm/mm/cache-l2x0.c | 34 | ||||
| -rw-r--r-- | arch/arm/mm/proc-v7.S | 4 |
7 files changed, 40 insertions, 22 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ab864d9545dd..67874b82a4ed 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -1229,6 +1229,7 @@ config ARM_ERRATA_430973 | |||
| 1229 | config ARM_ERRATA_458693 | 1229 | config ARM_ERRATA_458693 |
| 1230 | bool "ARM errata: Processor deadlock when a false hazard is created" | 1230 | bool "ARM errata: Processor deadlock when a false hazard is created" |
| 1231 | depends on CPU_V7 | 1231 | depends on CPU_V7 |
| 1232 | depends on !ARCH_MULTIPLATFORM | ||
| 1232 | help | 1233 | help |
| 1233 | This option enables the workaround for the 458693 Cortex-A8 (r2p0) | 1234 | This option enables the workaround for the 458693 Cortex-A8 (r2p0) |
| 1234 | erratum. For very specific sequences of memory operations, it is | 1235 | erratum. For very specific sequences of memory operations, it is |
| @@ -1242,6 +1243,7 @@ config ARM_ERRATA_458693 | |||
| 1242 | config ARM_ERRATA_460075 | 1243 | config ARM_ERRATA_460075 |
| 1243 | bool "ARM errata: Data written to the L2 cache can be overwritten with stale data" | 1244 | bool "ARM errata: Data written to the L2 cache can be overwritten with stale data" |
| 1244 | depends on CPU_V7 | 1245 | depends on CPU_V7 |
| 1246 | depends on !ARCH_MULTIPLATFORM | ||
| 1245 | help | 1247 | help |
| 1246 | This option enables the workaround for the 460075 Cortex-A8 (r2p0) | 1248 | This option enables the workaround for the 460075 Cortex-A8 (r2p0) |
| 1247 | erratum. Any asynchronous access to the L2 cache may encounter a | 1249 | erratum. Any asynchronous access to the L2 cache may encounter a |
| @@ -1254,6 +1256,7 @@ config ARM_ERRATA_460075 | |||
| 1254 | config ARM_ERRATA_742230 | 1256 | config ARM_ERRATA_742230 |
| 1255 | bool "ARM errata: DMB operation may be faulty" | 1257 | bool "ARM errata: DMB operation may be faulty" |
| 1256 | depends on CPU_V7 && SMP | 1258 | depends on CPU_V7 && SMP |
| 1259 | depends on !ARCH_MULTIPLATFORM | ||
| 1257 | help | 1260 | help |
| 1258 | This option enables the workaround for the 742230 Cortex-A9 | 1261 | This option enables the workaround for the 742230 Cortex-A9 |
| 1259 | (r1p0..r2p2) erratum. Under rare circumstances, a DMB instruction | 1262 | (r1p0..r2p2) erratum. Under rare circumstances, a DMB instruction |
| @@ -1266,6 +1269,7 @@ config ARM_ERRATA_742230 | |||
| 1266 | config ARM_ERRATA_742231 | 1269 | config ARM_ERRATA_742231 |
| 1267 | bool "ARM errata: Incorrect hazard handling in the SCU may lead to data corruption" | 1270 | bool "ARM errata: Incorrect hazard handling in the SCU may lead to data corruption" |
| 1268 | depends on CPU_V7 && SMP | 1271 | depends on CPU_V7 && SMP |
| 1272 | depends on !ARCH_MULTIPLATFORM | ||
| 1269 | help | 1273 | help |
| 1270 | This option enables the workaround for the 742231 Cortex-A9 | 1274 | This option enables the workaround for the 742231 Cortex-A9 |
| 1271 | (r2p0..r2p2) erratum. Under certain conditions, specific to the | 1275 | (r2p0..r2p2) erratum. Under certain conditions, specific to the |
| @@ -1316,6 +1320,7 @@ config PL310_ERRATA_727915 | |||
| 1316 | config ARM_ERRATA_743622 | 1320 | config ARM_ERRATA_743622 |
| 1317 | bool "ARM errata: Faulty hazard checking in the Store Buffer may lead to data corruption" | 1321 | bool "ARM errata: Faulty hazard checking in the Store Buffer may lead to data corruption" |
| 1318 | depends on CPU_V7 | 1322 | depends on CPU_V7 |
| 1323 | depends on !ARCH_MULTIPLATFORM | ||
| 1319 | help | 1324 | help |
| 1320 | This option enables the workaround for the 743622 Cortex-A9 | 1325 | This option enables the workaround for the 743622 Cortex-A9 |
| 1321 | (r2p*) erratum. Under very rare conditions, a faulty | 1326 | (r2p*) erratum. Under very rare conditions, a faulty |
| @@ -1329,6 +1334,7 @@ config ARM_ERRATA_743622 | |||
| 1329 | config ARM_ERRATA_751472 | 1334 | config ARM_ERRATA_751472 |
| 1330 | bool "ARM errata: Interrupted ICIALLUIS may prevent completion of broadcasted operation" | 1335 | bool "ARM errata: Interrupted ICIALLUIS may prevent completion of broadcasted operation" |
| 1331 | depends on CPU_V7 | 1336 | depends on CPU_V7 |
| 1337 | depends on !ARCH_MULTIPLATFORM | ||
| 1332 | help | 1338 | help |
| 1333 | This option enables the workaround for the 751472 Cortex-A9 (prior | 1339 | This option enables the workaround for the 751472 Cortex-A9 (prior |
| 1334 | to r3p0) erratum. An interrupted ICIALLUIS operation may prevent the | 1340 | to r3p0) erratum. An interrupted ICIALLUIS operation may prevent the |
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c index e4df17ca90c7..8f324b99416e 100644 --- a/arch/arm/common/vic.c +++ b/arch/arm/common/vic.c | |||
| @@ -206,6 +206,7 @@ static void __init vic_register(void __iomem *base, unsigned int irq, | |||
| 206 | struct device_node *node) | 206 | struct device_node *node) |
| 207 | { | 207 | { |
| 208 | struct vic_device *v; | 208 | struct vic_device *v; |
| 209 | int i; | ||
| 209 | 210 | ||
| 210 | if (vic_id >= ARRAY_SIZE(vic_devices)) { | 211 | if (vic_id >= ARRAY_SIZE(vic_devices)) { |
| 211 | printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__); | 212 | printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__); |
| @@ -220,6 +221,10 @@ static void __init vic_register(void __iomem *base, unsigned int irq, | |||
| 220 | vic_id++; | 221 | vic_id++; |
| 221 | v->domain = irq_domain_add_simple(node, fls(valid_sources), irq, | 222 | v->domain = irq_domain_add_simple(node, fls(valid_sources), irq, |
| 222 | &vic_irqdomain_ops, v); | 223 | &vic_irqdomain_ops, v); |
| 224 | /* create an IRQ mapping for each valid IRQ */ | ||
| 225 | for (i = 0; i < fls(valid_sources); i++) | ||
| 226 | if (valid_sources & (1 << i)) | ||
| 227 | irq_create_mapping(v->domain, i); | ||
| 223 | } | 228 | } |
| 224 | 229 | ||
| 225 | static void vic_ack_irq(struct irq_data *d) | 230 | static void vic_ack_irq(struct irq_data *d) |
| @@ -416,9 +421,9 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent) | |||
| 416 | return -EIO; | 421 | return -EIO; |
| 417 | 422 | ||
| 418 | /* | 423 | /* |
| 419 | * Passing -1 as first IRQ makes the simple domain allocate descriptors | 424 | * Passing 0 as first IRQ makes the simple domain allocate descriptors |
| 420 | */ | 425 | */ |
| 421 | __vic_init(regs, -1, ~0, ~0, node); | 426 | __vic_init(regs, 0, ~0, ~0, node); |
| 422 | 427 | ||
| 423 | return 0; | 428 | return 0; |
| 424 | } | 429 | } |
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 1ad0d76de8c7..3e628fd7a674 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig | |||
| @@ -841,8 +841,6 @@ config SOC_IMX6Q | |||
| 841 | select ARCH_HAS_CPUFREQ | 841 | select ARCH_HAS_CPUFREQ |
| 842 | select ARCH_HAS_OPP | 842 | select ARCH_HAS_OPP |
| 843 | select ARM_CPU_SUSPEND if PM | 843 | select ARM_CPU_SUSPEND if PM |
| 844 | select ARM_ERRATA_743622 | ||
| 845 | select ARM_ERRATA_751472 | ||
| 846 | select ARM_ERRATA_754322 | 844 | select ARM_ERRATA_754322 |
| 847 | select ARM_ERRATA_764369 if SMP | 845 | select ARM_ERRATA_764369 if SMP |
| 848 | select ARM_ERRATA_775420 | 846 | select ARM_ERRATA_775420 |
diff --git a/arch/arm/mach-versatile/include/mach/irqs.h b/arch/arm/mach-versatile/include/mach/irqs.h index bf44c61bd1f6..0fd771ca617b 100644 --- a/arch/arm/mach-versatile/include/mach/irqs.h +++ b/arch/arm/mach-versatile/include/mach/irqs.h | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | * IRQ interrupts definitions are the same as the INT definitions | 25 | * IRQ interrupts definitions are the same as the INT definitions |
| 26 | * held within platform.h | 26 | * held within platform.h |
| 27 | */ | 27 | */ |
| 28 | #define IRQ_VIC_START 0 | 28 | #define IRQ_VIC_START 32 |
| 29 | #define IRQ_WDOGINT (IRQ_VIC_START + INT_WDOGINT) | 29 | #define IRQ_WDOGINT (IRQ_VIC_START + INT_WDOGINT) |
| 30 | #define IRQ_SOFTINT (IRQ_VIC_START + INT_SOFTINT) | 30 | #define IRQ_SOFTINT (IRQ_VIC_START + INT_SOFTINT) |
| 31 | #define IRQ_COMMRx (IRQ_VIC_START + INT_COMMRx) | 31 | #define IRQ_COMMRx (IRQ_VIC_START + INT_COMMRx) |
| @@ -100,7 +100,7 @@ | |||
| 100 | /* | 100 | /* |
| 101 | * Secondary interrupt controller | 101 | * Secondary interrupt controller |
| 102 | */ | 102 | */ |
| 103 | #define IRQ_SIC_START 32 | 103 | #define IRQ_SIC_START 64 |
| 104 | #define IRQ_SIC_MMCI0B (IRQ_SIC_START + SIC_INT_MMCI0B) | 104 | #define IRQ_SIC_MMCI0B (IRQ_SIC_START + SIC_INT_MMCI0B) |
| 105 | #define IRQ_SIC_MMCI1B (IRQ_SIC_START + SIC_INT_MMCI1B) | 105 | #define IRQ_SIC_MMCI1B (IRQ_SIC_START + SIC_INT_MMCI1B) |
| 106 | #define IRQ_SIC_KMI0 (IRQ_SIC_START + SIC_INT_KMI0) | 106 | #define IRQ_SIC_KMI0 (IRQ_SIC_START + SIC_INT_KMI0) |
| @@ -120,7 +120,7 @@ | |||
| 120 | #define IRQ_SIC_PCI1 (IRQ_SIC_START + SIC_INT_PCI1) | 120 | #define IRQ_SIC_PCI1 (IRQ_SIC_START + SIC_INT_PCI1) |
| 121 | #define IRQ_SIC_PCI2 (IRQ_SIC_START + SIC_INT_PCI2) | 121 | #define IRQ_SIC_PCI2 (IRQ_SIC_START + SIC_INT_PCI2) |
| 122 | #define IRQ_SIC_PCI3 (IRQ_SIC_START + SIC_INT_PCI3) | 122 | #define IRQ_SIC_PCI3 (IRQ_SIC_START + SIC_INT_PCI3) |
| 123 | #define IRQ_SIC_END 63 | 123 | #define IRQ_SIC_END 95 |
| 124 | 124 | ||
| 125 | #define IRQ_GPIO0_START (IRQ_SIC_END + 1) | 125 | #define IRQ_GPIO0_START (IRQ_SIC_END + 1) |
| 126 | #define IRQ_GPIO0_END (IRQ_GPIO0_START + 31) | 126 | #define IRQ_GPIO0_END (IRQ_GPIO0_START + 31) |
diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig index 99e63f5f99d1..52d315b792c8 100644 --- a/arch/arm/mach-vexpress/Kconfig +++ b/arch/arm/mach-vexpress/Kconfig | |||
| @@ -42,7 +42,6 @@ config ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA | |||
| 42 | bool "Enable A5 and A9 only errata work-arounds" | 42 | bool "Enable A5 and A9 only errata work-arounds" |
| 43 | default y | 43 | default y |
| 44 | select ARM_ERRATA_720789 | 44 | select ARM_ERRATA_720789 |
| 45 | select ARM_ERRATA_751472 | ||
| 46 | select PL310_ERRATA_753970 if CACHE_PL310 | 45 | select PL310_ERRATA_753970 if CACHE_PL310 |
| 47 | help | 46 | help |
| 48 | Provides common dependencies for Versatile Express platforms | 47 | Provides common dependencies for Versatile Express platforms |
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index 6911b8b2745c..c2f37390308a 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c | |||
| @@ -352,7 +352,8 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask) | |||
| 352 | /* Unmapped register. */ | 352 | /* Unmapped register. */ |
| 353 | sync_reg_offset = L2X0_DUMMY_REG; | 353 | sync_reg_offset = L2X0_DUMMY_REG; |
| 354 | #endif | 354 | #endif |
| 355 | outer_cache.set_debug = pl310_set_debug; | 355 | if ((cache_id & L2X0_CACHE_ID_RTL_MASK) <= L2X0_CACHE_ID_RTL_R3P0) |
| 356 | outer_cache.set_debug = pl310_set_debug; | ||
| 356 | break; | 357 | break; |
| 357 | case L2X0_CACHE_ID_PART_L210: | 358 | case L2X0_CACHE_ID_PART_L210: |
| 358 | ways = (aux >> 13) & 0xf; | 359 | ways = (aux >> 13) & 0xf; |
| @@ -459,8 +460,8 @@ static void aurora_pa_range(unsigned long start, unsigned long end, | |||
| 459 | unsigned long flags; | 460 | unsigned long flags; |
| 460 | 461 | ||
| 461 | raw_spin_lock_irqsave(&l2x0_lock, flags); | 462 | raw_spin_lock_irqsave(&l2x0_lock, flags); |
| 462 | writel(start, l2x0_base + AURORA_RANGE_BASE_ADDR_REG); | 463 | writel_relaxed(start, l2x0_base + AURORA_RANGE_BASE_ADDR_REG); |
| 463 | writel(end, l2x0_base + offset); | 464 | writel_relaxed(end, l2x0_base + offset); |
| 464 | raw_spin_unlock_irqrestore(&l2x0_lock, flags); | 465 | raw_spin_unlock_irqrestore(&l2x0_lock, flags); |
| 465 | 466 | ||
| 466 | cache_sync(); | 467 | cache_sync(); |
| @@ -505,15 +506,21 @@ static void aurora_clean_range(unsigned long start, unsigned long end) | |||
| 505 | 506 | ||
| 506 | static void aurora_flush_range(unsigned long start, unsigned long end) | 507 | static void aurora_flush_range(unsigned long start, unsigned long end) |
| 507 | { | 508 | { |
| 508 | if (!l2_wt_override) { | 509 | start &= ~(CACHE_LINE_SIZE - 1); |
| 509 | start &= ~(CACHE_LINE_SIZE - 1); | 510 | end = ALIGN(end, CACHE_LINE_SIZE); |
| 510 | end = ALIGN(end, CACHE_LINE_SIZE); | 511 | while (start != end) { |
| 511 | while (start != end) { | 512 | unsigned long range_end = calc_range_end(start, end); |
| 512 | unsigned long range_end = calc_range_end(start, end); | 513 | /* |
| 514 | * If L2 is forced to WT, the L2 will always be clean and we | ||
| 515 | * just need to invalidate. | ||
| 516 | */ | ||
| 517 | if (l2_wt_override) | ||
| 513 | aurora_pa_range(start, range_end - CACHE_LINE_SIZE, | 518 | aurora_pa_range(start, range_end - CACHE_LINE_SIZE, |
| 514 | AURORA_FLUSH_RANGE_REG); | 519 | AURORA_INVAL_RANGE_REG); |
| 515 | start = range_end; | 520 | else |
| 516 | } | 521 | aurora_pa_range(start, range_end - CACHE_LINE_SIZE, |
| 522 | AURORA_FLUSH_RANGE_REG); | ||
| 523 | start = range_end; | ||
| 517 | } | 524 | } |
| 518 | } | 525 | } |
| 519 | 526 | ||
| @@ -668,8 +675,9 @@ static void pl310_resume(void) | |||
| 668 | static void aurora_resume(void) | 675 | static void aurora_resume(void) |
| 669 | { | 676 | { |
| 670 | if (!(readl(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) { | 677 | if (!(readl(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) { |
| 671 | writel(l2x0_saved_regs.aux_ctrl, l2x0_base + L2X0_AUX_CTRL); | 678 | writel_relaxed(l2x0_saved_regs.aux_ctrl, |
| 672 | writel(l2x0_saved_regs.ctrl, l2x0_base + L2X0_CTRL); | 679 | l2x0_base + L2X0_AUX_CTRL); |
| 680 | writel_relaxed(l2x0_saved_regs.ctrl, l2x0_base + L2X0_CTRL); | ||
| 673 | } | 681 | } |
| 674 | } | 682 | } |
| 675 | 683 | ||
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 350f6a74992b..3a3c015f8d5c 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
| @@ -169,6 +169,7 @@ __v7_ca15mp_setup: | |||
| 169 | orreq r0, r0, r10 @ Enable CPU-specific SMP bits | 169 | orreq r0, r0, r10 @ Enable CPU-specific SMP bits |
| 170 | mcreq p15, 0, r0, c1, c0, 1 | 170 | mcreq p15, 0, r0, c1, c0, 1 |
| 171 | #endif | 171 | #endif |
| 172 | b __v7_setup | ||
| 172 | 173 | ||
| 173 | __v7_pj4b_setup: | 174 | __v7_pj4b_setup: |
| 174 | #ifdef CONFIG_CPU_PJ4B | 175 | #ifdef CONFIG_CPU_PJ4B |
| @@ -245,7 +246,8 @@ __v7_setup: | |||
| 245 | ldr r10, =0x00000c08 @ Cortex-A8 primary part number | 246 | ldr r10, =0x00000c08 @ Cortex-A8 primary part number |
| 246 | teq r0, r10 | 247 | teq r0, r10 |
| 247 | bne 2f | 248 | bne 2f |
| 248 | #ifdef CONFIG_ARM_ERRATA_430973 | 249 | #if defined(CONFIG_ARM_ERRATA_430973) && !defined(CONFIG_ARCH_MULTIPLATFORM) |
| 250 | |||
| 249 | teq r5, #0x00100000 @ only present in r1p* | 251 | teq r5, #0x00100000 @ only present in r1p* |
| 250 | mrceq p15, 0, r10, c1, c0, 1 @ read aux control register | 252 | mrceq p15, 0, r10, c1, c0, 1 @ read aux control register |
| 251 | orreq r10, r10, #(1 << 6) @ set IBE to 1 | 253 | orreq r10, r10, #(1 << 6) @ set IBE to 1 |
