From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936594AbcKPKg1 (ORCPT ); Wed, 16 Nov 2016 05:36:27 -0500 Received: from mail-cys01nam02on0087.outbound.protection.outlook.com ([104.47.37.87]:3136 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932281AbcKPKgU (ORCPT ); Wed, 16 Nov 2016 05:36:20 -0500 X-Greylist: delayed 3607 seconds by postgrey-1.27 at vger.kernel.org; Wed, 16 Nov 2016 05:36:20 EST Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=alex.g@adaptrum.com; From: Alexandru Gagniuc To: CC: , , , Alexandru Gagniuc Subject: [PATCH v2] net/phy/vitesse: Configure RGMII skew on VSC8601, if needed Date: Wed, 16 Nov 2016 01:02:33 -0800 Message-ID: <1479286953-11481-1-git-send-email-alex.g@adaptrum.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <20161115.221217.2076182289174952941.davem@davemloft.net> References: <20161115.221217.2076182289174952941.davem@davemloft.net> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2601:647:4080:2997:5f3d:4008:dc17:d4f9] X-ClientProxiedBy: CY4PR02CA0033.namprd02.prod.outlook.com (10.175.57.147) To DM2PR0401MB1183.namprd04.prod.outlook.com (10.160.216.149) X-Microsoft-Exchange-Diagnostics: 1;DM2PR0401MB1183;2:7UzIUU6MfZZX5t8or3UPXYGjMra7KQ1ehOja7EJJeswnNz4GUFD0j1vt2ZJrAXl6Vk35nRtVWSJsGT4PK/ZuwGk1uWps039I4YAhhJcrxxywUad+tR/CD4QD4wdeyhsoet746uF2OXbsy2azaDcCNpcNdxVYLDHvecIgDGo3+10=;3:dt4cAmtcNL+K3rFivbSS5sXsiRD1npcPF0GwsHBsmVAkpHi+vCg/+6UTNeMMLGNLJjH2H7QFiDET/D9H1z5tSzKOZdyhPHyxSCMeO4bBGj4FDUTmyXG5j0HVcXqFgnfPN0MahATN/avDhAWEgG8RGjXsOwNQhTfpE6oQX7Xm8yg=;25:EGNAszMbGn39iCNVhRDip+Uvqq2RO7VcQXrdnTutaAQaiUNzUa1jrCK2JWn3PEABtFyYKyDNzU/kCBLIATqeGm66TOGm7yJWbdtDKkHw7IEK79tMK6w2FWBlwb+0rkWfE/y7MrPAZKNNxqxtGjcfVeyLmBk2JHBshPdA7LYx7WizX4Y/se78vzAOImL4WlKVWC95Bfv7PoGgx4XklSjlxYb3vT2a6NbHL+s2Jr8idGVXYgxZ1YNYRlo8QotIfnkPV4gF87CVC7LYl8vSeBJQfM6hxZOLKl8VbbJRDRZpMRierOlEY3cOw4e2YTzfZ5YJisg7oEF/hy7eu/hSNPc4kic8ADrU6DRwvFxxr50AW1S2wX9lZpjrlvldNdeOt8gjWcR2tJNE/wlFjghFMBf/14h9+1BXLQ25nnkOnTHWUJF6eTtTHzcjGJejr4V45yz1flqKzZ3Yl4aTt6WDMzf/Zw== X-MS-Office365-Filtering-Correlation-Id: 30190db3-09c8-4645-0ea8-08d40dff5848 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DM2PR0401MB1183; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0401MB1183;31:OoUew9Mv86N3srdq8SzOOTaXLunSmgWnVtGuK+ISFpc5vpMOUpPia406Ym5+bQmqHR00RQGi3XXnrTSlVUkewsR9kKLHmuLuZOCpueV+HFgxrHwAxcTpiPcBeIdD4T5oHr8N2FQ3icPSApSp/+mQyyRAuHKJL/T6X0YQKVE7OgZ5BqtE3PLFCWrekG4JtoZESVcItptWPmVaAWDU1BJhFsw1zfG6IBpmc8aPK7gMjYE056ZNUyqXzsW/nD8z1yo4Lah4GfYzyh/moIuzEDnQ6O3zWR3ytnQQY+anHSkyBTA=;20:BMN5d9iKjsBWRgJ6XqzZaZinNHkovHHOMRlV/iKsHtPKe56uRN9D0Wvr/jY4jNx95VGrKtbCaHC3245ur8Aq/SeMgxOKIEL0it2ubkDxKDJCTT7rUBl+yjGI/U3h2Qyuk0X68UQQM09xDS/P5hxTdAv9IrNiB57Ka0/dOOTYqi0= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6060326)(6040281)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6061324)(6041223)(6072148)(6043046)(6042181);SRVR:DM2PR0401MB1183;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0401MB1183; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0401MB1183;4:ltaWoOrx209efG9epY/7J3wDiDs3v34h5GpfQ8fnYZAB3StJSwuS/gMc9oFuWC215a+QGLB4YcSB2jY6ys4rjCJJbfZwkJ3S6Q99l4OjZ+6Scm2ll77oF9jPKInEF4CAZ0HOTSF4LtoDnVbZVLlZXSoOOKWxiIgGsdmHtOaaCwhzJs9EcWUU6iIu+rXNzmr4tAbET+AFrpE+xAtsBG6F2Zy3Stjrl4uV4+UKqIRepm7JQNHurGDoPf/DzPn6lb7gUO63kh0wC+2cEmkrCgq8I3MlGtlftY13PsogWGoNujzuXHkveb7Ae+NvglRwXQ0nGq+vnRxcZOvR2QJiPIGr7idhuRyJyqGk2Vh87RZBy0rxI1nLpoCnqCRHKALu0bh0VwcMU/57FrL8FjB4UC+Q/fHRj4kjCPw5T9TaF5TMxPmy9UFYEEim2syObyVN8ORfSKr+OS3/FvWPgZ+HqiCRpgpymiSx1Y4QVD7aSllTGqqo4NKBycMgbyqigyJY/zfHdFTL6CdrKYyjNmKmL4KsMQ== X-Forefront-PRVS: 01283822F8 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(5003940100001)(36756003)(81166006)(81156014)(86362001)(2351001)(42186005)(105586002)(106356001)(6116002)(101416001)(68736007)(76176999)(50226002)(50986999)(50466002)(48376002)(305945005)(6666003)(7846002)(33646002)(7736002)(77096005)(110136003)(69596002)(92566002)(21086003)(4001430100002)(2950100002)(6916009)(189998001)(4326007)(97736004)(8676002)(5660300001)(107886002)(2906002)(47776003);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR0401MB1183;H:nuke-mobile.lan;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0401MB1183;23:VFDQqCcQP1IqjfHuoDvuYmjNXIGbH7XpFhuLFWz?= =?us-ascii?Q?5SFHpATx0gBor8qDmnQLvtVjiGAUgCXEk2qPkNdAmyfVNoFTq1N/9/tXBy0s?= =?us-ascii?Q?8BgVXAdlhU5Cm8VSKgCJ+i8nGB/g3s3lLOA/ngVTKI1lWWv7xVLKMgeBJJf0?= =?us-ascii?Q?+jER+X1xIrm6A8FtoSv/sZHWvZNtipRKHzom06peQCyU8QzMNsk3jdBDWr6P?= =?us-ascii?Q?hNL3L5dpWfoH/gl3tfd0J9QNEswbRxoqG4zBi6oMaaR1eh7O4ldNcoVUq56m?= =?us-ascii?Q?5Q5GtqFUqkHuoQrMyWjdGycKjiAmCWSOMCvImGTD3wFGpcR8qswgrzlodMWm?= =?us-ascii?Q?AOtjRQwYuK7Geh7lir/SHktz+T5ptn3zsXrcodSQ47bxK4lMRNIIHpHDFgaa?= =?us-ascii?Q?cHg7WD5D7ZP4Sz+daYTlr0oWTzU0+tzxgmz89hp5gXX3CEbOt6VjaHgFlgio?= =?us-ascii?Q?79lWUjuh0DaVdwgECu0h1EmSGJEHiJhWQj3oYapsAqD34HlIj5PmMbatrMCJ?= =?us-ascii?Q?mqHzC7O/CEyH1d10Z7fI8JiYZKIMXUOE7G9YQ/e8mFICGf7KOYR4f0uefuCB?= =?us-ascii?Q?6RCaNd8s1+EspFruTjJJYmPZ+mDjQ3wOcHPCmzeXI8h2ht/qCMkkMfrO3XYM?= =?us-ascii?Q?rO5Y3kNf2s81Ws0l1FTGlj7nciqwuHQduK5efMa5UZv7N9swGQKAzpa/UNQP?= =?us-ascii?Q?I1MIayZ3/VVwp/JplgZdboqpc6St9URi5ANMScBQfnyEt+ybciYE/z+8T8XK?= =?us-ascii?Q?ksfpY5yfzsa9XwZGJsMOv0bGQQA8TBgKGNmak0B/8Q7t9VoyBLbPz5AxVfyb?= =?us-ascii?Q?b036vpMLar9FogJTNwV3yctBIwEEApEIB3gVolqmApgA8UYMZ61wH4WPZKIR?= =?us-ascii?Q?Yyi5LwymxALAnwxR32cUxPdUYEvYopw2rQGjPdk9z64846tv4UV8AOHsNcbr?= =?us-ascii?Q?yhvIFkq33zS+N7pbXHuuKJ82KbPqcyVBUegAUkbNBoqMOsrRP0COhLJmgGSj?= =?us-ascii?Q?JZF2HO/oaHCEV33+nx6BxxlO2Yt6p9itsiVc/nVbz8d/MpvStWEAmuzQGtfP?= =?us-ascii?Q?fl9hVWrc=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0401MB1183;6:zAY43PLQMzaPmCYbYh5UlKwfKGmdBheQci8iVWEvjQUY8FOrUYRhs9MGy+mriuOL1Pi5GbiITaBrrv3aEVsgmrUulSiQ+yyA6nqJg+549fIB5OgV6W1quTrVJDgoSqYVUzkTFqVB3T0MsWnijWGcqBUhUc+PZHR88W54148DdOHFEcK4kMCeL43Ok8jrdDvghgxiKz3Ls+cztqhPOfsSF2aTLl9EYm/JMXGmkFKEYvJxo8RiPyI4fZ7WfFwx5pR5nVYLwcUW/Jx4CNCGBm+4NlD/zyu0Q3ymU9PJk4k6VUFETgj10tNhDt+//FfQO3IGlpQrX5PUKAhDgRRHLPu/HLdqzIaOHY6c6WIV6+qcVOGMKaUPcLJ16u8e998GVa69;5:lVM+/aGTGrrwDaaJdkdQKlQ+y2iCEhf+C9CXiuLiKkzOzxzF/Oo3uYNIgXf+8cWI4P4b9Q3wqToJd1dppRj/yJEaVOxE5wJI7W+uXz/gMfKCeGcW5QONSzk4uLY6z98js7sRHBV3YZe/Ifa+XyHOpA==;24:IuNoQ2QeRyrUFujzkWlbSIS3zzfMX1CIYCubIkEVhPrJYWUqHrqalQPxLbjTKt0ZWSO8EjOV2/Shr65g+HTGy0nmFGCZMrXWojoGwnRN1js= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM2PR0401MB1183;7:BmIdcnPBBlpw2Fe3Vi1h38f/LcMEnPWIR4H+zXkDp7tflSMNzpijM29RiDjhvZ7/wk3ft5okX2RQcB7kSTTRQF8H+IjSzNax921eF1zbKPsSFL4o84utGyRzjSLV998c1qZOVIVsz9bhiLc8ppiImToCBdQB2tJVuFStVuO9aDsD3q/fzdITzwgpeL2t4A363AjCwobBZn0jEJgdfyiKCFhwmelMKRSjvp6bLnqbpuVjDjXHImarWUWqncsHeKWlU4ht6IDiZJQNDMaI5/74IyxV3g6c1Hw9Rq3pGPnfEVCZXZYfU/T55jRg//OkdcMXwt1JpULBvcjXUI4QEw0uJto/jsK8okWcSdZBq3+HtYE= X-OriginatorOrg: adaptrum.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2016 09:02:51.0998 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0401MB1183 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With RGMII, we need a 1.5 to 2ns skew between clock and data lines. The VSC8601 can handle this internally. While the VSC8601 can set more fine-grained delays, the standard skew settings work out of the box. The same heuristic is used to determine when this skew should be enabled as in vsc824x_config_init(). Tested on custom board with AM3352 SOC and VSC801 PHY. Signed-off-by: Alexandru Gagniuc --- Changes since v1: * Added comment detailing applicability to different RGMII interfaces. drivers/net/phy/vitesse.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/vitesse.c b/drivers/net/phy/vitesse.c index 2e37eb3..24b4a09 100644 --- a/drivers/net/phy/vitesse.c +++ b/drivers/net/phy/vitesse.c @@ -62,6 +62,10 @@ /* Vitesse Extended Page Access Register */ #define MII_VSC82X4_EXT_PAGE_ACCESS 0x1f +/* Vitesse VSC8601 Extended PHY Control Register 1 */ +#define MII_VSC8601_EPHY_CTL 0x17 +#define MII_VSC8601_EPHY_CTL_RGMII_SKEW (1 << 8) + #define PHY_ID_VSC8234 0x000fc620 #define PHY_ID_VSC8244 0x000fc6c0 #define PHY_ID_VSC8514 0x00070670 @@ -111,6 +115,34 @@ static int vsc824x_config_init(struct phy_device *phydev) return err; } +/* This adds a skew for both TX and RX clocks, so the skew should only be + * applied to "rgmii-id" interfaces. It may not work as expected + * on "rgmii-txid", "rgmii-rxid" or "rgmii" interfaces. */ +static int vsc8601_add_skew(struct phy_device *phydev) +{ + int ret; + + ret = phy_read(phydev, MII_VSC8601_EPHY_CTL); + if (ret < 0) + return ret; + + ret |= MII_VSC8601_EPHY_CTL_RGMII_SKEW; + return phy_write(phydev, MII_VSC8601_EPHY_CTL, ret); +} + +static int vsc8601_config_init(struct phy_device *phydev) +{ + int ret = 0; + + if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) + ret = vsc8601_add_skew(phydev); + + if (ret < 0) + return ret; + + return genphy_config_init(phydev); +} + static int vsc824x_ack_interrupt(struct phy_device *phydev) { int err = 0; @@ -275,7 +307,7 @@ static struct phy_driver vsc82xx_driver[] = { .phy_id_mask = 0x000ffff0, .features = PHY_GBIT_FEATURES, .flags = PHY_HAS_INTERRUPT, - .config_init = &genphy_config_init, + .config_init = &vsc8601_config_init, .config_aneg = &genphy_config_aneg, .read_status = &genphy_read_status, .ack_interrupt = &vsc824x_ack_interrupt, -- 2.7.4