Re: [RFC PATCH 3/6] soc: qcom: Add Qualcomm minidump kernel driver
From: Konrad Dybcio <hidden>
Date: 2023-03-08 20:50:32
Also in:
linux-arm-msm, linux-hardening, linux-remoteproc, lkml
On 8.03.2023 21:22, Srinivas Kandagatla wrote:
On 21/02/2023 11:25, Mukesh Ojha wrote:quoted
Minidump is a best effort mechanism to collect useful and predefined data for first level of debugging on end user devices running on Qualcomm SoCs. It is built on the premise that System on Chip (SoC) or subsystem part of SoC crashes, due to a range of hardware and software bugs. Hence, the ability to collect accurate data is only a best-effort. The data collected could be invalid or corrupted, data collection itself could fail, and so on. Qualcomm devices in engineering mode provides a mechanism for generating full system ramdumps for post mortem debugging. But in some cases it's however not feasible to capture the entire content of RAM. The minidump mechanism provides the means for selecting region should be included in the ramdump. The solution supports extracting the ramdump/minidump produced either over USB or stored to an attached storage device. The core of minidump feature is part of Qualcomm's boot firmware code. It initializes shared memory(SMEM), which is a part of DDR and allocates a small section of it to minidump table i.e also called global table of content (G-ToC). Each subsystem (APSS, ADSP, ...) has their own table of segments to be included in the minidump, all references from a descriptor in SMEM (G-ToC). Each segment/region has some details like name, physical address and it's size etc. and it could be anywhere scattered in the DDR. Minidump kernel driver adds the capability to add linux region to be dumped as part of ram dump collection. It provides appropriate symbol to check its enablement and register client regions. To simplify post mortem debugging, it creates and maintain an ELF header as first region that gets updated with upon registration of a new region. Signed-off-by: Mukesh Ojha <redacted> ---
[...]
quoted
+int qcom_minidump_ready(void) +{ + void *ptr; + struct device_node *np; + static bool is_smem_available = true; + + if (!is_smem_available || !(np = of_find_compatible_node(NULL, NULL, "qcom,smem"))) {just check for dt node here does not mean that smem device is available, you should probably check if the device is avaliable aswell using of_device_is_available() We should proabably return -EPROBEDEFER incase the node is present and device is not present.
qcom_smem_get() seems to handle -EPROBE_DEFER internally, so this check may be entirely redundant. Konrad _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel