Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2012-04-02 Thread Marek Vasut
Dear Graeme Smecher,

 Hi Marek,
 
 On 31/03/12 12:42 PM, Marek Vasut wrote:
  Dear Graeme Smecher,
  
  Hi Wolfgang,
  
  On 18/09/10 01:02 PM, Wolfgang Denk wrote:
  Dear Graeme Smecher,
  
  In
  message1280955847-2999-1-git-send-email-graeme.smec...@mail.mcgill.ca
  
  
  you wrote:
  This code differs in only trivial ways from the altera_spi driver. It
  plays nice with Thomas Chou's mmc_spi driver, as well as with SPI
  flash.
  
  Hm... if the core really differs in only trivial ways from the
  altera_spi driver, then why do we need a duplication of that code?
  
  Can we plase have a single driver source that supports both instead?
  
  Hm... It's possible to combine xilinx_spi.c and altera_spi.c. However, I
  suspect joining them will make maintenance more complicated rather than
  simpler. I can't, for example, test a combined driver on Altera hardware
  (and the Altera maintainer will likely have the same problem with Xilinx
  hardware.)
  
  My guess is that most SPI interfaces are nearly identical at a register
  level, especially for drivers that don't support interrupts and other
  complications. (See mxc_spi.c for another example.) Xilinx and Altera's
  SPI interfaces are just two examples that happen to both be FPGA-based
  -- I could probably have adapted any of the other SPI drivers instead.
  
  Are you sure combining drivers is the most logical approach? Let me
  know, and I'll have a crack at it.
  
  thanks,
  Graeme
  
  What was the conclusion here? Shall I drop the patch or will you submit a
  rebased version?
 
 Please drop the patch for now, since I'm not in a position to maintain
 it. The trail of bread-crumbs on the mailing list is a good compromise
 until someone (me, later on?) steps up.

Sorry to hear that, though thanks for updating me on the situation :)

 thanks,
 Graeme

Best regards,
Marek Vasut
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2012-04-02 Thread Graeme Smecher

Hi Marek,

On 31/03/12 12:42 PM, Marek Vasut wrote:

Dear Graeme Smecher,


Hi Wolfgang,

On 18/09/10 01:02 PM, Wolfgang Denk wrote:

Dear Graeme Smecher,

In message1280955847-2999-1-git-send-email-graeme.smec...@mail.mcgill.ca

you wrote:

This code differs in only trivial ways from the altera_spi driver. It
plays nice with Thomas Chou's mmc_spi driver, as well as with SPI
flash.

Hm... if the core really differs in only trivial ways from the
altera_spi driver, then why do we need a duplication of that code?

Can we plase have a single driver source that supports both instead?

Hm... It's possible to combine xilinx_spi.c and altera_spi.c. However, I
suspect joining them will make maintenance more complicated rather than
simpler. I can't, for example, test a combined driver on Altera hardware
(and the Altera maintainer will likely have the same problem with Xilinx
hardware.)

My guess is that most SPI interfaces are nearly identical at a register
level, especially for drivers that don't support interrupts and other
complications. (See mxc_spi.c for another example.) Xilinx and Altera's
SPI interfaces are just two examples that happen to both be FPGA-based
-- I could probably have adapted any of the other SPI drivers instead.

Are you sure combining drivers is the most logical approach? Let me
know, and I'll have a crack at it.

thanks,
Graeme

What was the conclusion here? Shall I drop the patch or will you submit a
rebased version?


Please drop the patch for now, since I'm not in a position to maintain 
it. The trail of bread-crumbs on the mailing list is a good compromise 
until someone (me, later on?) steps up.


thanks,
Graeme

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2012-03-31 Thread Marek Vasut
Dear Graeme Smecher,

 Hi Wolfgang,
 
 On 18/09/10 01:02 PM, Wolfgang Denk wrote:
  Dear Graeme Smecher,
  
  In message1280955847-2999-1-git-send-email-graeme.smec...@mail.mcgill.ca  
you wrote:
  This code differs in only trivial ways from the altera_spi driver. It
  plays nice with Thomas Chou's mmc_spi driver, as well as with SPI
  flash.
  
  Hm... if the core really differs in only trivial ways from the
  altera_spi driver, then why do we need a duplication of that code?
  
  Can we plase have a single driver source that supports both instead?
 
 Hm... It's possible to combine xilinx_spi.c and altera_spi.c. However, I
 suspect joining them will make maintenance more complicated rather than
 simpler. I can't, for example, test a combined driver on Altera hardware
 (and the Altera maintainer will likely have the same problem with Xilinx
 hardware.)
 
 My guess is that most SPI interfaces are nearly identical at a register
 level, especially for drivers that don't support interrupts and other
 complications. (See mxc_spi.c for another example.) Xilinx and Altera's
 SPI interfaces are just two examples that happen to both be FPGA-based
 -- I could probably have adapted any of the other SPI drivers instead.
 
 Are you sure combining drivers is the most logical approach? Let me
 know, and I'll have a crack at it.
 
 thanks,
 Graeme

What was the conclusion here? Shall I drop the patch or will you submit a 
rebased version?

Best regards,
Marek Vasut
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2010-09-20 Thread Graeme Smecher
Hi Wolfgang,

On 18/09/10 01:02 PM, Wolfgang Denk wrote:
 Dear Graeme Smecher,

 In message1280955847-2999-1-git-send-email-graeme.smec...@mail.mcgill.ca  
 you wrote:

 This code differs in only trivial ways from the altera_spi driver. It plays
 nice with Thomas Chou's mmc_spi driver, as well as with SPI flash.
  
 Hm... if the core really differs in only trivial ways from the
 altera_spi driver, then why do we need a duplication of that code?

 Can we plase have a single driver source that supports both instead?


Hm... It's possible to combine xilinx_spi.c and altera_spi.c. However, I 
suspect joining them will make maintenance more complicated rather than 
simpler. I can't, for example, test a combined driver on Altera hardware 
(and the Altera maintainer will likely have the same problem with Xilinx 
hardware.)

My guess is that most SPI interfaces are nearly identical at a register 
level, especially for drivers that don't support interrupts and other 
complications. (See mxc_spi.c for another example.) Xilinx and Altera's 
SPI interfaces are just two examples that happen to both be FPGA-based 
-- I could probably have adapted any of the other SPI drivers instead.

Are you sure combining drivers is the most logical approach? Let me 
know, and I'll have a crack at it.

thanks,
Graeme
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2010-09-18 Thread Wolfgang Denk
Dear Graeme Smecher,

In message 1280955847-2999-1-git-send-email-graeme.smec...@mail.mcgill.ca you 
wrote:
 This code differs in only trivial ways from the altera_spi driver. It plays
 nice with Thomas Chou's mmc_spi driver, as well as with SPI flash.

Hm... if the core really differs in only trivial ways from the
altera_spi driver, then why do we need a duplication of that code?

Can we plase have a single driver source that supports both instead?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH, MD: Wolfgang Denk  Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
Harrisberger's Fourth Law of the Lab:
Experience is directly proportional to the
amount of equipment ruined.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2010-08-17 Thread Graeme Smecher
Hi all,

On 04/08/10 02:04 PM, Graeme Smecher wrote:
 This code differs in only trivial ways from the altera_spi driver. It plays
 nice with Thomas Chou's mmc_spi driver, as well as with SPI flash.

 Documentation for the SPI core is available here:

 http://www.xilinx.com/support/documentation/ip_documentation/xps_spi.pdf

 Signed-off-by: Graeme Smechergraeme.smec...@mail.mcgill.ca
 ---
   drivers/spi/Makefile |1 +
   drivers/spi/xilinx_spi.c |  173 
 ++
   2 files changed, 174 insertions(+), 0 deletions(-)
   create mode 100644 drivers/spi/xilinx_spi.c


Just a friendly reminder -- I'd be really happy to see this, and my 
other patch (July 29, Add support for Winbond W25Q64 SPI flash), 
integrated into the tree. Please let me know if there's anything I can 
do to grease the skids.

cheers,
Graeme
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2010-08-17 Thread Anatolij Gustschin
Hi,

On Tue, 17 Aug 2010 09:27:10 -0700
Graeme Smecher graeme.smec...@mail.mcgill.ca wrote:

 On 04/08/10 02:04 PM, Graeme Smecher wrote:
  This code differs in only trivial ways from the altera_spi driver. It plays
  nice with Thomas Chou's mmc_spi driver, as well as with SPI flash.
 
  Documentation for the SPI core is available here:
 
  http://www.xilinx.com/support/documentation/ip_documentation/xps_spi.pdf
 
  Signed-off-by: Graeme Smechergraeme.smec...@mail.mcgill.ca
  ---
drivers/spi/Makefile |1 +
drivers/spi/xilinx_spi.c |  173 
  ++
2 files changed, 174 insertions(+), 0 deletions(-)
create mode 100644 drivers/spi/xilinx_spi.c
 
 
 Just a friendly reminder -- I'd be really happy to see this, and my 
 other patch (July 29, Add support for Winbond W25Q64 SPI flash), 
 integrated into the tree. Please let me know if there's anything I can 
 do to grease the skids.

Thanks! But both, this and your other patch have been submitted when
the merge window for next v2010.09 release was closed. So the patches
probably won't be integrated before the next merge window opens,
since these are not bug fixes. Normally you do not have to resubmit
the patches when the next merge window opens again, maybe send a
reminder again. Some info about release cycle can be found here [1].

Best regards,
Anatolij

[1] http://www.denx.de/wiki/U-Boot/ReleaseCycle
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2010-08-17 Thread Graeme Smecher
Hi Anatolij,

On 17/08/10 10:25 AM, Anatolij Gustschin wrote:
 Hi,

 On Tue, 17 Aug 2010 09:27:10 -0700
 Graeme Smechergraeme.smec...@mail.mcgill.ca  wrote:


 On 04/08/10 02:04 PM, Graeme Smecher wrote:
  
 This code differs in only trivial ways from the altera_spi driver. It plays
 nice with Thomas Chou's mmc_spi driver, as well as with SPI flash.

 Documentation for the SPI core is available here:

  
 http://www.xilinx.com/support/documentation/ip_documentation/xps_spi.pdf

 Signed-off-by: Graeme Smechergraeme.smec...@mail.mcgill.ca
 ---
drivers/spi/Makefile |1 +
drivers/spi/xilinx_spi.c |  173 
 ++
2 files changed, 174 insertions(+), 0 deletions(-)
create mode 100644 drivers/spi/xilinx_spi.c


 Just a friendly reminder -- I'd be really happy to see this, and my
 other patch (July 29, Add support for Winbond W25Q64 SPI flash),
 integrated into the tree. Please let me know if there's anything I can
 do to grease the skids.
  
 Thanks! But both, this and your other patch have been submitted when
 the merge window for next v2010.09 release was closed. So the patches
 probably won't be integrated before the next merge window opens,
 since these are not bug fixes. Normally you do not have to resubmit
 the patches when the next merge window opens again, maybe send a
 reminder again. Some info about release cycle can be found here [1].

 Best regards,
 Anatolij

 [1] http://www.denx.de/wiki/U-Boot/ReleaseCycle


Ah, of course -- I should have guessed. I'll send along another prod 
next month if it's necessary.

thanks,
Graeme

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.

2010-08-04 Thread Graeme Smecher
This code differs in only trivial ways from the altera_spi driver. It plays
nice with Thomas Chou's mmc_spi driver, as well as with SPI flash.

Documentation for the SPI core is available here:

   http://www.xilinx.com/support/documentation/ip_documentation/xps_spi.pdf

Signed-off-by: Graeme Smecher graeme.smec...@mail.mcgill.ca
---
 drivers/spi/Makefile |1 +
 drivers/spi/xilinx_spi.c |  173 ++
 2 files changed, 174 insertions(+), 0 deletions(-)
 create mode 100644 drivers/spi/xilinx_spi.c

diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index dfcbb8b..eeba5ef 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -36,6 +36,7 @@ COBJS-$(CONFIG_MPC52XX_SPI) += mpc52xx_spi.o
 COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
 COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o
 COBJS-$(CONFIG_SOFT_SPI) += soft_spi.o
