[PATCH v13 0/9] coresight: enable debug module

Mathieu Poirier
2017-05-29T16:41:17Z

On 25 May 2017 at 09:57, Leo Yan <leo.yan@linaro.org> wrote:
> ARMv8 architecture reference manual (ARM DDI 0487A.k) Chapter H7 "The
> Sample-based Profiling Extension" has description for sampling
> registers, we can utilize these registers to check program counter
> value with combined CPU exception level, secure state, etc. So this is
> helpful for CPU lockup bugs, e.g. if one CPU has run into infinite loop
> with IRQ disabled; the 'hang' CPU cannot switch context and handle any
> interrupt, so it cannot handle SMP call for stack dump, etc.
>
> This patch series is to enable coresight debug module with sample-based
> registers and register call back notifier for PCSR register dumping
> when panic happens, so we can see below dumping info for panic; and
> this patch series has considered the conditions for access permission
> for debug registers self, so this can avoid access debug registers when
> CPU power domain is off; the driver also try to figure out the CPU is
> in secure or non-secure state.

I have queued patches 1 to 7 to my tree. I can't do anything about
patches 8 and 9 because they haven't been ack'ed. From here you can
either chase them to get an ACK or send a separate patch to them
directly.

Thanks,
Mathieu

>
> Patch 0001 is to document the dt binding; patch 0002 adds one detailed
> document to describe the Coresight debug module implementation, the
> clock and power domain impaction on the driver, some examples for usage.
>
> Patch 0003 is to document boot parameters used in kernel command line.
>
> Patch 0004 is to add file entries for MAINTAINERS.
>
> Patch 0005 is used to fix the func of_get_coresight_platform_data()
> doesn't properly drop the reference to the CPU node pointer; and
> patch 0006 is refactor to add new function of_coresight_get_cpu().
>
> Patch 0007 is the driver for CPU debug module.
>
> Patch 0008 in this series are to enable debug unit on 96boards Hikey,
> Patch 0009 is to enable debug on 96boards DB410c. Have verified on both
> two boards.
>
> We can enable debugging with two methods, adding parameters into kernel
> command line for build-in module:
> coresight_cpu_debug.enable=1
>
> Or we can wait the system has booted up to use debugfs nodes to enable
> debugging:
> # echo 1 > /sys/kernel/debug/coresight_cpu_debug/enable
>
> As result we can get below log after input command:
> echo c > /proc/sysrq-trigger:
>
> ARM external debug module:
> coresight-cpu-debug 850000.debug: CPU[0]:
> coresight-cpu-debug 850000.debug: EDPRSR: 00000001 (Power:On DLK:Unlock)
> coresight-cpu-debug 850000.debug: EDPCSR: [<ffff00000808e9bc>] handle_IPI+0x174/0x1d8
> coresight-cpu-debug 850000.debug: EDCIDSR: 00000000
> coresight-cpu-debug 850000.debug: EDVIDSR: 90000000 (State:Non-secure Mode:EL1/0 Width:64bits VMID:0)
> coresight-cpu-debug 852000.debug: CPU[1]:
> coresight-cpu-debug 852000.debug: EDPRSR: 00000001 (Power:On DLK:Unlock)
> coresight-cpu-debug 852000.debug: EDPCSR: [<ffff0000087fab34>] debug_notifier_call+0x23c/0x358
> coresight-cpu-debug 852000.debug: EDCIDSR: 00000000
> coresight-cpu-debug 852000.debug: EDVIDSR: 90000000 (State:Non-secure Mode:EL1/0 Width:64bits VMID:0)
>
> [...]
>
> Changes from v12:
> * Fix build warning for 'ARCH=arm' reported by kbuild test robot.
>
> Changes from v11:
> * Dismissed checkpatch.pl warning about "quoted string split across
> multiple lines" and "line over 80 characters".
>
> Changes from v10:
> * Followed Liviu suggestion to improve readability of the documentation.
> * ARM Juno DTS binding patch has been picked by Sudeep, so this patch
> set has not included anymore. Great!
>
> Changes from v9:
> * Used dev_xyz() to replace pr_xyz() for print log.
> * Added DT binding patch for Juno shared by Suzuki.
>
> Changes from v8:
> * According to Mathieu suggestions to split the doc into two patches,
> one is for kernel parameter and another is for driver documentation.
> * Add file entries to MAINTAINERS.
> * According to Mathieu suggestions, refined functions
> debug_enable_func()/debug_disable_func().
>
> Changes from v7:
> * Fix operator priority bug.
> * Minor sequence adjustment for function debug_func_exit().
>
> Changes from v6:
> * According to Suzuki and Mathieu suggestions, refined debug module
> driver to install panic notifier when insmod module; refined function
> debug_force_cpu_powered_up() for CPU power state checking; some minor
> fixing for output log, adding comments for memory barrier, code
> alignment.
>
> Changes from v5:
> * According to Suzuki and Mathieu suggestions, refined debug module
> driver to drop unused structure members, refactored initialization
> code to distinguish hardware implementation features, refactored
> flow for forcing CPU powered up, supported pm_runtime operations.
> * Added one new doc file: Documentation/trace/coresight-cpu-debug.txt,
> which is used to describe detailed info for implementation, clock
> and power domain impaction on debug module, and exmaples for common
> usage.
> * Removed "idle constraints" from debug driver.
>
> Changes from v4:
> * This version is mainly credit to ARM colleagues many contribution
> ideas for better quality (Thanks a lot Suzuki, Mike and Sudeep!).
> * According to Suzuki suggestion, refined debug module driver to avoid
> memory leak for drvdata struct, handle PCSAMPLE_MODE=1, use flag
> drvdata.pc_has_offset to indicate if PCSR has offset, minor fixes.
> * According to Mathieu suggestion, refined dt binding description.
> * Changed driver to support module mode;
> * According to Mike suggestion and very appreciate the pseudo code,
> added support to force CPU powered up with register EDPRCR;
> * According to discussions, added command line and debugfs nodes to
> support enabling debugging for boot time, or later can dynamically
> enable/disable debugging by debugfs.
> * According to Rob Herring suggestion, one minor fixes in DT binding.
> * According to Stephen Boyd suggestion, add const quality to structure
> device_node. And used use of_cpu_device_node_get() to replace
> of_get_cpu_node() in patch 0003.
>
> Changes from v3:
> * Added Suzuki K Poulose's patch to fix issue for the func
> of_get_coresight_platform_data() doesn't properly drop the reference
> to the CPU node pointer.
> * According to Suzuki suggestion, added code to handl the corner case
> for ARMv8 CPU with aarch32 mode.
> * According to Suzuki suggestion, changed compatible string to
> "arm,coresight-cpu-debug".
> * According to Mathieu suggestion, added "power-domains" as optional
> properties.
>
> Changes from v2:
> * According to Mathieu Poirier suggestion, applied some minor fixes.
> * Added two extra patches for enabling debug module on Hikey.
>
> Changes from v1:
> * According to Mike Leach suggestion, removed the binding for debug
> module clocks which have been directly provided by CPU clocks.
> * According to Mathieu Poirier suggestion, added function
> of_coresight_get_cpu() and some minor refactors for debug module
> driver.
>
> Changes from RFC:
> * According to Mike Leach suggestion, added check for EDPRSR to avoid
> lockup; added supporting EDVIDSR and EDCIDSR registers.
> * According to Mark Rutland and Mathieu Poirier suggestion, rewrote
> the documentation for DT binding.
> * According to Mark and Mathieu suggestion, refined debug driver.
>
> Leo Yan (8):
> coresight: bindings for CPU debug module
> doc: Add documentation for Coresight CPU debug
> doc: Add coresight_cpu_debug.enable to kernel-parameters.txt
> MAINTAINERS: update file entries for Coresight subsystem
> coresight: refactor with function of_coresight_get_cpu
> coresight: add support for CPU debug module
> arm64: dts: hi6220: register debug module
> arm64: dts: qcom: msm8916: Add debug unit
>
> Suzuki K Poulose (1):
> coresight: of_get_coresight_platform_data: Add missing of_node_put
>
> Documentation/admin-guide/kernel-parameters.txt | 7 +
> .../bindings/arm/coresight-cpu-debug.txt | 49 ++
> Documentation/trace/coresight-cpu-debug.txt | 175 ++++++
> MAINTAINERS | 2 +
> arch/arm64/boot/dts/hisilicon/hi6220.dtsi | 64 ++
> arch/arm64/boot/dts/qcom/msm8916.dtsi | 32 +
> drivers/hwtracing/coresight/Kconfig | 14 +
> drivers/hwtracing/coresight/Makefile | 1 +
> drivers/hwtracing/coresight/coresight-cpu-debug.c | 700 +++++++++++++++++++++
> drivers/hwtracing/coresight/of_coresight.c | 40 +-
> include/linux/coresight.h | 3 +
> 11 files changed, 1075 insertions(+), 12 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/arm/coresight-cpu-debug.txt
> create mode 100644 Documentation/trace/coresight-cpu-debug.txt
> create mode 100644 drivers/hwtracing/coresight/coresight-cpu-debug.c
>
> --
> 2.7.4
>