|
@@ -74,6 +74,7 @@ struct ftgmac100 {
|
|
|
|
|
|
struct mii_bus *mii_bus;
|
|
|
int old_speed;
|
|
|
+ int int_mask_all;
|
|
|
bool use_ncsi;
|
|
|
bool enabled;
|
|
|
};
|
|
@@ -84,14 +85,6 @@ static int ftgmac100_alloc_rx_page(struct ftgmac100 *priv,
|
|
|
/******************************************************************************
|
|
|
* internal functions (hardware register access)
|
|
|
*****************************************************************************/
|
|
|
-#define INT_MASK_ALL_ENABLED (FTGMAC100_INT_RPKT_LOST | \
|
|
|
- FTGMAC100_INT_XPKT_ETH | \
|
|
|
- FTGMAC100_INT_XPKT_LOST | \
|
|
|
- FTGMAC100_INT_AHB_ERR | \
|
|
|
- FTGMAC100_INT_PHYSTS_CHG | \
|
|
|
- FTGMAC100_INT_RPKT_BUF | \
|
|
|
- FTGMAC100_INT_NO_RXBUF)
|
|
|
-
|
|
|
static void ftgmac100_set_rx_ring_base(struct ftgmac100 *priv, dma_addr_t addr)
|
|
|
{
|
|
|
iowrite32(addr, priv->base + FTGMAC100_OFFSET_RXR_BADR);
|
|
@@ -1070,8 +1063,9 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)
|
|
|
ftgmac100_tx_complete(priv);
|
|
|
}
|
|
|
|
|
|
- if (status & (FTGMAC100_INT_NO_RXBUF | FTGMAC100_INT_RPKT_LOST |
|
|
|
- FTGMAC100_INT_AHB_ERR | FTGMAC100_INT_PHYSTS_CHG)) {
|
|
|
+ if (status & priv->int_mask_all & (FTGMAC100_INT_NO_RXBUF |
|
|
|
+ FTGMAC100_INT_RPKT_LOST | FTGMAC100_INT_AHB_ERR |
|
|
|
+ FTGMAC100_INT_PHYSTS_CHG)) {
|
|
|
if (net_ratelimit())
|
|
|
netdev_info(netdev, "[ISR] = 0x%x: %s%s%s%s\n", status,
|
|
|
status & FTGMAC100_INT_NO_RXBUF ? "NO_RXBUF " : "",
|
|
@@ -1094,7 +1088,8 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)
|
|
|
napi_complete(napi);
|
|
|
|
|
|
/* enable all interrupts */
|
|
|
- iowrite32(INT_MASK_ALL_ENABLED, priv->base + FTGMAC100_OFFSET_IER);
|
|
|
+ iowrite32(priv->int_mask_all,
|
|
|
+ priv->base + FTGMAC100_OFFSET_IER);
|
|
|
}
|
|
|
|
|
|
return rx;
|
|
@@ -1140,7 +1135,7 @@ static int ftgmac100_open(struct net_device *netdev)
|
|
|
netif_start_queue(netdev);
|
|
|
|
|
|
/* enable all interrupts */
|
|
|
- iowrite32(INT_MASK_ALL_ENABLED, priv->base + FTGMAC100_OFFSET_IER);
|
|
|
+ iowrite32(priv->int_mask_all, priv->base + FTGMAC100_OFFSET_IER);
|
|
|
|
|
|
/* Start the NCSI device */
|
|
|
if (priv->use_ncsi) {
|
|
@@ -1365,6 +1360,13 @@ static int ftgmac100_probe(struct platform_device *pdev)
|
|
|
/* MAC address from chip or random one */
|
|
|
ftgmac100_setup_mac(priv);
|
|
|
|
|
|
+ priv->int_mask_all = (FTGMAC100_INT_RPKT_LOST |
|
|
|
+ FTGMAC100_INT_XPKT_ETH |
|
|
|
+ FTGMAC100_INT_XPKT_LOST |
|
|
|
+ FTGMAC100_INT_AHB_ERR |
|
|
|
+ FTGMAC100_INT_PHYSTS_CHG |
|
|
|
+ FTGMAC100_INT_RPKT_BUF |
|
|
|
+ FTGMAC100_INT_NO_RXBUF);
|
|
|
if (pdev->dev.of_node &&
|
|
|
of_get_property(pdev->dev.of_node, "use-ncsi", NULL)) {
|
|
|
if (!IS_ENABLED(CONFIG_NET_NCSI)) {
|
|
@@ -1374,6 +1376,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
|
|
|
|
|
|
dev_info(&pdev->dev, "Using NCSI interface\n");
|
|
|
priv->use_ncsi = true;
|
|
|
+ priv->int_mask_all &= ~FTGMAC100_INT_PHYSTS_CHG;
|
|
|
priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
|
|
|
if (!priv->ndev)
|
|
|
goto err_ncsi_dev;
|