+COBJS-$(CONFIG_XILINX_SPI) += xilinx_spi.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/spi/xilinx_spi.c b/drivers/spi/xilinx_spi.c
new file mode 100644
index 000..281c369
--- /dev/null
+++ b/drivers/spi/xilinx_spi.c
@@ -0,0 +1,173 @@
+/*
+ * Xilinx SPI driver
+ *
+ * based on bfin_spi.c, by way of altera_spi.c
+ * Copyright (c) 2005-2008 Analog Devices Inc.
+ * Copyright (c) 2010 Thomas Chou tho...@wytron.com.tw
+ * Copyright (c) 2010 Graeme Smecher graeme.smec...@mail.mcgill.ca
+ *
+ * Licensed under the GPL-2 or later.
+ */
+#include common.h
+#include asm/io.h
+#include malloc.h
+#include spi.h
+
+#define XILINX_SPI_RR  0x6c
+#define XILINX_SPI_TR  0x68
+#define XILINX_SPI_SR  0x64
+#define XILINX_SPI_CR  0x60
+#define XILINX_SPI_SSR 0x70
+
+#define XILINX_SPI_SR_RX_EMPTY_MSK 0x01
+
+#define XILINX_SPI_CR_DEFAULT  (0x0006)
+#define XILINX_SPI_CR_MSS_MSK  (0x0080)
+
+#if XPAR_XSPI_NUM_INSTANCES  4
+# warning The xilinx_spi driver will ignore some of your SPI peripherals!
+#endif
+
+static const ulong xilinx_spi_base_list[] = {
+#ifdef XPAR_SPI_0_BASEADDR
+   XPAR_SPI_0_BASEADDR,
+#endif
+#ifdef XPAR_SPI_1_BASEADDR
+   XPAR_SPI_1_BASEADDR,
+#endif
+#ifdef XPAR_SPI_2_BASEADDR
+   XPAR_SPI_2_BASEADDR,
+#endif
+#ifdef XPAR_SPI_3_BASEADDR
+   XPAR_SPI_3_BASEADDR,
+#endif
+};
+
+struct xilinx_spi_slave {
+   struct spi_slave slave;
+   ulong base;
+};
+#define to_xilinx_spi_slave(s) container_of(s, struct xilinx_spi_slave, slave)
+
+__attribute__((weak))
+int spi_cs_is_valid(unsigned int bus, unsigned int cs)
+{
+   return bus  ARRAY_SIZE(xilinx_spi_base_list)  cs  32;
+}
+
+__attribute__((weak))
+void spi_cs_activate(struct spi_slave *slave)
+{
+   struct xilinx_spi_slave *xilspi = to_xilinx_spi_slave(slave);
+   writel(~(1  slave-cs), xilspi-base + XILINX_SPI_SSR);
+   writel(XILINX_SPI_CR_DEFAULT | XILINX_SPI_CR_MSS_MSK,
+   xilspi-base + XILINX_SPI_CR);
+}
+
+__attribute__((weak))
+void spi_cs_deactivate(struct spi_slave *slave)
+{
+   struct xilinx_spi_slave *xilspi = to_xilinx_spi_slave(slave);
+
+   writel(XILINX_SPI_CR_DEFAULT, xilspi-base + XILINX_SPI_CR);
+   writel(~0, xilspi-base + XILINX_SPI_SSR);
+}
+
+void spi_init(void)
+{
+}
+
+struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
+ unsigned int max_hz, unsigned int mode)
+{
+   struct xilinx_spi_slave *xilspi;
+
+   if (!spi_cs_is_valid(bus, cs))
+   return NULL;
+
+   xilspi = malloc(sizeof(*xilspi));
+   if (!xilspi)
+   return NULL;
+
+   xilspi-slave.bus = bus;
+   xilspi-slave.cs = cs;
+   xilspi-base = xilinx_spi_base_list[bus];
+   debug(%s: bus:%i cs:%i base:%lx\n, __func__,
+   bus, cs, xilspi-base);
+
+   return xilspi-slave;
+}
+
+void spi_free_slave(struct spi_slave *slave)
+{
+   struct xilinx_spi_slave *xilspi = to_xilinx_spi_slave(slave);
+   free(xilspi);
+}
+
+int spi_claim_bus(struct spi_slave *slave)
+{
+   struct xilinx_spi_slave *xilspi = to_xilinx_spi_slave(slave);
+
+   debug(%s: bus:%i cs:%i\n, __func__, slave-bus, slave-cs);
+   writel(XILINX_SPI_CR_DEFAULT, xilspi-base + XILINX_SPI_CR);
+   writel(~0, xilspi-base + XILINX_SPI_SSR);
+   return 0;
+}
+
+void spi_release_bus(struct spi_slave *slave)
+{
+   struct xilinx_spi_slave *xilspi = to_xilinx_spi_slave(slave);
+
+   debug(%s: bus:%i cs:%i\n, __func__, slave-bus, slave-cs);
+   writel(~0, xilspi-base + XILINX_SPI_SSR);
+}
+
+#ifndef CONFIG_XILINX_SPI_IDLE_VAL
+# define CONFIG_XILINX_SPI_IDLE_VAL 0xff
+#endif
+
+int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
+void *din, unsigned long flags)
+{
+   struct xilinx_spi_slave *xilspi = to_xilinx_spi_slave(slave);
+   /* assume spi core configured to do 8 bit transfers */
+   uint bytes = bitlen / 8;
+   const uchar *txp = dout;
+   uchar *rxp = din;