spi: microblaze: Adds driver for Xilinx SPI controller
Subsystems (2)
PATCH 1/2 spi: microblaze: Adds driver for Xilinx SPI controller
This is an improved version of the driver patch original submitted by Graeme Smecher <[email protected]>
The changes are:
- remove hard coded Xilinx BSP defines (XPAR_SPI_*) and use CONFIG_SYS_SPI_BASE from config.h instead
- add extensive register struct definitions
- remove offset calculation for register access and use the new register struct instead
- move default SPI controller configuration from spi_setup_slave() to spi_claim_bus()
- add spi_set_speed()
- insert SPI controller deactivation in spi_release_bus()
- protect while loops in spi_xfer() with counter / timeouts
- support SPI mode flags: LSB_FIRST, CPHA, CPOL, LOOP
Come from:
http://patchwork.ozlabs.org/patch/71797/
---
v2: Remove useles information from commit message
Add newline and split variable declaration from code
--- drivers/spi/Makefile | 1 + drivers/spi/xilinx_spi.c | 214 ++++++++++++++++++++++++++++++++++++++++++++++ drivers/spi/xilinx_spi.h | 135 +++++++++++++++++++++++++++++ 3 files changed, 350 insertions(+), 0 deletions(-) create mode 100644 drivers/spi/xilinx_spi.c create mode 100644 drivers/spi/xilinx_spi.h
drivers/spi/Makefile +1 -0
@@ -44,6 +44,7 @@ COBJS-$(CONFIG_SOFT_SPI) += soft_spi.o COBJS-$(CONFIG_SH_SPI) += sh_spi.o COBJS-$(CONFIG_FSL_ESPI) += fsl_espi.o COBJS-$(CONFIG_TEGRA2_SPI) += tegra2_spi.o +COBJS-$(CONFIG_XILINX_SPI) += xilinx_spi.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
drivers/spi/xilinx_spi.c new file +214 -0
214 lines not on this page · raw message
drivers/spi/xilinx_spi.h new file +135 -0
135 lines not on this page · raw message
Signature · 1 line
1.7.0.4
PATCH 2/2 microblaze: Wire up SPI driver
Depending on XILINX_SPI_FLASH_BASEADDR enable SPI flash and environment in SPI flash.
Expected values from xparameters.h are:
- XILINX_SPI_FLASH_BASEADDR
- XILINX_SPI_FLASH_MAX_FREQ
- XILINX_SPI_FLASH_CS
--- include/configs/microblaze-generic.h | 55 ++++++++++++++++++++++++++++++++-- 1 files changed, 52 insertions(+), 3 deletions(-)
include/configs/microblaze-generic.h +52 -3
@@ -36,14 +36,22 @@#define CONFIG_OF_EMBED 1#define CONFIG_DEFAULT_DEVICE_TREE microblaze -/* linear flash memory */ +/* linear and spi flash memory */ #ifdef XILINX_FLASH_START #define FLASH +#undef SPIFLASH#undef RAMENV/* hold environment in flash */ #else +#ifdef XILINX_SPI_FLASH_BASEADDR #undef FLASH +#define SPIFLASH +#undef RAMENV/* hold environment in flash */ +#else +#undef FLASH +#undef SPIFLASH#define RAMENV /* hold environment in RAM */ #endif +#endif /* uart */ #ifdef XILINX_UARTLITE_BASEADDR
@@ -218,20 +226,51 @@# define CONFIG_ENV_SIZE 0x1000# define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SIZE) -# else /* !RAMENV */ +# else /* FLASH && !RAMENV */ # define CONFIG_ENV_IS_IN_FLASH 1/* 128K(one sector) for env */ # define CONFIG_ENV_SECT_SIZE 0x20000# define CONFIG_ENV_ADDR \ (CONFIG_SYS_FLASH_BASE + (2 * CONFIG_ENV_SECT_SIZE))# define CONFIG_ENV_SIZE 0x20000 -# endif /* !RAMBOOT */ +# endif /* FLASH && !RAMBOOT */ #else /* !FLASH */ + +#ifdef SPIFLASH +# define CONFIG_SYS_NO_FLASH 1 +# define CONFIG_SYS_SPI_BASE XILINX_SPI_FLASH_BASEADDR +# define CONFIG_XILINX_SPI 1 +# define CONFIG_SPI 1 +# define CONFIG_SPI_FLASH 1 +# define CONFIG_SPI_FLASH_STMICRO 1 +# define CONFIG_SF_DEFAULT_MODE SPI_MODE_3 +# define CONFIG_SF_DEFAULT_SPEED XILINX_SPI_FLASH_MAX_FREQ +# define CONFIG_SF_DEFAULT_CS XILINX_SPI_FLASH_CS + +# ifdef RAMENV +# define CONFIG_ENV_IS_NOWHERE 1 +# define CONFIG_ENV_SIZE 0x1000 +# define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SIZE) + +# else /* SPIFLASH && !RAMENV */ +# define CONFIG_ENV_IS_IN_SPI_FLASH 1 +# define CONFIG_ENV_SPI_MODE SPI_MODE_3 +# define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED +# define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS +/* 128K(two sectors) for env */ +# define CONFIG_ENV_SECT_SIZE 0x10000 +# define CONFIG_ENV_SIZE (2 * CONFIG_ENV_SECT_SIZE) +/* Warning: adjust the offset in respect of other flash content and size */ +# define CONFIG_ENV_OFFSET (128 * CONFIG_ENV_SECT_SIZE)/* at 8MB */ +# endif /* SPIFLASH && !RAMBOOT */ +#else /* !SPIFLASH */ +/* ENV in RAM */ # define CONFIG_SYS_NO_FLASH 1# define CONFIG_ENV_IS_NOWHERE 1# define CONFIG_ENV_SIZE 0x1000# define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SIZE) +#endif /* !SPIFLASH */ #endif /* !FLASH */ /* system ace */
@@ -306,6 +345,15 @@# define CONFIG_CMD_SAVEENV # define CONFIG_CMD_SAVES # endif + +#else +#if defined(SPIFLASH ) +# define CONFIG_CMD_SF + +# if !defined(RAMENV ) +# define CONFIG_CMD_SAVEENV +# define CONFIG_CMD_SAVES +# endif #else # undef CONFIG_CMD_IMLS# undef CONFIG_CMD_FLASH
@@ -313,6 +361,7 @@# undef CONFIG_CMD_UBI# undef CONFIG_CMD_UBIFS#endif +#endif #if defined(CONFIG_CMD_JFFS2 )# define CONFIG_MTD_PARTITIONS
Signature · 1 line
1.7.0.4
PATCH 2/2 microblaze: Wire up SPI driver
Quoted 8 lines · Stephan Linz
Depending on
XILINX_SPI_FLASH_BASEADDRenable SPI flash and environment in SPI flash.Expected values from
xparameters.hare:
-XILINX_SPI_FLASH_BASEADDR
-XILINX_SPI_FLASH_MAX_FREQ
-XILINX_SPI_FLASH_CS
Quoted 5 lines
Signed-off-by Stephan Linz <[email protected]>--- include/configs/microblaze-generic.h | 55 ++++++++++++++++++++++++++++++++-- 1 files changed, 52 insertions(+), 3 deletions(-)
Should be v2 in subject but applied.
Thanks,
Michal
Signature · 4 lines
Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian
PATCH 1/2 spi: microblaze: Adds driver for Xilinx SPI controller
In reply to Stephan LinzQuoted 16 lines · Stephan Linz
This is an improved version of the driver patch original submitted by Graeme Smecher <[email protected]>
The changes are:
- remove hard coded Xilinx BSP defines (XPAR_SPI_*) and useCONFIG_SYS_SPI_BASEfromconfig.hinstead
- add extensive register struct definitions
- remove offset calculation for register access and use the new register struct instead
- move default SPI controller configuration fromspi_setup_slave()tospi_claim_bus()
- addspi_set_speed()
- insert SPI controller deactivation inspi_release_bus()
- protect while loops inspi_xfer()with counter / timeouts
- support SPI mode flags:LSB_FIRST, CPHA, CPOL, LOOP
Quoted 7 lines
Come from:
http://patchwork.ozlabs.org/patch/71797/Signed-off-by Stephan Linz <[email protected]>---
v2: Remove useles information from commit message
Add newline and split variable declaration from code
Should be v2 in subject but
I have tested and applied to microblaze custodian repo.
Thanks,
Michal
Signature · 4 lines
Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian