Merge branch 'stmmac-fixes'
Giuseppe Cavallaro says: ==================== Spare stmmac fixes These are some fixes for the stmmac d.d. tested on STi platforms. They are for some part of the PM, STi glue and rx path when test Jumbo. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6e0f0331a3
3 changed files with 28 additions and 22 deletions
|
@ -299,16 +299,17 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac,
|
|||
if (IS_PHY_IF_MODE_GBIT(dwmac->interface)) {
|
||||
const char *rs;
|
||||
|
||||
dwmac->tx_retime_src = TX_RETIME_SRC_CLKGEN;
|
||||
|
||||
err = of_property_read_string(np, "st,tx-retime-src", &rs);
|
||||
if (err < 0) {
|
||||
dev_warn(dev, "Use internal clock source\n");
|
||||
dwmac->tx_retime_src = TX_RETIME_SRC_CLKGEN;
|
||||
} else if (!strcasecmp(rs, "clk_125")) {
|
||||
dwmac->tx_retime_src = TX_RETIME_SRC_CLK_125;
|
||||
} else if (!strcasecmp(rs, "txclk")) {
|
||||
dwmac->tx_retime_src = TX_RETIME_SRC_TXCLK;
|
||||
} else {
|
||||
if (!strcasecmp(rs, "clk_125"))
|
||||
dwmac->tx_retime_src = TX_RETIME_SRC_CLK_125;
|
||||
else if (!strcasecmp(rs, "txclk"))
|
||||
dwmac->tx_retime_src = TX_RETIME_SRC_TXCLK;
|
||||
}
|
||||
|
||||
dwmac->speed = SPEED_1000;
|
||||
}
|
||||
|
||||
|
|
|
@ -185,7 +185,7 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv)
|
|||
priv->clk_csr = STMMAC_CSR_100_150M;
|
||||
else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M))
|
||||
priv->clk_csr = STMMAC_CSR_150_250M;
|
||||
else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))
|
||||
else if ((clk_rate >= CSR_F_250M) && (clk_rate <= CSR_F_300M))
|
||||
priv->clk_csr = STMMAC_CSR_250_300M;
|
||||
}
|
||||
}
|
||||
|
@ -2232,6 +2232,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
|
|||
|
||||
frame_len = priv->hw->desc->get_rx_frame_len(p, coe);
|
||||
|
||||
/* check if frame_len fits the preallocated memory */
|
||||
if (frame_len > priv->dma_buf_sz) {
|
||||
priv->dev->stats.rx_length_errors++;
|
||||
break;
|
||||
}
|
||||
|
||||
/* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
|
||||
* Type frames (LLC/LLC-SNAP)
|
||||
*/
|
||||
|
@ -3102,6 +3108,7 @@ int stmmac_resume(struct net_device *ndev)
|
|||
init_dma_desc_rings(ndev, GFP_ATOMIC);
|
||||
stmmac_hw_setup(ndev, false);
|
||||
stmmac_init_tx_coalesce(priv);
|
||||
stmmac_set_rx_mode(ndev);
|
||||
|
||||
napi_enable(&priv->napi);
|
||||
|
||||
|
|
|
@ -138,7 +138,6 @@ int stmmac_mdio_reset(struct mii_bus *bus)
|
|||
|
||||
#ifdef CONFIG_OF
|
||||
if (priv->device->of_node) {
|
||||
int reset_gpio, active_low;
|
||||
|
||||
if (data->reset_gpio < 0) {
|
||||
struct device_node *np = priv->device->of_node;
|
||||
|
@ -154,24 +153,23 @@ int stmmac_mdio_reset(struct mii_bus *bus)
|
|||
"snps,reset-active-low");
|
||||
of_property_read_u32_array(np,
|
||||
"snps,reset-delays-us", data->delays, 3);
|
||||
|
||||
if (gpio_request(data->reset_gpio, "mdio-reset"))
|
||||
return 0;
|
||||
}
|
||||
|
||||
reset_gpio = data->reset_gpio;
|
||||
active_low = data->active_low;
|
||||
gpio_direction_output(data->reset_gpio,
|
||||
data->active_low ? 1 : 0);
|
||||
if (data->delays[0])
|
||||
msleep(DIV_ROUND_UP(data->delays[0], 1000));
|
||||
|
||||
if (!gpio_request(reset_gpio, "mdio-reset")) {
|
||||
gpio_direction_output(reset_gpio, active_low ? 1 : 0);
|
||||
if (data->delays[0])
|
||||
msleep(DIV_ROUND_UP(data->delays[0], 1000));
|
||||
gpio_set_value(data->reset_gpio, data->active_low ? 0 : 1);
|
||||
if (data->delays[1])
|
||||
msleep(DIV_ROUND_UP(data->delays[1], 1000));
|
||||
|
||||
gpio_set_value(reset_gpio, active_low ? 0 : 1);
|
||||
if (data->delays[1])
|
||||
msleep(DIV_ROUND_UP(data->delays[1], 1000));
|
||||
|
||||
gpio_set_value(reset_gpio, active_low ? 1 : 0);
|
||||
if (data->delays[2])
|
||||
msleep(DIV_ROUND_UP(data->delays[2], 1000));
|
||||
}
|
||||
gpio_set_value(data->reset_gpio, data->active_low ? 1 : 0);
|
||||
if (data->delays[2])
|
||||
msleep(DIV_ROUND_UP(data->delays[2], 1000));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue