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

Configure Feed

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

Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:
"Three relatively small fixes for ARM:

- Roger noticed that dma_max_pfn() was calculating the upper limit
wrongly, by adding the PFN offset of memory twice.

- A fix from Robin to correct parsing of MPIDR values when the
address size is larger than one BE32 unit.

- A fix from Srinivas to ensure that we do not rely on the boot
loader (or previous Linux kernel) setting the translation table
base register a certain way in the decompressor, which can lead to
crashes"

* 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm:
ARM: 8618/1: decompressor: reset ttbcr fields to use TTBR0 on ARMv7
ARM: 8617/1: dma: fix dma_max_pfn()
ARM: 8616/1: dt: Respect property size when parsing CPUs

+13 -5
+1 -1
arch/arm/boot/compressed/head.S
··· 779 779 orrne r0, r0, #1 @ MMU enabled 780 780 movne r1, #0xfffffffd @ domain 0 = client 781 781 bic r6, r6, #1 << 31 @ 32-bit translation system 782 - bic r6, r6, #3 << 0 @ use only ttbr0 782 + bic r6, r6, #(7 << 0) | (1 << 4) @ use only ttbr0 783 783 mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer 784 784 mcrne p15, 0, r1, c3, c0, 0 @ load domain access control 785 785 mcrne p15, 0, r6, c2, c0, 2 @ load ttb control
+1 -1
arch/arm/include/asm/dma-mapping.h
··· 111 111 /* The ARM override for dma_max_pfn() */ 112 112 static inline unsigned long dma_max_pfn(struct device *dev) 113 113 { 114 - return PHYS_PFN_OFFSET + dma_to_pfn(dev, *dev->dma_mask); 114 + return dma_to_pfn(dev, *dev->dma_mask); 115 115 } 116 116 #define dma_max_pfn(dev) dma_max_pfn(dev) 117 117
+11 -3
arch/arm/kernel/devtree.c
··· 88 88 return; 89 89 90 90 for_each_child_of_node(cpus, cpu) { 91 + const __be32 *cell; 92 + int prop_bytes; 91 93 u32 hwid; 92 94 93 95 if (of_node_cmp(cpu->type, "cpu")) ··· 101 99 * properties is considered invalid to build the 102 100 * cpu_logical_map. 103 101 */ 104 - if (of_property_read_u32(cpu, "reg", &hwid)) { 102 + cell = of_get_property(cpu, "reg", &prop_bytes); 103 + if (!cell || prop_bytes < sizeof(*cell)) { 105 104 pr_debug(" * %s missing reg property\n", 106 105 cpu->full_name); 107 106 of_node_put(cpu); ··· 110 107 } 111 108 112 109 /* 113 - * 8 MSBs must be set to 0 in the DT since the reg property 110 + * Bits n:24 must be set to 0 in the DT since the reg property 114 111 * defines the MPIDR[23:0]. 115 112 */ 116 - if (hwid & ~MPIDR_HWID_BITMASK) { 113 + do { 114 + hwid = be32_to_cpu(*cell++); 115 + prop_bytes -= sizeof(*cell); 116 + } while (!hwid && prop_bytes > 0); 117 + 118 + if (prop_bytes || (hwid & ~MPIDR_HWID_BITMASK)) { 117 119 of_node_put(cpu); 118 120 return; 119 121 }