[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