Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm

Pull ARM fixes from Russell King:
"Nothing too disasterous, the biggest thing being the removal of the
regulator support for vcore in the AMBA driver; only one SoC was using
this and it got broken during the last merge window, which then
started causing problems for other people. Mutual agreement was
reached for it to be removed."

* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: 7386/1: jump_label: fixup for rename to static_key
ARM: 7384/1: ThumbEE: Disable userspace TEEHBR access for !CONFIG_ARM_THUMBEE
ARM: 7382/1: mm: truncate memory banks to fit in 4GB space for classic MMU
ARM: 7359/2: smp_twd: Only wait for reprogramming on active cpus
ARM: 7383/1: nommu: populate vectors page from paging_init
ARM: 7381/1: nommu: fix typo in mm/Kconfig
ARM: 7380/1: DT: do not add a zero-sized memory property
ARM: 7379/1: DT: fix atags_to_fdt() second call site
ARM: 7366/3: amba: Remove AMBA level regulator support
ARM: 7377/1: vic: re-read status register before dispatching each IRQ handler
ARM: 7368/1: fault.c: correct how the tsk->[maj|min]_flt gets incremented

+46 -61
+2
arch/arm/boot/compressed/atags_to_fdt.c
··· 77 77 } else if (atag->hdr.tag == ATAG_MEM) { 78 78 if (memcount >= sizeof(mem_reg_property)/4) 79 79 continue; 80 + if (!atag->u.mem.size) 81 + continue; 80 82 mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start); 81 83 mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size); 82 84 } else if (atag->hdr.tag == ATAG_INITRD2) {
+1 -1
arch/arm/boot/compressed/head.S
··· 273 273 add r0, r0, #0x100 274 274 mov r1, r6 275 275 sub r2, sp, r6 276 - blne atags_to_fdt 276 + bleq atags_to_fdt 277 277 278 278 ldmfd sp!, {r0-r3, ip, lr} 279 279 sub sp, sp, #0x10000
+4 -5
arch/arm/common/vic.c
··· 427 427 428 428 /* 429 429 * Handle each interrupt in a single VIC. Returns non-zero if we've 430 - * handled at least one interrupt. This does a single read of the 431 - * status register and handles all interrupts in order from LSB first. 430 + * handled at least one interrupt. This reads the status register 431 + * before handling each interrupt, which is necessary given that 432 + * handle_IRQ may briefly re-enable interrupts for soft IRQ handling. 432 433 */ 433 434 static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) 434 435 { 435 436 u32 stat, irq; 436 437 int handled = 0; 437 438 438 - stat = readl_relaxed(vic->base + VIC_IRQ_STATUS); 439 - while (stat) { 439 + while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) { 440 440 irq = ffs(stat) - 1; 441 441 handle_IRQ(irq_find_mapping(vic->domain, irq), regs); 442 - stat &= ~(1 << irq); 443 442 handled = 1; 444 443 } 445 444
+1 -1
arch/arm/include/asm/jump_label.h
··· 14 14 #define JUMP_LABEL_NOP "nop" 15 15 #endif 16 16 17 - static __always_inline bool arch_static_branch(struct jump_label_key *key) 17 + static __always_inline bool arch_static_branch(struct static_key *key) 18 18 { 19 19 asm goto("1:\n\t" 20 20 JUMP_LABEL_NOP "\n\t"
+15 -1
arch/arm/kernel/setup.c
··· 523 523 */ 524 524 size -= start & ~PAGE_MASK; 525 525 bank->start = PAGE_ALIGN(start); 526 - bank->size = size & PAGE_MASK; 526 + 527 + #ifndef CONFIG_LPAE 528 + if (bank->start + size < bank->start) { 529 + printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in " 530 + "32-bit physical address space\n", (long long)start); 531 + /* 532 + * To ensure bank->start + bank->size is representable in 533 + * 32 bits, we use ULONG_MAX as the upper limit rather than 4GB. 534 + * This means we lose a page after masking. 535 + */ 536 + size = ULONG_MAX - bank->start; 537 + } 538 + #endif 539 + 540 + bank->size = size & PAGE_MASK; 527 541 528 542 /* 529 543 * Check whether this memory region has non-zero size or
+5 -1
arch/arm/kernel/smp_twd.c
··· 118 118 * The twd clock events must be reprogrammed to account for the new 119 119 * frequency. The timer is local to a cpu, so cross-call to the 120 120 * changing cpu. 121 + * 122 + * Only wait for it to finish, if the cpu is active to avoid 123 + * deadlock when cpu1 is spinning on while(!cpu_active(cpu1)) during 124 + * booting of that cpu. 121 125 */ 122 126 if (state == CPUFREQ_POSTCHANGE || state == CPUFREQ_RESUMECHANGE) 123 127 smp_call_function_single(freqs->cpu, twd_update_frequency, 124 - NULL, 1); 128 + NULL, cpu_active(freqs->cpu)); 125 129 126 130 return NOTIFY_OK; 127 131 }
+1 -1
arch/arm/mm/Kconfig
··· 723 723 bool "Select the High exception vector" 724 724 help 725 725 Say Y here to select high exception vector(0xFFFF0000~). 726 - The exception vector can be vary depending on the platform 726 + The exception vector can vary depending on the platform 727 727 design in nommu mode. If your platform needs to select 728 728 high exception vector, say Y. 729 729 Otherwise or if you are unsure, say N, and the low exception
+1 -1
arch/arm/mm/fault.c
··· 320 320 */ 321 321 322 322 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr); 323 - if (flags & FAULT_FLAG_ALLOW_RETRY) { 323 + if (!(fault & VM_FAULT_ERROR) && flags & FAULT_FLAG_ALLOW_RETRY) { 324 324 if (fault & VM_FAULT_MAJOR) { 325 325 tsk->maj_flt++; 326 326 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
+2
arch/arm/mm/nommu.c
··· 13 13 #include <asm/sections.h> 14 14 #include <asm/page.h> 15 15 #include <asm/setup.h> 16 + #include <asm/traps.h> 16 17 #include <asm/mach/arch.h> 17 18 18 19 #include "mm.h" ··· 40 39 */ 41 40 void __init paging_init(struct machine_desc *mdesc) 42 41 { 42 + early_trap_init((void *)CONFIG_VECTORS_BASE); 43 43 bootmem_init(); 44 44 } 45 45
+12
arch/arm/mm/proc-v7.S
··· 255 255 mcr p15, 0, r5, c10, c2, 0 @ write PRRR 256 256 mcr p15, 0, r6, c10, c2, 1 @ write NMRR 257 257 #endif 258 + #ifndef CONFIG_ARM_THUMBEE 259 + mrc p15, 0, r0, c0, c1, 0 @ read ID_PFR0 for ThumbEE 260 + and r0, r0, #(0xf << 12) @ ThumbEE enabled field 261 + teq r0, #(1 << 12) @ check if ThumbEE is present 262 + bne 1f 263 + mov r5, #0 264 + mcr p14, 6, r5, c1, c0, 0 @ Initialize TEEHBR to 0 265 + mrc p14, 6, r0, c0, c0, 0 @ load TEECR 266 + orr r0, r0, #1 @ set the 1st bit in order to 267 + mcr p14, 6, r0, c0, c0, 0 @ stop userspace TEEHBR access 268 + 1: 269 + #endif 258 270 adr r5, v7_crval 259 271 ldmia r5, {r5, r6} 260 272 #ifdef CONFIG_CPU_ENDIAN_BE8
+1 -41
drivers/amba/bus.c
··· 247 247 /* 248 248 * Hooks to provide runtime PM of the pclk (bus clock). It is safe to 249 249 * enable/disable the bus clock at runtime PM suspend/resume as this 250 - * does not result in loss of context. However, disabling vcore power 251 - * would do, so we leave that to the driver. 250 + * does not result in loss of context. 252 251 */ 253 252 static int amba_pm_runtime_suspend(struct device *dev) 254 253 { ··· 353 354 clk_put(pclk); 354 355 } 355 356 356 - static int amba_get_enable_vcore(struct amba_device *pcdev) 357 - { 358 - struct regulator *vcore = regulator_get(&pcdev->dev, "vcore"); 359 - int ret; 360 - 361 - pcdev->vcore = vcore; 362 - 363 - if (IS_ERR(vcore)) { 364 - /* It is OK not to supply a vcore regulator */ 365 - if (PTR_ERR(vcore) == -ENODEV) 366 - return 0; 367 - return PTR_ERR(vcore); 368 - } 369 - 370 - ret = regulator_enable(vcore); 371 - if (ret) { 372 - regulator_put(vcore); 373 - pcdev->vcore = ERR_PTR(-ENODEV); 374 - } 375 - 376 - return ret; 377 - } 378 - 379 - static void amba_put_disable_vcore(struct amba_device *pcdev) 380 - { 381 - struct regulator *vcore = pcdev->vcore; 382 - 383 - if (!IS_ERR(vcore)) { 384 - regulator_disable(vcore); 385 - regulator_put(vcore); 386 - } 387 - } 388 - 389 357 /* 390 358 * These are the device model conversion veneers; they convert the 391 359 * device model structures to our more specific structures. ··· 365 399 int ret; 366 400 367 401 do { 368 - ret = amba_get_enable_vcore(pcdev); 369 - if (ret) 370 - break; 371 - 372 402 ret = amba_get_enable_pclk(pcdev); 373 403 if (ret) 374 404 break; ··· 382 420 pm_runtime_put_noidle(dev); 383 421 384 422 amba_put_disable_pclk(pcdev); 385 - amba_put_disable_vcore(pcdev); 386 423 } while (0); 387 424 388 425 return ret; ··· 403 442 pm_runtime_put_noidle(dev); 404 443 405 444 amba_put_disable_pclk(pcdev); 406 - amba_put_disable_vcore(pcdev); 407 445 408 446 return ret; 409 447 }
+1
drivers/mfd/db8500-prcmu.c
··· 2788 2788 .constraints = { 2789 2789 .name = "db8500-vape", 2790 2790 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 2791 + .always_on = true, 2791 2792 }, 2792 2793 .consumer_supplies = db8500_vape_consumers, 2793 2794 .num_consumer_supplies = ARRAY_SIZE(db8500_vape_consumers),
-2
drivers/spi/spi-pl022.c
··· 2195 2195 struct pl022 *pl022 = dev_get_drvdata(dev); 2196 2196 2197 2197 clk_disable(pl022->clk); 2198 - amba_vcore_disable(pl022->adev); 2199 2198 2200 2199 return 0; 2201 2200 } ··· 2203 2204 { 2204 2205 struct pl022 *pl022 = dev_get_drvdata(dev); 2205 2206 2206 - amba_vcore_enable(pl022->adev); 2207 2207 clk_enable(pl022->clk); 2208 2208 2209 2209 return 0;
-7
include/linux/amba/bus.h
··· 30 30 struct device dev; 31 31 struct resource res; 32 32 struct clk *pclk; 33 - struct regulator *vcore; 34 33 u64 dma_mask; 35 34 unsigned int periphid; 36 35 unsigned int irq[AMBA_NR_IRQS]; ··· 73 74 74 75 #define amba_pclk_disable(d) \ 75 76 do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0) 76 - 77 - #define amba_vcore_enable(d) \ 78 - (IS_ERR((d)->vcore) ? 0 : regulator_enable((d)->vcore)) 79 - 80 - #define amba_vcore_disable(d) \ 81 - do { if (!IS_ERR((d)->vcore)) regulator_disable((d)->vcore); } while (0) 82 77 83 78 /* Some drivers don't use the struct amba_device */ 84 79 #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff)