Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1764499AbZLQLPF (ORCPT ); Thu, 17 Dec 2009 06:15:05 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1764482AbZLQLO6 (ORCPT ); Thu, 17 Dec 2009 06:14:58 -0500 Received: from relay.bearnet.nu ([80.252.223.222]:1646 "EHLO relay.bearnet.nu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1764481AbZLQLOz (ORCPT ); Thu, 17 Dec 2009 06:14:55 -0500 X-Greylist: delayed 892 seconds by postgrey-1.27 at vger.kernel.org; Thu, 17 Dec 2009 06:14:55 EST Message-ID: <4B2A0F27.8070906@mocean-labs.com> Date: Thu, 17 Dec 2009 11:59:51 +0100 From: =?ISO-8859-1?Q?Richard_R=F6jfors?= Organization: Pelagicore AB User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20091109) MIME-Version: 1.0 To: Paul Mundt CC: John Linn , Grant Likely , spi-devel-general@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: Re: [PATCH] spi: xilinx_spi: Fix up I/O routine wrapping bogosity. References: <20091216060130.GD31265@linux-sh.org> In-Reply-To: <20091216060130.GD31265@linux-sh.org> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2854 Lines: 86 Paul Mundt wrote: > xilinx_spi presently makes some fairly questionable assumptions about I/O > routines, and attempts to assign ioread32/iowrite32 and friends directly > to its own internal function pointers. On many platforms these I/O > routines are macros or wrappers and not actual functions on their own, > resulting in things like: > > ERROR: "ioread32be" [drivers/spi/xilinx_spi.ko] undefined! > ERROR: "iowrite32be" [drivers/spi/xilinx_spi.ko] undefined! > ERROR: "iowrite32" [drivers/spi/xilinx_spi.ko] undefined! > ERROR: "ioread32" [drivers/spi/xilinx_spi.ko] undefined! > > If xilinx_spi wants to do this sort of casting, it needs to provide its > own wrappers for these, or change how it does accesses completely. > > I've opted for the first approach, and the attached silly patch does > that. If someone with the hardware available wants to give the second > option a try that's ok too. In any event, the current code is broken for > at least: arm, avr32, blackfin, microblaze, mn10300, and sh. > > Signed-off-by: Paul Mundt Looks good to me. Acked-by: Richard R?jfors > > --- > > drivers/spi/xilinx_spi.c | 28 ++++++++++++++++++++++++---- > 1 file changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/spi/xilinx_spi.c b/drivers/spi/xilinx_spi.c > index 9f38637..154e908 100644 > --- a/drivers/spi/xilinx_spi.c > +++ b/drivers/spi/xilinx_spi.c > @@ -93,6 +93,26 @@ struct xilinx_spi { > void (*rx_fn) (struct xilinx_spi *); > }; > > +static void xspi_write32(u32 val, void __iomem *addr) > +{ > + iowrite32(val, addr); > +} > + > +static unsigned int xspi_read32(void __iomem *addr) > +{ > + return ioread32(addr); > +} > + > +static void xspi_write32_be(u32 val, void __iomem *addr) > +{ > + iowrite32be(val, addr); > +} > + > +static unsigned int xspi_read32_be(void __iomem *addr) > +{ > + return ioread32be(addr); > +} > + > static void xspi_tx8(struct xilinx_spi *xspi) > { > xspi->write_fn(*xspi->tx_ptr, xspi->regs + XSPI_TXD_OFFSET); > @@ -374,11 +394,11 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem, > xspi->mem = *mem; > xspi->irq = irq; > if (pdata->little_endian) { > - xspi->read_fn = ioread32; > - xspi->write_fn = iowrite32; > + xspi->read_fn = xspi_read32; > + xspi->write_fn = xspi_write32; > } else { > - xspi->read_fn = ioread32be; > - xspi->write_fn = iowrite32be; > + xspi->read_fn = xspi_read32_be; > + xspi->write_fn = xspi_write32_be; > } > xspi->bits_per_word = pdata->bits_per_word; > if (xspi->bits_per_word == 8) { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/