コード例 #1
0
static int zynq_qspi_probe(struct udevice *bus)
{
    struct zynq_qspi_platdata *plat = dev_get_platdata(bus);
    struct zynq_qspi_priv *priv = dev_get_priv(bus);

    debug("zynq_qspi_probe:  bus:%p, priv:%p \n", bus, priv);

#if defined(CONFIG_MARS_ZX) || defined(CONFIG_MERCURY_ZX)
    zx_set_storage(ZX_QSPI);
#endif

    priv->regs = plat->regs;
    zynq_qspi_check_is_dual_flash(priv);

    if (priv->is_dual == -1) {
        debug("%s: No QSPI device detected based on MIO settings\n",
              __func__);
        return -1;
    }

    /* init the zynq spi hw */
    zynq_qspi_init_hw(priv);

    return 0;
}
コード例 #2
0
ファイル: zynq_qspi.c プロジェクト: develone/u-boot-xlnx
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
		unsigned int max_hz, unsigned int mode)
{
	int is_dual;
	unsigned long lqspi_frequency;
	struct zynq_qspi_slave *qspi;

	debug("%s: bus: %d cs: %d max_hz: %d mode: %d\n",
	      __func__, bus, cs, max_hz, mode);

	if (!spi_cs_is_valid(bus, cs))
		return NULL;

	is_dual = zynq_qspi_check_is_dual_flash();

	if (is_dual == MODE_UNKNOWN) {
		printf("%s: No QSPI device detected based on MIO settings\n",
		       __func__);
		return NULL;
	}

	zynq_qspi_init_hw(is_dual, cs);

	qspi = spi_alloc_slave(struct zynq_qspi_slave, bus, cs);
	if (!qspi) {
		printf("%s: Fail to allocate zynq_qspi_slave\n", __func__);
		return NULL;
	}

	lqspi_frequency = zynq_clk_get_rate(lqspi_clk);
	if (!lqspi_frequency) {
		debug("Defaulting to 200000000 Hz qspi clk");
		qspi->qspi.master.input_clk_hz = 200000000;
	} else {
		qspi->qspi.master.input_clk_hz = lqspi_frequency;
		debug("Qspi clk frequency set to %ld Hz\n", lqspi_frequency);
	}

	qspi->slave.is_dual = is_dual;
	qspi->slave.rd_cmd = READ_CMD_FULL;
	qspi->slave.wr_cmd = PAGE_PROGRAM | QUAD_PAGE_PROGRAM;
	qspi->qspi.master.speed_hz = qspi->qspi.master.input_clk_hz / 2;
	qspi->qspi.max_speed_hz = qspi->qspi.master.speed_hz;
	qspi->qspi.master.is_dual = is_dual;
	qspi->qspi.mode = mode;
	qspi->qspi.chip_select = 0;
	qspi->qspi.bits_per_word = 32;
	zynq_qspi_setup_transfer(&qspi->qspi, NULL);

	return &qspi->slave;
}
コード例 #3
0
ファイル: zynq_qspi.c プロジェクト: youncta-dev/u-boot-xlnx
static int zynq_qspi_probe(struct udevice *bus)
{
	struct zynq_qspi_platdata *plat = dev_get_platdata(bus);
	struct zynq_qspi_priv *priv = dev_get_priv(bus);

	debug("zynq_qspi_probe:  bus:%p, priv:%p \n", bus, priv);

	priv->regs = plat->regs;
	zynq_qspi_check_is_dual_flash(priv);

	if (priv->is_dual == -1) {
		debug("%s: No QSPI device detected based on MIO settings\n",
		      __func__);
		return -1;
	}

	/* init the zynq spi hw */
	zynq_qspi_init_hw(priv);

	return 0;
}