[PATCH 10/10] net/farady: Mask PHY interrupt with NCSI mode
Joel Stanley
joel at jms.id.au
Fri Jul 1 00:06:07 AEST 2016
On Thu, Jun 30, 2016 at 7:57 PM, Gavin Shan <gwshan at linux.vnet.ibm.com> wrote:
> 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: Gavin Shan <gwshan at linux.vnet.ibm.com>
> ---
> drivers/net/ethernet/faraday/ftgmac100.c | 27 +++++++++++++++------------
> 1 file changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
> index 23e27f1..6642071 100644
> --- a/drivers/net/ethernet/faraday/ftgmac100.c
> +++ b/drivers/net/ethernet/faraday/ftgmac100.c
> @@ -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);
> @@ -1061,8 +1054,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 " : "",
> @@ -1085,7 +1079,7 @@ 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;
> @@ -1131,7 +1125,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) {
> @@ -1363,10 +1357,19 @@ 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-nc-si", NULL) ||
> of_get_property(pdev->dev.of_node, "use-ncsi", NULL))) {
As before, lets pick single a property and stick with it.
> dev_info(&pdev->dev, "Using NCSI interface\n");
> +
> + priv->int_mask_all &= ~FTGMAC100_INT_PHYSTS_CHG;
> priv->use_ncsi = true;
> priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
> if (!priv->ndev)
> --
> 2.1.0
>
More information about the openbmc
mailing list