From patchwork Tue Dec 26 20:38:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Andersson X-Patchwork-Id: 122750 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp1389708qgn; Tue, 26 Dec 2017 12:38:49 -0800 (PST) X-Google-Smtp-Source: ACJfBou35Dknc391hpHw7bFTFm/qt2nQt4S3n43OHYVgxnGUnOFir1Wfuyn6NNY6P9YiZuTGeSoN X-Received: by 10.99.96.3 with SMTP id u3mr23496199pgb.121.1514320729177; Tue, 26 Dec 2017 12:38:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514320729; cv=none; d=google.com; s=arc-20160816; b=myUOn14FRESB9rZTlQKStvOJH4W5NvnIkaTXjoVyFFXRK9bO8h2+W8xoO/iB3JQ8Km GU6FZMtJF05CvcBUVr6jA30MHcbl9vbGg+xuvBV7MUmTGwEE/mziO80mxMyhWNvFi0fG N7vQQUihAF1/26gu7W0idmysSrvn7CL0WVTpTj9+1G+xgDySaTJGnlcgRZYlUclprwdQ E/oAVJZ3GPi8c2SQ8M/KQ+oqCFBblVkZbkIMMepw7xQ/XqjMRVjuaHKvq53r2OYBLOQT QlGu8EkhD3Itf8NIIMIqMTgtRDRqaF4iWHvBzFFm5p6JY9Ym3SbpzyB+3wachAQlW1vz rI7g== 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=2a15B4EvdS3zBvJXwG6jmaqWjMVvTbmODcqIhP5q1JM=; b=ZiwVz8gpTkk/U7t48qPx4vCdJCC5DmRyWKJx9i8X/UxmE0kEs+tUnA2lcK53thPBWM 3ZJfWt1XrR/r1EShkxGx+qD/gTjsppz7tP0BEHH9lyp0KbpVATsfzRcYMpZtD5PSIppm ajwtlaUzRH/BG1rC1uvYXBMkH5ROwqLhUwOYZCa9UKMEGasjh9OTGKlCOPIM8RM0X/C+ k0zPao0paCJ7Dh1xPaIwwcj2uurR4/CAoo7E+kee4Yczs2jxCk/+Zu+qqvC0IYujvCBM k/JPeCDQ2Jgd1YF6sSuOCf0Oncpo1wpgE/kO2S0HP1LeiGTF/OvKGYQ3Qw+OGO5V+cD2 pBtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=aHhFoG2D; spf=pass (google.com: best guess record for domain of linux-arm-msm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-arm-msm-owner@vger.kernel.org; dmarc=fail (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 p3si21159528pgs.84.2017.12.26.12.38.48; Tue, 26 Dec 2017 12:38:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-arm-msm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=aHhFoG2D; spf=pass (google.com: best guess record for domain of linux-arm-msm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-arm-msm-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751453AbdLZUim (ORCPT + 10 others); Tue, 26 Dec 2017 15:38:42 -0500 Received: from mail-pl0-f67.google.com ([209.85.160.67]:44664 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751143AbdLZUik (ORCPT ); Tue, 26 Dec 2017 15:38:40 -0500 Received: by mail-pl0-f67.google.com with SMTP id n13so18378358plp.11 for ; Tue, 26 Dec 2017 12:38:40 -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=GUnlnT0KUFrrdhSX74OBc/u369q62LIIdYojViR7Bq0=; b=aHhFoG2DXv4DnUByzjXwsdvN4vmIvfgO2iN2I1PAyhK/tUsAohTOKhEVu7TC4jZdFN oKnYa4t8VTHQLFIX3vudA4h1Nu/hwHqx42fAhxrUrTFEhi0JxWCvX69Lvy9Nms0+mwfh XnJJe6qe6iD7K10Ty7jVd3+qf32rq4HzYHZ1I= 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=GUnlnT0KUFrrdhSX74OBc/u369q62LIIdYojViR7Bq0=; b=lMBJqh2xVD/joiPzRC5D3s/fcKMBK4Eic1qDlLrOWhcaE6VA71Ie2AyN5TlzhHf6ik ChboCvvLXSxGHJoqt9SF2JH2r8uFpV+YSPgqoidkRTf7I7JJgoUgBRFg7UnwI/H9xH+K sLYsWhnwRKcsd4MoGkfy4MkvvFEIFQUHlR02R7n+kzvFesntKuLLf5NyoFwGRzPWBUtE pkJTIIyY7VjNGkC9CQtmGRtK+QEe+u4sRQBPRAh3t2pTK4gXABAfGXbQfc6l2Wr/Lcmo v3SSmvrDY6pULRG0SIbMvZk1BDG6CuwWimhgfbgpECfePmLMj661KfJuOfCdiBuFKnPJ 3bjA== X-Gm-Message-State: AKGB3mKmzOMjQ/Z99yenQHv+GWl8sbZXCUhkXe1R0pWkVKpmQ/N4vKvr 2j5Op0KofDwymn/FBbmnxoUZ4w== X-Received: by 10.159.198.1 with SMTP id f1mr26258497plo.450.1514320719675; Tue, 26 Dec 2017 12:38:39 -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 68sm58746339pfx.186.2017.12.26.12.38.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Dec 2017 12:38:38 -0800 (PST) From: Bjorn Andersson To: Ohad Ben-Cohen , Bjorn Andersson , Andy Gross Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Suman Anna , Avaneesh Kumar Dwivedi , Rob Clark , Stanimir Varbanov , linux-soc@vger.kernel.org Subject: [PATCH v2 3/4] soc: qcom: mdt-loader: Return relocation base Date: Tue, 26 Dec 2017 12:38:31 -0800 Message-Id: <20171226203832.14928-4-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20171226203832.14928-1-bjorn.andersson@linaro.org> References: <20171226203832.14928-1-bjorn.andersson@linaro.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@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 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 -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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