Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp5090134ybv; Tue, 11 Feb 2020 09:01:05 -0800 (PST) X-Google-Smtp-Source: APXvYqzTyfbLqlmmFfgmBuWsf8W7/X0WZPXn5uluhhn8gL1SrwozHEGEUi76fDkLExcDVWfX9OsF X-Received: by 2002:a05:6808:a9c:: with SMTP id q28mr3528829oij.176.1581440465669; Tue, 11 Feb 2020 09:01:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581440465; cv=none; d=google.com; s=arc-20160816; b=FBtp6s7PfEKl5vHeJd4Q9NHoxKQ1jcRdpu+ptDXu6PSSq/S/PTrKokNEXSrIUzPj0W H/gYp7MdWDJEyZ6YmdsWM/ndiyLaCSXaDJ4mKFVqUTRYh1fCtounYLp1klwf4lLirORn POskFn2midDgwFNPuxrZ7KN/6XK2MAjdhDUJd/MOXFIaeURIGtvuycdmsWz/nu2RH2ec DpqQJ+bSZ+NxJquJgE06IJSPaGyKjVc8ofFt7RNjNW9DDqHao13YEnwKtQO6DHE0Llcz aL54oXVyiLI3lFBiH93NAOwKa8n0VRyIZKDw4P1HCqag9etdKW/G4kvrg6Zu11KvxC+b uJrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=wkYk9cLQLb3EJi8LjSHyO5AosGaYNi6TgWsVmJ8bjyI=; b=ZEOyOO23U2qxF9rX12hwZSbcxxH0EMum9Tj1T1/7rfkwIdhDZhAKuvTlHDOO9RWn6r 7oP8AW+6+DQu7mC+XNYHTyOrdv4srBQHkMcyMtNvDULn4nYsY8kK3apqEKJrhr3fDdNi UETEKprK8pId4yIzThbG6bWzNZNMUA44eJrJa2uNFAzzipKb6mgN2JptR08Z1eaDuGGj UVc1Sdz5lgBgydGeRMxx2Z3cWPCd954aJes+WI7WX36y59dkDWaS4VrvCw1lRieyBNVP Zcej78FNWqKn8v8tgiXwDodXSaed5m4QR2lpnMJNfoBK3OWhsVeFwzKOpluTQTAsu9Jt 5oHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=p8GTEGdv; 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=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m24si2221445otf.101.2020.02.11.09.00.48; Tue, 11 Feb 2020 09:01:05 -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=@ti.com header.s=ti-com-17Q1 header.b=p8GTEGdv; 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=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730410AbgBKPV4 (ORCPT + 99 others); Tue, 11 Feb 2020 10:21:56 -0500 Received: from lelv0142.ext.ti.com ([198.47.23.249]:48632 "EHLO lelv0142.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729260AbgBKPVy (ORCPT ); Tue, 11 Feb 2020 10:21:54 -0500 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id 01BFLq6Y110710; Tue, 11 Feb 2020 09:21:52 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1581434512; bh=wkYk9cLQLb3EJi8LjSHyO5AosGaYNi6TgWsVmJ8bjyI=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=p8GTEGdvkw+NprdW7eYfWnUANIdyBecKhSoP7vvIHL8HWHpo63gsAYQ26+Fccb1Nw 6z3jMPFcZ/fOdyFj2SPgT+YFLBP0yJ4tiaO3ehSkWd8C2QfWcOWnea1a5wOg+5/cyt 1xivIvDBTYcM7H7Bdx8dM7bldzcIwvVtsFsRq0JU= Received: from DFLE103.ent.ti.com (dfle103.ent.ti.com [10.64.6.24]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id 01BFLqCY059293; Tue, 11 Feb 2020 09:21:52 -0600 Received: from DFLE100.ent.ti.com (10.64.6.21) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Tue, 11 Feb 2020 09:21:51 -0600 Received: from lelv0326.itg.ti.com (10.180.67.84) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Tue, 11 Feb 2020 09:21:51 -0600 Received: from sokoban.bb.dnainternet.fi (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id 01BFLbkh020993; Tue, 11 Feb 2020 09:21:49 -0600 From: Tero Kristo To: , , , CC: , , , Suman Anna , Tero Kristo Subject: [PATCHv6 05/14] remoteproc/omap: Add the rproc ops .da_to_va() implementation Date: Tue, 11 Feb 2020 17:21:16 +0200 Message-ID: <20200211152125.23819-6-t-kristo@ti.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200211152125.23819-1-t-kristo@ti.com> References: <20200211152125.23819-1-t-kristo@ti.com> MIME-Version: 1.0 Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Suman Anna An implementation for the rproc ops .da_to_va() has been added that provides the address translation between device addresses to kernel virtual addresses for internal RAMs present on that particular remote processor device. The implementation provides the translations based on the addresses parsed and stored during the probe. This ops gets invoked by the exported rproc_da_to_va() function and allows the remoteproc core's ELF loader to be able to load program data directly into the internal memories. Signed-off-by: Suman Anna Signed-off-by: Tero Kristo --- drivers/remoteproc/omap_remoteproc.c | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c index a99e542da364..0846839b2c97 100644 --- a/drivers/remoteproc/omap_remoteproc.c +++ b/drivers/remoteproc/omap_remoteproc.c @@ -245,10 +245,49 @@ static int omap_rproc_stop(struct rproc *rproc) return 0; } +/** + * omap_rproc_da_to_va() - internal memory translation helper + * @rproc: remote processor to apply the address translation for + * @da: device address to translate + * @len: length of the memory buffer + * + * Custom function implementing the rproc .da_to_va ops to provide address + * translation (device address to kernel virtual address) for internal RAMs + * present in a DSP or IPU device). The translated addresses can be used + * either by the remoteproc core for loading, or by any rpmsg bus drivers. + * Returns the translated virtual address in kernel memory space, or NULL + * in failure. + */ +static void *omap_rproc_da_to_va(struct rproc *rproc, u64 da, int len) +{ + struct omap_rproc *oproc = rproc->priv; + int i; + u32 offset; + + if (len <= 0) + return NULL; + + if (!oproc->num_mems) + return NULL; + + for (i = 0; i < oproc->num_mems; i++) { + if (da >= oproc->mem[i].dev_addr && da + len <= + oproc->mem[i].dev_addr + oproc->mem[i].size) { + offset = da - oproc->mem[i].dev_addr; + /* __force to make sparse happy with type conversion */ + return (__force void *)(oproc->mem[i].cpu_addr + + offset); + } + } + + return NULL; +} + static const struct rproc_ops omap_rproc_ops = { .start = omap_rproc_start, .stop = omap_rproc_stop, .kick = omap_rproc_kick, + .da_to_va = omap_rproc_da_to_va, }; static const struct omap_rproc_mem_data ipu_mems[] = { -- 2.17.1 -- Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki