From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1166227AbdEZH7I (ORCPT ); Fri, 26 May 2017 03:59:08 -0400 Received: from mail-co1nam03on0083.outbound.protection.outlook.com ([104.47.40.83]:32680 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1163811AbdEZH6r (ORCPT ); Fri, 26 May 2017 03:58:47 -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 v3 1/2] net: phy: Add Cortina CS4340 driver Date: Fri, 26 May 2017 07:58:38 +0000 Message-ID: <1495785519-1468-2-git-send-email-bogdan.purcareata@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1495785519-1468-1-git-send-email-bogdan.purcareata@nxp.com> References: <1495785519-1468-1-git-send-email-bogdan.purcareata@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131402591241706808;(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)(39840400002)(39450400003)(39860400002)(39400400002)(39850400002)(39380400002)(39410400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(8936002)(76176999)(50986999)(39060400002)(356003)(50466002)(49486002)(81156014)(5003940100001)(8676002)(81166006)(2906002)(85426001)(36756003)(104016004)(189998001)(50226002)(53936002)(48376002)(106466001)(575784001)(305945005)(86362001)(77096006)(2201001)(498600001)(33646002)(105606002)(47776003)(38730400002)(6666003)(2950100002)(5660300001)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR03MB165;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD028;1:Av0zRjZQ5Kcvd4pQroRUSEcXLTUdF6GA0sz+EvFq2r3Xpx9QOb/QUDdVdnDJvWZJZ3YM3ybGBvZzZfLIjfGskxyoqWGLl8tQ1DMzMOJtteMvvJTIlmIeKE3VCFA4zqSPLpysYQeBr0fRuvxO3flB4gkbHFlo59SsRxoDaWLDTgAvDYMVJ9IceIjB05VMED8RsECQJ4NKpEWr6VMe8Klmj+CayUcZwOC5TJWNEGzY2Jixcimj4bVPlelXHICTrAAFdFIYSNFwlMrlzlsm3Y/kBWc2+kE679PUM0wLmz4gxT6Ic7PqG6Q6tIjGx8LstMV/QLPWue4dRdPGSy4Pfxa4Uxkl8jb8a+cPYmaYOnkGxORl14cxqCu/6wHWmyEGXriJert5QcfmmlUgQP0pC/nb0aocl/Jpwb8xRnvvF3SZe8WVoFm7fXJWgGE6OgQEI+GGk9kgb0YLB0+xeaa4+q1ukS+fNJEqmTz/e5fG29rG/fIghZO62fWSZ14spCLY0+dOn5WzAKZOxb34PV7hMyApMq+Hs7rLoz6iumI8n6lxrKLAlAgofy6U7sw/v1nhwLZ/ MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BLUPR03MB165: X-MS-Office365-Filtering-Correlation-Id: af2bbb60-1a16-4273-1230-08d4a40d07eb X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:BLUPR03MB165; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB165;3:J0CuxghCOLHmkJPEc0WxYHngq9OzU/GNulEDjQWHDxUqcN5uZViq4eERCxJ+GU/l/9iUbn0Camgpe3Mp2CXZFJJ6RXah+byzA1yWGN+fABsWxLw6qhZM02ExuhAPGI7+iQlc6zsrc6ZdJrb1g8QxUmzPvBjbLFKoylsvehSpLWxd4KhWNCkR11GFRQxuJkgEbQB5aguqHzCNP52J4EsWReovdVFG50n9x0AwHp9iKMoLkdT2rLfFPRjDpeEDpyo3vUJEckB8RzIdxpm/0PaMvcri1+kUhdXrp4UqAbciAEojJOimudqZXB4vgpPPXbPkPXLrHhvwRD8+HRZQKJo9v3PkGY6NwO+CHFDKFGKYXjPe+FubsDGk8ygrtubmswN8UmPQhkmTeJE5xXGQo7Mctu7PRZZ4ZfxzUL8cRuKzwTcuRtGBZt60/htYU46WcQKf;25:MCHLbzpkSSk/GGCT0x1dFJls9W+WT3kw3sV4f8ISIRtqThcyvhBPC+JaqQaxcO1q7p2WRvLIpqKf78vFdviB1XfW6Be60ZUYNQtePLrltzRHaDSc2GIbxfw14dKeqRXF5sYXX5rb0Nha3xwLXDcf4A0iQuD2gaDeeky6xhtRqDb9n1UVhu3H/OurTY1EQ8RJqjw5my42lz7eC5oxbdgr2yo4wpKwWAvX0uQdVMdqfGh7QVXVQDdmh3dX1CoL0iEu8cnyzGlTg+RFDZ3h1NWuN3Qpw7Q7cHQo3N0rm5L8HtivnRwDDWyzXWt+hLnC271NuX0idbFFwPTxYlsYf8jNss06GZaZx2z1b622MYJUw7hIAplv4q/PEpM0RpIZU8l1aWVVSK2wgv3ov44V1Ikn+ksXRFq716puHKH+n1Kq4so1HaUiQeVVY/aiZezsIVAg7eSIPo+09p0dm7Du37cLofDP5BCn69kjpevOnkgL9bU= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB165;31:6lYLDNDYloRBMY/fA/wP4W30EwnZXTb610nDcFt1DHZWHx14FcXk9/At4rl6kxNXYGcJ0FZF7UzAqRHJowDxjL3gXzwxTXFChcEBjP8hmNyOb/Vus1JQHLi31YKyzB4mC/FZN/34YaZAIptzzz4G0BeL/6E/rNpt5xVQR19Z9MTcxnG5hXpOzyOGeRr+YnEFjj1SgsHe5XeF9+9fefo0YSVtxb+TMSDkiw3rAmZwfdxXi/TmO8MUOkXhmJsj2Z2U7mcIfoxv8WNVnivwC2e1vw== 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)(8121501046)(5005006)(13018025)(13016025)(10201501046)(3002001)(93006095)(93001095)(6055026)(6096035)(20161123556025)(20161123561025)(20161123563025)(20161123565025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123559100);SRVR:BLUPR03MB165;BCL:0;PCL:0;RULEID:(400006);SRVR:BLUPR03MB165; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB165;4:IKw9t1F3u0QqevyqxJeNUPxJO58krgpx/cD3gXsJSG4DucMfy6dtyKSfZrgBAO/N7EeDtqLFRdm/yI6nmz1AQf8JVUtvGYoIx6I184hjjjZsl2qD3QZZ55KSNNynVFyN3At9y9IIGFrFSIY+EJvILHWuSnBeOWIcsml15v8ydJ7YE45dDtBcM3YN6bg8c2s3VmWQxwhCa3nayNw8r3/mp6xIIMGlODnZcHou9xEP55TT/VPdL92jo0v9KjeIGeZVSoyPaGm29BW579cQ0mPiWSWi35FVJ58VjzVU9FWejJr6NGpvW0B4i+toj75DV5XV226+JhOwd3PEM1aZKpdFrz4U6iXaUh/jGFpyG76CmM5Nwp25yLsTK8JlsuEqAXNJhK8nIx/YSm7SA0zt4s7wb1fyOBm1yJg/+q0cnoeD/OwKHPpwakF/e4YssvXid3l6HKNq9hyotzpwcWdCZU5pGKdORRZnjbNX+PF7+ihGm4N0oqgsxtyxmoHw269KePnu7gvoeWLdFJNiH3/IK5jiGxXIBgiEDPTLbZR2l9vb8UHzjPPrJkNZ8efDijfcuQdGIw6tJs8loPnX1Vg56O6mzvAWO/z6ruOb1o83Wyk6Yfo7KunYA3t5wxeBiIuCwEJ4hFc4qVmLtYUV3R03ROlWl5hmHtvpVWZRkGG5ZJcZ+lHfdDeT+/ZHpmZ+bTt775coNdKm6fW71hg1ISl+e2TwbeHuCnZAp1kCA44BR6eZ1BYC+fz6jnhyMVgjmvZLJFXG7jjrDC7uuU4Y5DErFaIQb80BtLJ2r0eqeaWqiW2LxCVg3LmZnbvg93r+GiYQTGKCyUOf7asL7UCuAUD+5T58T36ZWwb/yJmcjmh9OADYznnlvPecdfsWtE9nAVvYGXnYt1/oLhzpMziefe7SNb1EXw== X-Forefront-PRVS: 031996B7EF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB165;23:D60GZgO91hmqWQCpYzRyEHgIMovpkd/rl2Vy/74Eel?= =?us-ascii?Q?wI8jO+BHwftru60c846U0zMGdW9l7e60c0LfvcE8/c0fSCKjvERXV6t3Fh+8?= =?us-ascii?Q?fwnX+QkPbwUkgHCxXymgVBQGwIKStz7AWXkw5aQK4QgpHeLQzpZDiDiX+xsz?= =?us-ascii?Q?DSpqs6/93w/Tr7xIC9D/lWhBuuJFMsUY/77JmOlepNX1+t1qtXlJxzpTVzMM?= =?us-ascii?Q?1NhiQiBu+RT8lz1oXwINCfPm+EygUeF2070jLsME1GZTfU2HMYqvzSQquO6d?= =?us-ascii?Q?UZEKmrLz2p9tzZnkcvriAm3a/nR66OPwUQZeSNZINWGdcyfmMfNSTD4I+Ns/?= =?us-ascii?Q?xTwk/kaaMHi9xnw6T/k6x/dQr2vSvlRqwXyqbyYUJuU5pQ/K7HrGre7h9GDd?= =?us-ascii?Q?1DN6SggFYKkL6c7vN6dMEfrsaLI6NVIZxlOnaptetJNt3Nc11/90yoZm+UeB?= =?us-ascii?Q?JXNHMGSO64lhTi6d7zKoM1afSgfWIxgsn5qRpnZi+s0/xtSMvVHhjRxBLTuA?= =?us-ascii?Q?fIavlUO1T1sF5DUWQgLzMnMs/6SF1dGoDWT8IZQvbrLkoxtYOOMlpmkgbUk4?= =?us-ascii?Q?J5d22V036aaPKMBAQbW6Y3Tfi+IzpJGeKIAkV500PgZUcoPMKN93HUnVlwMt?= =?us-ascii?Q?HgtbKHTHO7ekSMcUhPzWaTWYv4XWtYHKRPgJ9SCrl98mgREwOKjphF7w1rcM?= =?us-ascii?Q?zv5l/iu/HVruSd70HRWqssTwYl7v8NOUIMD5V3VYBs9zMNsfroF0Oq3TWmI2?= =?us-ascii?Q?cWTj1XFrj+AORLTe9F5Lif6/s6aOvsFGhzmYVqi68xWA8YCevCj5P0GkVb4r?= =?us-ascii?Q?wPgJq7SQlpY8nR3HaalIrBapQsbaI8UNyFuZ/NCNJdmSY0Tiay3WOu78cBFQ?= =?us-ascii?Q?dfS7E+OEPvmyBYxsCgjSxiqGjhdEdrrHLicAwU7zvEMimYPPL5q+dh7x6mvk?= =?us-ascii?Q?DtJ1ikK6y86o3DTGAu7ptgwaRf2vpewJdACajGO69uqXzbtlwjCz8VsiBU+W?= =?us-ascii?Q?TxdATNG2Drqid7vVT55LYBt+EJ/YoTt/Dlr8Fx+LDU7HJwad9WEbRQvfMZYR?= =?us-ascii?Q?02LK97gcg7k3yFW6TU7KSes8ziIU+mtoDdLzBCAp0iZACs/evjt786l8x7Gw?= =?us-ascii?Q?3o8YySAc505lePKfgdIvUlQf4mj98gyVdg97XlffS46kvOSkyjnLxyeq9VDp?= =?us-ascii?Q?hKCJ5AYOWl6mc8Zs/Jbf2jmal+EjhSMxdEUNFyis4L7ohZGeFYFaBKMBWGSa?= =?us-ascii?Q?PDvqD9r7zD8OCOahc=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB165;6:SKGa3tQ2ceMpQdGCrDZqu7zbPNltSkxKw4afVomCwMdj4eMijIjxuEayroXeszbZ1A5BDn9GsgbxWh7HGc9PM3hkOFyOFvwgyleRD7Q1EZ5KcV5VC2NFWFCZ/mM8GPr8bj7vG4vyzk1b7zVp09oM+zx7FQmhNUWHMxQKyGZ9tK6uWh2KrVA5WeDQ5xkkUDCNSQao6ekyLZaieyY5myEnGnB8NtvNcgURncrSM1iLQTy1RSNAM7WjzF0mDLXU2ybd6xc7RXrNSaLKi86XIPUpXKpeIhB8DmO2KNnA6SljhCY/1778/MtkVrAnrS+tMBzwvBRgUtrQPLRb8RG1ftMlHQxNvEf0uKnCUxfABfci8DrdbeC7ni8blCtqjqT/Ex2aN8hoBluECgZWVgOXFa73VPRxHU24cX8mX9P/0LP7111gUAq1Ef2ABI0cI+lPSShx9WVLChgRKsVJaX2mxVt4iwkcQNHtp0mGFSuJ1WuG+4WmvwjbhseMcLQAhw5me6DTSVcQa+luwnUCrMC7a5JbBQ==;5:4BK52CQ3y8Z4bl/zaWgw/8eE5sGv28jsDp74IA0XLvJ9sF6oWafcwANkfycM1T2YyTWI51TD7v2vlGxb/LnIp1c0k6jJEzVaS83TvltT1v8D8cSaoPhk+E9qStuaJywWeVFra8IPT7nnsAEStKrUR2WQhivVAtO/RzxKG8Vduz/1JLRfopTdi1hBytbAkXfV;24:KSWOdjlFSP+iBG5KJNLAfdGGrJebOIT+v6tkd5I5DF/OTC4BZXSh7NJSNs0SrFtT/T2VN9PX0AXxgh80hTHlLfrKgiufD5khnjq3pLlPCA4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB165;7:OWadeKD5EkiJqsjH3QwFlSUm+FtwcCyRRKBHZq9ngOPn/MHm3QEl2kwK5qR361w96eN9GSMFfoHDdj8HVtrlGUxq7dKYn2CVP6IKA/8cYtM4Fkbexy6cNeoyLurU/LsFnJpI8yaSVjMmAJ7KSSnJuzrZngPY05B9qdaRhhXKXRJPayrJV65U7UnQuNdK2JhZh7fRtEDvUykGzlL9tC55GjqztqT12RlusYZ8A6hL4iuesRRGjA4nyKV5GBiCzXHQibQAXIOmvSqhl1yWRKsrTPWB9C77JkFilYjUVdvWwLcExUuBwzL/xcn+7A8O7CaVPaN9dsQ6Qog+xX9eNz11fg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2017 07:58:43.8586 (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: BLUPR03MB165 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 22/45 registers. Implement proper read_status support. The generic 10G phy driver causes bus register access errors. The driver should be described using the "ethernet-phy-id" device tree compatible. Signed-off-by: Bogdan Purcareata --- v2 -> v3: - Add probe function to check the device we're talking with is the same as the one described in the device tree. - Change the link status (GPIO interrupt status) register and validate that the read is done from the right place (cable plug-in / plug-out). - Some functions + Kconfig entry renaming. 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 | 115 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 drivers/net/phy/cortina.c diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 22dea7f..8cd7a0e 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 EDC CDR 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..209c022 --- /dev/null +++ b/drivers/net/phy/cortina.c @@ -0,0 +1,115 @@ +/* + * 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 VILLA_GLOBAL_CHIP_ID_LSB 0x0 +#define VILLA_GLOBAL_CHIP_ID_MSB 0x1 + +#define VILLA_GLOBAL_GPIO_1_INTS 0x017 + +static int cortina_read_reg(struct phy_device *phydev, u16 regnum) +{ + return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, + MII_ADDR_C45 | 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, ret = 0; + + gpio_int_status = cortina_read_reg(phydev, VILLA_GLOBAL_GPIO_1_INTS); + if (gpio_int_status < 0) { + ret = gpio_int_status; + goto err; + } + + if (gpio_int_status & 0x8) { + /* up when edc_convergedS set */ + 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 int cortina_probe(struct phy_device *phydev) +{ + u32 phy_id = 0, id_lsb, id_msb; + + /* Read device id from phy registers. */ + id_lsb = cortina_read_reg(phydev, VILLA_GLOBAL_CHIP_ID_LSB); + if (id_lsb < 0) + return -ENXIO; + + phy_id = id_lsb << 16; + + id_msb = cortina_read_reg(phydev, VILLA_GLOBAL_CHIP_ID_MSB); + if (id_msb < 0) + return -ENXIO; + + phy_id |= id_msb; + + /* Make sure the device tree binding matched the driver with the + * right device. + */ + if (phy_id != phydev->drv->phy_id) { + phydev_err(phydev, "Error matching phy with %s driver\n", + phydev->drv->name); + return -ENODEV; + } + + 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, + .probe = cortina_probe, +}, +}; + +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