From patchwork Sat Jan 6 00:04:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Andersson X-Patchwork-Id: 123583 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp1434368qgn; Fri, 5 Jan 2018 16:04:58 -0800 (PST) X-Google-Smtp-Source: ACJfBovBpHvcB8wyedmlB37U4TjPKu6+f+K+ggmzdVoQQXxBS5DVfiucdQyNpCL39YPcjZOuxrpj X-Received: by 10.101.73.15 with SMTP id p15mr3753946pgs.16.1515197098197; Fri, 05 Jan 2018 16:04:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515197098; cv=none; d=google.com; s=arc-20160816; b=FmF74mC4tt4lmGmMf3TRDiTmtjvlFhIiHaKOatxu3mP1RLB/iIJKOSoGZJUEVssvkq YcfpifJyCezurGWUTzxgTqPaQqDZFO0FK5H7iTuk6pZyh96CANo9dPRKM5EQaKkQmQ/0 aVpDgaWlRNGSse/NgsN2pvCpsWDIzp5/dEYD2KhRQXd2HutEbxdWVN7UzxaLM3X8a/gQ hq3UqGbYsUVs9wmHltSkIXvI6m3ZK+VaMAZ6I2Cs+2BDlaBelKw7q8VPfAF99ys2jAhW KTGqPnPgJlZB9InPnsssqs66CpcaZIP/xAVBc+YVi2e+FYrd9YoXV4NczaIdgTALRFYp M5dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=1RY3dpURHCvgjCLnguODv9NRzb+bfv3M4cMa1W/uSh4=; b=V5CB3G+HSiUjTD+EQLzr1j334lTYcADQiQepzNQhN0zkilRHnCRuqSh+L42JwzXFLE RcS0W6Fspr+/ou0y3TFoBdTA8NmYfAUS+f2zVwkuD3IAla0e8aYPPvZgN3kb8xTG6V7S hdbSltmRyAL7ATjg1xlf2bGKZEpPb67nwQ978mC265hLOmc9foA1TJLEfSnQ6W1kd1Qy 5oEPt3OCMwMaYLetZuKPI+AMzNNUVxfK78lSqYv9XE0KLKmTop1t3Yh5/fLqLUfgJiKs 2PDPKT3HxTOUyXtUNn3ws8c5icx3e1pWOXDRzdvaBpVECvv1GiDQ2fYwT3ydAkitmRw2 2HFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TPZnmNYc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x1si4762712pfj.295.2018.01.05.16.04.57; Fri, 05 Jan 2018 16:04:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TPZnmNYc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753464AbeAFAEb (ORCPT + 28 others); Fri, 5 Jan 2018 19:04:31 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:37308 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753423AbeAFAE2 (ORCPT ); Fri, 5 Jan 2018 19:04:28 -0500 Received: by mail-pl0-f66.google.com with SMTP id s3so3986657plp.4 for ; Fri, 05 Jan 2018 16:04:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1RY3dpURHCvgjCLnguODv9NRzb+bfv3M4cMa1W/uSh4=; b=TPZnmNYc2fZ0G6Io0I55m8SGVRPWAnXtUQFFo0bVLqr1QBqpm12H1V0efSQnRYpx7/ +J7EaF633fzc/SJjmN28TzBiETdtAIK7+IkzWTVVlGocqfPFcBsLj1WxDnRfXLhUFoPV 2RVO2h8zurTfW4LxtWnPFmSUgn/CSBrE6pE+U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1RY3dpURHCvgjCLnguODv9NRzb+bfv3M4cMa1W/uSh4=; b=nmAPDK1WKDIAntGxjr1q4r0hzbPlQyBVQ3WpaTmDas6ee2EVKoXiN69h3lSVyc7D4D 3N4U60A5/VnZB238NMVPj1YHRYPKYZFDpOyZIsbq/3w7xCPAQXAddVDX3u38jzxXxZxo 7HGbPExs94NU5mU8RHfKhFimRWbC/QfX/ECj13/fX0eu4CRsepZbAvQ+bFjxDBVlK+ez zqOcxUGKw20F7+sV8qB3p1lisei7QW2zdofZbTv5+Q7pguWkP8eTyWuhkHWiGoWZdJkc Wt6mrml9sH2Vk3uhi+DfrsDk/RnBHErnPNi1+2p5Kp5obKhsxz60Mi3no0qO8LYLkief e2dg== X-Gm-Message-State: AKGB3mKIAQ+dV1hLWr3HTyi4ZArs/zfn7OeTNNVF/ICfds0Z0zh8O1ZC aV7moQYpSZaTKEC8b5OJu1uITR4ap0Y= X-Received: by 10.84.240.72 with SMTP id h8mr4692430plt.412.1515197067576; Fri, 05 Jan 2018 16:04:27 -0800 (PST) Received: from localhost.localdomain (104-188-17-28.lightspeed.sndgca.sbcglobal.net. [104.188.17.28]) by smtp.gmail.com with ESMTPSA id n186sm9385177pgn.11.2018.01.05.16.04.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 05 Jan 2018 16:04:26 -0800 (PST) From: Bjorn Andersson To: Ohad Ben-Cohen , Bjorn Andersson Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, Suman Anna , Avaneesh Kumar Dwivedi , Loic Pallardy Subject: [PATCH v3 3/4] soc: qcom: mdt-loader: Return relocation base Date: Fri, 5 Jan 2018 16:04:19 -0800 Message-Id: <20180106000420.10070-4-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20180106000420.10070-1-bjorn.andersson@linaro.org> References: <20180106000420.10070-1-bjorn.andersson@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to implement support for grabbing core dumps in remoteproc it's necessary to know the relocated base of the image, as the offsets from the virtual memory base might not be based on the physical address. Return the adjusted physical base address to the caller. Signed-off-by: Bjorn Andersson --- Changes since v2: - None Changes since v1: - New patch drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 ++-- drivers/media/platform/qcom/venus/firmware.c | 2 +- drivers/remoteproc/qcom_adsp_pil.c | 4 +++- drivers/remoteproc/qcom_wcnss.c | 3 ++- drivers/soc/qcom/mdt_loader.c | 7 ++++++- include/linux/soc/qcom/mdt_loader.h | 3 ++- 6 files changed, 16 insertions(+), 7 deletions(-) -- 2.15.0 diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c index a1f4eeeb73e2..3cab1c74df84 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c @@ -87,14 +87,14 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname) */ if (to_adreno_gpu(gpu)->fwloc == FW_LOCATION_LEGACY) { ret = qcom_mdt_load(dev, fw, fwname, GPU_PAS_ID, - mem_region, mem_phys, mem_size); + mem_region, mem_phys, mem_size, NULL); } else { char newname[strlen("qcom/") + strlen(fwname) + 1]; sprintf(newname, "qcom/%s", fwname); ret = qcom_mdt_load(dev, fw, newname, GPU_PAS_ID, - mem_region, mem_phys, mem_size); + mem_region, mem_phys, mem_size, NULL); } if (ret) goto out; diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c index 521d4b36c090..c4a577848dd7 100644 --- a/drivers/media/platform/qcom/venus/firmware.c +++ b/drivers/media/platform/qcom/venus/firmware.c @@ -76,7 +76,7 @@ int venus_boot(struct device *dev, const char *fwname) } ret = qcom_mdt_load(dev, mdt, fwname, VENUS_PAS_ID, mem_va, mem_phys, - mem_size); + mem_size, NULL); release_firmware(mdt); diff --git a/drivers/remoteproc/qcom_adsp_pil.c b/drivers/remoteproc/qcom_adsp_pil.c index 373c167892d7..833763aa3f2a 100644 --- a/drivers/remoteproc/qcom_adsp_pil.c +++ b/drivers/remoteproc/qcom_adsp_pil.c @@ -82,7 +82,9 @@ static int adsp_load(struct rproc *rproc, const struct firmware *fw) struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; return qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, - adsp->mem_region, adsp->mem_phys, adsp->mem_size); + adsp->mem_region, adsp->mem_phys, adsp->mem_size, + &adsp->mem_reloc); + } static int adsp_start(struct rproc *rproc) diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c index 3f0609236a76..599c1aa73b7f 100644 --- a/drivers/remoteproc/qcom_wcnss.c +++ b/drivers/remoteproc/qcom_wcnss.c @@ -153,7 +153,8 @@ static int wcnss_load(struct rproc *rproc, const struct firmware *fw) struct qcom_wcnss *wcnss = (struct qcom_wcnss *)rproc->priv; return qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID, - wcnss->mem_region, wcnss->mem_phys, wcnss->mem_size); + wcnss->mem_region, wcnss->mem_phys, + wcnss->mem_size, &wcnss->mem_reloc); } static void wcnss_indicate_nv_download(struct qcom_wcnss *wcnss) diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c index 08bd8549242a..17b314d9a148 100644 --- a/drivers/soc/qcom/mdt_loader.c +++ b/drivers/soc/qcom/mdt_loader.c @@ -83,12 +83,14 @@ EXPORT_SYMBOL_GPL(qcom_mdt_get_size); * @mem_region: allocated memory region to load firmware into * @mem_phys: physical address of allocated memory region * @mem_size: size of the allocated memory region + * @reloc_base: adjusted physical address after relocation * * Returns 0 on success, negative errno otherwise. */ int qcom_mdt_load(struct device *dev, const struct firmware *fw, const char *firmware, int pas_id, void *mem_region, - phys_addr_t mem_phys, size_t mem_size) + phys_addr_t mem_phys, size_t mem_size, + phys_addr_t *reloc_base) { const struct elf32_phdr *phdrs; const struct elf32_phdr *phdr; @@ -192,6 +194,9 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, memset(ptr + phdr->p_filesz, 0, phdr->p_memsz - phdr->p_filesz); } + if (reloc_base) + *reloc_base = mem_reloc; + out: kfree(fw_name); diff --git a/include/linux/soc/qcom/mdt_loader.h b/include/linux/soc/qcom/mdt_loader.h index bd8e0864b059..5b98bbdabc25 100644 --- a/include/linux/soc/qcom/mdt_loader.h +++ b/include/linux/soc/qcom/mdt_loader.h @@ -14,6 +14,7 @@ struct firmware; ssize_t qcom_mdt_get_size(const struct firmware *fw); int qcom_mdt_load(struct device *dev, const struct firmware *fw, const char *fw_name, int pas_id, void *mem_region, - phys_addr_t mem_phys, size_t mem_size); + phys_addr_t mem_phys, size_t mem_size, + phys_addr_t *reloc_base); #endif