From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A921AC433E7 for ; Mon, 19 Oct 2020 17:00:05 +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 157F222269 for ; Mon, 19 Oct 2020 17:00:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ZeZ688Zc"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="LwtsdkSt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 157F222269 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.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:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=3Hf/9hAsEm9Zqjk23xMzWLjrCa1N+U0KOnv5LsCTk/A=; b=ZeZ688Zc631qvuM0OfBDEXyfy I6Pj8Pzpuy3z8Nk1axNiRZFI3GyqIKt80NSWiNIH79M3uicXoZfHC94bSHnrlbcakqbullVl/qd7F U0/BCyVqXBzf6rScsJu26bDZb14nXLxw+Y+QetTpdZZRjVlmIP8Jt1imjIKpQVsbtsD5lxqJ3dOHg uxqbjbZX+165Slko1ZF3+MbMHyqjFmpXbqqBQS7abLk9anqnWCXSAeSIkiPehpyli428tz4ASKBQa 2n3pE3IaglO3t5sSpjDLSbXvRDtH+qhmbbepEiw6MaTg5Ec1dmlmcxyUBSwMp6OEoj5RVQvTg1VeZ XnxmI3Qcw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kUYUg-0006aV-NH; Mon, 19 Oct 2020 16:58:46 +0000 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kUYUd-0006Z4-Fb for linux-arm-kernel@lists.infradead.org; Mon, 19 Oct 2020 16:58:44 +0000 Received: by mail-pg1-x542.google.com with SMTP id n9so300290pgt.8 for ; Mon, 19 Oct 2020 09:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=JnKBqiVPCUZogEowjztR7BAxa3AoxcS+bS5AdwrjCEo=; b=LwtsdkStSJkKaZfp2gwZS5LjXrN+2QRD3Zg8fYk4x3vK+m2XY52+0BOnjhAtRUvY65 JwsIk/RszcuzbchFGdgJ0A/ChDlHglioMu7Qwuh6+23fslNYZB3IyYbl6aTBFK2LRLxJ AXRBQmVwF7McFh2AO6lOQDSulGsuLUkV8gjeMOoIksNjRbs72WSGLhmhe17Z2hHDZSmu HxbQmYjG4bNHLGA4x1GOW7yD7GVhMuAbD2tpQ8RWG0yq8E61tr6Q3BbWIFaHFzMa+tJc VpnO+Z5Eg8Gbmb/NRiA35d9HU2VUyggXODiIYPnQj4R7tagz0PbC3rqTiKrou+hK0I32 2VBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=JnKBqiVPCUZogEowjztR7BAxa3AoxcS+bS5AdwrjCEo=; b=pTyew/bzb12dq2Q2NqxtZhHEbzMwlOKRSXoRg+WHGJ+/SS4Jic60hU2tsytjuRei0U BenRznX27qRGWNZfIGk+Y8J7FuVb+74Pqn7IUPjVC+j/vQsUOlI5XKoJEUJFUH2p+BLo Rsjj8O0wv1d6S9+DM5+g3SQam/jeF/FErZSy1hsri/SNfK8Cya00FXzs5VdY7CB8G7wq 4pHly4J6enktiGKgZwqflUsKZQ0IAjaDGbMGRRo+Tck3Txj8nwo8vtRLCReVMS7GyD9i zIGbnMb/8v0I5/OO2o5HLMV+JdMdlQfEeoXWotJq+bFSirBOhmIPGrzGYuur72Qe4CHO 757A== X-Gm-Message-State: AOAM532Q5R/kCwudBmEKQawxCDiezGkDbfeb/+sG3IwVhNJCbrYzTput q7IYQ86pML/FxQAv/4GIYlXOSA== X-Google-Smtp-Source: ABdhPJwlye7aQSicTs24CltVgwd7j+JZRLatEs81/2/YGvnuDJkBXaWq/REbtaoK7HycIMYoYc+D9g== X-Received: by 2002:a62:503:0:b029:13e:d13d:a0f9 with SMTP id 3-20020a6205030000b029013ed13da0f9mr484841pff.21.1603126719149; Mon, 19 Oct 2020 09:58:39 -0700 (PDT) Received: from xps15 (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id q13sm390220pfg.3.2020.10.19.09.58.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Oct 2020 09:58:38 -0700 (PDT) Date: Mon, 19 Oct 2020 10:58:36 -0600 From: Mathieu Poirier To: Peng Fan Subject: Re: [PATCH V2 1/7] remoteproc: elf: support platform specific memory hook Message-ID: <20201019165836.GA496175@xps15> References: <20200927064131.24101-1-peng.fan@nxp.com> <20200927064131.24101-2-peng.fan@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200927064131.24101-2-peng.fan@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201019_125843_521772_85ACE1F3 X-CRM114-Status: GOOD ( 24.26 ) 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: Richard Zhu , festevam@gmail.com, s.hauer@pengutronix.de, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, bjorn.andersson@linaro.org, o.rempel@pengutronix.de, robh+dt@kernel.org, linux-imx@nxp.com, kernel@pengutronix.de, shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Peng, On Sun, Sep 27, 2020 at 02:41:25PM +0800, Peng Fan wrote: > To arm64, "dc zva, dst" is used in memset. > Per ARM DDI 0487A.j, chapter C5.3.8 DC ZVA, Data Cache Zero by VA, > > "If the memory region being zeroed is any type of Device memory, > this instruction can give an alignment fault which is prioritized > in the same way as other alignment faults that are determined > by the memory type." > > On i.MX platforms, when elf is loaded to onchip TCM area, the region > is ioremapped, so "dc zva, dst" will trigger abort. And ioremap_wc() > on i.MX not able to write correct data to TCM area. > > So we need to use io helpers, and extend the elf loader to support > platform specific memory functions. > > Acked-by: Richard Zhu > Signed-off-by: Peng Fan > --- > drivers/remoteproc/remoteproc_elf_loader.c | 20 ++++++++++++++++++-- > include/linux/remoteproc.h | 2 ++ > 2 files changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/remoteproc/remoteproc_elf_loader.c b/drivers/remoteproc/remoteproc_elf_loader.c > index df68d87752e4..6cb71fe47261 100644 > --- a/drivers/remoteproc/remoteproc_elf_loader.c > +++ b/drivers/remoteproc/remoteproc_elf_loader.c > @@ -129,6 +129,22 @@ u64 rproc_elf_get_boot_addr(struct rproc *rproc, const struct firmware *fw) > } > EXPORT_SYMBOL(rproc_elf_get_boot_addr); > > +static void rproc_elf_memcpy(struct rproc *rproc, void *dest, const void *src, size_t count) > +{ > + if (!rproc->ops->elf_memcpy) > + memcpy(dest, src, count); > + > + rproc->ops->elf_memcpy(rproc, dest, src, count); > +} > + > +static void rproc_elf_memset(struct rproc *rproc, void *s, int c, size_t count) > +{ > + if (!rproc->ops->elf_memset) > + memset(s, c, count); > + > + rproc->ops->elf_memset(rproc, s, c, count); > +} > + > /** > * rproc_elf_load_segments() - load firmware segments to memory > * @rproc: remote processor which will be booted using these fw segments > @@ -214,7 +230,7 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw) > > /* put the segment where the remote processor expects it */ > if (filesz) > - memcpy(ptr, elf_data + offset, filesz); > + rproc_elf_memcpy(rproc, ptr, elf_data + offset, filesz); > > /* > * Zero out remaining memory for this segment. > @@ -224,7 +240,7 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw) > * this. > */ > if (memsz > filesz) > - memset(ptr + filesz, 0, memsz - filesz); > + rproc_elf_memset(rproc, ptr + filesz, 0, memsz - filesz); > } > > return ret; > diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h > index 2fa68bf5aa4f..1f5fa2c772df 100644 > --- a/include/linux/remoteproc.h > +++ b/include/linux/remoteproc.h > @@ -392,6 +392,8 @@ struct rproc_ops { > int (*load)(struct rproc *rproc, const struct firmware *fw); > int (*sanity_check)(struct rproc *rproc, const struct firmware *fw); > u64 (*get_boot_addr)(struct rproc *rproc, const struct firmware *fw); > + void (*elf_memcpy)(struct rproc *rproc, void *dest, const void *src, size_t count); > + void (*elf_memset)(struct rproc *rproc, void *s, int c, size_t count); As with every other operations, the above two addition should be documented. With that: Reviewed-by: Mathieu Poirier > unsigned long (*panic)(struct rproc *rproc); > }; > > -- > 2.28.0 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel