From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Tue, 7 May 2019 15:53:41 +0200 Subject: [U-Boot] [PATCH 2/3] bouncebuf: Add DMA validation check to addr_aligned(). In-Reply-To: <393fef23-4ec4-8e0b-50fa-c74da5063456@theobroma-systems.com> References: <20190507090531.50670-1-christoph.muellner@theobroma-systems.com> <20190507090531.50670-2-christoph.muellner@theobroma-systems.com> <6722138c-bbb2-e9eb-4321-4be99b2aee10@denx.de> <393fef23-4ec4-8e0b-50fa-c74da5063456@theobroma-systems.com> Message-ID: <71798e97-1129-69d8-08da-495c019b56c1@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de On 5/7/19 3:52 PM, Christoph Müllner wrote: > > > On 5/7/19 3:48 PM, Christoph Müllner wrote: >> >> >> On 07.05.19 15:05, Marek Vasut wrote: >>> On 5/7/19 11:05 AM, Christoph Muellner wrote: >>>> Currently addr_aligned() performs an alignment and a length check >>>> to validate the DMA address. However, some machines have stricter >>>> restrictions of DMA-able addresses. >>>> >>>> This patch adds a call to mach_addr_is_dmaable() to honor this >>>> machine specific restrictions. >>>> >>>> Signed-off-by: Christoph Muellner >>>> --- >>>> >>>> common/bouncebuf.c | 6 ++++++ >>>> 1 file changed, 6 insertions(+) >>>> >>>> diff --git a/common/bouncebuf.c b/common/bouncebuf.c >>>> index a7098e2caf..26ddf30ea2 100644 >>>> --- a/common/bouncebuf.c >>>> +++ b/common/bouncebuf.c >>>> @@ -26,6 +26,12 @@ static int addr_aligned(struct bounce_buffer *state) >>>> return 0; >>>> } >>>> >>>> + /* Check if valid DMA address. */ >>>> + if (!mach_addr_is_dmaable((ulong)state->user_buffer)) { >>> >>> Is the cast necessary ? >> >> Of course not. >> Will be fixed in v2. >> >> Thanks! > > I take that back. > The cast is needed. > (And also done several times in this file) > > Otherwise you will get: > > common/bouncebuf.c: In function ‘addr_aligned’: > common/bouncebuf.c:35:33: warning: passing argument 1 of ‘mach_addr_is_dmaable’ makes integer from pointer without a cast [-Wint-conversion] > if (!mach_addr_is_dmaable(state->user_buffer)) { > ~~~~~^~~~~~~~~~~~~ > In file included from include/common.h:64, > from common/bouncebuf.c:8: > include/init.h:128:40: note: expected ‘long unsigned int’ but argument is of type ‘void *’ > int mach_addr_is_dmaable(unsigned long addr); > ~~~~~~~~~~~~~~^~~~ Shouldn't the function use void __iomem * in the first place ? -- Best regards, Marek Vasut