Merge tag 'xilinx-for-v2019.07' of git://git.denx.de/u-boot-microblaze
Xilinx/FPGA changes for v2019.07 fpga: - Add support for external data in FIT - Extend testing for external data case - Inform user about a need to run post config on Zynq arm: - Tune zynq command functions - Fix internal variable setting arm64: - Add support for zc39dr decoding - Disable WDT for zcu100 - Small changes in reset_reason() - Some DT changes (spi) - Tune qspi-mini configuration - Remove useless eeprom setting - Fix two sdhci boot case spi: - Fix tap delay programming clk: - Enable i2c in SPL net: - Fix gem phydev handling - Remove phy detection code from gem driver general: - Correct EXT_DTB usage for MULTI_DTB_FIT configuration
This commit is contained in:
@@ -434,6 +434,8 @@ static ulong zynq_clk_get_rate(struct clk *clk)
|
||||
case lqspi_clk ... pcap_clk:
|
||||
case sdio0_clk ... spi1_clk:
|
||||
return zynq_clk_get_peripheral_rate(priv, id, 0);
|
||||
case i2c0_aper_clk ... i2c1_aper_clk:
|
||||
return zynq_clk_get_cpu_rate(priv, cpu_1x_clk);
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -408,6 +408,8 @@ static int zynq_load(xilinx_desc *desc, const void *buf, size_t bsize,
|
||||
if (bstype != BIT_PARTIAL)
|
||||
zynq_slcr_devcfg_enable();
|
||||
|
||||
puts("INFO:post config was not run, please run manually if needed\n");
|
||||
|
||||
return FPGA_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -421,7 +423,8 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
|
||||
loff_t blocksize, actread;
|
||||
loff_t pos = 0;
|
||||
int fstype;
|
||||
char *interface, *dev_part, *filename;
|
||||
char *interface, *dev_part;
|
||||
const char *filename;
|
||||
|
||||
blocksize = fsinfo->blocksize;
|
||||
interface = fsinfo->interface;
|
||||
|
||||
@@ -261,45 +261,6 @@ static int phywrite(struct zynq_gem_priv *priv, u32 phy_addr,
|
||||
ZYNQ_GEM_PHYMNTNC_OP_W_MASK, &data);
|
||||
}
|
||||
|
||||
static int phy_detection(struct udevice *dev)
|
||||
{
|
||||
int i;
|
||||
u16 phyreg = 0;
|
||||
struct zynq_gem_priv *priv = dev->priv;
|
||||
|
||||
if (priv->phyaddr != -1) {
|
||||
phyread(priv, priv->phyaddr, PHY_DETECT_REG, &phyreg);
|
||||
if ((phyreg != 0xFFFF) &&
|
||||
((phyreg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {
|
||||
/* Found a valid PHY address */
|
||||
debug("Default phy address %d is valid\n",
|
||||
priv->phyaddr);
|
||||
return 0;
|
||||
} else {
|
||||
debug("PHY address is not setup correctly %d\n",
|
||||
priv->phyaddr);
|
||||
priv->phyaddr = -1;
|
||||
}
|
||||
}
|
||||
|
||||
debug("detecting phy address\n");
|
||||
if (priv->phyaddr == -1) {
|
||||
/* detect the PHY address */
|
||||
for (i = 31; i >= 0; i--) {
|
||||
phyread(priv, i, PHY_DETECT_REG, &phyreg);
|
||||
if ((phyreg != 0xFFFF) &&
|
||||
((phyreg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {
|
||||
/* Found a valid PHY address */
|
||||
priv->phyaddr = i;
|
||||
debug("Found valid phy address, %d\n", i);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("PHY is not detected\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int zynq_gem_setup_mac(struct udevice *dev)
|
||||
{
|
||||
u32 i, macaddrlow, macaddrhigh;
|
||||
@@ -345,28 +306,20 @@ static int zynq_phy_init(struct udevice *dev)
|
||||
/* Enable only MDIO bus */
|
||||
writel(ZYNQ_GEM_NWCTRL_MDEN_MASK, ®s->nwctrl);
|
||||
|
||||
if ((priv->interface != PHY_INTERFACE_MODE_SGMII) &&
|
||||
(priv->interface != PHY_INTERFACE_MODE_GMII)) {
|
||||
ret = phy_detection(dev);
|
||||
if (ret) {
|
||||
printf("GEM PHY init failed\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
priv->phydev = phy_connect(priv->bus, priv->phyaddr, dev,
|
||||
priv->interface);
|
||||
if (!priv->phydev)
|
||||
return -ENODEV;
|
||||
|
||||
priv->phydev->supported &= supported | ADVERTISED_Pause |
|
||||
ADVERTISED_Asym_Pause;
|
||||
if (priv->max_speed) {
|
||||
ret = phy_set_supported(priv->phydev, priv->max_speed);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
priv->phydev->supported &= supported | ADVERTISED_Pause |
|
||||
ADVERTISED_Asym_Pause;
|
||||
|
||||
priv->phydev->advertising = priv->phydev->supported;
|
||||
priv->phydev->node = priv->phy_of_node;
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ void zynqmp_qspi_set_tapdelay(struct udevice *bus, u32 baudrateval)
|
||||
zynqmp_mmio_read(IOU_TAPDLY_BYPASS_OFST, &tapdlybypass);
|
||||
tapdlybypass |= (TAP_DLY_BYPASS_LQSPI_RX_VALUE <<
|
||||
TAP_DLY_BYPASS_LQSPI_RX_SHIFT);
|
||||
} else if (reqhz < GQSPI_FREQ_100MHZ) {
|
||||
} else if (reqhz <= GQSPI_FREQ_100MHZ) {
|
||||
zynqmp_mmio_read(IOU_TAPDLY_BYPASS_OFST, &tapdlybypass);
|
||||
tapdlybypass |= (TAP_DLY_BYPASS_LQSPI_RX_VALUE <<
|
||||
TAP_DLY_BYPASS_LQSPI_RX_SHIFT);
|
||||
@@ -277,7 +277,7 @@ void zynqmp_qspi_set_tapdelay(struct udevice *bus, u32 baudrateval)
|
||||
datadlyadj |= ((GQSPI_USE_DATA_DLY << GQSPI_USE_DATA_DLY_SHIFT)
|
||||
| (GQSPI_DATA_DLY_ADJ_VALUE <<
|
||||
GQSPI_DATA_DLY_ADJ_SHIFT));
|
||||
} else if (reqhz < GQSPI_FREQ_150MHZ) {
|
||||
} else if (reqhz <= GQSPI_FREQ_150MHZ) {
|
||||
lpbkdlyadj = readl(®s->lpbkdly);
|
||||
lpbkdlyadj |= ((GQSPI_LPBK_DLY_ADJ_LPBK_MASK) |
|
||||
GQSPI_LPBK_DLY_ADJ_DLY_0);
|
||||
|
||||
Reference in New Issue
Block a user