From patchwork Wed Oct 12 16:00:30 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Loic PALLARDY X-Patchwork-Id: 9373581 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CAD9260839 for ; Wed, 12 Oct 2016 16:53:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BBD3A296FA for ; Wed, 12 Oct 2016 16:53:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B002A29700; Wed, 12 Oct 2016 16:53:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16F7C296FA for ; Wed, 12 Oct 2016 16:53:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754929AbcJLQxF (ORCPT ); Wed, 12 Oct 2016 12:53:05 -0400 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:3152 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755653AbcJLQxF (ORCPT ); Wed, 12 Oct 2016 12:53:05 -0400 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.11/8.16.0.11) with SMTP id u9CFvfnu015183; Wed, 12 Oct 2016 18:01:17 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-.pphosted.com with ESMTP id 2615d4dd2e-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 12 Oct 2016 18:01:17 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 2897D34; Wed, 12 Oct 2016 16:01:17 +0000 (GMT) Received: from Webmail-eu.st.com (Safex1hubcas22.st.com [10.75.90.92]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 1096C2AB5; Wed, 12 Oct 2016 16:01:17 +0000 (GMT) Received: from localhost (10.201.23.23) by Webmail-ga.st.com (10.75.90.48) with Microsoft SMTP Server (TLS) id 14.3.279.2; Wed, 12 Oct 2016 18:01:16 +0200 From: Loic Pallardy To: , , CC: , , , Subject: [PATCH v3 12/20] remoteproc: core: Add function to verify an existing resource in rsc table Date: Wed, 12 Oct 2016 18:00:30 +0200 Message-ID: <1476288038-24909-13-git-send-email-loic.pallardy@st.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1476288038-24909-1-git-send-email-loic.pallardy@st.com> References: <1476288038-24909-1-git-send-email-loic.pallardy@st.com> MIME-Version: 1.0 X-Originating-IP: [10.201.23.23] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-10-12_09:, , signatures=0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When a firmware is build, it can be loaded with a resource usually detailing shared; memory, virtual device, trace log information etc. However, some SoCs or platforms require some hard-coded information. Information may be fixed on both sides: firmware and rproc. Until now, no method exists which allows to compare resource table fixed resources and rproc driver configuration. This new function changes that performing comparison between resources. Only carveout resource supported for the moment. It is rproc driver responsibility to provide list of resources to verify during boot. Signed-off-by: Loic Pallardy --- drivers/remoteproc/remoteproc_core.c | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 96692c2..4297ee7 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -933,6 +933,51 @@ int rproc_request_resource(struct rproc *rproc, u32 type, u32 action, void *reso } EXPORT_SYMBOL(rproc_request_resource); +static int rproc_verify_resource_table_entry(struct rproc *rproc, + struct rproc_request_resource *request, + struct resource_table *table, int size) +{ + struct fw_rsc_carveout *tblc, *newc; + int i; + + for (i = 0; i < table->num; i++) { + int offset = table->offset[i]; + struct fw_rsc_hdr *hdr = (void *)table + offset; + void *rsc = (void *)hdr + sizeof(*hdr); + + if (request->type != hdr->type) + continue; + + switch (hdr->type) { + case RSC_CARVEOUT: + tblc = rsc; + newc = request->resource; + + if (strncmp(newc->name, tblc->name, 32)) + break; + + /* Verify firmware resource is part of rproc one. */ + if (tblc->pa != FW_RSC_ADDR_ANY) { + int pa_offset = tblc->pa - newc->pa; + + if (pa_offset < 0) + return -EINVAL; + + if (pa_offset + tblc->len > newc->len) + return -EINVAL; + } + return 0; + default: + dev_err(&rproc->dev, + "Unsupported resource type: %d\n", + hdr->type); + return -EINVAL; + } + } + + return -EINVAL; +} + static int rproc_update_resource_table_entry(struct rproc *rproc, struct rproc_request_resource *request, struct resource_table *table, int size)