Skip to content

Commit f76d9c6

Browse files
committed
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
2 parents be67d60 + 117e5e9 commit f76d9c6

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

arch/arm/boot/compressed/head.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ __armv7_mmu_cache_on:
779779
orrne r0, r0, #1 @ MMU enabled
780780
movne r1, #0xfffffffd @ domain 0 = client
781781
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
783783
mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer
784784
mcrne p15, 0, r1, c3, c0, 0 @ load domain access control
785785
mcrne p15, 0, r6, c2, c0, 2 @ load ttb control

arch/arm/include/asm/dma-mapping.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
111111
/* The ARM override for dma_max_pfn() */
112112
static inline unsigned long dma_max_pfn(struct device *dev)
113113
{
114-
return PHYS_PFN_OFFSET + dma_to_pfn(dev, *dev->dma_mask);
114+
return dma_to_pfn(dev, *dev->dma_mask);
115115
}
116116
#define dma_max_pfn(dev) dma_max_pfn(dev)
117117

arch/arm/kernel/devtree.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ void __init arm_dt_init_cpu_maps(void)
8888
return;
8989

9090
for_each_child_of_node(cpus, cpu) {
91+
const __be32 *cell;
92+
int prop_bytes;
9193
u32 hwid;
9294

9395
if (of_node_cmp(cpu->type, "cpu"))
@@ -99,18 +101,24 @@ void __init arm_dt_init_cpu_maps(void)
99101
* properties is considered invalid to build the
100102
* cpu_logical_map.
101103
*/
102-
if (of_property_read_u32(cpu, "reg", &hwid)) {
104+
cell = of_get_property(cpu, "reg", &prop_bytes);
105+
if (!cell || prop_bytes < sizeof(*cell)) {
103106
pr_debug(" * %s missing reg property\n",
104107
cpu->full_name);
105108
of_node_put(cpu);
106109
return;
107110
}
108111

109112
/*
110-
* 8 MSBs must be set to 0 in the DT since the reg property
113+
* Bits n:24 must be set to 0 in the DT since the reg property
111114
* defines the MPIDR[23:0].
112115
*/
113-
if (hwid & ~MPIDR_HWID_BITMASK) {
116+
do {
117+
hwid = be32_to_cpu(*cell++);
118+
prop_bytes -= sizeof(*cell);
119+
} while (!hwid && prop_bytes > 0);
120+
121+
if (prop_bytes || (hwid & ~MPIDR_HWID_BITMASK)) {
114122
of_node_put(cpu);
115123
return;
116124
}

0 commit comments

Comments
 (0)