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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B75FEC5475B for ; Fri, 1 Mar 2024 13:56:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=ArLRR+D1QcfNbkfFlFerjY0B8+MIVog8KUxNYpXDah4=; b=D2MtEvHBodkHHm NtfgPWNhpI2U2Ozc2HdxYiRwoN8sfI54z7ptZNLWMFZRWNKI+SJOo6u3eZ/uR/v5/MFhTsxfT+Qw1 i3nJlhO2GvLfZrWOz4/EMit4v2KUNe65RrRY8oDeteA1hnfd0FEMbgB5b9DaIIFZYtUK36LfoK0E4 XbnC8c32R9Aev5uQVte+X1phyOXaZDtAr4XQX1a6rYLGKh7FQSWwRe0r0NA13sH1bt+SPFTnI4hoK UHF1+QZ/ZYZl87Afv8rHK7WVCYle5aVgHnahLAEsGuLs/sBWR7O+9cPlYsxtZXNswgGxOY5QpYkVF o7X38ZWb7jI61/DUOmiA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rg3Ma-00000000ch7-2xKO; Fri, 01 Mar 2024 13:55:48 +0000 Received: from smtp-out1.suse.de ([2a07:de40:b251:101:10:150:64:1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rg3MW-00000000ceo-1KxD; Fri, 01 Mar 2024 13:55:47 +0000 Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id F1B3A22D5F; Fri, 1 Mar 2024 13:55:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1709301339; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=24jGTan3PFnpCEBhN6T2OEe8QFjQk85yxFC3EYC70Mk=; b=ayRVMTn2TF7NxaJ79MminGnvCX5VSasYg9i4f0fOHzv4zADrTqcBrKI4k3wX4n7FNv6vXh hqPbnAwa1mhFPbrYh+V6Rl9ACceEaiCh0YD27LKCCt8iRhI/3Bt+QpSzQTArNQ2frEEz+i aVCx7fardqEKSoIwasvoHIEXOyXGoc4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1709301339; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=24jGTan3PFnpCEBhN6T2OEe8QFjQk85yxFC3EYC70Mk=; b=LXO3nMUZQfn+rhiNce5J4abXmDZhhzusu9MzfHfbQ60Zyxnsp9+2itEK1q94JcPA3etB9z iaVsnnQgvaoEX6Aw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1709301338; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=24jGTan3PFnpCEBhN6T2OEe8QFjQk85yxFC3EYC70Mk=; b=AgBaMp8q8eVNAQtFIJXbMfW9tYhwRp7/ulsbcwIqhU7EYJn5vudG0JMASjtCBttvzPSM/f Z2jvBQRNbQ/aib1yfvxc1Znm11T0kNJMWM4CBwhNMwzqbKsSIE+/LxE69wk82SD0SHLLIv R/+ZFVm/IGq31UXdLPCpx2kGhyUroWQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1709301338; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=24jGTan3PFnpCEBhN6T2OEe8QFjQk85yxFC3EYC70Mk=; b=syRxMmZ+iklqkw2LyS0JzobSCCTuvfIkOQoQN1i6Iy+9iuKWsMXBOna1iE5wVdYZYHkDEK rMH/WdTQWD8Fw+Ag== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id D104413581; Fri, 1 Mar 2024 13:55:38 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap2.dmz-prg2.suse.org with ESMTPSA id sAMDMVre4WXZWgAAn2gu4w (envelope-from ); Fri, 01 Mar 2024 13:55:38 +0000 Date: Fri, 1 Mar 2024 14:55:30 +0100 From: Andrea della Porta To: Robin Murphy Cc: Andrea della Porta , Vinod Koul , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , dmaengine@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Maxime Ripard , Dom Cobley , Phil Elwell Subject: Re: [PATCH 04/12] bcm2835-dma: Advertise the full DMA range Message-ID: Mail-Followup-To: Robin Murphy , Andrea della Porta , Vinod Koul , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , dmaengine@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Maxime Ripard , Dom Cobley , Phil Elwell References: <1e71c153-e482-409c-b229-9b9c0662b67e@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1e71c153-e482-409c-b229-9b9c0662b67e@arm.com> Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=AgBaMp8q; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=syRxMmZ+ X-Spamd-Result: default: False [-4.81 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_DKIM_ARC_DNSWL_HI(-1.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; FREEMAIL_ENVRCPT(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+]; MX_GOOD(-0.01)[]; RCPT_COUNT_TWELVE(0.00)[14]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; MID_RHS_NOT_FQDN(0.50)[]; FREEMAIL_CC(0.00)[suse.com,kernel.org,broadcom.com,vger.kernel.org,lists.infradead.org,cerno.tech,gmail.com,raspberrypi.com]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-3.00)[100.00%]; RCVD_IN_DNSWL_HI(-1.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:98:from] X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: F1B3A22D5F X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240301_055544_572409_546EA106 X-CRM114-Status: GOOD ( 27.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 On 17:55 Mon 05 Feb , Robin Murphy wrote: > On 2024-02-04 6:59 am, Andrea della Porta wrote: > > From: Phil Elwell > > > > Unless the DMA mask is set wider than 32 bits, DMA mapping will use a > > bounce buffer. > > > > Signed-off-by: Phil Elwell > > --- > > drivers/dma/bcm2835-dma.c | 18 +++++++++++++++--- > > 1 file changed, 15 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c > > index 36bad198b655..237dcdb8d726 100644 > > --- a/drivers/dma/bcm2835-dma.c > > +++ b/drivers/dma/bcm2835-dma.c > > @@ -39,6 +39,7 @@ > > #define BCM2711_DMA_MEMCPY_CHAN 14 > > struct bcm2835_dma_cfg_data { > > + u64 dma_mask; > > u32 chan_40bit_mask; > > }; > > @@ -308,10 +309,12 @@ DEFINE_SPINLOCK(memcpy_lock); > > static const struct bcm2835_dma_cfg_data bcm2835_dma_cfg = { > > .chan_40bit_mask = 0, > > + .dma_mask = DMA_BIT_MASK(32), > > }; > > static const struct bcm2835_dma_cfg_data bcm2711_dma_cfg = { > > .chan_40bit_mask = BIT(11) | BIT(12) | BIT(13) | BIT(14), > > + .dma_mask = DMA_BIT_MASK(36), > > }; > > static inline size_t bcm2835_dma_max_frame_length(struct bcm2835_chan *c) > > @@ -1263,6 +1266,8 @@ static struct dma_chan *bcm2835_dma_xlate(struct of_phandle_args *spec, > > static int bcm2835_dma_probe(struct platform_device *pdev) > > { > > + const struct bcm2835_dma_cfg_data *cfg_data; > > + const struct of_device_id *of_id; > > struct bcm2835_dmadev *od; > > struct resource *res; > > void __iomem *base; > > @@ -1272,13 +1277,20 @@ static int bcm2835_dma_probe(struct platform_device *pdev) > > int irq_flags; > > uint32_t chans_available; > > char chan_name[BCM2835_DMA_CHAN_NAME_SIZE]; > > - const struct of_device_id *of_id; > > int chan_count, chan_start, chan_end; > > + of_id = of_match_node(bcm2835_dma_of_match, pdev->dev.of_node); > > + if (!of_id) { > > + dev_err(&pdev->dev, "Failed to match compatible string\n"); > > + return -EINVAL; > > + } > > + > > + cfg_data = of_id->data; > > We've had of_device_get_match_data() for nearly 9 years now, and even a > generic device_get_match_data() for 6 ;) > > > + > > if (!pdev->dev.dma_mask) > > pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask; > > [ Passing nit: that also really shouldn't be there, especially since > cdfee5623290 ] > > > - rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); > > + rc = dma_set_mask_and_coherent(&pdev->dev, cfg_data->dma_mask); > > Wait, does chan_40bit_mask mean that you still have some channels which > *can't* address this full mask? If so this can't work properly. You may well > need to redesign a bit further to have a separate DMA device for each > channel such they can each have different masks. > It seems that the original intention here was to create a device for each value of dma_mask in hw descriptors. That is, for 2711 which has 32 and 40 bit channels, the DT should look something like this: dma: dma-controller@7e007000 { interrupts = <...>; brcm,dma-channel-mask = <0x7f5>; compatible = "brcm,bcm2835-dma"; interrupt-names = "..."; reg = <0x7e007000 0xb00>; #dma-cells = <0x01>; }; dma40: dma-controller@7e007b00 { interrupts = <...>; brcm,dma-channel-mask = <0x3000>; compatible = "brcm,bcm2711-dma"; interrupt-names = "..."; reg = <0x00 0x7e007b00 0x00 0x400>; #dma-cells = <0x01>; }; Two devices dma0 and dma1 will be created, each one serving a different mask and the call to dma_set_mask_and_coherent(..., dma_mask) on the specific device will be consistent. Please note that of course "brcm,dma-channel-mask" from DT only refers to what channels are available to be used in the kernel, while dma_mask parameter of the aforementioned dma_set_mask_and_coherent() call is the addressing mask enforced by the driver, and its the same for each specific device (dma0 or dma1). Many thanks, Andrea _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel