From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1162533AbdEXJ0A (ORCPT ); Wed, 24 May 2017 05:26:00 -0400 Received: from mail-by2nam03on0058.outbound.protection.outlook.com ([104.47.42.58]:16822 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1759745AbdEXJZy (ORCPT ); Wed, 24 May 2017 05:25:54 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=fail action=none header.from=nxp.com; From: Bogdan Purcareata To: , , , Subject: [PATCH v2] drivers: phy: Add Cortina CS4340 driver Date: Wed, 24 May 2017 09:25:48 +0000 Message-ID: <1495617948-13435-1-git-send-email-bogdan.purcareata@nxp.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131400915519004150;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(336005)(39400400002)(39410400002)(39380400002)(39850400002)(39840400002)(39450400003)(39860400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(8936002)(104016004)(81166006)(77096006)(5003940100001)(356003)(49486002)(498600001)(85426001)(50466002)(50226002)(48376002)(5660300001)(2906002)(305945005)(39060400002)(8676002)(50986999)(189998001)(36756003)(105606002)(86362001)(33646002)(106466001)(38730400002)(53936002)(47776003)(2201001)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0301MB0908;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD008;1:9/E2TJLspdi3nNroqUcbWeQEXurkF7x0ZfmtFBQcX5LQMNvbU5bg/3EdcKggbxlZE8pR/Di9n/pT8NaeQtMSzZ8XsDWaFRzU3BZbULuy5gFglKNKZTQtW0oXXqTFRKtcYMB7suj9tI0ELcfJ0IWW+0nDO2strVrtXhMv3EpDP2myRKBXBO2Ni22cCXRTquuhdVMgxH7IgnujJTd4lV8DklJ281Ip/qjKTJikquxW213/e77aXxzBHfL5izW7dOzJ7hxgMj5Q+bQbpEPiKZ3P/ScXqt51fjByxibGpbDNBHJMzbkMFgRSrvAwcA7FKnXI4mZttPRNDHLVmMfD8hXpNHqtVxE5Uss0ayEyn42Qjlq77+bkg7pbaxspvVy9R0vv8vhgtocaWzcgXBR1AdszYiDxv/5R4m1qkQ+IxJqbsjqmgKgAPgg2ZLUIsWBnKpRYa720KhIGTiMmZaMqrHEXqGj0TsOzC4Omh4yGV4hVZHmfypn9DxrBl4hnVZlNbqEr9bl+33EQzjkalZUerAPDkjXsUUF6reGZG3nS3/8MMjXu+5Weg5oPNhjTZ/HBLKF9lNSMGrtiwQ90+T/0tRLjZex3xfUOqVcAEO7csndSzqjiMuI3A7qRsrmnvPMxWxIk MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY1PR0301MB0908: X-MS-Office365-Filtering-Correlation-Id: e7cfff00-aaea-4316-718d-08d4a286df0d X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:CY1PR0301MB0908; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB0908;3:89YiV7RNjp6hcM2G7yPCObXnnuBJzIAkJxMYM7IhlUkHcB6+IfJZnzpADwe+rrwdXGk2W99Alk5vwTX7OnLI/kt/P40B8OvLwVETJChg9veuk7Nit/GLY2wAgDeb3rScfmvAvqx2KhlKJLbFB/5Jruf5OYcpGRwRpcWRk+vM/AN0MpJ6B2qZDksmPVY+GkA5Vo+8CMieWkP90VRx/uqCkYraATF/LA/v98hqjmnwyG6HtSwEoe4D6goUz6020omJJnkaAmukG7lHnBFaSss2dHxQ+TUmDAZNSmwxblMZApX83cxpnV0IXumWl8kovxzSqgnYSiuQKBrCNWcBBO8ZI0t/PmIks0W/LIXkOazX05YR5Xyvokw2zsJHU4aD8azzbxRFPwG8DC0XUaE3x1kmheTnFrkWMapv4N+HhmP/FSm4Rx1gz2pRo7q9OXoIs0We;25:Z4KVuP2Zg0MRgRSMV5n7VpEnQ/HCLIFNWdaeju90j72zt6P1+uyqZd80MXZ2gfhnznfEGr9v1k5zBPzsUerx6ptjzCcTgPwjayJ1xxb17prGiGjRFcfv8YcsjsQp0uCLo8MZeoAuu6p+K0XTqjzg57wlrfA41ttjp931JS6ozVbxwY1dCDorfX272N4H6JTBoBYjZ3NjPr2Lb+R8aApVB4f4J2P5Fg4l/jHftkeXGo2bLUw+R+6DD2Kam9OvQwBcV2oFfovpFY0WAHczWy9lhZ1Xgv+yFWKcQG/picLK7QWdskkxbXh0n0TL8aOetegAOaXWHoCucF4kgkDAhpTVrmfyGI8Zexi+ws02zBrfr/udrIkn6d528Q9rz5Hj3wAh/wIrLNrxRgTGj6JsI9kSeDGJrnWsiOlVDyjzowdFO8iCPvbZDRpvoS4GJ2jogRA0fkJdLMM0uSc8Whg9jxhTccMc4X3a2iLIX0rj16Yw3fw= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB0908;31:ALFpccv7rGo4hbEt707sSH91bB2XcZCpOk4XD3s/7Tx+aqUHQmjFuv80RlbLkOpJAEUZwu6EBtyJQP4Iga1uKA2KbcShZQxUXgJFeJl5QNUxVKb7HnG9c16qTQosbcaPWKVncty+s5grEW5XSbmQaAmWW98iom9ki1LlYU7bMUZbOgAsa1GUeqOqoqPxGc7pl//k0s/6jyQzhyrblDmPBnDkRWh2Lp2QkOMdhY3uLUfgbUnBl0we24UojSQy62M3jkIKhB0OgWF5DGzUjpnzgg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095135)(601004)(2401047)(13017025)(13015025)(13023025)(13024025)(5005006)(13018025)(8121501046)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123561025)(20161123559100)(20161123565025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123563025)(20161123556025);SRVR:CY1PR0301MB0908;BCL:0;PCL:0;RULEID:(400006);SRVR:CY1PR0301MB0908; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0301MB0908;4:WAshkihq8RJi86scatCU2ajUYJ42uGBRgCM1YJXJ?= =?us-ascii?Q?UMSCYfcQ0eD0G71TluPkBr/71yJOMDkfd6QcxhuqDUHVCom17FF4lFU9+FYT?= =?us-ascii?Q?X/xTenOGe98ZcYDXYDywos2960SoGhq84wEoUewjQ/GdyR1oyLKYZOMr5KIs?= =?us-ascii?Q?6dIzQYgNPvE9iyd74GsXK0Ab/vKMW12jvvcMSDKsyLgpOROEKcOZHMTCGP9C?= =?us-ascii?Q?Doki6TAq5iP0xd6qRItScA40tpCX4wAblyC0TnFkbzHLixuOLRGAfMhTbKJ2?= =?us-ascii?Q?Fcf4pzV3fTbfQY0vRLaXljVcJoZ64SN779k6owGXgaBS5Y0uiS2XdrAtWetF?= =?us-ascii?Q?9MvzndKWN9LKqfocVA9BQP2BWB2N/T6tdrZ+7HyZx2CVue9gvFQuuVO+X0tx?= =?us-ascii?Q?2UBOxbhiJ7F1KHYa5AvGzTqGC9wiHMuOOlcFKi6d+zobrWVQpTOE8+x+1Xwi?= =?us-ascii?Q?a4mju0a42ldt27d5AqPlT0mhm8AHvG21EyUD8QkSYcTVxzt8W/zrGgL2Vbb/?= =?us-ascii?Q?pQ33GBRMUCVhzuWGTRW3Zx5kKbsYtGI2MTjL/rKuyUBru4i8tu62dP8tGt4c?= =?us-ascii?Q?D8fb+oNTMGsgOfUWgDZLWtOI380OxVGLCBc2QiJy0Wj61MnVIo6nn3z1s7CX?= =?us-ascii?Q?7yD92uxto+oUcB75bh9YVB8iToSXAlAPDjpz9xKQuX2CxyicOOIvxAH5HtxI?= =?us-ascii?Q?zDJ4QLQxz0roMhBrAmvCTbWyrzsrW5wswGd5n6AZ7tsyEIf3/qzwGzpp6SHA?= =?us-ascii?Q?0Gj58yda7JsG61QY0pI7mkWZ715Rbq3K3DFCNRN+QjKEKRvW4EBaS/nwR1bz?= =?us-ascii?Q?cIL5q9TUkKMrqAthBN3nUIBgPq3ZIqjSDnFXCkaWSGmJpTexKyDokn9UGG3Y?= =?us-ascii?Q?JiPStE4KGhKULwDF5nKeuS0IcrbhjaraPOFjtbWCW+EzWSEl8Sg/YnRCEuqo?= =?us-ascii?Q?zBgTQRS79BgK23m8HUqtcDax06UoQyHJNCKHW5/V3Q=3D=3D?= X-Forefront-PRVS: 031763BCAF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0301MB0908;23:s/fpglFAvM2hSThXYnepFLhyZFDAwIEvV1yRTMm?= =?us-ascii?Q?SO2ppLavScnIlFhLc68Mw4U2gyaFvyhamrbjy1mWsxD8U0JI5H5J4gnEHtVG?= =?us-ascii?Q?DIMqgiOYSq/ktQAznX5RpXVfugDHdw7ZV/+5Sp2B4bgdfVMQBCwl+iocUtfR?= =?us-ascii?Q?RQxU7zATAM4Jvfs26UJ5NcvYFyCkEf55vlSBZZDdIq0VVGAmxMEuTLjb9vS3?= =?us-ascii?Q?e3tklabmU9mxIEzpoacMaMbiL1R02UWsXZ/Kc7GbbqerYQ4wD+ryI9qJfpN6?= =?us-ascii?Q?yl0AOLCO7tCx88z7Ia6MSWC/GTE35wrpBeHnnwYgxcC0oJ8WQ/LzWzGrN8vz?= =?us-ascii?Q?+Yp/vmspXtz/LVjqXLZ8QgKce5ISKfoGM8Sccs2t7CFtznxNRx+C8IXXKiUY?= =?us-ascii?Q?uupjSMo7dpZHu8n3Pjh1REtfqli4is1Mv1oXRlECfh75qWX6q5FQ88z18D7G?= =?us-ascii?Q?jDTTt3LAIiRw9O6xR5ZPosX2ZC384k3DOCkiTivG0xC4zSfYH1Zxlwim58H2?= =?us-ascii?Q?yc64tAmiyR8YZWH+ByVFQ9HyJLQfFVdJTJ55ADqY+4mQdli9r8e7YmPIwFY2?= =?us-ascii?Q?569rqIUqgAinQHYPIxcaWeMFXASkCtMMbAvq3CEM58cTj3x/33NOIAVv4K42?= =?us-ascii?Q?Xiv4pFO6ETHzJ7UZ/guTyJIFsMKxNIZps1WwOX0UEmCmVKW8XPQenw7PQ2wF?= =?us-ascii?Q?yuvbsjiZ3UmaNQ17SzU5N77yxXTXw4eaXp3nVUmK/9NdiXLE59lV0Mas2dOF?= =?us-ascii?Q?8qN/Uhv/GuZdf5ZVfkF41By/2JybA6r0FP8PjcMprgChLVvbifY86/jqgaXu?= =?us-ascii?Q?KRJrYWMEVUwGPQl5uT+DwirHW1dL6MSdQ2fNd37d6HbaTTQBe5Ee/krKJpBB?= =?us-ascii?Q?Zq/oIge9tHTGQdCwcpdRRr4AM8bdKHo3e8N0nLblu5pRD5NO49o1gFG3n1rO?= =?us-ascii?Q?q1essN8eUcQ/Kd/Nf8C83gKF9lbGFFRG+K3Mdyqv4ce/2jP+hUCziaj4Nk3O?= =?us-ascii?Q?vHGh5nh9njMeTJwubUUOe5fNmbGdBDqCfb2nxiuqWuPYIQIE30ZVK9yFu4z9?= =?us-ascii?Q?mCEWpR0YzN7qAacW7Zn/Tv88xnzWgGwaPTykVv4gB/8tzpZKdBaFZKFbhvQk?= =?us-ascii?Q?2WKJnHKMxW8rcZ2ONVHPSthkbkoMotrS8?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB0908;6:x9F6Q+qNpP7OtlcjS41bjYBuGRbvm/9x7afpgziHxwmppCmnfc5kKYExavdrSjzpu0p1FUvtrnQwFhopV2Zbn41PSnyWFpKi1FCyUQ0ljTPE4r1kVqc2RZPMN1CZfIgB8+KG5/dafPasbP+9byBgtns4Ht2hnB6Zj6tydMDS4ggWn9W4vrYpKU30hzh9lnjzuXjdLE8Vzn6BHvcHQUE0e25OC58e//8Zy4VYYKLEUHUFBAw82p0/GOOoDjuJCo+baSESOGuqvAE7oGuNK3A/VRxzZy7V6isDC1dPKwx7Bcvd1oQCZT0qbYUltEgpZKr7QLCRxFT7xoJS54JZzxxLbJc7tgvq36HOHabxr9p9rxPLuk0zbrG4dR/tBltw7jWm54K6/93BeKE230d3eM6PvytK0X3OAxNM6JBKkA2YB9wtUEtzPcMfN9YiLp1taQEeQnTPk2+n5dlWKK9bUW3nSeELx3w8d2Vm1N+qagisJmXXCwibUZcnjrfsEG/SkMy8yu24NE+0KxJfcJeo2OY2YA==;5:Eh11AK47EIosp1cA8mZ/QHAEcuix2bEKvOHWRC96pmnzeFWj4oynyXF6Hc0/+njvZ48C/l9XDLOwWct/QO9biUPsE6Y+AUspwRH/RDZAh5zT/vZonN5CX+w7mffORqS9KfdzNu43qwv/81Bpn1YiPlmTg3OkURyeeJg/ba9bAWRUEIT8jj0ZcvFFrcGjvwV2;24:LVRBzNU4IG9DEbsqggmDBG5zrftglw2xmbdICyROddORFowgzw9s5fmkTZGgHPIbaEhYAJDRoIAZOHDk+mw/D6SyeZGJn7wAsbuLsRoCzjU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB0908;7:SrBL91BXpHxvHIOzD7Wcvof5eyYL4NlT9InZUI7Rkta60M+y5qZF0zRWPxT2DhzgglRkiEENx2SDlbLWaVSPZJfGX3Y07kjThl5Kj4kZ53L6p6a9EFMtSlrWwBMPPRdxTYg342ctMZ5J3rBM7Rbkwvj65ST6K8BYK2sdVD7BYh+5tlh0lI1Nqvc5pDAxtAnIrc3K6vNbcvhcPMAatI20UiIpIxXwek+uoZEpHx5VhVWGtdiP1R8yTeKlnZOPTsOXxd4H1RBYFsyCY/hd8jh8sn8bLImxFdoC+1dZIwCgKLVhJUwZ0KzUyfotl/5xJIt7HB1Rs0cMuVI8vZoW/a+uDQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2017 09:25:51.5884 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB0908 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add basic support for Cortina PHY drivers. Support only CS4340 for now. The phys are not compatible with IEEE 802.3 clause 45 registers. Implement proper read_status support, so that phy polling does not cause bus register access errors. The driver should be described using the "ethernet-phy-id" device tree compatible. Signed-off-by: Bogdan Purcareata --- v1 -> v2: - Rename "mdio-cortina.c" to "cortina.c" since it's a phy driver. - Test probing based on the "ethernet-phy-id" compatible. In the previous version, getting the phy_id via get_phy_c45_ids() involved an additional hack. Drop that approach and document probing in the commit message. drivers/net/phy/Kconfig | 5 +++ drivers/net/phy/Makefile | 1 + drivers/net/phy/cortina.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 drivers/net/phy/cortina.c diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 22dea7f..ad09e2d 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -240,6 +240,11 @@ config CICADA_PHY ---help--- Currently supports the cis8204 +config CORTINA_PHY + tristate "Cortina quad-10G Ethernet PHY" + ---help--- + Currently supports the CS4340 phy. + config DAVICOM_PHY tristate "Davicom PHYs" ---help--- diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile index 79365be..0de3e20 100644 --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -47,6 +47,7 @@ obj-$(CONFIG_BCM_CYGNUS_PHY) += bcm-cygnus.o obj-$(CONFIG_BCM_NET_PHYLIB) += bcm-phy-lib.o obj-$(CONFIG_BROADCOM_PHY) += broadcom.o obj-$(CONFIG_CICADA_PHY) += cicada.o +obj-$(CONFIG_CORTINA_PHY) += cortina.o obj-$(CONFIG_DAVICOM_PHY) += davicom.o obj-$(CONFIG_DP83640_PHY) += dp83640.o obj-$(CONFIG_DP83848_PHY) += dp83848.o diff --git a/drivers/net/phy/cortina.c b/drivers/net/phy/cortina.c new file mode 100644 index 0000000..6f054ed --- /dev/null +++ b/drivers/net/phy/cortina.c @@ -0,0 +1,90 @@ +/* + * Based on code from Cortina Systems, Inc. + * + * Copyright 2011 Cortina Systems, Inc. + * Copyright 2017 NXP + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ +#include +#include + +#define PHY_ID_CS4340 0x13e51002 + +#define CORTINA_GPIO_GPIO_INTS 0x16D + +static int cortina_read_x(struct phy_device *phydev, int off, u16 regnum) +{ + return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr + off, + MII_ADDR_C45 | regnum); +} + +static int cortina_read(struct phy_device *phydev, u16 regnum) +{ + return cortina_read_x(phydev, 0, regnum); +} + +static int cortina_config_aneg(struct phy_device *phydev) +{ + phydev->supported = SUPPORTED_10000baseT_Full; + phydev->advertising = SUPPORTED_10000baseT_Full; + + return 0; +} + +static int cortina_read_status(struct phy_device *phydev) +{ + int gpio_int_status; + int ret = 0; + + gpio_int_status = cortina_read(phydev, CORTINA_GPIO_GPIO_INTS); + if (gpio_int_status < 0) { + ret = gpio_int_status; + goto err; + } + + if (gpio_int_status & 0x8) { + phydev->speed = SPEED_10000; + phydev->duplex = DUPLEX_FULL; + phydev->link = 1; + } else { + phydev->link = 0; + } + +err: + return ret; +} + +static int cortina_soft_reset(struct phy_device *phydev) +{ + return 0; +} + +static struct phy_driver cortina_driver[] = { +{ + .phy_id = PHY_ID_CS4340, + .phy_id_mask = 0xffffffff, + .name = "Cortina CS4340", + .config_aneg = cortina_config_aneg, + .read_status = cortina_read_status, + .soft_reset = cortina_soft_reset, +}, +}; + +module_phy_driver(cortina_driver); + +static struct mdio_device_id __maybe_unused cortina_tbl[] = { + { PHY_ID_CS4340, 0xffffffff}, + {}, +}; + +MODULE_DEVICE_TABLE(mdio, cortina_tbl); -- 1.9.1