diff options
Diffstat (limited to 'drivers/net/ethernet/freescale')
| -rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 34 | ||||
| -rw-r--r-- | drivers/net/ethernet/freescale/gianfar_ptp.c | 1 |
2 files changed, 21 insertions, 14 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index aff0310a778b..85a06037b242 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
| @@ -87,6 +87,8 @@ | |||
| 87 | #define FEC_QUIRK_HAS_GBIT (1 << 3) | 87 | #define FEC_QUIRK_HAS_GBIT (1 << 3) |
| 88 | /* Controller has extend desc buffer */ | 88 | /* Controller has extend desc buffer */ |
| 89 | #define FEC_QUIRK_HAS_BUFDESC_EX (1 << 4) | 89 | #define FEC_QUIRK_HAS_BUFDESC_EX (1 << 4) |
| 90 | /* Controller has hardware checksum support */ | ||
| 91 | #define FEC_QUIRK_HAS_CSUM (1 << 5) | ||
| 90 | 92 | ||
| 91 | static struct platform_device_id fec_devtype[] = { | 93 | static struct platform_device_id fec_devtype[] = { |
| 92 | { | 94 | { |
| @@ -105,9 +107,9 @@ static struct platform_device_id fec_devtype[] = { | |||
| 105 | }, { | 107 | }, { |
| 106 | .name = "imx6q-fec", | 108 | .name = "imx6q-fec", |
| 107 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT | | 109 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT | |
| 108 | FEC_QUIRK_HAS_BUFDESC_EX, | 110 | FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM, |
| 109 | }, { | 111 | }, { |
| 110 | .name = "mvf-fec", | 112 | .name = "mvf600-fec", |
| 111 | .driver_data = FEC_QUIRK_ENET_MAC, | 113 | .driver_data = FEC_QUIRK_ENET_MAC, |
| 112 | }, { | 114 | }, { |
| 113 | /* sentinel */ | 115 | /* sentinel */ |
| @@ -120,7 +122,7 @@ enum imx_fec_type { | |||
| 120 | IMX27_FEC, /* runs on i.mx27/35/51 */ | 122 | IMX27_FEC, /* runs on i.mx27/35/51 */ |
| 121 | IMX28_FEC, | 123 | IMX28_FEC, |
| 122 | IMX6Q_FEC, | 124 | IMX6Q_FEC, |
| 123 | MVF_FEC, | 125 | MVF600_FEC, |
| 124 | }; | 126 | }; |
| 125 | 127 | ||
| 126 | static const struct of_device_id fec_dt_ids[] = { | 128 | static const struct of_device_id fec_dt_ids[] = { |
| @@ -128,7 +130,7 @@ static const struct of_device_id fec_dt_ids[] = { | |||
| 128 | { .compatible = "fsl,imx27-fec", .data = &fec_devtype[IMX27_FEC], }, | 130 | { .compatible = "fsl,imx27-fec", .data = &fec_devtype[IMX27_FEC], }, |
| 129 | { .compatible = "fsl,imx28-fec", .data = &fec_devtype[IMX28_FEC], }, | 131 | { .compatible = "fsl,imx28-fec", .data = &fec_devtype[IMX28_FEC], }, |
| 130 | { .compatible = "fsl,imx6q-fec", .data = &fec_devtype[IMX6Q_FEC], }, | 132 | { .compatible = "fsl,imx6q-fec", .data = &fec_devtype[IMX6Q_FEC], }, |
| 131 | { .compatible = "fsl,mvf-fec", .data = &fec_devtype[MVF_FEC], }, | 133 | { .compatible = "fsl,mvf600-fec", .data = &fec_devtype[MVF600_FEC], }, |
| 132 | { /* sentinel */ } | 134 | { /* sentinel */ } |
| 133 | }; | 135 | }; |
| 134 | MODULE_DEVICE_TABLE(of, fec_dt_ids); | 136 | MODULE_DEVICE_TABLE(of, fec_dt_ids); |
| @@ -449,7 +451,7 @@ fec_restart(struct net_device *ndev, int duplex) | |||
| 449 | netif_device_detach(ndev); | 451 | netif_device_detach(ndev); |
| 450 | napi_disable(&fep->napi); | 452 | napi_disable(&fep->napi); |
| 451 | netif_stop_queue(ndev); | 453 | netif_stop_queue(ndev); |
| 452 | netif_tx_lock(ndev); | 454 | netif_tx_lock_bh(ndev); |
| 453 | } | 455 | } |
| 454 | 456 | ||
| 455 | /* Whack a reset. We should wait for this. */ | 457 | /* Whack a reset. We should wait for this. */ |
| @@ -614,10 +616,10 @@ fec_restart(struct net_device *ndev, int duplex) | |||
| 614 | writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); | 616 | writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); |
| 615 | 617 | ||
| 616 | if (netif_running(ndev)) { | 618 | if (netif_running(ndev)) { |
| 617 | netif_device_attach(ndev); | 619 | netif_tx_unlock_bh(ndev); |
| 618 | napi_enable(&fep->napi); | ||
| 619 | netif_wake_queue(ndev); | 620 | netif_wake_queue(ndev); |
| 620 | netif_tx_unlock(ndev); | 621 | napi_enable(&fep->napi); |
| 622 | netif_device_attach(ndev); | ||
| 621 | } | 623 | } |
| 622 | } | 624 | } |
| 623 | 625 | ||
| @@ -1744,6 +1746,8 @@ static const struct net_device_ops fec_netdev_ops = { | |||
| 1744 | static int fec_enet_init(struct net_device *ndev) | 1746 | static int fec_enet_init(struct net_device *ndev) |
| 1745 | { | 1747 | { |
| 1746 | struct fec_enet_private *fep = netdev_priv(ndev); | 1748 | struct fec_enet_private *fep = netdev_priv(ndev); |
| 1749 | const struct platform_device_id *id_entry = | ||
| 1750 | platform_get_device_id(fep->pdev); | ||
| 1747 | struct bufdesc *cbd_base; | 1751 | struct bufdesc *cbd_base; |
| 1748 | 1752 | ||
| 1749 | /* Allocate memory for buffer descriptors. */ | 1753 | /* Allocate memory for buffer descriptors. */ |
| @@ -1775,12 +1779,14 @@ static int fec_enet_init(struct net_device *ndev) | |||
| 1775 | writel(FEC_RX_DISABLED_IMASK, fep->hwp + FEC_IMASK); | 1779 | writel(FEC_RX_DISABLED_IMASK, fep->hwp + FEC_IMASK); |
| 1776 | netif_napi_add(ndev, &fep->napi, fec_enet_rx_napi, FEC_NAPI_WEIGHT); | 1780 | netif_napi_add(ndev, &fep->napi, fec_enet_rx_napi, FEC_NAPI_WEIGHT); |
| 1777 | 1781 | ||
| 1778 | /* enable hw accelerator */ | 1782 | if (id_entry->driver_data & FEC_QUIRK_HAS_CSUM) { |
| 1779 | ndev->features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | 1783 | /* enable hw accelerator */ |
| 1780 | | NETIF_F_RXCSUM); | 1784 | ndev->features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
| 1781 | ndev->hw_features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | 1785 | | NETIF_F_RXCSUM); |
| 1782 | | NETIF_F_RXCSUM); | 1786 | ndev->hw_features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
| 1783 | fep->csum_flags |= FLAG_RX_CSUM_ENABLED; | 1787 | | NETIF_F_RXCSUM); |
| 1788 | fep->csum_flags |= FLAG_RX_CSUM_ENABLED; | ||
| 1789 | } | ||
| 1784 | 1790 | ||
| 1785 | fec_restart(ndev, 0); | 1791 | fec_restart(ndev, 0); |
| 1786 | 1792 | ||
diff --git a/drivers/net/ethernet/freescale/gianfar_ptp.c b/drivers/net/ethernet/freescale/gianfar_ptp.c index 576e4b858fce..083ea2b4d20a 100644 --- a/drivers/net/ethernet/freescale/gianfar_ptp.c +++ b/drivers/net/ethernet/freescale/gianfar_ptp.c | |||
| @@ -524,6 +524,7 @@ static int gianfar_ptp_probe(struct platform_device *dev) | |||
| 524 | return 0; | 524 | return 0; |
| 525 | 525 | ||
| 526 | no_clock: | 526 | no_clock: |
| 527 | iounmap(etsects->regs); | ||
| 527 | no_ioremap: | 528 | no_ioremap: |
| 528 | release_resource(etsects->rsrc); | 529 | release_resource(etsects->rsrc); |
| 529 | no_resource: | 530 | no_resource: |
