From patchwork Thu Sep 10 18:57:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddharth Gupta X-Patchwork-Id: 11768795 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 42443139F for ; Thu, 10 Sep 2020 18:57:58 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 07174214F1 for ; Thu, 10 Sep 2020 18:57:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="HkM9my+T"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="PTDhsR0h"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazonses.com header.i=@amazonses.com header.b="BUpZDsm2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 07174214F1 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:Message-ID:Date:Subject:To: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=F/njvtgYWHSiECewhvk+HplXZKrYumceJ0UlBTj6fyU=; b=HkM9my+TWnSKlqr2HfLLljhRnX 0DWjsUl2bhIIjx1/AblptEoLX/9Gi2rBeTvVkg6SJM2V+mzm+8GL+tBSeqEjs/uBSSaoqNjbSh6cW CE7vqcLlC9MnQ4mXSF1U6eAgYR7hsIno5GsvkOqKTirB6GIbeqX8F+9gr2LL2SBiLJ2sveUOjo17O PbIX1H7F72iSC2hYEdkM4+S2+kAMBtUDMhnhDVj6W7CIZ/t0jLPPNEb2FL8fVFbj5V/MaJmomNUnH V72lDf1Fu2fF9njrcz7ae+8EmqqTuEc4smXZ2vF5YE/2EtyH0bEG2xbDHTf5muyEm5li5os8KCZzg AUE1hSsw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kGRlJ-0000EB-Bv; Thu, 10 Sep 2020 18:57:37 +0000 Received: from a27-21.smtp-out.us-west-2.amazonses.com ([54.240.27.21]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kGRlH-0000DK-Ba for linux-arm-kernel@lists.infradead.org; Thu, 10 Sep 2020 18:57:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=zsmsymrwgfyinv5wlfyidntwsjeeldzt; d=codeaurora.org; t=1599764252; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; bh=k0CVrHNZHjKDxCYHpx5Zfcww4H7NJod+HjFj1v8y6r8=; b=PTDhsR0hV9J8AGUPOAg/byNwIpK3ivYiGzF7e6dVDetvX35sQT6o9VEMSusmMgp9 /zWbeozeVEF7WOkxrsA9bfUIqWm/3T1fjxqXlai2kUxyPZwQ2dPwyF5zic8vhjRbIcE NrcjGVm/HxFQ38ur5tgW0MWzBMXqzEckbAJUp7ZU= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=hsbnp7p3ensaochzwyq5wwmceodymuwv; d=amazonses.com; t=1599764252; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:Feedback-ID; bh=k0CVrHNZHjKDxCYHpx5Zfcww4H7NJod+HjFj1v8y6r8=; b=BUpZDsm2iMddmBglgzk+GePRBj3TBtMlB3UumixLqPNFZbdcd8ivouaELepEqfTW ugC/Zea0Lv/FIYrOw1WXplRiq/bLQNcTeeiYzPiG00LlGQsFUmf04sLTn3ac5oxxVpg KfwzOuaJu2YoNSz1Ii9J4HT3PRBrrD6NJ9lGlE7A= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED, BAYES_00, SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org AF9B2C433F0 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=sidgup@codeaurora.org From: Siddharth Gupta To: agross@kernel.org, bjorn.andersson@linaro.org, ohad@wizery.com Subject: [PATCH v4 1/3] remoteproc: core: Add ops to enable custom coredump functionality Date: Thu, 10 Sep 2020 18:57:32 +0000 Message-ID: <01010174796146a0-d45d7fda-8d50-431c-a8a6-9d767f85111f-000000@us-west-2.amazonses.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1599764242-690-1-git-send-email-sidgup@codeaurora.org> References: <1599764242-690-1-git-send-email-sidgup@codeaurora.org> X-SES-Outgoing: 2020.09.10-54.240.27.21 Feedback-ID: 1.us-west-2.CZuq2qbDmUIuT3qdvXlRHZZCpfZqZ4GtG9v3VKgRyF0=:AmazonSES X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200910_145735_458448_F52616F5 X-CRM114-Status: GOOD ( 15.42 ) X-Spam-Score: 0.1 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [54.240.27.21 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [54.240.27.21 listed in wl.mailspike.net] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.2 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tsoni@codeaurora.org, linux-doc@vger.kernel.org, linux-arm-msm@vger.kernel.org, Gurbir Arora , linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, rishabhb@codeaurora.org, Siddharth Gupta , psodagud@codeaurora.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Each remoteproc might have different requirements for coredumps and might want to choose the type of dumps it wants to collect. This change allows remoteproc drivers to specify their own custom dump function to be executed in place of rproc_coredump. If the coredump op is not specified by the remoteproc driver it will be set to rproc_coredump by default.The priv_cleanup op cleans up the private resources used by the remoteproc. Signed-off-by: Rishabh Bhatnagar Signed-off-by: Gurbir Arora Signed-off-by: Siddharth Gupta --- drivers/remoteproc/remoteproc_core.c | 6 +++++- include/linux/remoteproc.h | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 7f90eee..dcc1341 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -1681,7 +1681,7 @@ int rproc_trigger_recovery(struct rproc *rproc) goto unlock_mutex; /* generate coredump */ - rproc_coredump(rproc); + rproc->ops->coredump(rproc); /* load firmware */ ret = request_firmware(&firmware_p, rproc->firmware, dev); @@ -2103,6 +2103,10 @@ static int rproc_alloc_ops(struct rproc *rproc, const struct rproc_ops *ops) if (!rproc->ops) return -ENOMEM; + /* Default to rproc_coredump if no coredump function is specified */ + if (!rproc->ops->coredump) + rproc->ops->coredump = rproc_coredump; + if (rproc->ops->load) return 0; diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h index 2fa68bf..a489aec 100644 --- a/include/linux/remoteproc.h +++ b/include/linux/remoteproc.h @@ -375,6 +375,8 @@ enum rsc_handling_status { * @get_boot_addr: get boot address to entry point specified in firmware * @panic: optional callback to react to system panic, core will delay * panic at least the returned number of milliseconds + * @coredump: collect firmware dump after the subsystem is shutdown + * @priv_cleanup: cleans up the private resources used by the rproc */ struct rproc_ops { int (*prepare)(struct rproc *rproc); @@ -393,6 +395,8 @@ struct rproc_ops { int (*sanity_check)(struct rproc *rproc, const struct firmware *fw); u64 (*get_boot_addr)(struct rproc *rproc, const struct firmware *fw); unsigned long (*panic)(struct rproc *rproc); + void (*coredump)(struct rproc *rproc); + void (*priv_cleanup)(struct rproc *rproc); }; /** From patchwork Thu Sep 10 18:57:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddharth Gupta X-Patchwork-Id: 11768797 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4B32C139F for ; Thu, 10 Sep 2020 18:58:02 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E948920731 for ; Thu, 10 Sep 2020 18:58:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="HibF4+5A"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="IrhcCHq8"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazonses.com header.i=@amazonses.com header.b="drczwClM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E948920731 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:Message-ID:Date:Subject:To: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=APRVmU4i3Ajgztw95HdF4vAWr5AOp7P5El1CKGq5v5Q=; b=HibF4+5A5c95S1LlonTtXpijeP 7HfzFLqv+78MrfGwhDZsMvtG37y8tlC5Ru+1ttN3JpJdV6HOOg372iHaAWRHHq9KQf7+BPZqBZYf9 lAcZBoKoHP2ORkGV5GlKAo9bDgGeDcqycmrrAcZppppaWpZ1ljPL92VHJrmA8yVKW0ky1Plnm9HdR nd7kdwVvULCCXvoVregP9Ov7WmjTTJJSpNouO/PVUFcguzMLmVizbhyHxqHDSBM4ow+SRsFyOuzYT jySfjhgkdorVhg+33ANt9trnUGQqvRH7xAiCEn+XTxxlMAkpT51QXnqMWmAqYxXQIvWouH6UhNSgz T783/D3w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kGRlU-0000HU-Q5; Thu, 10 Sep 2020 18:57:48 +0000 Received: from a27-56.smtp-out.us-west-2.amazonses.com ([54.240.27.56]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kGRlJ-0000DO-Al for linux-arm-kernel@lists.infradead.org; Thu, 10 Sep 2020 18:57:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=zsmsymrwgfyinv5wlfyidntwsjeeldzt; d=codeaurora.org; t=1599764254; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; bh=ClW5GDm+2DlpPQXbrDpXvHFeylp6dhk/hdoBRh+u6pg=; b=IrhcCHq8XsRGX7L4SiGBwgs5s7xunvq/YyOFnVbnbkAOJGpBEG+FsPj+4QOIocGs /aq+miNCeoZruy1m4cOnNXPt5Rww2ZIW9BilGApbOCCj/RK2rECe0Ry2G6ZiCfkxaZI v6BdKEte2ZTml6R/wfmHYmi8e9vgV/JSJ75YnybA= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=hsbnp7p3ensaochzwyq5wwmceodymuwv; d=amazonses.com; t=1599764254; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:Feedback-ID; bh=ClW5GDm+2DlpPQXbrDpXvHFeylp6dhk/hdoBRh+u6pg=; b=drczwClMMcL5rtGYGm+3E701J3nZMpAn/kTOIlEAg7k4aog2s1k88yaSk+XYjTuP NybWfKiZw6gDukPf+JvSogVy4rXeXgVcKXz93sXhwA2r6jJxihfFwsICimFQq9B0WRK JVevPtq5n20skrZEH0QdWFvMPUvS6KVaZwCG+qU4= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED, BAYES_00, SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 8A79BC433C6 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=sidgup@codeaurora.org From: Siddharth Gupta To: agross@kernel.org, bjorn.andersson@linaro.org, ohad@wizery.com Subject: [PATCH v4 2/3] remoteproc: qcom: Add capability to collect minidumps Date: Thu, 10 Sep 2020 18:57:34 +0000 Message-ID: <0101017479614d0f-bb35ac70-143f-4d42-903c-6c3ab2f51ec0-000000@us-west-2.amazonses.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1599764242-690-1-git-send-email-sidgup@codeaurora.org> References: <1599764242-690-1-git-send-email-sidgup@codeaurora.org> X-SES-Outgoing: 2020.09.10-54.240.27.56 Feedback-ID: 1.us-west-2.CZuq2qbDmUIuT3qdvXlRHZZCpfZqZ4GtG9v3VKgRyF0=:AmazonSES X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200910_145737_525132_E43DC3A8 X-CRM114-Status: GOOD ( 32.85 ) X-Spam-Score: 0.1 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [54.240.27.56 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [54.240.27.56 listed in wl.mailspike.net] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.2 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tsoni@codeaurora.org, linux-doc@vger.kernel.org, linux-arm-msm@vger.kernel.org, Gurbir Arora , linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, rishabhb@codeaurora.org, Siddharth Gupta , psodagud@codeaurora.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org This patch adds support for collecting minidump in the event of remoteproc crash. Parse the minidump table based on remoteproc's unique minidump-id, read all memory regions from the remoteproc's minidump table entry and expose the memory to userspace. The remoteproc platform driver can choose to collect a full/mini dump by specifying the coredump op. Signed-off-by: Rishabh Bhatnagar Signed-off-by: Gurbir Arora Signed-off-by: Siddharth Gupta --- drivers/remoteproc/qcom_minidump.h | 64 +++++++++++++ drivers/remoteproc/qcom_q6v5_pas.c | 106 ++++++++++++++++++++- drivers/remoteproc/remoteproc_coredump.c | 138 ++++++++++++++++++++++++++++ drivers/remoteproc/remoteproc_elf_helpers.h | 27 ++++++ include/linux/remoteproc.h | 1 + 5 files changed, 334 insertions(+), 2 deletions(-) create mode 100644 drivers/remoteproc/qcom_minidump.h diff --git a/drivers/remoteproc/qcom_minidump.h b/drivers/remoteproc/qcom_minidump.h new file mode 100644 index 0000000..437e030 --- /dev/null +++ b/drivers/remoteproc/qcom_minidump.h @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + */ + +#ifndef __QCOM_MINIDUMP_H +#define __QCOM_MINIDUMP_H + +#define MAX_NUM_OF_SS 10 +#define MAX_REGION_NAME_LENGTH 16 +#define SBL_MINIDUMP_SMEM_ID 602 +#define MD_REGION_VALID ('V' << 24 | 'A' << 16 | 'L' << 8 | 'I' << 0) +#define MD_SS_ENCR_DONE ('D' << 24 | 'O' << 16 | 'N' << 8 | 'E' << 0) +#define MD_SS_ENABLED ('E' << 24 | 'N' << 16 | 'B' << 8 | 'L' << 0) + +/** + * md_ss_region - Minidump region + * @name : Name of the region to be dumped + * @seq_num: : Use to differentiate regions with same name. + * @md_valid : This entry to be dumped (if set to 1) + * @region_base_address : Physical address of region to be dumped + * @region_size : Size of the region + */ +struct md_ss_region { + char name[MAX_REGION_NAME_LENGTH]; + u32 seq_num; + u32 md_valid; + u64 region_base_address; + u64 region_size; +}; + +/** + * md_ss_toc: Subsystem's SMEM Table of content + * @md_ss_toc_init : Subsystem toc init status + * @md_ss_enable_status : if set to 1, this region would be copied during coredump + * @encryption_status: Encryption status for this subsystem + * @encryption_required : Decides to encrypt the subsystem regions or not + * @ss_region_count : Number of regions added in this subsystem toc + * @md_ss_smem_regions_baseptr : regions base pointer of the subsystem + */ +struct md_ss_toc { + u32 md_ss_toc_init; + u32 md_ss_enable_status; + u32 encryption_status; + u32 encryption_required; + u32 ss_region_count; + u64 md_ss_smem_regions_baseptr; +}; + +/** + * md_global_toc: Global Table of Content + * @md_toc_init : Global Minidump init status + * @md_revision : Minidump revision + * @md_enable_status : Minidump enable status + * @md_ss_toc : Array of subsystems toc + */ +struct md_global_toc { + u32 md_toc_init; + u32 md_revision; + u32 md_enable_status; + struct md_ss_toc md_ss_toc[MAX_NUM_OF_SS]; +}; + +#endif diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 3837f23..c01e81e 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -28,11 +28,13 @@ #include "qcom_pil_info.h" #include "qcom_q6v5.h" #include "remoteproc_internal.h" +#include "qcom_minidump.h" struct adsp_data { int crash_reason_smem; const char *firmware_name; int pas_id; + unsigned int minidump_id; bool has_aggre2_clk; bool auto_boot; @@ -63,6 +65,7 @@ struct qcom_adsp { int proxy_pd_count; int pas_id; + unsigned int minidump_id; int crash_reason_smem; bool has_aggre2_clk; const char *info_name; @@ -81,6 +84,8 @@ struct qcom_adsp { struct qcom_sysmon *sysmon; }; +static struct md_global_toc *g_md_toc; + static int adsp_pds_enable(struct qcom_adsp *adsp, struct device **pds, size_t pd_count) { @@ -116,6 +121,88 @@ static void adsp_pds_disable(struct qcom_adsp *adsp, struct device **pds, } } +static void adsp_add_minidump_segments(struct rproc *rproc, struct md_ss_toc *minidump_ss) +{ + struct md_ss_region __iomem *region_info; + int seg_cnt = 0, i; + void __iomem *ptr; + dma_addr_t da; + size_t size; + char *name; + + seg_cnt = minidump_ss->ss_region_count; + ptr = ioremap((unsigned long)minidump_ss->md_ss_smem_regions_baseptr, + seg_cnt * sizeof(struct md_ss_region)); + + if (!ptr) + return; + + region_info = ptr; + + if (!list_empty(&rproc->dump_segments)) { + dev_info(&rproc->dev, "dump segment list already populated\n"); + goto unmap_iomem; + } + + for (i = 0; i < seg_cnt; i++) { + if (__raw_readl(®ion_info->md_valid) == MD_REGION_VALID) { + name = kmalloc(MAX_REGION_NAME_LENGTH, GFP_KERNEL); + memcpy(name, region_info->name, sizeof(region_info->name)); + da = region_info->region_base_address; + size = region_info->region_size; + rproc_coredump_add_custom_segment(rproc, da, size, NULL, name); + } + region_info++; + } + +unmap_iomem: + iounmap(ptr); +} + +static void adsp_dump(struct rproc *rproc) +{ + struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; + struct md_ss_toc *minidump_ss; + size_t size; + + /* Get Global minidump ToC*/ + if (!g_md_toc) + g_md_toc = qcom_smem_get(QCOM_SMEM_HOST_ANY, + SBL_MINIDUMP_SMEM_ID, &size); + + /* check if global table pointer exists and init is set */ + if (IS_ERR(g_md_toc) || !(g_md_toc->md_toc_init)) { + dev_err(&rproc->dev, "SMEM is not initialized.\n"); + return; + } + + /* Get subsystem table of contents using the minidump id */ + minidump_ss = &g_md_toc->md_ss_toc[adsp->minidump_id]; + + /** + * Collect minidump if SS ToC is valid and segment table + * is initialized in memory and encryption status is set. + */ + if (minidump_ss->md_ss_smem_regions_baseptr == 0 || + minidump_ss->md_ss_toc_init != 1 || + minidump_ss->md_ss_enable_status != MD_SS_ENABLED || + minidump_ss->encryption_status != MD_SS_ENCR_DONE) { + dev_err(&rproc->dev, "Minidump not ready!! Aborting\n"); + return; + } + + adsp_add_minidump_segments(rproc, minidump_ss); + rproc_minidump(rproc); +} + +static void adsp_priv_cleanup(struct rproc *rproc) +{ + struct rproc_dump_segment *segment; + + list_for_each_entry(segment, &rproc->dump_segments, node) + kfree(segment->priv); +} + static int adsp_load(struct rproc *rproc, const struct firmware *fw) { struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; @@ -258,6 +345,15 @@ static const struct rproc_ops adsp_ops = { .panic = adsp_panic, }; +static const struct rproc_ops adsp_minidump_ops = { + .start = adsp_start, + .stop = adsp_stop, + .da_to_va = adsp_da_to_va, + .load = adsp_load, + .coredump = adsp_dump, + .priv_cleanup = adsp_priv_cleanup, +}; + static int adsp_init_clock(struct qcom_adsp *adsp) { int ret; @@ -398,8 +494,13 @@ static int adsp_probe(struct platform_device *pdev) if (ret < 0 && ret != -EINVAL) return ret; - rproc = rproc_alloc(&pdev->dev, pdev->name, &adsp_ops, - fw_name, sizeof(*adsp)); + if (desc->minidump_id) + rproc = rproc_alloc(&pdev->dev, pdev->name, &adsp_minidump_ops, fw_name, + sizeof(*adsp)); + else + rproc = rproc_alloc(&pdev->dev, pdev->name, &adsp_ops, fw_name, + sizeof(*adsp)); + if (!rproc) { dev_err(&pdev->dev, "unable to allocate remoteproc\n"); return -ENOMEM; @@ -411,6 +512,7 @@ static int adsp_probe(struct platform_device *pdev) adsp = (struct qcom_adsp *)rproc->priv; adsp->dev = &pdev->dev; adsp->rproc = rproc; + adsp->minidump_id = desc->minidump_id; adsp->pas_id = desc->pas_id; adsp->has_aggre2_clk = desc->has_aggre2_clk; adsp->info_name = desc->sysmon_name; diff --git a/drivers/remoteproc/remoteproc_coredump.c b/drivers/remoteproc/remoteproc_coredump.c index bb15a29..0495389 100644 --- a/drivers/remoteproc/remoteproc_coredump.c +++ b/drivers/remoteproc/remoteproc_coredump.c @@ -13,6 +13,8 @@ #include "remoteproc_internal.h" #include "remoteproc_elf_helpers.h" +#define MAX_STRTBL_SIZE 512 + struct rproc_coredump_state { struct rproc *rproc; void *header; @@ -27,6 +29,9 @@ void rproc_coredump_cleanup(struct rproc *rproc) { struct rproc_dump_segment *entry, *tmp; + if (rproc->ops->priv_cleanup) + rproc->ops->priv_cleanup(rproc); + list_for_each_entry_safe(entry, tmp, &rproc->dump_segments, node) { list_del(&entry->node); kfree(entry); @@ -323,3 +328,136 @@ void rproc_coredump(struct rproc *rproc) */ wait_for_completion(&dump_state.dump_done); } + +/** + * rproc_minidump() - perform minidump + * @rproc: rproc handle + * + * This function will generate an ELF header for the registered sections of + * segments and create a devcoredump device associated with rproc. Based on + * the coredump configuration this function will directly copy the segments + * from device memory to userspace or copy segments from device memory to + * a separate buffer, which can then be read by userspace. + * The first approach avoids using extra vmalloc memory. But it will stall + * recovery flow until dump is read by userspace. + */ +void rproc_minidump(struct rproc *rproc) +{ + struct rproc_dump_segment *segment; + void *shdr; + void *ehdr; + size_t data_size; + size_t offset; + void *data; + u8 class = rproc->elf_class; + int shnum; + struct rproc_coredump_state dump_state; + unsigned int dump_conf = rproc->dump_conf; + char *str_tbl = "STR_TBL"; + + if (list_empty(&rproc->dump_segments) || + dump_conf == RPROC_COREDUMP_DISABLED) + return; + + if (class == ELFCLASSNONE) { + dev_err(&rproc->dev, "Elf class is not set\n"); + return; + } + + /* + * We allocate two extra section headers. The first one is null. + * Second section header is for the string table. Also space is + * allocated for string table. + */ + data_size = elf_size_of_hdr(class) + 2 * elf_size_of_shdr(class) + + MAX_STRTBL_SIZE; + shnum = 2; + + list_for_each_entry(segment, &rproc->dump_segments, node) { + data_size += elf_size_of_shdr(class); + if (dump_conf == RPROC_COREDUMP_DEFAULT) + data_size += segment->size; + shnum++; + } + + data = vmalloc(data_size); + if (!data) + return; + + ehdr = data; + memset(ehdr, 0, elf_size_of_hdr(class)); + /* e_ident field is common for both elf32 and elf64 */ + elf_hdr_init_ident(ehdr, class); + + elf_hdr_set_e_type(class, ehdr, ET_CORE); + elf_hdr_set_e_machine(class, ehdr, rproc->elf_machine); + elf_hdr_set_e_version(class, ehdr, EV_CURRENT); + elf_hdr_set_e_entry(class, ehdr, rproc->bootaddr); + elf_hdr_set_e_shoff(class, ehdr, elf_size_of_hdr(class)); + elf_hdr_set_e_ehsize(class, ehdr, elf_size_of_hdr(class)); + elf_hdr_set_e_shentsize(class, ehdr, elf_size_of_shdr(class)); + elf_hdr_set_e_shnum(class, ehdr, shnum); + elf_hdr_set_e_shstrndx(class, ehdr, 1); + + /* Set the first section header as null and move to the next one. */ + shdr = data + elf_hdr_get_e_shoff(class, ehdr); + memset(shdr, 0, elf_size_of_shdr(class)); + shdr += elf_size_of_shdr(class); + + /* Initialize the string table. */ + offset = elf_hdr_get_e_shoff(class, ehdr) + + elf_size_of_shdr(class) * elf_hdr_get_e_shnum(class, ehdr); + memset(data + offset, 0, MAX_STRTBL_SIZE); + + /* Fill in the string table section header. */ + memset(shdr, 0, elf_size_of_shdr(class)); + elf_shdr_set_sh_type(class, shdr, SHT_STRTAB); + elf_shdr_set_sh_offset(class, shdr, offset); + elf_shdr_set_sh_size(class, shdr, MAX_STRTBL_SIZE); + elf_shdr_set_sh_entsize(class, shdr, 0); + elf_shdr_set_sh_flags(class, shdr, 0); + elf_shdr_set_sh_name(class, shdr, set_section_name(str_tbl, ehdr, class)); + offset += elf_shdr_get_sh_size(class, shdr); + shdr += elf_size_of_shdr(class); + + list_for_each_entry(segment, &rproc->dump_segments, node) { + memset(shdr, 0, elf_size_of_shdr(class)); + elf_shdr_set_sh_type(class, shdr, SHT_PROGBITS); + elf_shdr_set_sh_offset(class, shdr, offset); + elf_shdr_set_sh_addr(class, shdr, segment->da); + elf_shdr_set_sh_size(class, shdr, segment->size); + elf_shdr_set_sh_entsize(class, shdr, 0); + elf_shdr_set_sh_flags(class, shdr, SHF_WRITE); + elf_shdr_set_sh_name(class, shdr, + set_section_name(segment->priv, ehdr, class)); + + /* No need to copy segments for inline dumps */ + if (dump_conf == RPROC_COREDUMP_DEFAULT) + rproc_copy_segment(rproc, data + offset, segment, 0, + segment->size); + offset += elf_shdr_get_sh_size(class, shdr); + shdr += elf_size_of_shdr(class); + } + + if (dump_conf == RPROC_COREDUMP_DEFAULT) { + dev_coredumpv(&rproc->dev, data, data_size, GFP_KERNEL); + return; + } + + /* Initialize the dump state struct to be used by rproc_coredump_read */ + dump_state.rproc = rproc; + dump_state.header = data; + init_completion(&dump_state.dump_done); + + dev_coredumpm(&rproc->dev, NULL, &dump_state, data_size, GFP_KERNEL, + rproc_coredump_read, rproc_coredump_free); + + /* Wait until the dump is read and free is called. Data is freed + * by devcoredump framework automatically after 5 minutes. + */ + wait_for_completion(&dump_state.dump_done); + + list_for_each_entry(segment, &rproc->dump_segments, node) + kfree(segment->priv); +} +EXPORT_SYMBOL(rproc_minidump); diff --git a/drivers/remoteproc/remoteproc_elf_helpers.h b/drivers/remoteproc/remoteproc_elf_helpers.h index 4b6be7b..d83ebca 100644 --- a/drivers/remoteproc/remoteproc_elf_helpers.h +++ b/drivers/remoteproc/remoteproc_elf_helpers.h @@ -11,6 +11,7 @@ #include #include +#define MAX_NAME_LENGTH 16 /** * fw_elf_get_class - Get elf class * @fw: the ELF firmware image @@ -65,6 +66,7 @@ ELF_GEN_FIELD_GET_SET(hdr, e_type, u16) ELF_GEN_FIELD_GET_SET(hdr, e_version, u32) ELF_GEN_FIELD_GET_SET(hdr, e_ehsize, u32) ELF_GEN_FIELD_GET_SET(hdr, e_phentsize, u16) +ELF_GEN_FIELD_GET_SET(hdr, e_shentsize, u16) ELF_GEN_FIELD_GET_SET(phdr, p_paddr, u64) ELF_GEN_FIELD_GET_SET(phdr, p_vaddr, u64) @@ -74,6 +76,9 @@ ELF_GEN_FIELD_GET_SET(phdr, p_type, u32) ELF_GEN_FIELD_GET_SET(phdr, p_offset, u64) ELF_GEN_FIELD_GET_SET(phdr, p_flags, u32) ELF_GEN_FIELD_GET_SET(phdr, p_align, u64) +ELF_GEN_FIELD_GET_SET(shdr, sh_type, u32) +ELF_GEN_FIELD_GET_SET(shdr, sh_flags, u32) +ELF_GEN_FIELD_GET_SET(shdr, sh_entsize, u16) ELF_GEN_FIELD_GET_SET(shdr, sh_size, u64) ELF_GEN_FIELD_GET_SET(shdr, sh_offset, u64) @@ -93,4 +98,26 @@ ELF_STRUCT_SIZE(shdr) ELF_STRUCT_SIZE(phdr) ELF_STRUCT_SIZE(hdr) +static inline unsigned int set_section_name(const char *name, void *ehdr, + u8 class) +{ + u16 shstrndx = elf_hdr_get_e_shstrndx(class, ehdr); + void *shdr; + char *strtab; + static int strtable_idx = 1; + int idx, ret = 0; + + shdr = ehdr + elf_size_of_hdr(class) + shstrndx * elf_size_of_shdr(class); + strtab = ehdr + elf_shdr_get_sh_offset(class, shdr); + idx = strtable_idx; + if (!strtab || !name) + return 0; + + ret = idx; + idx += strlcpy((strtab + idx), name, MAX_NAME_LENGTH); + strtable_idx = idx + 1; + + return ret; +} + #endif /* REMOTEPROC_ELF_LOADER_H */ diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h index a489aec..b7a5f93 100644 --- a/include/linux/remoteproc.h +++ b/include/linux/remoteproc.h @@ -658,6 +658,7 @@ rproc_of_resm_mem_entry_init(struct device *dev, u32 of_resm_idx, size_t len, int rproc_boot(struct rproc *rproc); void rproc_shutdown(struct rproc *rproc); void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type); +void rproc_minidump(struct rproc *rproc); int rproc_coredump_add_segment(struct rproc *rproc, dma_addr_t da, size_t size); int rproc_coredump_add_custom_segment(struct rproc *rproc, dma_addr_t da, size_t size, From patchwork Thu Sep 10 18:57:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddharth Gupta X-Patchwork-Id: 11768805 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2C369139F for ; Thu, 10 Sep 2020 18:59:14 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DEEEB20731 for ; Thu, 10 Sep 2020 18:59:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="QZekqbpS"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="ahBXcIH2"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazonses.com header.i=@amazonses.com header.b="DlRFcl6v" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DEEEB20731 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:Message-ID:Date:Subject:To: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=lO991pokpsZuZ9DWzR4OcRHxxtF6PyIUKiXLw+b49hw=; b=QZekqbpSr9xqfl8Txy+uMxM/h+ GX9u3wNRo1vCy5+smqjrg/slV0y6LQ7BCc3rhxN4brrlmtKSjsFumQpQGn7CxdaukQHNrDslW0uib eIhygFqlnAhKGafDMD6Wv3+WZo7F3oYuHuSrp13ElKHQsdFOGPcPF2UlWQTMv5zmWOi9A2jZaHi4R MygeqVkei3YDu4ocOCmDjyDbMT0NBXJk5GXNxTSaxG4JA2PHgOuEU75Wn0GCZgZb3LDZpv4yFZ/HQ pJcgWNu7r7WpOpDDxZquXNTbOkI0Li6jCbEWMBqNV4r7Ni7utYUkw9BOn4FG+RkC4KQrovWfHoFmS uWu961ZQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kGRlY-0000I8-Q9; Thu, 10 Sep 2020 18:57:52 +0000 Received: from a27-10.smtp-out.us-west-2.amazonses.com ([54.240.27.10]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kGRlK-0000Df-DW for linux-arm-kernel@lists.infradead.org; Thu, 10 Sep 2020 18:57:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=zsmsymrwgfyinv5wlfyidntwsjeeldzt; d=codeaurora.org; t=1599764254; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; bh=ioDx5B0toCoamwPqHgDugjYxi1Wnq03ayhiGirqdZvo=; b=ahBXcIH2g3qxiD0dzPFgaervz2Kz9gYSFrXhQwbM9qe6lTrNe+oOZ0vyN9lIbDh8 Yt3NhKWGo3GjVPPsDNhFDPvHDd8Qwx+z7lnXgJ6f8ME8saPEfGGJ/3edClolmcEAy+k C/cRbi34aPolASGn921AC5FBazyFTB6o5P7iMTTw= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=hsbnp7p3ensaochzwyq5wwmceodymuwv; d=amazonses.com; t=1599764254; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:Feedback-ID; bh=ioDx5B0toCoamwPqHgDugjYxi1Wnq03ayhiGirqdZvo=; b=DlRFcl6vDiYeE+XPp3YGhzmOjBKA75Fga/aCdtggLyHDyMxnxs7YRjnQnHmxZvmw Pioorig99SVmjpIXSdz+XQYKRKugRHZGnLRwN1982umqG96fsIPXVYSQ4xGga8ofVSY sAe05efSQRgDYjHCMjli4+vZhwxdshfQi6KUd8rE= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED, BAYES_00, SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 78FE4C43387 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=sidgup@codeaurora.org From: Siddharth Gupta To: agross@kernel.org, bjorn.andersson@linaro.org, ohad@wizery.com Subject: [PATCH v4 3/3] remoteproc: qcom: Add minidump id for sm8150 modem remoteproc Date: Thu, 10 Sep 2020 18:57:34 +0000 Message-ID: <0101017479614de2-555e72a7-b808-4389-8826-819993c2d0b0-000000@us-west-2.amazonses.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1599764242-690-1-git-send-email-sidgup@codeaurora.org> References: <1599764242-690-1-git-send-email-sidgup@codeaurora.org> X-SES-Outgoing: 2020.09.10-54.240.27.10 Feedback-ID: 1.us-west-2.CZuq2qbDmUIuT3qdvXlRHZZCpfZqZ4GtG9v3VKgRyF0=:AmazonSES X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200910_145738_571366_69C60CF5 X-CRM114-Status: GOOD ( 11.28 ) X-Spam-Score: 0.1 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [54.240.27.10 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [54.240.27.10 listed in wl.mailspike.net] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.2 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tsoni@codeaurora.org, linux-doc@vger.kernel.org, linux-arm-msm@vger.kernel.org, Gurbir Arora , linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, rishabhb@codeaurora.org, Siddharth Gupta , psodagud@codeaurora.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Add minidump id for modem in sm8150 chipset. Signed-off-by: Rishabh Bhatnagar Signed-off-by: Gurbir Arora Signed-off-by: Siddharth Gupta --- drivers/remoteproc/qcom_q6v5_pas.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index c01e81e..5760995 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -709,6 +709,7 @@ static const struct adsp_data mpss_resource_init = { .crash_reason_smem = 421, .firmware_name = "modem.mdt", .pas_id = 4, + .minidump_id = 3, .has_aggre2_clk = false, .auto_boot = false, .active_pd_names = (char*[]){