Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM fixes from Russell King: "Another round of ARM fixes. The largest change here is the L2 changes to work around problems for the Armada 37x/380 devices, where most of the size comes down to comments rather than code. The other significant fix here is for the ptrace code, to ensure that rewritten syscalls work as intended. This was pointed out by Kees Cook, but Will Deacon reworked the patch to be more elegant. The remainder are fairly trivial changes" * 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: ARM: 8087/1: ptrace: reload syscall number after secure_computing() check ARM: 8086/1: Set memblock limit for nommu ARM: 8085/1: sa1100: collie: add top boot mtd partition ARM: 8084/1: sa1100: collie: revert back to cfi_probe ARM: 8080/1: mcpm.h: remove unused variable declaration ARM: 8076/1: mm: add support for HW coherent systems in PL310 cache
This commit is contained in:
commit
ef2e0391e5
6 changed files with 45 additions and 6 deletions
|
@ -40,6 +40,9 @@ Optional properties:
|
|||
- arm,filter-ranges : <start length> Starting address and length of window to
|
||||
filter. Addresses in the filter window are directed to the M1 port. Other
|
||||
addresses will go to the M0 port.
|
||||
- arm,io-coherent : indicates that the system is operating in an hardware
|
||||
I/O coherent mode. Valid only when the arm,pl310-cache compatible
|
||||
string is used.
|
||||
- interrupts : 1 combined interrupt.
|
||||
- cache-id-part: cache id part number to be used if it is not present
|
||||
on hardware
|
||||
|
|
|
@ -208,8 +208,6 @@ struct sync_struct {
|
|||
struct mcpm_sync_struct clusters[MAX_NR_CLUSTERS];
|
||||
};
|
||||
|
||||
extern unsigned long sync_phys; /* physical address of *mcpm_sync */
|
||||
|
||||
void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster);
|
||||
void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster);
|
||||
void __mcpm_outbound_leave_critical(unsigned int cluster, int state);
|
||||
|
|
|
@ -908,7 +908,7 @@ enum ptrace_syscall_dir {
|
|||
PTRACE_SYSCALL_EXIT,
|
||||
};
|
||||
|
||||
static int tracehook_report_syscall(struct pt_regs *regs,
|
||||
static void tracehook_report_syscall(struct pt_regs *regs,
|
||||
enum ptrace_syscall_dir dir)
|
||||
{
|
||||
unsigned long ip;
|
||||
|
@ -926,7 +926,6 @@ static int tracehook_report_syscall(struct pt_regs *regs,
|
|||
current_thread_info()->syscall = -1;
|
||||
|
||||
regs->ARM_ip = ip;
|
||||
return current_thread_info()->syscall;
|
||||
}
|
||||
|
||||
asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)
|
||||
|
@ -938,7 +937,9 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)
|
|||
return -1;
|
||||
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACE))
|
||||
scno = tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
|
||||
tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
|
||||
|
||||
scno = current_thread_info()->syscall;
|
||||
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
||||
trace_sys_enter(regs, scno);
|
||||
|
|
|
@ -329,6 +329,11 @@ static struct mtd_partition collie_partitions[] = {
|
|||
.name = "rootfs",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 0x00e20000,
|
||||
}, {
|
||||
.name = "bootblock",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 0x00020000,
|
||||
.mask_flags = MTD_WRITEABLE
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -356,7 +361,7 @@ static void collie_flash_exit(void)
|
|||
}
|
||||
|
||||
static struct flash_platform_data collie_flash_data = {
|
||||
.map_name = "jedec_probe",
|
||||
.map_name = "cfi_probe",
|
||||
.init = collie_flash_init,
|
||||
.set_vpp = collie_set_vpp,
|
||||
.exit = collie_flash_exit,
|
||||
|
|
|
@ -1068,6 +1068,33 @@ static const struct l2c_init_data of_l2c310_data __initconst = {
|
|||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* This is a variant of the of_l2c310_data with .sync set to
|
||||
* NULL. Outer sync operations are not needed when the system is I/O
|
||||
* coherent, and potentially harmful in certain situations (PCIe/PL310
|
||||
* deadlock on Armada 375/38x due to hardware I/O coherency). The
|
||||
* other operations are kept because they are infrequent (therefore do
|
||||
* not cause the deadlock in practice) and needed for secondary CPU
|
||||
* boot and other power management activities.
|
||||
*/
|
||||
static const struct l2c_init_data of_l2c310_coherent_data __initconst = {
|
||||
.type = "L2C-310 Coherent",
|
||||
.way_size_0 = SZ_8K,
|
||||
.num_lock = 8,
|
||||
.of_parse = l2c310_of_parse,
|
||||
.enable = l2c310_enable,
|
||||
.fixup = l2c310_fixup,
|
||||
.save = l2c310_save,
|
||||
.outer_cache = {
|
||||
.inv_range = l2c210_inv_range,
|
||||
.clean_range = l2c210_clean_range,
|
||||
.flush_range = l2c210_flush_range,
|
||||
.flush_all = l2c210_flush_all,
|
||||
.disable = l2c310_disable,
|
||||
.resume = l2c310_resume,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Note that the end addresses passed to Linux primitives are
|
||||
* noninclusive, while the hardware cache range operations use
|
||||
|
@ -1487,6 +1514,10 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
|
|||
|
||||
data = of_match_node(l2x0_ids, np)->data;
|
||||
|
||||
if (of_device_is_compatible(np, "arm,pl310-cache") &&
|
||||
of_property_read_bool(np, "arm,io-coherent"))
|
||||
data = &of_l2c310_coherent_data;
|
||||
|
||||
old_aux = readl_relaxed(l2x0_base + L2X0_AUX_CTRL);
|
||||
if (old_aux != ((old_aux & aux_mask) | aux_val)) {
|
||||
pr_warn("L2C: platform modifies aux control register: 0x%08x -> 0x%08x\n",
|
||||
|
|
|
@ -300,6 +300,7 @@ void __init sanity_check_meminfo(void)
|
|||
sanity_check_meminfo_mpu();
|
||||
end = memblock_end_of_DRAM();
|
||||
high_memory = __va(end - 1) + 1;
|
||||
memblock_set_current_limit(end);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue