Commit fc6061cf authored by Gavin Shan's avatar Gavin Shan Committed by David S. Miller

net/faraday: Mask PHY interrupt with NCSI mode

Bogus PHY interrupts are observed. This masks the PHY interrupt
when the interface works in NCSI mode as there is no attached
PHY under the circumstance.
Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
Acked-by: default avatarJoel Stanley <joel@jms.id.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bb168e2e
...@@ -74,6 +74,7 @@ struct ftgmac100 { ...@@ -74,6 +74,7 @@ struct ftgmac100 {
struct mii_bus *mii_bus; struct mii_bus *mii_bus;
int old_speed; int old_speed;
int int_mask_all;
bool use_ncsi; bool use_ncsi;
bool enabled; bool enabled;
}; };
...@@ -84,14 +85,6 @@ static int ftgmac100_alloc_rx_page(struct ftgmac100 *priv, ...@@ -84,14 +85,6 @@ static int ftgmac100_alloc_rx_page(struct ftgmac100 *priv,
/****************************************************************************** /******************************************************************************
* internal functions (hardware register access) * 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) static void ftgmac100_set_rx_ring_base(struct ftgmac100 *priv, dma_addr_t addr)
{ {
iowrite32(addr, priv->base + FTGMAC100_OFFSET_RXR_BADR); iowrite32(addr, priv->base + FTGMAC100_OFFSET_RXR_BADR);
...@@ -1070,8 +1063,9 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget) ...@@ -1070,8 +1063,9 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)
ftgmac100_tx_complete(priv); ftgmac100_tx_complete(priv);
} }
if (status & (FTGMAC100_INT_NO_RXBUF | FTGMAC100_INT_RPKT_LOST | if (status & priv->int_mask_all & (FTGMAC100_INT_NO_RXBUF |
FTGMAC100_INT_AHB_ERR | FTGMAC100_INT_PHYSTS_CHG)) { FTGMAC100_INT_RPKT_LOST | FTGMAC100_INT_AHB_ERR |
FTGMAC100_INT_PHYSTS_CHG)) {
if (net_ratelimit()) if (net_ratelimit())
netdev_info(netdev, "[ISR] = 0x%x: %s%s%s%s\n", status, netdev_info(netdev, "[ISR] = 0x%x: %s%s%s%s\n", status,
status & FTGMAC100_INT_NO_RXBUF ? "NO_RXBUF " : "", status & FTGMAC100_INT_NO_RXBUF ? "NO_RXBUF " : "",
...@@ -1094,7 +1088,8 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget) ...@@ -1094,7 +1088,8 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)
napi_complete(napi); napi_complete(napi);
/* enable all interrupts */ /* 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; return rx;
...@@ -1140,7 +1135,7 @@ static int ftgmac100_open(struct net_device *netdev) ...@@ -1140,7 +1135,7 @@ static int ftgmac100_open(struct net_device *netdev)
netif_start_queue(netdev); netif_start_queue(netdev);
/* enable all interrupts */ /* 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 */ /* Start the NCSI device */
if (priv->use_ncsi) { if (priv->use_ncsi) {
...@@ -1365,6 +1360,13 @@ static int ftgmac100_probe(struct platform_device *pdev) ...@@ -1365,6 +1360,13 @@ static int ftgmac100_probe(struct platform_device *pdev)
/* MAC address from chip or random one */ /* MAC address from chip or random one */
ftgmac100_setup_mac(priv); 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 && if (pdev->dev.of_node &&
of_get_property(pdev->dev.of_node, "use-ncsi", NULL)) { of_get_property(pdev->dev.of_node, "use-ncsi", NULL)) {
if (!IS_ENABLED(CONFIG_NET_NCSI)) { if (!IS_ENABLED(CONFIG_NET_NCSI)) {
...@@ -1374,6 +1376,7 @@ static int ftgmac100_probe(struct platform_device *pdev) ...@@ -1374,6 +1376,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
dev_info(&pdev->dev, "Using NCSI interface\n"); dev_info(&pdev->dev, "Using NCSI interface\n");
priv->use_ncsi = true; priv->use_ncsi = true;
priv->int_mask_all &= ~FTGMAC100_INT_PHYSTS_CHG;
priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler); priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
if (!priv->ndev) if (!priv->ndev)
goto err_ncsi_dev; goto err_ncsi_dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment