[U-Boot] [PATCH V2 18/18] arm: mx6: cm_fx6: add sata support

Igor Grinberg grinberg at compulab.co.il
Thu Aug 14 09:10:32 CEST 2014


Hi Nikita,

On 08/10/14 20:13, Nikita Kiryanov wrote:
> Add support for SATA.
> 
> Cc: Igor Grinberg <grinberg at compulab.co.il>
> Cc: Stefano Babic <sbabic at denx.de>
> Cc: Tom Rini <trini at ti.com>
> Signed-off-by: Nikita Kiryanov <nikita at compulab.co.il>
> ---
> Changes in V2:
> 	- No changes
> 
>  board/compulab/cm_fx6/cm_fx6.c | 90 ++++++++++++++++++++++++++++++++++++++++++
>  board/compulab/cm_fx6/common.h | 13 ++++++
>  include/configs/cm_fx6.h       | 36 ++++++++++++++++-
>  3 files changed, 138 insertions(+), 1 deletion(-)
> 
> diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c
> index 76d7430..8a48f9d 100644
> --- a/board/compulab/cm_fx6/cm_fx6.c
> +++ b/board/compulab/cm_fx6/cm_fx6.c

[...]

> @@ -23,6 +25,94 @@
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> +#ifdef CONFIG_DWC_AHSATA
> +static int cm_fx6_issd_gpios[] = {
> +	/* The order of the GPIOs in the array is important! */
> +	CM_FX6_SATA_PHY_SLP,
> +	CM_FX6_SATA_NRSTDLY,
> +	CM_FX6_SATA_PWREN,
> +	CM_FX6_SATA_NSTANDBY1,
> +	CM_FX6_SATA_NSTANDBY2,
> +	CM_FX6_SATA_LDO_EN,
> +};
> +
> +static void cm_fx6_sata_power(int on)

Will it be/look better to use bool here?

> +{
> +	int i;
> +
> +	if (!on) { /* tell the iSSD that the power will be removed */
> +		gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 1);
> +		mdelay(10);
> +	}
> +
> +	for (i = 0; i < ARRAY_SIZE(cm_fx6_issd_gpios); i++) {
> +		gpio_direction_output(cm_fx6_issd_gpios[i], on);
> +		udelay(100);
> +	}
> +
> +	if (!on) /* for compatibility lower the power loss interrupt */
> +		gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 0);
> +}

[...]

> +static void cm_fx6_setup_issd(void)
> +{
> +	SETUP_IOMUX_PADS(sata_pads);
> +	/* Make sure this gpio has logical 0 value */
> +	gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 0);
> +	udelay(100);
> +
> +	cm_fx6_sata_power(0);
> +	mdelay(250);
> +	cm_fx6_sata_power(1);
> +}
> +
> +#define CM_FX6_SATA_INIT_RETRIES	10
> +int sata_initialize(void)
> +{
> +	int err, i;
> +
> +	cm_fx6_setup_issd();
> +	for (i = 0; i < CM_FX6_SATA_INIT_RETRIES; i++) {
> +		err = setup_sata();
> +		if (err) {
> +			printf("SATA setup failed: %d\n", err);
> +			return err;
> +		}
> +
> +		udelay(100);
> +
> +		err = __sata_initialize();
> +		if (!err)
> +			break;
> +
> +		/* There is no device on the SATA port */
> +		if (sata_port_status(0, 0) == 0)
> +			break;
> +
> +		/* There's a device, but link not established. Retry */
> +	}
> +
> +	return err;
> +}
> +#else
> +static void cm_fx6_setup_issd(void) {}

Why do you need this one?
It is only called from sata_initialize(), which is inside
#ifdef CONFIG_DWC_AHSATA
and is not available otherwise.

> +#endif
> +
>  #ifdef CONFIG_SYS_I2C_MXC
>  #define I2C_PAD_CTRL	(PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
>  			PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \

[...]

> diff --git a/include/configs/cm_fx6.h b/include/configs/cm_fx6.h
> index adfd55e..88925cd 100644
> --- a/include/configs/cm_fx6.h
> +++ b/include/configs/cm_fx6.h
> @@ -132,6 +132,19 @@
>  	"mmcboot=echo Booting from mmc ...; " \
>  		"run mmcargs; " \
>  		"run doboot\0" \
> +	"satadev=0\0" \
> +	"sataroot=/dev/sda2 rw rootwait\0" \
> +	"sataargs=setenv bootargs console=${console} " \
> +		"root=${sataroot} " \
> +		"${video}\0" \
> +	"loadsatabootscript=fatload sata ${satadev} ${loadaddr} ${bootscr}\0" \
> +	"satabootscript=echo Running bootscript from sata ...; " \
> +		"source ${loadaddr}\0" \
> +	"sataloadkernel=fatload sata ${satadev} ${loadaddr} ${kernel}\0" \
> +	"sataloadfdt=fatload sata ${satadev} ${fdtaddr} ${fdtfile}\0" \

Can we switch to use load instead of explicit fatload?

[...]


-- 
Regards,
Igor.


More information about the U-Boot mailing list