obj-$(CONFIG_NAND_OMAP_ELM) += omap_elm.o
obj-$(CONFIG_NAND_PLAT) += nand_plat.o
obj-$(CONFIG_NAND_DOCG4) += docg4.o
+obj-$(CONFIG_NAND_ZYNQ) += zynq_nand.o
+ obj-$(CONFIG_NAND_ZYNQMP) += arasan_nfc.o
else # minimal SPL drivers
}
/* Not require to look for fastest only two write cmds yet */
- if (params->flags & WR_QPP && flash->spi->op_mode_tx & SPI_OPM_TX_QPP)
- flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
- else
+ if ((params->flags & WR_QPP) &&
+ (flash->spi->op_mode_tx & SPI_OPM_TX_QPP) &&
+ (flash->spi->dio != SF_DUALIO_FLASH)) {
+ if ((idcode[0] == SPI_FLASH_CFI_MFR_SPANSION) &&
+ (idcode[5] == SPI_FLASH_SPANSION_S25FS_FMLY))
+ flash->write_cmd = CMD_PAGE_PROGRAM;
+ else
+ flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
+ } else {
/* Go for default supported write cmd */
flash->write_cmd = CMD_PAGE_PROGRAM;
+ }
+
+ /* Set the quad enable bit - only for quad commands */
+ if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) ||
+ (flash->read_cmd == CMD_READ_QUAD_IO_FAST) ||
+ (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) {
+ if (spi_flash_set_qeb(flash, idcode[0])) {
+ debug("SF: Fail to set QEB for %02x\n", idcode[0]);
+ return 0;
+ }
+#ifdef CONFIG_SF_DUAL_FLASH
+ if (flash->dual_flash & SF_DUAL_STACKED_FLASH) {
+ flash->spi->flags |= SPI_XFER_U_PAGE;
+ if (spi_flash_set_qeb(flash, idcode[0])) {
+ debug("SF: Fail to set QEB Upper Flash %02x\n",
+ idcode[0]);
+ return 0;
+ }
+ flash->spi->flags &= ~SPI_XFER_U_PAGE;
+ }
+#endif
+ }
+ /* Set the quad enable bit - only for quad commands */
+ if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) ||
+ (flash->read_cmd == CMD_READ_QUAD_IO_FAST) ||
+ (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) {
+ if (spi_flash_set_qeb(flash, idcode[0])) {
+ debug("SF: Fail to set QEB for %02x\n", idcode[0]);
+ return 0;
+ }
+ #ifdef CONFIG_SF_DUAL_FLASH
+ if (flash->dual_flash & SF_DUAL_STACKED_FLASH) {
+ flash->spi->flags |= SPI_XFER_U_PAGE;
+ if (spi_flash_set_qeb(flash, idcode[0])) {
+ debug("SF: Fail to set QEB Upper Flash %02x\n",
+ idcode[0]);
+ return 0;
+ }
+ flash->spi->flags &= ~SPI_XFER_U_PAGE;
+ }
+ #endif
+ }
+
/* Read dummy_byte: dummy byte is determined based on the
* dummy cycles of a particular command.
* Fast commands - dummy_byte = dummy_cycles/8
*/
int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
{
- u8 idcode[5];
+ u8 idcode[6];
+ #ifdef CONFIG_SPI_GENERIC
+ u8 idcode_up[5];
+ u8 i;
+ #endif
int ret;
/* Setup spi_slave */
priv->init++;
}
+ #ifdef CONFIG_TARGET_XILINX_ZYNQMP
+ if (!priv->init) {
+ #endif
phy_detection(dev);
+#ifdef CONFIG_PHYLIB
/* interface - look at tsec */
phydev = phy_connect(priv->bus, priv->phyaddr, dev,
PHY_INTERFACE_MODE_MII);
if (!priv->emio)
zynq_slcr_gem_clk_setup(dev->iobase !=
ZYNQ_GEM_BASEADDR0, clk_rate);
+ #endif
+#else
+ /* PHY Setup */
+ phywrite(dev, priv->phyaddr, 22, 2); /* page 2 */
+
+ /* rx clock transition when data stable */
+ phywrite(dev, priv->phyaddr, 21, 0x3030);
+
+ phywrite(dev, priv->phyaddr, 22, 0); /* page 0 */
+
+ u16 tmp;
+
+ /* link speed advertisement for autonegotiation */
+ phyread(dev, priv->phyaddr, 4, &tmp);
+ tmp |= 0xd80; /* enable 100Mbps */
+ tmp &= ~0x60; /* disable 10 Mbps */
+ phywrite(dev, priv->phyaddr, 4, tmp);
+
+ /* *disable* gigabit advertisement */
+ phyread(dev, priv->phyaddr, 9, &tmp);
+ tmp &= ~0x0300;
+ phywrite(dev, priv->phyaddr, 9, tmp);
+
+ /* enable autonegotiation, set 100Mbps, full-duplex, restart aneg */
+ phyread(dev, priv->phyaddr, 0, &tmp);
+ phywrite(dev, priv->phyaddr, 0, 0x3300 | (tmp & 0x1F));
+
+ if (phy_rst(dev))
+ return -1;
+
+ puts("\nWaiting for PHY to complete autonegotiation.");
+ do {
+ phyread(dev, priv->phyaddr, 1, &tmp);
+ } while (tmp & (1 << 5));
+
+ puts("\nPHY claims autonegotiation complete...\n");
+
+ puts("GEM link speed is 100Mbps\n");
+ writel(ZYNQ_GEM_NWCFG_INIT | ZYNQ_GEM_NWCFG_SPEED100, ®s->nwcfg);
+#endif
+
setbits_le32(®s->nwctrl, ZYNQ_GEM_NWCTRL_RXEN_MASK |
ZYNQ_GEM_NWCTRL_TXEN_MASK);
obj-$(CONFIG_TI_QSPI) += ti_qspi.o
obj-$(CONFIG_XILINX_SPI) += xilinx_spi.o
obj-$(CONFIG_ZYNQ_SPI) += zynq_spi.o
+obj-$(CONFIG_ZYNQ_QSPI) += zynq_qspi.o
+ obj-$(CONFIG_ZYNQMP_QSPI) += zynqmp_qspi.o
obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o