Re: [U-Boot] [PATCH V2] Adds driver for Xilinx' xps_spi SPI controller.
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.
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.
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.
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.
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.
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.
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.
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.
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;