Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
On Thu, Nov 06, 2014 at 03:21:49PM +0530, Padmavathi Venna wrote: Exynos7 SPI controller supports only the auto Selection of CS toggle mode and Exynos7 SoC includes six SPI controllers. Add support for these changes in Exynos7 SPI controller driver. Applied, thanks. It does seem like these controllers are getting more restricted in functionality which seems a bit of a shame. signature.asc Description: Digital signature
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
Hi Mark, OK. I don't have provision to test on this board. I will try to test on older boards by disabling manual mode. I tested on exynos5420 peach-pit by enabling auto mode. I used dd command to read 1MB data from spi flash and I compared the result with manual mode. Both are same. I also tested this patch with Javier Martinez Canillas patches for enabling spidev nodes from http://www.spinics.net/lists/linux-samsung-soc/msg39057.html. I read 4MB flashdata from spi by enabling auto mode and compared the result. They look same. Do want some extra tests need to be done for this patch or is it okey? Thanks padma -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
Hi Mark, CS can also be controlled automatically by setting AUTO_N_MANUAL to 1 in CS_CFG. When it is auto CS automatically toggles between packet to packet. NCS_TIME_COUNT in CS_CFG controls the inactive period. The driver by default uses manual mode. But on exynos7 the manual mode is removed. OK, but what's a packet here? Packet is either 1 byte or 4 bytes size depends on width of the SPI channel. I tested the driver with wm5110 codec. Did you try firmware downloads or something else that generates multiple transfers in a message? Normal register writes will use a single transfer so I'd expect them to just work. OK. I don't have provision to test on this board. I will try to test on older boards by disabling manual mode. I tested on exynos5420 peach-pit by enabling auto mode. I used dd command to read 1MB data from spi flash and I compared the result with manual mode. Both are same. I also tested this patch with Javier Martinez Canillas patches for enabling spidev nodes from http://www.spinics.net/lists/linux-samsung-soc/msg39057.html. I read 4MB flashdata from spi by enabling auto mode and compared the result. They look same. Thanks padma -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
Hi Mark, On 11/10/14, Padma Venkat padma@gmail.com wrote: Hi Mark, On 11/7/14, Mark Brown broo...@kernel.org wrote: On Fri, Nov 07, 2014 at 02:01:57PM +0530, Padma Venkat wrote: CS can also be controlled automatically by setting AUTO_N_MANUAL to 1 in CS_CFG. When it is auto CS automatically toggles between packet to packet. NCS_TIME_COUNT in CS_CFG controls the inactive period. The driver by default uses manual mode. But on exynos7 the manual mode is removed. OK, but what's a packet here? Packet is either 1 byte or 4 bytes size depends on width of the SPI channel. I tested the driver with wm5110 codec. Did you try firmware downloads or something else that generates multiple transfers in a message? Normal register writes will use a single transfer so I'd expect them to just work. OK. I don't have provision to test on this board. I will try to test on older boards by disabling manual mode. I tested on exynos5420 peach-pit by enabling auto mode. I used dd command to read 1MB data from spi flash and I compared the result with manual mode. Both are same. Thanks padma -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
Hi Mark, On 11/7/14, Mark Brown broo...@kernel.org wrote: On Fri, Nov 07, 2014 at 02:01:57PM +0530, Padma Venkat wrote: CS can also be controlled automatically by setting AUTO_N_MANUAL to 1 in CS_CFG. When it is auto CS automatically toggles between packet to packet. NCS_TIME_COUNT in CS_CFG controls the inactive period. The driver by default uses manual mode. But on exynos7 the manual mode is removed. OK, but what's a packet here? Packet is either 1 byte or 4 bytes size depends on width of the SPI channel. I tested the driver with wm5110 codec. Did you try firmware downloads or something else that generates multiple transfers in a message? Normal register writes will use a single transfer so I'd expect them to just work. OK. I don't have provision to test on this board. I will try to test on older boards by disabling manual mode. Thanks padma -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
Hi Mark, CCing Kukjin Kim. On 11/6/14, Mark Brown broo...@kernel.org wrote: On Thu, Nov 06, 2014 at 03:21:49PM +0530, Padmavathi Venna wrote: Exynos7 SPI controller supports only the auto Selection of CS toggle mode and Exynos7 SoC includes six SPI controllers. Add support for these changes in Exynos7 SPI controller driver. Could you give a bit more detail on what the auto selection of CS toggle mode is - in the diff it looks like it's not an existing mode. I'm a bit worried that it's not going to function well with devices that send more than one transfer per message. There is a bit AUTO_N_MANUAL(as per manual) in the spi CS_CFG register(as per manual, in the driver it is S3C64XX_SPI_SLAVE_SEL) to control the CS toggle mode either manually or automatically. If CS has to be controlled manually the AUTO_N_MANUAL should be set to 0 which the driver is doing in the s3c64xx_spi_transfer_one function by writing 0 in the S3C64XX_SPI_SLAVE_SEL. When it is handled manually NSSOUT as per the manual(in the driver it is S3C64XX_SPI_SLAVE_SIG_INACT) controls the level of CS which when set deactivates the signal and reset activates. CS can also be controlled automatically by setting AUTO_N_MANUAL to 1 in CS_CFG. When it is auto CS automatically toggles between packet to packet. NCS_TIME_COUNT in CS_CFG controls the inactive period. The driver by default uses manual mode. But on exynos7 the manual mode is removed. I tested the driver with wm5110 codec. Signed-off-by: Padmavathi Venna padm...@samsung.com It's better if your signoff is using the same e-maill address as ok. I will take care of this. Thanks Padma -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
On Fri, Nov 07, 2014 at 02:01:57PM +0530, Padma Venkat wrote: CS can also be controlled automatically by setting AUTO_N_MANUAL to 1 in CS_CFG. When it is auto CS automatically toggles between packet to packet. NCS_TIME_COUNT in CS_CFG controls the inactive period. The driver by default uses manual mode. But on exynos7 the manual mode is removed. OK, but what's a packet here? I tested the driver with wm5110 codec. Did you try firmware downloads or something else that generates multiple transfers in a message? Normal register writes will use a single transfer so I'd expect them to just work. signature.asc Description: Digital signature
[PATCH] spi: s3c64xx: add support for exynos7 SPI controller
Exynos7 SPI controller supports only the auto Selection of CS toggle mode and Exynos7 SoC includes six SPI controllers. Add support for these changes in Exynos7 SPI controller driver. Signed-off-by: Padmavathi Venna padm...@samsung.com --- .../devicetree/bindings/spi/spi-samsung.txt|2 +- drivers/spi/Kconfig|2 +- drivers/spi/spi-s3c64xx.c | 32 --- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/spi/spi-samsung.txt b/Documentation/devicetree/bindings/spi/spi-samsung.txt index 1e8a857..6dbdeb3 100644 --- a/Documentation/devicetree/bindings/spi/spi-samsung.txt +++ b/Documentation/devicetree/bindings/spi/spi-samsung.txt @@ -9,7 +9,7 @@ Required SoC Specific Properties: - samsung,s3c2443-spi: for s3c2443, s3c2416 and s3c2450 platforms - samsung,s3c6410-spi: for s3c6410 platforms - samsung,s5pv210-spi: for s5pv210 and s5pc110 platforms -- samsung,exynos4210-spi: for exynos4 and exynos5 platforms +- samsung,exynos7-spi: for exynos7 platforms - reg: physical base address of the controller and length of memory mapped region. diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 84e7c9e..de2d33d 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -444,7 +444,7 @@ config SPI_S3C24XX_FIQ config SPI_S3C64XX tristate Samsung S3C64XX series type SPI - depends on PLAT_SAMSUNG + depends on (PLAT_SAMSUNG || ARCH_EXYNOS) select S3C64XX_PL080 if ARCH_S3C64XX help SPI driver for Samsung S3C64XX and newer SoCs. diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c index 480133e..59e07cf 100644 --- a/drivers/spi/spi-s3c64xx.c +++ b/drivers/spi/spi-s3c64xx.c @@ -33,8 +33,9 @@ #include linux/platform_data/spi-s3c64xx.h -#define MAX_SPI_PORTS 3 +#define MAX_SPI_PORTS 6 #define S3C64XX_SPI_QUIRK_POLL (1 0) +#define S3C64XX_SPI_QUIRK_CS_AUTO (1 1) /* Registers and bit-fields */ @@ -78,6 +79,7 @@ #define S3C64XX_SPI_SLAVE_AUTO (11) #define S3C64XX_SPI_SLAVE_SIG_INACT(10) +#define S3C64XX_SPI_SLAVE_NSC_CNT_2(24) #define S3C64XX_SPI_INT_TRAILING_EN(16) #define S3C64XX_SPI_INT_RX_OVERRUN_EN (15) @@ -717,7 +719,12 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master, enable_datapath(sdd, spi, xfer, use_dma); /* Start the signals */ - writel(0, sdd-regs + S3C64XX_SPI_SLAVE_SEL); + if (!(sdd-port_conf-quirks S3C64XX_SPI_QUIRK_CS_AUTO)) + writel(0, sdd-regs + S3C64XX_SPI_SLAVE_SEL); + else + writel(readl(sdd-regs + S3C64XX_SPI_SLAVE_SEL) + | S3C64XX_SPI_SLAVE_AUTO | S3C64XX_SPI_SLAVE_NSC_CNT_2, + sdd-regs + S3C64XX_SPI_SLAVE_SEL); spin_unlock_irqrestore(sdd-lock, flags); @@ -866,13 +873,15 @@ static int s3c64xx_spi_setup(struct spi_device *spi) } pm_runtime_put(sdd-pdev-dev); - writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd-regs + S3C64XX_SPI_SLAVE_SEL); + if (!(sdd-port_conf-quirks S3C64XX_SPI_QUIRK_CS_AUTO)) + writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd-regs + S3C64XX_SPI_SLAVE_SEL); return 0; setup_exit: pm_runtime_put(sdd-pdev-dev); /* setup() returns with device de-selected */ - writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd-regs + S3C64XX_SPI_SLAVE_SEL); + if (!(sdd-port_conf-quirks S3C64XX_SPI_QUIRK_CS_AUTO)) + writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd-regs + S3C64XX_SPI_SLAVE_SEL); if (gpio_is_valid(spi-cs_gpio)) gpio_free(spi-cs_gpio); @@ -946,7 +955,8 @@ static void s3c64xx_spi_hwinit(struct s3c64xx_spi_driver_data *sdd, int channel) sdd-cur_speed = 0; - writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd-regs + S3C64XX_SPI_SLAVE_SEL); + if (!(sdd-port_conf-quirks S3C64XX_SPI_QUIRK_CS_AUTO)) + writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd-regs + S3C64XX_SPI_SLAVE_SEL); /* Disable Interrupts - we use Polling if not DMA mode */ writel(0, regs + S3C64XX_SPI_INT_EN); @@ -1341,6 +1351,15 @@ static struct s3c64xx_spi_port_config exynos5440_spi_port_config = { .quirks = S3C64XX_SPI_QUIRK_POLL, }; +static struct s3c64xx_spi_port_config exynos7_spi_port_config = { + .fifo_lvl_mask = { 0x1ff, 0x7F, 0x7F, 0x7F, 0x7F, 0x1ff}, + .rx_lvl_offset = 15, + .tx_st_done = 25, + .high_speed = true, + .clk_from_cmu = true, + .quirks = S3C64XX_SPI_QUIRK_CS_AUTO, +}; + static struct platform_device_id s3c64xx_spi_driver_ids[] = { { .name = s3c2443-spi, @@ -1374,6 +1393,9 @@ static const struct of_device_id s3c64xx_spi_dt_match[] = { { .compatible = samsung,exynos5440-spi,
Re: [PATCH] spi: s3c64xx: add support for exynos7 SPI controller
On Thu, Nov 06, 2014 at 03:21:49PM +0530, Padmavathi Venna wrote: Exynos7 SPI controller supports only the auto Selection of CS toggle mode and Exynos7 SoC includes six SPI controllers. Add support for these changes in Exynos7 SPI controller driver. Could you give a bit more detail on what the auto selection of CS toggle mode is - in the diff it looks like it's not an existing mode. I'm a bit worried that it's not going to function well with devices that send more than one transfer per message. Signed-off-by: Padmavathi Venna padm...@samsung.com It's better if your signoff is using the same e-maill address as signature.asc Description: Digital signature