From 15d6bca6c40dad2544ceadeb4e5ec8b0aa30377e Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Thu, 7 Jun 2018 20:22:03 +0800 Subject: [PATCH] ARM: hw_breakpoint: Workaround for Cortex-A12/A17 It seems Cortex-A12/A17 do not report report watchpoint hit address that matches the watchpoint set as ARM64. Add this workaround for pass Android 8+ CTS bionic ptrace watchpoint_imprecise. Change-Id: I22f08a081d1436931cbed4e8b340237799299737 Signed-off-by: Tao Huang --- arch/arm/kernel/hw_breakpoint.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 1d5fbf1d1c67..0fec4f3890ad 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c @@ -725,6 +725,20 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr, /* Check if the watchpoint value matches. */ val = read_wb_reg(ARM_BASE_WVR + i); + /* + * It seems Cortex-A12/A17 do not report report + * watchpoint hit address that matches the watchpoint + * set as ARM64. + * Add this workaround for pass Android 8+ CTS + * bionic ptrace watchpoint_imprecise. + */ + if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A12) { + unsigned long dist; + + dist = val > addr ? val - addr : addr - val; + if (dist > 8) + goto unlock; + } else if (val != (addr & ~alignment_mask)) goto unlock;