Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp607531ybg; Tue, 9 Jun 2020 08:26:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyvfjSVcxxUoX+7hRoANSGPX/UAm7XxqrMwKU8ie99yH2CR0MONFRjLurMuIPZDa0XWAnL3 X-Received: by 2002:a17:907:2052:: with SMTP id pg18mr25099158ejb.513.1591716366447; Tue, 09 Jun 2020 08:26:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591716366; cv=none; d=google.com; s=arc-20160816; b=FNwZoK62S2LiUtQ52yOqoSeO7g5eKdpXqcOf7ndp8chj61p71AbsJ3rxfzPcSkJuLG JI0lPTnMS7accRjBhv2CVc6+0ObrVN5gJIlgj9oOZpXVsZMcr4cTM3doe/+5+fzmsXxl L6PkPX0m4b/2vQ7d3Fu/I2dBfjKK70NB6nDrE3L5xIysYMJkqfWI3d/X8+1shLeTTijx gpVi10YlvvKUOBorf2Nq236J0ClYsbqX3N7275tOWeDPPtz8a3XTctOhnYl1cXhE8Hdz bTMek0rtNVBDo4nt6oI9Mg46CsCp+nqzKK0TGUzWQHkE2v63BLgwQnnFKcauVYc3b1kY k4qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Tm2L6wHDp3vnilQA0CPW6PPlVERzEGHmJnGxVxjkT7E=; b=nEDfx+SeUx5/FHDzSqklFGGzrvqpxgyOFzxe1+ohvxgSMn+tApUgLeLEZNOsZ0eq57 Z/tYjiLUJEM1l+VLk+aXuBQBdk1rRmE1exqsHWH1WBh7QC9xuznytScgYM7ren2I8kJh Z+4w7UlqFA2yNgLBa2dDhPGBQv/mtxFZ9r8Z4J+N1sUUHeiFg3jfE8BUblCc3RJ6eC40 rCgXhPiIDW5yCVzBwv3CbsxfIt8L6i6vc8EkilTBU/IhNs5r4cVKI4Woy1GNzQ3POB0J ejBQVdSOczrAGwR3G/yzmeq1bNS2bTKuJFuBQxxBo5MRWs9TvHjoUqq4wGr7suf5p/h0 bx4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=T+Zzc+a9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 6si11511251edp.594.2020.06.09.08.25.41; Tue, 09 Jun 2020 08:26:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=T+Zzc+a9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729898AbgFIPXD (ORCPT + 99 others); Tue, 9 Jun 2020 11:23:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728609AbgFIPXC (ORCPT ); Tue, 9 Jun 2020 11:23:02 -0400 Received: from mail-io1-xd42.google.com (mail-io1-xd42.google.com [IPv6:2607:f8b0:4864:20::d42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D26F7C05BD1E; Tue, 9 Jun 2020 08:23:02 -0700 (PDT) Received: by mail-io1-xd42.google.com with SMTP id m81so23201144ioa.1; Tue, 09 Jun 2020 08:23:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Tm2L6wHDp3vnilQA0CPW6PPlVERzEGHmJnGxVxjkT7E=; b=T+Zzc+a927fTmCQYyxa3HRIQOfzwB1rlff67AJQPfhedtRBsi15M7hvfbqDBXLIz2Q 4KRSTB9cKCGWi5zszA165U7802EQ1b74v54j3AsREkXTLXlxzSrced4LqVHdtgrT1BQ9 icKt9YViOgQcAKVNZjPcxK88gttpktYPeUNKqPo0gT68ATxzhYHzokNHc6pQNtrlY3IB KLlyZtOGJ7375RmWBKPKHCsRXSeqb8bmjuZkdeSsCP5k1BIfCRczdUBF+5569MGYmO+T 9qN0v9U3DtCz4Hj+aIgzbWRsAMWfOM1PmMsRZr4OhT+ygqb8U0vc40a1PdHjSqLm2//i 88sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Tm2L6wHDp3vnilQA0CPW6PPlVERzEGHmJnGxVxjkT7E=; b=Z00A6fa/fFA0XEYYPSwjY//jtmBNL+jQFDxM54Ued2khmGn/rh+d2B6+XPF04zJCx6 TvlKHr+zBzkXmE3bf2blhsJxPbt5ujR3trz72JZWxrofG3062Uz3SimglGzTaWHZHFNQ OrwT4ni7eKkBzoQ8Km5XaPsETdPXlCPQpAYa5slLueYgGT5qBDbJQNctaus3dyHjoxr/ E2wWfKsqHqjv0XByhfBMjzL/SI6t6nn2rvC3EPiqeUeNkNQkSxbCVpMpPvb/22k0PcXM tHJjNCuvZlUcL4JFQEN4q4ODxlIul4BeqQ8+r9CEMhSqDNQiES34GdLclbQdPw8K12ly M8hg== X-Gm-Message-State: AOAM532Kp0Gqo6rqP52Xzo2Oa0lZ/iwjKZ8+S0fjvT8NW1IZlVCo5aqd UrecXt6BsXnuEANlWFP+TVykLUJXAk95+i+sSLE= X-Received: by 2002:a05:6638:d05:: with SMTP id q5mr26413027jaj.2.1591716182166; Tue, 09 Jun 2020 08:23:02 -0700 (PDT) MIME-Version: 1.0 References: <1591605038-8682-1-git-send-email-dillon.minfei@gmail.com> <1591605038-8682-3-git-send-email-dillon.minfei@gmail.com> <90df5646-e0c4-fcac-d934-4cc922230dd2@arm.com> In-Reply-To: <90df5646-e0c4-fcac-d934-4cc922230dd2@arm.com> From: dillon min Date: Tue, 9 Jun 2020 23:22:24 +0800 Message-ID: Subject: Re: [PATCH 2/2] arm-nommu: Add use_reserved_mem() to check if device support reserved memory To: Vladimir Murzin , hch@lst.de Cc: Rob Herring , Maxime Coquelin , Alexandre Torgue , linux@armlinux.org.uk, Kate Stewart , allison@lohutok.net, info@metux.net, tglx@linutronix.de, "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , linux-stm32@st-md-mailman.stormreply.com, Linux ARM , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Vladimir, Thanks for reviewing. Hi Christoph Hellwig, I just want to know if kernel dma mapping/direct is focused on platforms with MMU. leave arch code to handle dma coherent memory management themself for no-MMU platform. so, you just return error code in kernel/dma/mapping.c,direct.c without CONFIG_MMU defined ? which means dma-direct mapping doesn't support !CONFIG_MMU is not a bug, but design as it's. or, just return error code currently, will add dma direct mapping support for !CONFIG_MMU in the future? As Vladimir Murzin's suggestion has changes in kernel code, I need your input to get the design goal about dma-direct mapping, thanks. On Tue, Jun 9, 2020 at 10:07 PM Vladimir Murzin wrote: > > On 6/8/20 9:30 AM, dillon.minfei@gmail.com wrote: > > From: dillon min > > > > Currently, we use dma direct to request coherent memory for driver on armv7m > > platform if 'cacheid' is zero, but dma_direct_can_mmap() is return false, > > dma_direct_mmap() return -ENXIO for CONFIG_MMU undefined platform. > > > > so we have to back to use 'arm_nommu_dma_ops', add use_reserved_mem() to check > > if device support global or device corherent memory. if yes, then call > > set_dma_ops() > > > > Signed-off-by: dillon min > > --- > > arch/arm/mm/dma-mapping-nommu.c | 28 +++++++++++++++++++++++++++- > > 1 file changed, 27 insertions(+), 1 deletion(-) > > > > diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c > > index 287ef898a55e..e1c213fec152 100644 > > --- a/arch/arm/mm/dma-mapping-nommu.c > > +++ b/arch/arm/mm/dma-mapping-nommu.c > > @@ -14,6 +14,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "dma.h" > > > > @@ -188,6 +189,31 @@ const struct dma_map_ops arm_nommu_dma_ops = { > > }; > > EXPORT_SYMBOL(arm_nommu_dma_ops); > > > > +static bool use_reserved_mem(struct device *dev) > > +{ > > + struct device_node *np; > > + > > + np = of_find_node_by_path("/reserved-memory/linux,dma"); > > + > > + if (np && > > + of_device_is_compatible(np, "shared-dma-pool") && > > + of_property_read_bool(np, "no-map") && > > + of_property_read_bool(np, "linux,dma-default")) { > > + /* has global corherent mem support */ > > + of_node_put(np); > > + return true; > > + } > > + > > + np = of_parse_phandle(dev->of_node, "memory-region", 0); > > + if (np) { > > + /* has dev corherent mem support */ > > + of_node_put(np); > > + return true; > > + } > > + > > + return false; > > +} > > + > > void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, > > const struct iommu_ops *iommu, bool coherent) > > { > > @@ -206,6 +232,6 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, > > dev->archdata.dma_coherent = (get_cr() & CR_M) ? coherent : true; > > } > > > > - if (!dev->archdata.dma_coherent) > > + if (!dev->archdata.dma_coherent || use_reserved_mem(dev)) > > set_dma_ops(dev, &arm_nommu_dma_ops); > > } > > > > Sorry I have to NAK this hack :( > > Digging git history reveled 79964a1c2972 ("ARM: 8633/1: nommu: allow mmap when !CONFIG_MMU") > which make me wonder if diff below does the trick for you > > diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c > index 8f4bbda..8623b9e 100644 > --- a/kernel/dma/direct.c > +++ b/kernel/dma/direct.c > @@ -456,14 +456,14 @@ int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma, > #else /* CONFIG_MMU */ > bool dma_direct_can_mmap(struct device *dev) > { > - return false; > + return true; > } > > int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma, > void *cpu_addr, dma_addr_t dma_addr, size_t size, > unsigned long attrs) > { > - return -ENXIO; > + return vm_iomap_memory(vma, vma->vm_start, (vma->vm_end - vma->vm_start));; > } > #endif /* CONFIG_MMU */ Yes, this is a quite nice way to support !CONFIG_MMU without cache on platforms. I will try your suggestion. thanks > > Cheers > Vladimir