From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751163AbdE2JLn (ORCPT ); Mon, 29 May 2017 05:11:43 -0400 Received: from mail-by2nam01on0064.outbound.protection.outlook.com ([104.47.34.64]:53230 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750897AbdE2JLh (ORCPT ); Mon, 29 May 2017 05:11:37 -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 v4 1/2] net: phy: Add Cortina CS4340 driver Date: Mon, 29 May 2017 09:11:30 +0000 Message-ID: <1496049091-4637-2-git-send-email-bogdan.purcareata@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1496049091-4637-1-git-send-email-bogdan.purcareata@nxp.com> References: <1496049091-4637-1-git-send-email-bogdan.purcareata@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131405226958770630;(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)(39860400002)(39380400002)(39450400003)(39840400002)(39850400002)(39410400002)(39400400002)(2980300002)(1109001)(1110001)(339900001)(189002)(13734003)(199003)(9170700003)(50986999)(2906002)(76176999)(5003940100001)(53936002)(39060400002)(38730400002)(50466002)(106466001)(48376002)(2950100002)(105606002)(33646002)(5660300001)(498600001)(104016004)(189998001)(77096006)(36756003)(356003)(8936002)(305945005)(2201001)(49486002)(50226002)(85426001)(81166006)(47776003)(86362001)(8676002)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR03MB2802;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD013;1:Ajvp1I35v3nZ9p7LP+r9zPveFFDG7apbUuZOHK1Hg/n2ugp1s3VR0QEKPIiSJ8mT86i8w3EWjegne2RwcsQjUAhm3LlBwaN/4H8ELwrTBPsotQXTDLnmEbONb4GrBsMn9MkGmJ9MZHvfrhg0JiPKYUpR1fLNsGEhNn8Qf/rF7PCTxwEOObNBmJ2bu45g4udTamTeQVomeKJHuxhbVxnDYePri7Du3kSC8ZIvmf/7CEeFOcSSUS0Gw7jYC1nEV+c5nqs2KaMARPlqFniFOoIyISN6GXTqmoSfygIRCu/gobYrnB0QOV/zaKroqFtkVfrk3FIWnNB35w1VDCMChikxnVLs6wr2Kt9N5lcWeA9IMEyWZ41iVJE84Kkp1kRb6ca8o6m9OLcONLafptu5mItHnOtWkp1xs1vV2qJZw2E7Gjg8ThyJuc25Kw4aFcpV6m90Hr4gPQvgmrvi0CelyVerrzeyhnohfOpAuQZaECmGF2KZ40zfNKfjha83YZ0BlwgFSUdV1xfYCe9pz9dhVHFB+HgM4D9+XDtExOgrYKjwMygE5uyIJ8YAmIxLp4wQI1LT MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN6PR03MB2802: X-MS-Office365-Filtering-Correlation-Id: 62a44f36-943c-4c4f-70db-08d4a672b4f6 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:BN6PR03MB2802; X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2802;3:Ih0RvLlJ7bfIUMTRWoL0l0mCSCZDruW9YIeUyTn2/pAedK+TFt+yLYICgSUjZDfuNNlQVXq2oASfgu32N9UERywpglX2Hh3jop9hinZYQ81bynzan7oG3K2tRvi+pR0I06euGczuuZrPiwsc/Xa6E6mAcSiZVJ0vTXbbUTsO7MxF2bmLLn/ReuqYOG1lHSnPAu4gkVn6RkMhc7ma8t/hhLwlr70koph2eIm1zjM8ITPMi7r72tE50ItN7niupgnFwr94ZddesHtKNmv4FRv99XoIpWn/MnrVQezUTDHFr2LqxEPRGWogb7KXBtIjBJN2YlhmhKqPTxr7fZa7bI7f0vnIkZpbHxn+iQqRP69CcXFvsH/XP2Ew7YaJKyqdgn2NG2/kDkmcLiz//SZIslVVz07ke9Bo6LP/693eLq7QqSfzVC4h1neQAgZGVa2e5MaL;25:IMml4mqKC/rqO2sYPorbNtBVdmUPQeycVZNxPGQahYYmeB35jPOQn7nRxr+rAgT1vOfiOg1lehQFNnV59grPOKehvSjkPkfCi7YWZSvPnBV4g8tfsBjPZO04mbDejW8JLhnlOmLuHy9zhDnTXhYAdVbSxefsd/7AMINWae5o4PfuP4aQKX8YilP5ZZJ3bU29i8/hrP3j3pLMiGRRWZt+H+/U/h6QsCIMcKb0VpnooU6rFn6bXn9d+zr77Dfx2kvQ1LIb0lKIEUWwD+wPjZLYkpIYAftziwt3fhD6A7Demo+xxkQbtSUJmCcq9vdM//km63BiKEvvs9kbxfYDC0u1UuFyQWUjC0usNcUVDA82xZpL0b2SOEWzHbqghIEDDDcnaZZooiT68Hb6n1mjM/WAvza5MUsqdnZRjs692rj/Y1VKPtYRk6pUc67Iub3vQLw3cMHRYqCB+7HwZJyyVoFGVBWZMs1kpGkKEB8Ek5Q8M2E= X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2802;31:bKRZrEbh+QoOmJwd6ZBOsh2PW2jNmMGJNpKHgubM7G0EDs7xVU82DQRuJ2wer4iE2joinz1s+GM8qKSZY4St3HZmE991Wi2ndKmhfMkc7OwpUG3KLKZrGikWGFy499IlDWK7BzpLJySdpLCYYNY9bLWeZ6KSehPzxZ2Wem2bZgHCrLKrlhXoquP6Wpej1u7/5vOWQMX5TuGtDo1vVwH2IH6mLmaC2S9nkJA9v+55sfNVeC17VSNVn9Hgl5hahMs2uAYCDiQYDL7ljowxTYdRQg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700073)(100105000095)(100000701073)(100105300095)(100000702073)(100105100095)(6095135)(601004)(2401047)(13018025)(5005006)(8121501046)(13016025)(100000703073)(100105400095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6096035)(20161123565025)(20161123561025)(20161123559100)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123556025)(20161123563025)(100000704073)(100105200095)(100000705073)(100105500095);SRVR:BN6PR03MB2802;BCL:0;PCL:0;RULEID:(100000800073)(100110000095)(100000801073)(100110300095)(100000802073)(100110100095)(100000803073)(100110400095)(400006)(100000804073)(100110200095)(100000805073)(100110500095);SRVR:BN6PR03MB2802; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR03MB2802;4:o0sfq+F3rbvZzIeRi7o6vCAitJh/6vY/baOGKe+Y0a?= =?us-ascii?Q?GYTXQOTYyZvaBzzFPwot/5/PH4D2abNlwQ29egyfV0ncFIq5lo1YlDXUiEdF?= =?us-ascii?Q?M/d04Y8Y33f8p8S1mYWcipAW7NPbN1+2lGeSApQbF9QEFwq7DETzMbCFu6+r?= =?us-ascii?Q?rsL5acLokuKX6THKRWGWCE7CbrZOsuwJZHuDsgXaVP5zEnt9+tA8FW5r0Xjr?= =?us-ascii?Q?GnGAC9vOwD3Sh/BfA7n+bo1gbKWmBGHnjigNBE7sZ3pRVakpMc/PTNM4E0Sx?= =?us-ascii?Q?rk2EA5c93kJwM9wYpz6icbZ0aH90mNLSy+wCBm2qCa4LVB0HOxmTRCmoF4/q?= =?us-ascii?Q?hVb6bkkgdALh9up4hI5k5pL9OhzVrLOWdfOr741VseDyb1SL4iHOw8ZRjpoY?= =?us-ascii?Q?z6o3oRlbklkbfNiOWfaHfMGFG522K5c5YnizqSWAADuHXGqklmEd4ETzplbR?= =?us-ascii?Q?oZFjRAH6yAZjPZ8xjwQW4jle2bwVEOUS30tlj5YKyB8xFncvaW36jXhoRwqL?= =?us-ascii?Q?owsWnrCPn7ZH2Ve1ZcexlJyoqjikHFFs3eo1uy6ArjFvu2h0Hr7qpnxWAj26?= =?us-ascii?Q?WTvuOeI9DED+Zjh0nDkgvwXY96UTEbvyvXlOMCdhSS6BXCo7m5DqRF7G8OyS?= =?us-ascii?Q?UnjDCz/YWvIEZc1wtJ82ZNgfJ/RI4aek/RYPMVQudS54O+oxSWdshuqpi7CD?= =?us-ascii?Q?CUHgnyFUfnq44VYYHPBh5Ul7v3Qv4RA6uQGL7UqItmn9FQPP0rSf5Y9Y2wEs?= =?us-ascii?Q?3OZpYYTIz0CPVrCH5AOFPBVfLXGI5eGdEKgYl33i68UBJxxEu7c2LctSPDdg?= =?us-ascii?Q?RBZWPJDgD88jAtLHL1sIep/bihK7781hGDuGuybUETIfwBiPbomIai5flTkX?= =?us-ascii?Q?9WImoJRXrSCeotUy7Xl/UdlIS5zM5DgjSQVU8ydj6FwfwuOzURojhMsFihrc?= =?us-ascii?Q?HsktyK1cmgSy9oyj120i0pW92tMhRuQvI7kPYGxIDA13pPV6aMcis04ZWqeU?= =?us-ascii?Q?SIWoQwS8OEYCuAkwRi+E5LQKZhBdWLb1/GnO9dgA2baFk7cHn9n123TQjzze?= =?us-ascii?Q?umA28EVkXtRnt6cmE0r8JmS/r3CXlaTCOh1tzLAeZTm9LqFL5jvR6whi93EH?= =?us-ascii?Q?q+supmEoHcErih2K9iOVZl+3XWzM752Iztjxn/HteIp4JnTvydvPHuzKX70/?= =?us-ascii?Q?L33Wua+iH8YyrM3lGkSiTg8JBBnXylbSxcNSdfKtCzdUHhGV6EoBTvRtbR8P?= =?us-ascii?Q?jY5QvJyxf2QPp0bd2F2sc+3AFYzczzQyu8e4fF?= X-Forefront-PRVS: 0322B4EDE1 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR03MB2802;23:nGevJm7vKculXvEbuQRH02e7J8uP75qBZ3+SxEGNa?= =?us-ascii?Q?zHNtc6t9cOqg/6nq9DOAk7y/6Oh7la/qPOpoOKTQX2IPNHsFPo/MXr5as+IF?= =?us-ascii?Q?r+RnZFOO/VXnvO6hBmXMK1g/L1ChH+PRBik8u3/Xvd6yCkYNBEBkbqK8ym/s?= =?us-ascii?Q?1M9qA9wyRoZd2l0E7sJCLSDCsKxGNy+t/gHbFkAvLuC1CpUhNVeoV89vvRUD?= =?us-ascii?Q?QL6eQt0byi1tZlz12bPZHHowU7/hbalXDKt5Xv19dhoSvZsU0EnST69Xjalr?= =?us-ascii?Q?7s+ufe+kv4Ym+XaAMiLD7ulIR7LWnLVX+qabk4n5LsWet1wew4isB/isCMn/?= =?us-ascii?Q?XnnbeImD5bG461ijnee2etG/4HVDdy3XFxzne8GXKgMigI9E+8Yod7cyT+mL?= =?us-ascii?Q?nKc9bfTsHduH+bavlx3VXQHTgFKDePxkJXz32w5i7ahBtxyU7IPQsb4Z/J/1?= =?us-ascii?Q?oRDbfi/kCoDWlNh519sZu1t25hNnbfUwrsnomHRm4NREOtMCaNzuh/nyV1hi?= =?us-ascii?Q?/oAFHLnXGLfRlMVKr2y4M4afq6o/VYwgNNZRzjdqc2QLXeZwwSOKgye0OR6z?= =?us-ascii?Q?FrVaaZj4f69vaXU+B7N20IGw/ixbgtl9YKnD2CatVZNzGr5ZIhbIHy/OKHze?= =?us-ascii?Q?KgaD3isx84cXEMnBtEJ45oD4K7bgYvkIjZ+DGYznqMdm/hKE9M/i3oj3tjyz?= =?us-ascii?Q?B/Td8XH2AOART1aS/O5gTxo4/gs9kkgNoP00JFfh7qTpyJ1S01mWcY4VRRCD?= =?us-ascii?Q?SZes0JecI0l3ZIETOA0jr7eCfA3/CJaUrzQ/3b7XJkSsQPcoG5OKnX4zTeRT?= =?us-ascii?Q?aeyrjUGJ8r23JDPJgPEZg9aGebzItCjToYnNhJS4qsukjXRkBCd1bb2WfK7R?= =?us-ascii?Q?QLOzqRlAIGc0B15VpEDLBsp6kvpnzSXiwD0VBKqZ8Rch0GfUmwFVYEBnUGUP?= =?us-ascii?Q?fosyBJ3Ff6s6ZkA87JNKetzijoGvDUF1qO4JUbTTqTCjvkyxNBqpJI2a7QzA?= =?us-ascii?Q?RlJYkJYmF61eHbIlINcIKQoLMwfd8P9Bhcj0dZDdmrb+kq0rvZRrmcGcDB0F?= =?us-ascii?Q?nNacXp3KANBwxtWYDAHU6El6KmUZtDbIzO6w/mRxCVTDcrdP0uj3tfhYrlg/?= =?us-ascii?Q?w2Tiqli82LbIF7HlhISGyhdLFvwbkx/EM/YOe0WvP4qXjH484jGsAf4qeyv6?= =?us-ascii?Q?0bTxESDm0Ijyuuq/RPnglNvF7ZiXCumVf7Z?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2802;6:kkqzPG7Rm2hrA3qERcdTn2yivRqH99atejN2tz8o0e/onsziWnro4sYfU1IFGQdfBKsOQ4KrA7RHAtyMaERwNgbdF0A9E9rcnAM5ltIO/QNuMpkKUuwf71coQkJxUlRWP9RvSbffXZu+5NdCEG81Meud1deJP7N92bABHyQtnpQWOwq/2txHpeBCC7TdFGaylNUY7/JC8wHRMbFXKI0zwC7eGjoFWCJe0J6+jrKHyaKRQVk2Caaq+0HcjNumBlta8jzBvPYc1q6bbPUyHOlOqpOeDvLpWmpPGqdvprliuqi/+BaVzSOA2ejfgqVPzAw2VqmiXUzA3WEKBFDa0WqUB5ZN6LZP80PKkhjab0SJKJfxys6yd0z6Y4/gRlwL8TmnntpiUvh9WwB19jEmOEC3tBk+dM9JBij5bZOcLSUFB2veOEE8HkjgKWizVZGit8LeovWRxH5ZDwf8PEcg9yjgx0+hRBn2BClnOk77Lurd9auR+THaxZ1MzJY7Zbj4Tltv1t7fE5p/hmGjZLSpfaeUZg== X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2802;5:LrIuK1onouWN9nyS91O0Yg2sihkVbyLIbzHCblJPdlSJ1WqiWvhz+94pjsajnG6XJgDr5D/3ZJs2HpPUVQIMAfd3ufQQrSpu16p2xUnBjQ5GrhdHdyHSlrit9w83KOmSrUlH1gagRbu7UeTkPTyzZu6s1AMTr1wEtsBf2ax9T6+Kdk8t+faDYhIEYcjWgr+HvX6QL69/TrnwDZL1lob3KmVHLGM1332+9Hxhlt2pvMdH6J2dAfvyp63O7gVUo4ZMgBMX2yYYqDLl5iqBmxeJ2ADzSxw9YW/QWtYWVfTV9+cmfzXQ9QnxRHknCWb8reMbt9TWRghq7Ph+aWDAqEydPbfI2y3lIj05tmQ/bNIoUr0S22X7W4v+UIqtKY2lvrcZVZlIMOU1gRcHIeIO5Tyg8Gftflkc6439mkRwouVy7LoruwccPqfqte0Y8lJu20PI/FSMtiw7BSOzjaPQ3dWFnDPeNF6/N3d/b6qyHfwFmqSsnbgWxL/fFwFTSRJ1VLrPaYsDjL0dseipm4kFwt19FQ==;24:XHqIdpTSlcot/iRQpOzf5mck8kNdfeVd+e6/rC+yDo15CDcqJiV0DzsQ1YaFVB28ouTiyynP2zh3Ff8ZO+EBNvUkqr6+4PskGhkL/b3LUtc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2802;7:iBFgMmskY9h6VqFS+bNK9ff20kNEhVhCxWI8rqB1VoXlgNCC6jqhpSzR4KOSCKDAHgS4N0DGeqaJUxuFCEQwvXqYP/+bEM5brBFNKjYrgL18+uNHRpWn19ais0nnypzrztlqD43YWuVga4obyl15OdsJh+w5QcrQZxFNsuKJJO/18s5l5DpUi0hdr3xWUFR/YofqbqXoy6siNd3OC73S/j3Xbul0j9pOedMqbCNQeeQm/PQ+/lz3yDX19jxBXb5ilApZ7BCQ3+MJDVehIZOrjt4YwqenOcbZRcS9lqW91CMpppwruxBfPqXIuoJ5d4O8VceLwFgiPIG9vaKDvjEwWg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2017 09:11:35.6900 (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: BN6PR03MB2802 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 --- v3 -> v4: - Add CORTINA trademark info. - Change id_lsb and id_msb from u32 to int to cover error checking. 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 | 118 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 drivers/net/phy/cortina.c diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 22dea7f..12c033c 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..72f4228 --- /dev/null +++ b/drivers/net/phy/cortina.c @@ -0,0 +1,118 @@ +/* + * 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. + * + * CORTINA is a registered trademark of Cortina Systems, Inc. + * + */ +#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; + int id_lsb = 0, id_msb = 0; + + /* 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