Esempio n. 1
0
static void zynqmp_qspi_check_is_dual_flash(struct zynqmp_qspi_priv *priv)
{
	int is_dual = -1;
	int lower_mio = 0, upper_mio = 0, upper_mio_cs1 = 0;

	lower_mio = zynq_slcr_get_mio_pin_status("qspi0");
	if (lower_mio == ZYNQMP_QSPI_MIO_NUM_QSPI0)
		priv->is_dual = SF_SINGLE_FLASH;

	upper_mio_cs1 = zynq_slcr_get_mio_pin_status("qspi1_cs");
	if ((lower_mio == ZYNQMP_QSPI_MIO_NUM_QSPI0) &&
	    (upper_mio_cs1 == ZYNQMP_QSPI_MIO_NUM_QSPI1_CS))
		priv->is_dual = SF_DUAL_STACKED_FLASH;

	upper_mio = zynq_slcr_get_mio_pin_status("qspi1");
	if ((lower_mio == ZYNQMP_QSPI_MIO_NUM_QSPI0) &&
	    (upper_mio_cs1 == ZYNQMP_QSPI_MIO_NUM_QSPI1_CS) &&
	    (upper_mio == ZYNQMP_QSPI_MIO_NUM_QSPI1))
		priv->is_dual = SF_DUAL_PARALLEL_FLASH;
}
Esempio n. 2
0
/*
 * zynq_qspi_check_is_dual_flash - checking for dual or single qspi
 *
 * This function will check the type of the flash whether it supports
 * single or dual qspi based on the MIO configuration done by FSBL.
 *
 * User needs to correctly configure the MIO's based on the
 * number of qspi flashes present on the board.
 *
 * function will return -1, if there is no MIO configuration for
 * qspi flash.
 */
static int zynq_qspi_check_is_dual_flash(void)
{
	int is_dual = MODE_UNKNOWN;
	int lower_mio = 0, upper_mio = 0, upper_mio_cs1 = 0;

	lower_mio = zynq_slcr_get_mio_pin_status("qspi0");
	if (lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0)
		is_dual = MODE_SINGLE;

	upper_mio_cs1 = zynq_slcr_get_mio_pin_status("qspi1_cs");
	if ((lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0) &&
	    (upper_mio_cs1 == ZYNQ_QSPI_MIO_NUM_QSPI1_CS))
		is_dual = MODE_DUAL_STACKED;

	upper_mio = zynq_slcr_get_mio_pin_status("qspi1");
	if ((lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0) &&
	    (upper_mio_cs1 == ZYNQ_QSPI_MIO_NUM_QSPI1_CS) &&
	    (upper_mio == ZYNQ_QSPI_MIO_NUM_QSPI1))
		is_dual = MODE_DUAL_PARALLEL;

	return is_dual;
}
Esempio n. 3
0
/*
 * zynq_qspi_check_is_dual_flash - checking for dual or single qspi
 *
 * This function will check the type of the flash whether it supports
 * single or dual qspi based on the MIO configuration done by FSBL.
 *
 * User needs to correctly configure the MIO's based on the
 * number of qspi flashes present on the board.
 *
 * function will return -1, if there is no MIO configuration for
 * qspi flash.
 */
static void zynq_qspi_check_is_dual_flash(struct zynq_qspi_priv *priv)
{
	int lower_mio = 0, upper_mio = 0, upper_mio_cs1 = 0;

	priv->is_dual = -1;
	priv->is_dio = 0;
	lower_mio = zynq_slcr_get_mio_pin_status("qspi0");
	if (lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0) {
		priv->is_dual = SF_SINGLE_FLASH;
	} else {
		lower_mio = zynq_slcr_get_mio_pin_status("qspi0_dio");
		if (lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0_DIO) {
			debug("QSPI in Single 2-bit\n");
			priv->is_dio = SF_DUALIO_FLASH;
			priv->is_dual = SF_SINGLE_FLASH;
		}
	}

	if (priv->is_dio != SF_DUALIO_FLASH) {
		upper_mio_cs1 = zynq_slcr_get_mio_pin_status("qspi1_cs");
		if ((lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0) &&
		    (upper_mio_cs1 == ZYNQ_QSPI_MIO_NUM_QSPI1_CS))
			priv->is_dual = SF_DUAL_STACKED_FLASH;

		upper_mio = zynq_slcr_get_mio_pin_status("qspi1");
		if ((lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0) &&
		    (upper_mio_cs1 == ZYNQ_QSPI_MIO_NUM_QSPI1_CS) &&
		    (upper_mio == ZYNQ_QSPI_MIO_NUM_QSPI1))
			priv->is_dual = SF_DUAL_PARALLEL_FLASH;
	} else {
		upper_mio_cs1 = zynq_slcr_get_mio_pin_status("qspi1_cs_dio");
		if ((lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0_DIO) &&
		    (upper_mio_cs1 == ZYNQ_QSPI_MIO_NUM_QSPI1_CS_DIO)) {
			debug("QSPI in DualStacked 2-bit\n");
			priv->is_dual = SF_DUAL_STACKED_FLASH;
		}
		upper_mio = zynq_slcr_get_mio_pin_status("qspi1_dio");
		if ((lower_mio == ZYNQ_QSPI_MIO_NUM_QSPI0_DIO) &&
		    (upper_mio_cs1 == ZYNQ_QSPI_MIO_NUM_QSPI1_CS_DIO) &&
		    (upper_mio == ZYNQ_QSPI_MIO_NUM_QSPI1_DIO)) {
			debug("QSPI in DualParallel 2-bit\n");
			priv->is_dual = SF_DUAL_PARALLEL_FLASH;
		}
	}
}