示例#1
0
int sata_initialize(void)
{
	int err, i;

	/* 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);

	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;
}
示例#2
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);
}
示例#3
0
static int sata_imx_remove(struct udevice *dev)
{
	cm_fx6_sata_power(0);
	mdelay(250);

	return 0;
}
示例#4
0
static int sata_imx_probe(struct udevice *dev)
{
	int i, err;

	/* Make sure this gpio has logical 0 value */
	gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 0);
	udelay(100);
	cm_fx6_sata_power(1);

	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 = dwc_ahsata_probe(dev);
		if (!err)
			break;

		/* There is no device on the SATA port */
		if (sata_dm_port_status(0, 0) == 0)
			break;

		/* There's a device, but link not established. Retry */
		device_remove(dev, DM_REMOVE_NORMAL);
	}

	return 0;
}
示例#5
0
文件: cm_fx6.c 项目: 01hyang/u-boot
int sata_stop(void)
{
	__sata_stop();
	cm_fx6_sata_power(0);
	mdelay(250);

	return 0;
}