[U-Boot] [PATCH 1/4] mx5: Align SPI CS naming with i.MX53 reference manual

From: Fabio Estevam fabio.estevam@freescale.com
Align SPI chip select naming with i.MX53 reference manual.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- arch/arm/include/asm/arch-mx5/mx5x_pins.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/arch-mx5/mx5x_pins.h b/arch/arm/include/asm/arch-mx5/mx5x_pins.h index 122fbee..3457f6a 100644 --- a/arch/arm/include/asm/arch-mx5/mx5x_pins.h +++ b/arch/arm/include/asm/arch-mx5/mx5x_pins.h @@ -802,22 +802,22 @@ typedef enum iomux_input_select { MX53_CSPI_IPP_CSPI_CLK_IN_SELECT_INPUT, MX53_CSPI_IPP_IND_MISO_SELECT_INPUT, MX53_CSPI_IPP_IND_MOSI_SELECT_INPUT, + MX53_CSPI_IPP_IND_SS_B_0_SELECT_INPUT, MX53_CSPI_IPP_IND_SS_B_1_SELECT_INPUT, MX53_CSPI_IPP_IND_SS_B_2_SELECT_INPUT, MX53_CSPI_IPP_IND_SS_B_3_SELECT_INPUT, - MX53_CSPI_IPP_IND_SS_B_4_SELECT_INPUT, MX53_ECSPI1_IPP_CSPI_CLK_IN_SELECT_INPUT, MX53_ECSPI1_IPP_IND_MISO_SELECT_INPUT, MX53_ECSPI1_IPP_IND_MOSI_SELECT_INPUT, + MX53_ECSPI1_IPP_IND_SS_B_0_SELECT_INPUT, MX53_ECSPI1_IPP_IND_SS_B_1_SELECT_INPUT, MX53_ECSPI1_IPP_IND_SS_B_2_SELECT_INPUT, MX53_ECSPI1_IPP_IND_SS_B_3_SELECT_INPUT, - MX53_ECSPI1_IPP_IND_SS_B_4_SELECT_INPUT, MX53_ECSPI2_IPP_CSPI_CLK_IN_SELECT_INPUT, MX53_ECSPI2_IPP_IND_MISO_SELECT_INPUT, MX53_ECSPI2_IPP_IND_MOSI_SELECT_INPUT, + MX53_ECSPI2_IPP_IND_SS_B_0_SELECT_INPUT, MX53_ECSPI2_IPP_IND_SS_B_1_SELECT_INPUT, - MX53_ECSPI2_IPP_IND_SS_B_2_SELECT_INPUT, MX53_ESAI1_IPP_IND_FSR_SELECT_INPUT, MX53_ESAI1_IPP_IND_FST_SELECT_INPUT, MX53_ESAI1_IPP_IND_HCKR_SELECT_INPUT,

From: Fabio Estevam fabio.estevam@freescale.com
Print CSPI clock in 'clock' command.
Signed-off-by: Fabio Estevam festevam@gmail.com --- arch/arm/cpu/armv7/mx5/clock.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/cpu/armv7/mx5/clock.c b/arch/arm/cpu/armv7/mx5/clock.c index 1c9223f..76c2c52 100644 --- a/arch/arm/cpu/armv7/mx5/clock.c +++ b/arch/arm/cpu/armv7/mx5/clock.c @@ -928,7 +928,9 @@ int do_mx5_showclocks(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) printf("IPG %8d kHz\n", mxc_get_clock(MXC_IPG_CLK) / 1000); printf("IPG PERCLK %8d kHz\n", mxc_get_clock(MXC_IPG_PERCLK) / 1000); printf("DDR %8d kHz\n", mxc_get_clock(MXC_DDR_CLK) / 1000); - +#ifdef CONFIG_MXC_SPI + printf("CSPI %8d kHz\n", mxc_get_clock(MXC_CSPI_CLK) / 1000); +#endif return 0; }

Am 15.11.2012 22:23, schrieb Fabio Estevam:
From: Fabio Estevam fabio.estevam@freescale.com
Print CSPI clock in 'clock' command.
Signed-off-by: Fabio Estevam festevam@gmail.com
arch/arm/cpu/armv7/mx5/clock.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/cpu/armv7/mx5/clock.c b/arch/arm/cpu/armv7/mx5/clock.c index 1c9223f..76c2c52 100644 --- a/arch/arm/cpu/armv7/mx5/clock.c +++ b/arch/arm/cpu/armv7/mx5/clock.c @@ -928,7 +928,9 @@ int do_mx5_showclocks(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) printf("IPG %8d kHz\n", mxc_get_clock(MXC_IPG_CLK) / 1000); printf("IPG PERCLK %8d kHz\n", mxc_get_clock(MXC_IPG_PERCLK) / 1000); printf("DDR %8d kHz\n", mxc_get_clock(MXC_DDR_CLK) / 1000);
+#ifdef CONFIG_MXC_SPI
- printf("CSPI %8d kHz\n", mxc_get_clock(MXC_CSPI_CLK) / 1000);
+#endif
I wondered if we want something similar for i.MX6, too. And found that we have this on i.MX6, already. But without #ifdef.
http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=arch/arm/cpu/arm...
Do we want to add the #ifdef for i.MX6, too? Or would it be nicer to drop the #ifdef in this patch to make i.MX6 and i.MX5 equal?
Best regards
Dirk

Hi Dirk,
On Fri, Nov 16, 2012 at 4:35 AM, Dirk Behme dirk.behme@gmail.com wrote:
I wondered if we want something similar for i.MX6, too. And found that we have this on i.MX6, already. But without #ifdef.
http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=arch/arm/cpu/arm...
Do we want to add the #ifdef for i.MX6, too? Or would it be nicer to drop the #ifdef in this patch to make i.MX6 and i.MX5 equal?
The reason I added the ifdef was to avoid showing the cspi clock on a board that does not use cspi. This would help not 'polluting' the clock command output.
Regards,
Fabio Estevam

On 16/11/2012 12:15, Fabio Estevam wrote:
Hi Dirk,
On Fri, Nov 16, 2012 at 4:35 AM, Dirk Behme dirk.behme@gmail.com wrote:
I wondered if we want something similar for i.MX6, too. And found that we have this on i.MX6, already. But without #ifdef.
http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=arch/arm/cpu/arm...
Do we want to add the #ifdef for i.MX6, too? Or would it be nicer to drop the #ifdef in this patch to make i.MX6 and i.MX5 equal?
The reason I added the ifdef was to avoid showing the cspi clock on a board that does not use cspi. This would help not 'polluting' the clock command output.
Agree. Boards that do not support SPI can have a completely wrong value,.
Regards, Stefano Babic

From: Fabio Estevam fabio.estevam@freescale.com
In decode_cs() function the polarity of the chip select must be taken into account.
Also, for the case of low active chip select, the CS was activated too early.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- drivers/spi/mxc_spi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c index 13bebe8..4bed4f0 100644 --- a/drivers/spi/mxc_spi.c +++ b/drivers/spi/mxc_spi.c @@ -387,7 +387,7 @@ static int decode_cs(struct mxc_spi_slave *mxcs, unsigned int cs) if (cs > 3) { mxcs->gpio = cs >> 8; cs &= 3; - ret = gpio_direction_output(mxcs->gpio, 0); + ret = gpio_direction_output(mxcs->gpio, !(mxcs->ss_pol)); if (ret) { printf("mxc_spi: cannot setup gpio %d\n", mxcs->gpio); return -EINVAL; @@ -414,6 +414,8 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, return NULL; }
+ mxcs->ss_pol = (mode & SPI_CS_HIGH) ? 1 : 0; + ret = decode_cs(mxcs, cs); if (ret < 0) { free(mxcs); @@ -425,7 +427,6 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, mxcs->slave.bus = bus; mxcs->slave.cs = cs; mxcs->base = spi_bases[bus]; - mxcs->ss_pol = (mode & SPI_CS_HIGH) ? 1 : 0;
ret = spi_cfg_mxc(mxcs, cs, max_hz, mode); if (ret) {

From: Fabio Estevam fabio.estevam@freescale.com
Measuring the spi clock line on a scope shows a 'glitch' during the reset of the spi.
Fix this by toggling only the MXC_CSPICTRL_EN bit, so that the clock line becomes always stable.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- drivers/spi/mxc_spi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c index 4bed4f0..102fca5 100644 --- a/drivers/spi/mxc_spi.c +++ b/drivers/spi/mxc_spi.c @@ -140,8 +140,8 @@ static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs, reg_ctrl = reg_read(®s->ctrl);
/* Reset spi */ - reg_write(®s->ctrl, 0); - reg_write(®s->ctrl, (reg_ctrl | 0x1)); + reg_write(®s->ctrl, (reg_ctrl & ~MXC_CSPICTRL_EN)); + reg_write(®s->ctrl, (reg_ctrl | MXC_CSPICTRL_EN));
/* * The following computation is taken directly from Freescale's code.

On 15/11/2012 22:23, Fabio Estevam wrote:
From: Fabio Estevam fabio.estevam@freescale.com
Measuring the spi clock line on a scope shows a 'glitch' during the reset of the spi.
Fix this by toggling only the MXC_CSPICTRL_EN bit, so that the clock line becomes always stable.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
drivers/spi/mxc_spi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c index 4bed4f0..102fca5 100644 --- a/drivers/spi/mxc_spi.c +++ b/drivers/spi/mxc_spi.c @@ -140,8 +140,8 @@ static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs, reg_ctrl = reg_read(®s->ctrl);
/* Reset spi */
- reg_write(®s->ctrl, 0);
- reg_write(®s->ctrl, (reg_ctrl | 0x1));
- reg_write(®s->ctrl, (reg_ctrl & ~MXC_CSPICTRL_EN));
- reg_write(®s->ctrl, (reg_ctrl | MXC_CSPICTRL_EN));
Right - the enabled was set after clearing the register, but before setting it.
Acked-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic

On 15/11/2012 22:23, Fabio Estevam wrote:
From: Fabio Estevam fabio.estevam@freescale.com
Align SPI chip select naming with i.MX53 reference manual.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
Applied (whole series) to u-boot-imx, thanks.
Best regards, Stefano Babic
participants (3)
-
Dirk Behme
-
Fabio Estevam
-
Stefano Babic