Merge tag 'imx-soc-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo...
authorOlof Johansson <olof@lixom.net>
Wed, 6 Jul 2016 03:58:46 +0000 (20:58 -0700)
committerOlof Johansson <olof@lixom.net>
Wed, 6 Jul 2016 03:58:46 +0000 (20:58 -0700)
The i.MX SoC changes for 4.8:
 - A patch series including both cpuidle and FEC driver changes to
   disable deeper idle states when FEC is active while board level
   workaround for ERR006687 is not available
 - A number patches to fix sparse warnings and spell errors
 - A fix for TZIC FIQ translation from VIRQ to HWIRQ
 - Support compatible of i.MX7 Solo SoC which has a subset of i.MX7 Dual

* tag 'imx-soc-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
  ARM: imx: add support for i.MX 7Solo
  ARM: i.MX: Disable supervisor protect for i.MX51
  ARM: imx6: fix missing <soc/imx/cpuidle.h> in cpuidle-imx6q.c
  ARM: i.MX: Fix FIQ interrupt handling for TZIC
  ARM: imx6: fix static declaration in include/soc/imx/cpuidle.h
  ARM: imx6q: export cpuidle functions needed by fec driver
  ARM: imx: fix missing include of common.h
  ARM: imx: fix missing includes
  ARM: imx6: disable deeper idle states when FEC is active w/o HW workaround
  ARM: mach-imx6q: fix spelling mistake in error message

Signed-off-by: Olof Johansson <olof@lixom.net>
1  2 
drivers/net/ethernet/freescale/fec_main.c

@@@ -60,6 -60,7 +60,7 @@@
  #include <linux/if_vlan.h>
  #include <linux/pinctrl/consumer.h>
  #include <linux/prefetch.h>
+ #include <soc/imx/cpuidle.h>
  
  #include <asm/cacheflush.h>
  
@@@ -1197,8 -1198,10 +1198,8 @@@ fec_enet_tx_queue(struct net_device *nd
                                         fec16_to_cpu(bdp->cbd_datlen),
                                         DMA_TO_DEVICE);
                bdp->cbd_bufaddr = cpu_to_fec32(0);
 -              if (!skb) {
 -                      bdp = fec_enet_get_nextdesc(bdp, &txq->bd);
 -                      continue;
 -              }
 +              if (!skb)
 +                      goto skb_done;
  
                /* Check for errors. */
                if (status & (BD_ENET_TX_HB | BD_ENET_TX_LC |
  
                /* Free the sk buffer associated with this last transmit */
                dev_kfree_skb_any(skb);
 -
 +skb_done:
                /* Make sure the update to bdp and tx_skbuff are performed
                 * before dirty_tx
                 */
@@@ -2416,24 -2419,24 +2417,24 @@@ fec_enet_set_coalesce(struct net_devic
                return -EOPNOTSUPP;
  
        if (ec->rx_max_coalesced_frames > 255) {
 -              pr_err("Rx coalesced frames exceed hardware limiation");
 +              pr_err("Rx coalesced frames exceed hardware limitation\n");
                return -EINVAL;
        }
  
        if (ec->tx_max_coalesced_frames > 255) {
 -              pr_err("Tx coalesced frame exceed hardware limiation");
 +              pr_err("Tx coalesced frame exceed hardware limitation\n");
                return -EINVAL;
        }
  
        cycle = fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr);
        if (cycle > 0xFFFF) {
 -              pr_err("Rx coalesed usec exceeed hardware limiation");
 +              pr_err("Rx coalesced usec exceed hardware limitation\n");
                return -EINVAL;
        }
  
        cycle = fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr);
        if (cycle > 0xFFFF) {
 -              pr_err("Rx coalesed usec exceeed hardware limiation");
 +              pr_err("Rx coalesced usec exceed hardware limitation\n");
                return -EINVAL;
        }
  
@@@ -2818,6 -2821,9 +2819,9 @@@ fec_enet_open(struct net_device *ndev
        if (ret)
                goto err_enet_mii_probe;
  
+       if (fep->quirks & FEC_QUIRK_ERR006687)
+               imx6q_cpuidle_fec_irqs_used();
        napi_enable(&fep->napi);
        phy_start(ndev->phydev);
        netif_tx_start_all_queues(ndev);
@@@ -2853,6 -2859,9 +2857,9 @@@ fec_enet_close(struct net_device *ndev
  
        phy_disconnect(ndev->phydev);
  
+       if (fep->quirks & FEC_QUIRK_ERR006687)
+               imx6q_cpuidle_fec_irqs_unused();
        fec_enet_clk_enable(ndev, false);
        pinctrl_pm_select_sleep_state(&fep->pdev->dev);
        pm_runtime_mark_last_busy(&fep->pdev->dev);
@@@ -3292,6 -3301,11 +3299,11 @@@ fec_probe(struct platform_device *pdev
  
        platform_set_drvdata(pdev, ndev);
  
+       if ((of_machine_is_compatible("fsl,imx6q") ||
+            of_machine_is_compatible("fsl,imx6dl")) &&
+           !of_property_read_bool(np, "fsl,err006687-workaround-present"))
+               fep->quirks |= FEC_QUIRK_ERR006687;
        if (of_get_property(np, "fsl,magic-packet", NULL))
                fep->wol_flag |= FEC_WOL_HAS_MAGIC_PACKET;