From 289b50696df036db1228d7247f8b8b743f3eda13 Mon Sep 17 00:00:00 2001 From: Christoph Muellner Date: Thu, 15 Mar 2018 19:13:37 +0100 Subject: [noupstream] Add gryphon support. * arm64: dts: apm: Add serial 1 to shadowcat.dts * arm64: dts: Add apm-gryphon.dts * drivers: xgene: Allow to run the ethernet controller in MAC-to-MAC mode. Signed-off-by: Christoph Muellner --- arch/arm64/boot/dts/apm/Makefile | 1 + arch/arm64/boot/dts/apm/apm-gryphon.dts | 83 +++++++++++++++++++++++ arch/arm64/boot/dts/apm/apm-shadowcat.dtsi | 10 +++ drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 4 ++ drivers/net/ethernet/apm/xgene/xgene_enet_main.h | 1 + drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c | 11 ++- 6 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 arch/arm64/boot/dts/apm/apm-gryphon.dts diff --git a/arch/arm64/boot/dts/apm/Makefile b/arch/arm64/boot/dts/apm/Makefile index 55b5cdca13b8..c8daa642243d 100644 --- a/arch/arm64/boot/dts/apm/Makefile +++ b/arch/arm64/boot/dts/apm/Makefile @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 dtb-$(CONFIG_ARCH_XGENE) += apm-mustang.dtb dtb-$(CONFIG_ARCH_XGENE) += apm-merlin.dtb +dtb-$(CONFIG_ARCH_XGENE) += apm-gryphon.dtb diff --git a/arch/arm64/boot/dts/apm/apm-gryphon.dts b/arch/arm64/boot/dts/apm/apm-gryphon.dts new file mode 100644 index 000000000000..2ffee2989d4e --- /dev/null +++ b/arch/arm64/boot/dts/apm/apm-gryphon.dts @@ -0,0 +1,83 @@ +/* + * dts file for AppliedMicro (APM) Gryphon Board + * + * Copyright (C) 2015, Applied Micro Circuits Corporation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +/dts-v1/; + +/include/ "apm-shadowcat.dtsi" + +/ { + model = "APM X-Gene Gryphon board"; + compatible = "apm,gryphon", "apm,xgene-shadowcat"; + + chosen { }; + + memory { + device_type = "memory"; + reg = < 0x1 0x00000000 0x0 0x80000000 >; + }; + + gpio-keys { + compatible = "gpio-keys"; + button@1 { + label = "POWER"; + linux,code = <116>; + linux,input-type = <0x1>; + interrupt-parent = <&sbgpio>; + interrupts = <0x0 0x1>; + }; + }; + + poweroff_mbox: poweroff_mbox@10548000 { + compatible = "syscon"; + reg = <0x0 0x10548000 0x0 0x30>; + }; + + poweroff: poweroff@10548010 { + compatible = "syscon-poweroff"; + regmap = <&poweroff_mbox>; + offset = <0x10>; + mask = <0x1>; + }; +}; + +&serial0 { + status = "disabled"; +}; + +&serial1 { + status = "ok"; +}; + +&sata1 { + status = "ok"; +}; + +&sgenet0 { + status = "ok"; + mac-to-mac-speed = <1000>; + phy-handle = <>; +}; + +&xgenet1 { + status = "disabled"; +}; + +&i2c4 { +}; + +&mdio { + sgenet0phy: phy@0 { + reg = <0x0>; + }; + sgenet1phy: phy@2 { + reg = <0x2>; + }; +}; diff --git a/arch/arm64/boot/dts/apm/apm-shadowcat.dtsi b/arch/arm64/boot/dts/apm/apm-shadowcat.dtsi index d8ecd1661461..2528fb0b8f60 100644 --- a/arch/arm64/boot/dts/apm/apm-shadowcat.dtsi +++ b/arch/arm64/boot/dts/apm/apm-shadowcat.dtsi @@ -601,6 +601,16 @@ interrupts = <0x0 0x4c 0x4>; }; + serial1: serial@10601000 { + device_type = "serial"; + compatible = "ns16550"; + reg = <0 0x10601000 0x0 0x1000>; + reg-shift = <2>; + clock-frequency = <10000000>; + interrupt-parent = <&gic>; + interrupts = <0x0 0x4d 0x4>; + }; + /* Do not change dwusb name, coded for backward compatibility */ usb0: dwusb@19000000 { status = "disabled"; diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index 3b889efddf78..029ec75e5498 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c @@ -1765,6 +1765,10 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) return -ENODEV; } + ret = device_property_read_u32(dev, "mac-to-mac-speed", &pdata->mac_to_mac_speed); + if (ret) + pdata->mac_to_mac_speed = 0; + ret = xgene_get_tx_delay(pdata); if (ret) return ret; diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h index 985768596900..b257c0d7fa49 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h @@ -250,6 +250,7 @@ struct xgene_enet_pdata { u32 pause_autoneg; bool tx_pause; bool rx_pause; + u32 mac_to_mac_speed; }; struct xgene_indirect_ctl { diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c index b1a83fdbefb8..4134da1aa2e2 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c @@ -349,7 +349,8 @@ static void xgene_sgmac_init(struct xgene_enet_pdata *p) if (!(p->enet_id == XGENE_ENET2 && p->mdio_driver)) xgene_sgmac_reset(p); - xgene_sgmii_enable_autoneg(p); + if (p->mac_to_mac_speed == 0) + xgene_sgmii_enable_autoneg(p); xgene_sgmac_set_speed(p); xgene_sgmac_set_mac_addr(p); @@ -548,7 +549,13 @@ static void xgene_enet_link_state(struct work_struct *work) struct net_device *ndev = p->ndev; u32 link, poll_interval; - link = xgene_enet_link_status(p); + if (p->mac_to_mac_speed == 0) { + link = xgene_enet_link_status(p); + } else { + p->phy_speed = p->mac_to_mac_speed; + link = 1; + } + if (link) { if (!netif_carrier_ok(ndev)) { netif_carrier_on(ndev); -- cgit v1.2.3