diff options
author | David S. Miller <davem@davemloft.net> | 2016-12-20 13:55:35 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-12-20 13:55:35 -0500 |
commit | 04fddde37642dd270ecb430b879f311536cfd6a5 (patch) | |
tree | e5699afb1b91c87218e8e3aa2d61f783cbc4ed51 | |
parent | fb3dc5b8adef1b05e2ca2a48db9fcf1a35ae9a1e (diff) | |
parent | 2e3db5a4b9ee704f841d6356a32428830c7079e6 (diff) |
Merge branch 'fsl-fixes'
Madalin Bucur says:
====================
fsl/fman: fixes for ARM
The patch set fixes advertised speeds for QSGMII interfaces, disables
A007273 erratum workaround on non-PowerPC platforms where it does not
apply, enables compilation on ARM64 and addresses a probing issue on
non PPC platforms.
Changes from v3: removed redundant comment, added ack by Scott
Changes from v2: merged fsl/fman changes to avoid a point of failure
Changes from v1: unifying probing on all supported platforms
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/powerpc/platforms/85xx/corenet_generic.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fman/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fman/fman.c | 15 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fman/mac.c | 1 |
4 files changed, 17 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c index 3803b0addf65..6c0ba75fb256 100644 --- a/arch/powerpc/platforms/85xx/corenet_generic.c +++ b/arch/powerpc/platforms/85xx/corenet_generic.c | |||
@@ -117,9 +117,6 @@ static const struct of_device_id of_device_ids[] = { | |||
117 | { | 117 | { |
118 | .compatible = "fsl,qe", | 118 | .compatible = "fsl,qe", |
119 | }, | 119 | }, |
120 | { | ||
121 | .compatible = "fsl,fman", | ||
122 | }, | ||
123 | /* The following two are for the Freescale hypervisor */ | 120 | /* The following two are for the Freescale hypervisor */ |
124 | { | 121 | { |
125 | .name = "hypervisor", | 122 | .name = "hypervisor", |
diff --git a/drivers/net/ethernet/freescale/fman/Kconfig b/drivers/net/ethernet/freescale/fman/Kconfig index 79b7c84b7869..dc0850b3b517 100644 --- a/drivers/net/ethernet/freescale/fman/Kconfig +++ b/drivers/net/ethernet/freescale/fman/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config FSL_FMAN | 1 | config FSL_FMAN |
2 | tristate "FMan support" | 2 | tristate "FMan support" |
3 | depends on FSL_SOC || COMPILE_TEST | 3 | depends on FSL_SOC || ARCH_LAYERSCAPE || COMPILE_TEST |
4 | select GENERIC_ALLOCATOR | 4 | select GENERIC_ALLOCATOR |
5 | select PHYLIB | 5 | select PHYLIB |
6 | default n | 6 | default n |
diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c index dafd9e1baba2..f60845f0c6ca 100644 --- a/drivers/net/ethernet/freescale/fman/fman.c +++ b/drivers/net/ethernet/freescale/fman/fman.c | |||
@@ -1890,6 +1890,7 @@ static int fman_reset(struct fman *fman) | |||
1890 | 1890 | ||
1891 | goto _return; | 1891 | goto _return; |
1892 | } else { | 1892 | } else { |
1893 | #ifdef CONFIG_PPC | ||
1893 | struct device_node *guts_node; | 1894 | struct device_node *guts_node; |
1894 | struct ccsr_guts __iomem *guts_regs; | 1895 | struct ccsr_guts __iomem *guts_regs; |
1895 | u32 devdisr2, reg; | 1896 | u32 devdisr2, reg; |
@@ -1921,6 +1922,7 @@ static int fman_reset(struct fman *fman) | |||
1921 | 1922 | ||
1922 | /* Enable all MACs */ | 1923 | /* Enable all MACs */ |
1923 | iowrite32be(reg, &guts_regs->devdisr2); | 1924 | iowrite32be(reg, &guts_regs->devdisr2); |
1925 | #endif | ||
1924 | 1926 | ||
1925 | /* Perform FMan reset */ | 1927 | /* Perform FMan reset */ |
1926 | iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc); | 1928 | iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc); |
@@ -1932,25 +1934,31 @@ static int fman_reset(struct fman *fman) | |||
1932 | } while (((ioread32be(&fman->fpm_regs->fm_rstc)) & | 1934 | } while (((ioread32be(&fman->fpm_regs->fm_rstc)) & |
1933 | FPM_RSTC_FM_RESET) && --count); | 1935 | FPM_RSTC_FM_RESET) && --count); |
1934 | if (count == 0) { | 1936 | if (count == 0) { |
1937 | #ifdef CONFIG_PPC | ||
1935 | iounmap(guts_regs); | 1938 | iounmap(guts_regs); |
1936 | of_node_put(guts_node); | 1939 | of_node_put(guts_node); |
1940 | #endif | ||
1937 | err = -EBUSY; | 1941 | err = -EBUSY; |
1938 | goto _return; | 1942 | goto _return; |
1939 | } | 1943 | } |
1944 | #ifdef CONFIG_PPC | ||
1940 | 1945 | ||
1941 | /* Restore devdisr2 value */ | 1946 | /* Restore devdisr2 value */ |
1942 | iowrite32be(devdisr2, &guts_regs->devdisr2); | 1947 | iowrite32be(devdisr2, &guts_regs->devdisr2); |
1943 | 1948 | ||
1944 | iounmap(guts_regs); | 1949 | iounmap(guts_regs); |
1945 | of_node_put(guts_node); | 1950 | of_node_put(guts_node); |
1951 | #endif | ||
1946 | 1952 | ||
1947 | goto _return; | 1953 | goto _return; |
1948 | 1954 | ||
1955 | #ifdef CONFIG_PPC | ||
1949 | guts_regs: | 1956 | guts_regs: |
1950 | of_node_put(guts_node); | 1957 | of_node_put(guts_node); |
1951 | guts_node: | 1958 | guts_node: |
1952 | dev_dbg(fman->dev, "%s: Didn't perform FManV3 reset due to Errata A007273!\n", | 1959 | dev_dbg(fman->dev, "%s: Didn't perform FManV3 reset due to Errata A007273!\n", |
1953 | __func__); | 1960 | __func__); |
1961 | #endif | ||
1954 | } | 1962 | } |
1955 | _return: | 1963 | _return: |
1956 | return err; | 1964 | return err; |
@@ -2868,6 +2876,13 @@ static struct fman *read_dts_node(struct platform_device *of_dev) | |||
2868 | 2876 | ||
2869 | fman->dev = &of_dev->dev; | 2877 | fman->dev = &of_dev->dev; |
2870 | 2878 | ||
2879 | err = of_platform_populate(fm_node, NULL, NULL, &of_dev->dev); | ||
2880 | if (err) { | ||
2881 | dev_err(&of_dev->dev, "%s: of_platform_populate() failed\n", | ||
2882 | __func__); | ||
2883 | goto fman_free; | ||
2884 | } | ||
2885 | |||
2871 | return fman; | 2886 | return fman; |
2872 | 2887 | ||
2873 | fman_node_put: | 2888 | fman_node_put: |
diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c index 69ca42ce5dd5..0b31f8502ada 100644 --- a/drivers/net/ethernet/freescale/fman/mac.c +++ b/drivers/net/ethernet/freescale/fman/mac.c | |||
@@ -594,6 +594,7 @@ static const u16 phy2speed[] = { | |||
594 | [PHY_INTERFACE_MODE_RGMII_RXID] = SPEED_1000, | 594 | [PHY_INTERFACE_MODE_RGMII_RXID] = SPEED_1000, |
595 | [PHY_INTERFACE_MODE_RGMII_TXID] = SPEED_1000, | 595 | [PHY_INTERFACE_MODE_RGMII_TXID] = SPEED_1000, |
596 | [PHY_INTERFACE_MODE_RTBI] = SPEED_1000, | 596 | [PHY_INTERFACE_MODE_RTBI] = SPEED_1000, |
597 | [PHY_INTERFACE_MODE_QSGMII] = SPEED_1000, | ||
597 | [PHY_INTERFACE_MODE_XGMII] = SPEED_10000 | 598 | [PHY_INTERFACE_MODE_XGMII] = SPEED_10000 |
598 | }; | 599 | }; |
599 | 600 | ||