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