Commit cc07cb93 authored by David S. Miller's avatar David S. Miller

Merge branch 'net-next-stmmac-dwmac-sun8i-add-support-for-V3s'

Icenowy Zheng says:

====================
net-next: stmmac: dwmac-sun8i: add support for V3s

Allwinner V3s features an EMAC like the on in H3, but without external MII
interfaces, so being not able really to use RMII/RGMII.

And it has a different default value of syscon (0x38000 instead of 0x58000
on H3), which shows a problem that the EMAC clock freq should be 24MHz.
(Both H3 and V3s SoCs doesn't have extra xtal input for EPHY, and the
main xtal is 24MHz. The default value of H3 is set to 24MHz, but the V3s
default value is set to 25MHz).

First two patches are device tree binding patches, the third forces
the frequency to 24MHz and the fourth really add the V3s support.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 708d32e4 57fde47d
...@@ -9,6 +9,7 @@ Required properties for the system controller: ...@@ -9,6 +9,7 @@ Required properties for the system controller:
- reg: address and length of the register for the device. - reg: address and length of the register for the device.
- compatible: should be "syscon" and one of the following string: - compatible: should be "syscon" and one of the following string:
"allwinner,sun8i-h3-system-controller" "allwinner,sun8i-h3-system-controller"
"allwinner,sun8i-v3s-system-controller"
"allwinner,sun50i-a64-system-controller" "allwinner,sun50i-a64-system-controller"
"allwinner,sun8i-a83t-system-controller" "allwinner,sun8i-a83t-system-controller"
......
...@@ -7,6 +7,7 @@ Required properties: ...@@ -7,6 +7,7 @@ Required properties:
- compatible: should be one of the following string: - compatible: should be one of the following string:
"allwinner,sun8i-a83t-emac" "allwinner,sun8i-a83t-emac"
"allwinner,sun8i-h3-emac" "allwinner,sun8i-h3-emac"
"allwinner,sun8i-v3s-emac"
"allwinner,sun50i-a64-emac" "allwinner,sun50i-a64-emac"
- reg: address and length of the register for the device. - reg: address and length of the register for the device.
- interrupts: interrupt for the device - interrupts: interrupt for the device
...@@ -22,6 +23,7 @@ Required properties: ...@@ -22,6 +23,7 @@ Required properties:
- syscon: A phandle to the syscon of the SoC with one of the following - syscon: A phandle to the syscon of the SoC with one of the following
compatible string: compatible string:
- allwinner,sun8i-h3-system-controller - allwinner,sun8i-h3-system-controller
- allwinner,sun8i-v3s-system-controller
- allwinner,sun50i-a64-system-controller - allwinner,sun50i-a64-system-controller
- allwinner,sun8i-a83t-system-controller - allwinner,sun8i-a83t-system-controller
...@@ -31,7 +33,9 @@ Optional properties: ...@@ -31,7 +33,9 @@ Optional properties:
Both delay properties need to be a multiple of 100. They control the delay for Both delay properties need to be a multiple of 100. They control the delay for
external PHY. external PHY.
Optional properties for "allwinner,sun8i-h3-emac": Optional properties for the following compatibles:
- "allwinner,sun8i-h3-emac",
- "allwinner,sun8i-v3s-emac":
- allwinner,leds-active-low: EPHY LEDs are active low - allwinner,leds-active-low: EPHY LEDs are active low
Required child node of emac: Required child node of emac:
...@@ -44,7 +48,9 @@ Required properties of the mdio node: ...@@ -44,7 +48,9 @@ Required properties of the mdio node:
The device node referenced by "phy" or "phy-handle" should be a child node The device node referenced by "phy" or "phy-handle" should be a child node
of the mdio node. See phy.txt for the generic PHY bindings. of the mdio node. See phy.txt for the generic PHY bindings.
Required properties of the phy node with "allwinner,sun8i-h3-emac": Required properties of the phy node with the following compatibles:
- "allwinner,sun8i-h3-emac",
- "allwinner,sun8i-v3s-emac":
- clocks: a phandle to the reference clock for the EPHY - clocks: a phandle to the reference clock for the EPHY
- resets: a phandle to the reset control for the EPHY - resets: a phandle to the reset control for the EPHY
......
...@@ -81,6 +81,12 @@ static const struct emac_variant emac_variant_h3 = { ...@@ -81,6 +81,12 @@ static const struct emac_variant emac_variant_h3 = {
.support_rgmii = true .support_rgmii = true
}; };
static const struct emac_variant emac_variant_v3s = {
.default_syscon_value = 0x38000,
.internal_phy = PHY_INTERFACE_MODE_MII,
.support_mii = true
};
static const struct emac_variant emac_variant_a83t = { static const struct emac_variant emac_variant_a83t = {
.default_syscon_value = 0, .default_syscon_value = 0,
.internal_phy = 0, .internal_phy = 0,
...@@ -185,6 +191,7 @@ static const struct emac_variant emac_variant_a64 = { ...@@ -185,6 +191,7 @@ static const struct emac_variant emac_variant_a64 = {
/* H3 specific bits for EPHY */ /* H3 specific bits for EPHY */
#define H3_EPHY_ADDR_SHIFT 20 #define H3_EPHY_ADDR_SHIFT 20
#define H3_EPHY_CLK_SEL BIT(18) /* 1: 24MHz, 0: 25MHz */
#define H3_EPHY_LED_POL BIT(17) /* 1: active low, 0: active high */ #define H3_EPHY_LED_POL BIT(17) /* 1: active low, 0: active high */
#define H3_EPHY_SHUTDOWN BIT(16) /* 1: shutdown, 0: power up */ #define H3_EPHY_SHUTDOWN BIT(16) /* 1: shutdown, 0: power up */
#define H3_EPHY_SELECT BIT(15) /* 1: internal PHY, 0: external PHY */ #define H3_EPHY_SELECT BIT(15) /* 1: internal PHY, 0: external PHY */
...@@ -656,6 +663,9 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv) ...@@ -656,6 +663,9 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
else else
reg &= ~H3_EPHY_LED_POL; reg &= ~H3_EPHY_LED_POL;
/* Force EPHY xtal frequency to 24MHz. */
reg |= H3_EPHY_CLK_SEL;
ret = of_mdio_parse_addr(priv->device, ret = of_mdio_parse_addr(priv->device,
priv->plat->phy_node); priv->plat->phy_node);
if (ret < 0) { if (ret < 0) {
...@@ -971,6 +981,8 @@ static int sun8i_dwmac_probe(struct platform_device *pdev) ...@@ -971,6 +981,8 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
static const struct of_device_id sun8i_dwmac_match[] = { static const struct of_device_id sun8i_dwmac_match[] = {
{ .compatible = "allwinner,sun8i-h3-emac", { .compatible = "allwinner,sun8i-h3-emac",
.data = &emac_variant_h3 }, .data = &emac_variant_h3 },
{ .compatible = "allwinner,sun8i-v3s-emac",
.data = &emac_variant_v3s },
{ .compatible = "allwinner,sun8i-a83t-emac", { .compatible = "allwinner,sun8i-a83t-emac",
.data = &emac_variant_a83t }, .data = &emac_variant_a83t },
{ .compatible = "allwinner,sun50i-a64-emac", { .compatible = "allwinner,sun50i-a64-emac",
......
...@@ -313,6 +313,7 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat, ...@@ -313,6 +313,7 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
{ .compatible = "snps,dwc-qos-ethernet-4.10" }, { .compatible = "snps,dwc-qos-ethernet-4.10" },
{ .compatible = "allwinner,sun8i-a83t-emac" }, { .compatible = "allwinner,sun8i-a83t-emac" },
{ .compatible = "allwinner,sun8i-h3-emac" }, { .compatible = "allwinner,sun8i-h3-emac" },
{ .compatible = "allwinner,sun8i-v3s-emac" },
{ .compatible = "allwinner,sun50i-a64-emac" }, { .compatible = "allwinner,sun50i-a64-emac" },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment