Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752473AbdHAUK0 (ORCPT ); Tue, 1 Aug 2017 16:10:26 -0400 Received: from mail-oi0-f65.google.com ([209.85.218.65]:37122 "EHLO mail-oi0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752096AbdHAUKY (ORCPT ); Tue, 1 Aug 2017 16:10:24 -0400 MIME-Version: 1.0 In-Reply-To: References: <20170721222204.3402340-1-arnd@arndb.de> From: Arnd Bergmann Date: Tue, 1 Aug 2017 22:10:23 +0200 X-Google-Sender-Auth: c1oqxOmDUECaK2b2nysUeGrqiDw Message-ID: Subject: Re: [PATCH] [RFC] mtd: atmel-quadspi: fix build issues To: Cyrille Pitchen Cc: Marek Vasut , David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , Joel Stanley , =?UTF-8?Q?C=C3=A9dric_Le_Goater?= , Ludovic Barre , Mika Westerberg , linux-mtd , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by nfs id v71KATgv024461 Content-Length: 1975 Lines: 47 On Tue, Aug 1, 2017 at 9:41 PM, Cyrille Pitchen wrote: > Le 22/07/2017 à 00:21, Arnd Bergmann a écrit : >> --- a/drivers/mtd/spi-nor/atmel-quadspi.c >> +++ b/drivers/mtd/spi-nor/atmel-quadspi.c >> @@ -208,9 +208,9 @@ static int atmel_qspi_run_transfer(struct atmel_qspi *aq, >> if (cmd->enable.bits.address) >> ahb_mem += cmd->address; >> if (cmd->tx_buf) >> - _memcpy_toio(ahb_mem, cmd->tx_buf, cmd->buf_len); >> + memcpy_toio(ahb_mem, cmd->tx_buf, cmd->buf_len); >> else >> - _memcpy_fromio(cmd->rx_buf, ahb_mem, cmd->buf_len); >> + memcpy_fromio(cmd->rx_buf, ahb_mem, cmd->buf_len); >> > > At least on AT91 platforms and likely on most ARM boards, > memcpy_fromio == memcpy_toio == memcpy. Just to give more background, it's a bit more complicated than this: On big-endian kernels, memcpy_fromio/memcpy_toio are always defined as _memcpy_fromio/_memcpy_toio so we do byte load/store operations in the correct order, while little-endian kernels have the optimized mmiocpy() that redirects to memcpy(). This is true for all ARM platforms other than EBSA110 IIRC. Also, mmiocpy is an exported symbol that aliases to the external memcpy definition, but we can't call memcpy directly, because gcc knows how to inline calls to memcpy() and replace them by direct load/store instructions that might be unaligned and trap on uncached mmio areas. > I got some sama5d2 hardware last week, so I'll try to test your patch > within few days because as you said maybe memcpy() was broken when I > developed this driver at first but now memcpy() is likely to have been > fixed so it might be interesting to get rid of _memcpy_fromio() and > _memcpy_toio() because this is not the first time those 2 functions have > created issues when building the Atmel Quad SPI driver on other platforms. > > So thanks for you're patch, I'll give it a try :) Ok, thanks. Arnd