From patchwork Fri Dec 9 22:22:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Haechten X-Patchwork-Id: 704670 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3tb6Z14MZyz9vFj for ; Sat, 10 Dec 2016 09:37:45 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=mscc365.onmicrosoft.com header.i=@mscc365.onmicrosoft.com header.b="P9QE8tyJ"; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 64C93A75BF; Fri, 9 Dec 2016 23:37:43 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6XV5j6xuCifo; Fri, 9 Dec 2016 23:37:43 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DA7B64BA16; Fri, 9 Dec 2016 23:37:42 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D7D174BA16 for ; Fri, 9 Dec 2016 23:37:38 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0HSYQNXyJNz2 for ; Fri, 9 Dec 2016 23:37:38 +0100 (CET) X-Greylist: delayed 1331 seconds by postgrey-1.34 at theia; Fri, 09 Dec 2016 23:37:34 CET X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0057.outbound.protection.outlook.com [104.47.34.57]) by theia.denx.de (Postfix) with ESMTPS id 05D7A4B99D for ; Fri, 9 Dec 2016 23:37:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mscc365.onmicrosoft.com; s=selector1-microsemi-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=m2Hhkh9mOmb53ndGkdfMcfhzNvBC/DpRAs0mVuspjcI=; b=P9QE8tyJubrsR9QU9lFcMwxSa/u/MkhuHfqWLyn/elC4C/tNUovhPNy6/DOI0AZBs0ujYNfYGqzho25JvV06isBPe1sa1OYIi4/roprqeFBQ+d8lnEZ0+VJPdVJe/JvLC/ih6HKKK6JaYsc7vtNmYjeKlLShDsDuw+WgkE5etnY= Received: from BY1PR0201CA0040.namprd02.prod.outlook.com (10.160.191.178) by CY4PR02MB2248.namprd02.prod.outlook.com (10.169.181.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.761.9; Fri, 9 Dec 2016 22:22:28 +0000 Received: from BN1BFFO11FD019.protection.gbl (2a01:111:f400:7c10::1:112) by BY1PR0201CA0040.outlook.office365.com (2a01:111:e400:4814::50) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.761.9 via Frontend Transport; Fri, 9 Dec 2016 22:22:28 +0000 Authentication-Results: spf=none (sender IP is 208.19.100.20) smtp.mailfrom=microsemi.com; ni.com; dkim=none (message not signed) header.d=none; ni.com; dmarc=none action=none header.from=microsemi.com; Received-SPF: None (protection.outlook.com: microsemi.com does not designate permitted sender hosts) Received: from avsrvexchhts2.microsemi.net (208.19.100.20) by BN1BFFO11FD019.mail.protection.outlook.com (10.58.144.82) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.761.6 via Frontend Transport; Fri, 9 Dec 2016 22:22:27 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1149; Count:19 Received: from AVSRVEXCHMBX1.microsemi.net ([fe80::950f:17ba:a56d:40e6]) by avsrvexchhts2.microsemi.net ([::1]) with mapi id 14.03.0319.002; Fri, 9 Dec 2016 14:22:27 -0800 From: John Haechten To: "joe.hershberger@ni.com" , "u-boot@lists.denx.de" Thread-Topic: [U-Boot][PATCH v2] net:phy:MSCC Add Support for VSC8530-VSC8531-VSC8540-VSC8541 Thread-Index: AdJSaVY9WdKvmvVvQGCTTgR/CfJb/QAANn2Q Date: Fri, 9 Dec 2016 22:22:25 +0000 Message-ID: <90919B351379A448A858E3A967093A5C42692475@avsrvexchmbx1.microsemi.net> References: <90919B351379A448A858E3A967093A5C4269245E@avsrvexchmbx1.microsemi.net> In-Reply-To: <90919B351379A448A858E3A967093A5C4269245E@avsrvexchmbx1.microsemi.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.100.34.10] MIME-Version: 1.0 X-IncomingHeaderCount: 19 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:208.19.100.20; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39850400002)(39410400002)(39860400002)(39450400003)(39840400002)(2980300002)(428002)(189002)(199003)(33656002)(189998001)(106466001)(7696004)(4001430100002)(7736002)(230783001)(305945005)(2950100002)(81166006)(8936002)(49446005)(81156014)(2920100001)(2501003)(68736007)(626004)(92566002)(50466002)(105586002)(2940100001)(5660300001)(5250100002)(2900100001)(9686002)(97736004)(53416004)(2910100002)(8676002)(8746002)(107886002)(69596002)(55846006)(356003)(54356999)(76176999)(47776003)(23726003)(5001770100001)(71926001)(104016004)(38730400001)(50986999)(86362001)(97756001)(101416001)(3846002)(575784001)(46406003)(4326007)(6116002)(102836003)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR02MB2248; H:avsrvexchhts2.microsemi.net; FPR:; SPF:None; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD019; 1:5R9WyUhCmpWJThocBYOO+L6SFTRoFRXbOO4pI7nAGv9xTm1NCt6rHC7VUXvl/BFbSAn6CXefY9bVciGXIfizes7IAbIwUPuUrQxFdF6WlxfEXVb0t4niNxIqe7tgAlyVSaCDmRM2o+STsgg8sKoEZLEtv1Hd0yaswuD5PjX9CfxUOj625b/KDHhkzcg2uiam7N2xOjXfWwSvEhG/AvSbeiJkbfTmujUn5xSlHSUbTdWAKo00c8406e+AXFWk4PwbRQPeJs4FWTxcmwCGHIeRRhiEiy6G7OrMtIzYCNdVRwZyV+Mrdg0TNmriy2xNXcdk+Ao9nbBgH7dKzfe3wO/uLgMYe2jsCPnOMy+p8UDH1spKjbvvi51aUxO8h45E9kutA77IRo0up6uOmbCJCWN8pTiWlWQ943cn2x7gsauR/xQGERLczlomxW2ky7+TCQeG4MyICTva7AXd7+dV+sQMAWxjZ7CRSXg/8RarfzMVDOtGGgZSxv7uS+z84pgzh71NctrMyg9NbpFwhD06V0qxTA== X-MS-Office365-Filtering-Correlation-Id: c678f923-3622-42ac-85aa-08d42081dbec X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY4PR02MB2248; X-Microsoft-Exchange-Diagnostics: 1; CY4PR02MB2248; 3:d7Z8cDfW0CZN0VbEHtSGs1G6LYxwlYf9X9EUfbTcHQNMfTMCnIE3fgFs873NDSA/y76Ye2mUJpbD6mF18bthxpUiI0wSH5mMmkS5jEDK229BEx85TaTXoXrM2siE+AmGiWm1b1i7w7Pacbfvm9mVfYFeUCNSwyQcoimBRVsB3oC5rdjcIVSBoq8ofXAO1oMonzSY0uQlAl9aFWeEQgOFTcScVW0lADxxlVWyTB9hfgmtwgUFNo68JqAw1tio88/TmoGSv8rf6QGTTz+RByKJ2CxANJ/EgHWuiEN3jo2rTP9KBUd8+UUxONeLf38uuZd3+ko7HWuLXjJ0+i3f4zGQRRG9KqvTNus5k0yyWeN55ue6Gm7Fu5L6HX4sP0FBQyK3 X-Microsoft-Exchange-Diagnostics: 1; CY4PR02MB2248; 25:kApzNUqcDr17zX/16GUcs3USu/+IYVBpLLcEHtfp2M1Gp29APBVM14LUbULkXP/RAXYvSdocGK8/k/C7yIVAaLnkomMjhASdC4ZqDrGR7/wDbGqC7xbCK36gtPmHhz36rDH3SaBBICFwn/PmYJkbLyMbqbCqsZQpz3h+ueb9GY3C9hMJ92P2RTbUwDuHG8ey/NrP0DT6T1L8ru/1s+NRpPjTT1pWvNRwL1DEU+w3jMMqjBnhMdeTT0aGnkoeD6djBAPQn2J4Q/BgymztZHOj317PqHTf789GfBqwmbEvWivcc/TMn+ng8rrqoBYBRiHdABuUxV6p0Pq2KplqnliahwZXJEEjVitYQv4uNMX2pplbfMwr0GIhGmjzsAFRWsspERXjLle1nRXcpSMqfJWKEfNg+66IXcwCqnePNB3bIq30F1K0sVgBqwOAoNuJfeqOImB7Q5Cs9LT/3nFnoVV9EBATcAhh7beiz3lqkQWbZJhSP9A9T6maQGzEbOmaHT36/HsIMPwZo49cw0AKwqqdgvOFSv8+0Q9Gi0Gzak9lXpXKG6h0b3LrveKybLgY8MPxX2X/Ty+YWbl6Qo/Xu0NH0x8C/4pYtT/J6j5Z3pV12yhYnmySkZ/mlZOz8MQ3huJ5KgMZGm4ytI4Eh+a0AWc+NQIaWsmKAca2so+0wL6psaWQ3+1SdiaFgcZvigfz20cQbKX2GNdI92TaCJXlTJ84DpPZD6g5Gzr+o4TGZIsK1j6+bwjl1br/mwPYdpqTBXtk6NTkR+xXwDIv/fuFXpDFsEr4/h+MTknw7efqXvXO9GM= X-Microsoft-Exchange-Diagnostics: 1; CY4PR02MB2248; 31:cypCjkb/Tg0IlI5zYoIUD3bqSX3NhiAWyB2ClTJ/meV7/wmjc6I94xCNDId4JJim0Udv09GoEIaCHWoKYW8BXwS7kcYYE5iNZY87VWmpxm73h1+uB9oVTRWFOXI+Fq0sZbMQvrdQr2RYVB/2n87Sm24R2ytIwFGiLp2/kdWEZL+1nlmLZx4kt3eVHmJpUUM7kxZi0goARaBvePWzPRuoMkdyKkaP9IblfP3EV/QsSVwf1ZbUVlkgOUAbSMf0SsBR6DIJfoVaOGYElYWMYtuSdA==; 20:Etq0p8PZyUK9iN1mnPDtOOytpJnK35+Innfndp+BYYyq0JpsEV2LhlYTweNi4EBXCICR4Hfix3E72xHdi6p7NNDrS4e5sDlBLoKv1m7Qgslz0VAJHTpLrD7J99Kh48C5Wsa6PtbWDXlVpzeLd6MRRNE1xTwqseNWcTec4vr0JPrwR1rdi/4tTLwmIs1EXdHsKIf9tXcWnnIm02i/0tPFGQYfvVu/C8KlpdneC0Wsl7qN9SghQVWf9SZyQw5UWOz8wqJAbu3vHaE8+vcDYVcB/M0yWsKV2XNMfA2BhLwHFfOuk21e9eG1rAUy3T6zmRD+5aCrGVhcFmzrlP2PpWACla+aDKWnp9NYALTMlSJ6wPPee4js2fiIkgNZNicn1bWGBrD10XCcK97PmKMH9i2VCMzeGVrLUxwFt46u3QifOllPhZ99sIcrF4rTHTCbRTHPzdOh/sazx4cVQ//kpqLxVVUpky7LxvwTW0y/X3Dvrgxiy/dE/S4sdAQiSaSKw8/0 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(72170198267865); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(13016025)(13023025)(13024025)(13018025)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148); SRVR:CY4PR02MB2248; BCL:0; PCL:0; RULEID:; SRVR:CY4PR02MB2248; X-Microsoft-Exchange-Diagnostics: 1; CY4PR02MB2248; 4:+EzGbHqBrd+kttpJZtbdg6hdj+e4AkyAOpb5OqxO+IBNGNASkxMFxBfTpZAIh1TQdl2xPmzCNcGqRsXvQa+0GhGf/LTkJvDuZUGu49Xz14EMNkGNT/MioxiXX6tYl9D9J/guLyT57unDgC9aOl6zl14WFPS2SPhpxs4PzWL16Wds5fPB711lxvwZSGfJDCpoyPBSbCGP2tadGlk7XYlFOWSRlJn5q3Z/joRiNWzjmxbyXVwtzVy03YVNT608j8WX6BzNXZdn3WSGO0TCfSSdO+TETKtEY92mtpSugShHuEmfpqA9aJFyjytytOEgDuLDiOc/v+UlYjUX0YmQDl5joW4c7KTo1jrovPKEB4TEWihUF8UCcljWighOMWprbDJSe36v5kVBoYEMGtNCPR08Jq2+JJVwUuPuaoMjdm+fvzMBK/5ZL8ZeXtqQUyH5wqFKqkGQWr/EmwVBfmnLYvG8JoUekC8H1rlqdHLpVBtdrtFSr8GzcQAtz6m22AwvSxxkVmZecVrb7KNDLBNFRSAPaEBCWgwroniCMkUmwI+TwwNQHPZNTAP5G0cr4mA94xQbz16V6o5uQmuDD7zf2iMTDPECAzyCjV0E3phb3wcJ9P5dmyc4GwmZ4xEJQjpRbZoX5SvQDuYEPR7CTc3zvyqRWrLIfxg1yZ7fFMEyB4CMK22VF4VQNeULh2Pl6Onki9apQtKMgtpHY+38TX2HAIcikA== X-Forefront-PRVS: 015114592F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR02MB2248; 23:xjk43Kvdl7hH37UydhSt2o658oVmKJF6vhTKpcZtF?= =?us-ascii?Q?hpL4R4/F+0Ql3TYYlOXmriT+WUitHzSHXcHHVMv9mZQKQbfJ+YffALR1JDaN?= =?us-ascii?Q?m8UUq4oHuq16ssa0ezsF8cEGh2iekn+FuozfwmrgsEyPocPW+2KiSskT5jYH?= =?us-ascii?Q?SdWuS1S9KIdFFnr2KCiWPaB+Tm6FzlIzomi/b7YUUO8WffqiGxmgMotp+HAy?= =?us-ascii?Q?jN2UtF2P1OEtEEg29iZBFCctTtBiCxby3FTr8aEc59/thqzPL+WpT0VzKjYS?= =?us-ascii?Q?OM5VZhrKa79s5ffkAp71HesEmSDMo2vIxWUvzyOHe7eFPFYjDLwH0LzLfGtC?= =?us-ascii?Q?OzdMBkxIHUwv8MCQ0oIR8TneXsMi42eeb61tjYW/DTtpECXJ5ufga6r/TE2I?= =?us-ascii?Q?sgNx7RRCdnNWJO30oNDzmTHWYFw/tLuTNlBHAFKJ/qkM3wdXu9chtXFJpYkN?= =?us-ascii?Q?4BXOsbULk6n7ZcJoDNZcycvOPQup8HyooB/btNLtZ16Kl703l+iuaSLFWnsc?= =?us-ascii?Q?kCVHJ1S7vjPT5B3TehweZfMkun3kdIhR8qAHAPwkp3ynIVwr++Y+N3GgQ4aS?= =?us-ascii?Q?BTSU46zKjnYhrFKi8COh/fK2FS5K+0BRrkTDXsfFFs+laUdh8wILPAD8EJ69?= =?us-ascii?Q?y/0OLHKLgOHm4cOH3W5UI+xD0aDmQtylBuIFeW9aUMa593BnpDYdAiCxWGcB?= =?us-ascii?Q?U8osntF1KYK9CcUlBxht3AjcGvphWoqoMmUzCwE6ssUIefBL+y/UT7FrflnF?= =?us-ascii?Q?Z7bLxSRsWGTOsu9j3KaoyqvVcRLq0BCMYkUs1Bf6UpFIm6T0VLhYqkcoTpH9?= =?us-ascii?Q?cC6IMIBdX4EghlYQoHWb1G9al8tA1ef5hOlJlaebsNGDAMuJMce6DdQ2j4Mz?= =?us-ascii?Q?iBj1B81E/btkjqf67BOYCN46grhY2hKBS7qMsQDNHVFzeXS0e60ZdvK6FCqM?= =?us-ascii?Q?egd/oLCOSu0utfXCB4wQT7l1ZuB1OGqQGkMNense1zOI4qVhKujcAPqKj25t?= =?us-ascii?Q?TnOZmLktwzi6f1TjvtJEYNU8Sa/IkS8BjI8yHuVFhNvNcKk6epY+gPL7mHFh?= =?us-ascii?Q?eEDUvC1dt+lT0A53YDkkZNvl8XCSykGBiqmVFJKEGAB5Vch2oW8IblmwIRp1?= =?us-ascii?Q?HE3G0oTGqp6rsC2J4jj4KlBmjI0C3b4ZxoPVAmtKz8UZnHT5V6YOsIeVJ+ho?= =?us-ascii?Q?4tWDI3leK0WFyasPrU9aQUxNiXdjkdTCw8z25mLU7Lx9JJPXkuclYofcLLzB?= =?us-ascii?Q?9uvXZ37o3hQr5V9+gqVl9FD3qazXSwFX5TLyXQANpFpXOkdKea0VeLVvlKs+?= =?us-ascii?Q?zOggZrLAXDsikDQaiFMvn20lQw4OgRBWX0G6g0YbaRsvB1rMl/N8W6TOHXEN?= =?us-ascii?Q?pDEtThK9Knbg6iuQQ+RxuUl3HdEdpf10eFwoEwT1fGzJ4LiiQ93Dkn6Skaf3?= =?us-ascii?Q?P3WIGWSnaKUmgOQCodcWiQyywyBNdov7pJiqQzrboYvGZ0F78GdFJA3RZ6u6?= =?us-ascii?Q?e26LufjQzsHls5YhiEW6t2COi8Oo/NWNkNnYM4Va19LF/Hv63OlErRk?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR02MB2248; 6:foMHbk6RWdW0T8ASp4imDn+FEn6qLkvIv8o0fD4B1GNQKeSXWANFTxxl1mwjDzdvWIlgUrMzkSQCT6+3vinqe1Lgwc3PgltPxtUV8pNZTdU4AEZJBpk81Hd3el0kIjmQ6nKaceYXKyVf81/BZV2RcqK1bSNGb8dfAomEWuirKd1Z75oMXx1CIETTkR6oOurQ0rhVvzn/QLCBpQybLrZNPPu3j2di1eTHoQ7HrB4WuiwESbWNHDNIyjhK/p4z6iipJ/PuyjlWcPBfKM9ruDcSEJKW9Rqb4yLhYV7a/BLPJ5KF6Rh6Dd4vGBlvdWblV5oDuGtVSLpZj2fGvZSmYqsdB6UayXlQpxMpoZTWRQedER0uTOKq8OhsbpfYJbTjkJVFE6d02/BhsLkfmtU/EPiU2j2/uYahLi9+O1xF1FmVS4KaIA/iDEYESfY0tNCvlNiZugh9uZeM8Jm7gqdelFv3AvLWKp+ZLTmFjCBrqbAHDwp/QP8IyRR6S7RYZ2z3gGrH; 5:awi1mPrL/QwcgTElbNdlibQcskA+nqW/F+0RIgrby4wTgzAyPGoEEZZo2TFh2gOLMpGtwSFeDxDYd7WYD1GWxb0yKhQHgnWd8fqkApjktYqYEVz+iR8GZ4CG2aR+oYk87AozDErWLAChBK5mhuPRpw==; 24:DvmSviO5acl/rQrzdl/qdpHiP3yk10swGkvHG6T34mw1pk4HWDoRb/Ay2ATuwHfqzfFMEkRBTgaBdF5SBhWRUkCzM6XDX9R5BV5Ls7kpJL0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR02MB2248; 7:XOl6d7+mSGrJysP5u9eadjyiGz5vlRWgo3syIFC/yShIiSxWSlFLh1Jv8KmkGOPoy/XHP18F5vgf0hOFpGsgofBl+vgohe1HvvbhA8mwndttbeWQV8Au/sQzLpE+unsz2YahMS7RW0JpWVDuyLD0E0biIXCzuLydINbcDo21sWQfSt5YXSq2E9GCq/UTmemyhotwKqnXLNjai/uX2eKl2wjBbgsmONtlzSOFSfHFhZuNCYCmI7m3xC8fpy7Xtz87F52BrbwzE7HO+wEzfeUBGxDCNb+yT6feX4BjwbMELo4iHbwW+Lzv94mF7zBE/MIeBKMsm+jN925pOOvaei28prfWKdQ71m3F+4QU+8tb4I6vF5YwUqYofz/BbA6vsnz8myEPz/YKxzbq6Fh1EL55uMbJlyVCblh1E9yyzqk1vdycBMk3Tz+gjV5FVq61A1Vsia1StceWACmHmK439RgPFA== X-OriginatorOrg: microsemi.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2016 22:22:27.3047 (UTC) X-MS-Exchange-CrossTenant-Id: f267a5c8-86d8-4cc9-af71-1fd2c67c8fad X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f267a5c8-86d8-4cc9-af71-1fd2c67c8fad; Ip=[208.19.100.20]; Helo=[avsrvexchhts2.microsemi.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR02MB2248 Subject: [U-Boot] [PATCH v2] net:phy:MSCC Add Support for VSC8530-VSC8531-VSC8540-VSC8541 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" net:phy:MSCC Add Support for VSC8530-VSC8531-VSC8540-VSC8541 Signed-off-by: John Haechten --- drivers/net/phy/Makefile | 1 + drivers/net/phy/mscc.c | 509 ++++++++++++++++++++++++++++++++++++ drivers/net/phy/phy.c | 3 + include/config_phylib_all_drivers.h | 1 + include/configs/am335x_evm.h | 3 + include/phy.h | 1 + 6 files changed, 518 insertions(+) create mode 100644 drivers/net/phy/mscc.c U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile index 1e299b9..d372971 100644 --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -27,3 +27,4 @@ obj-$(CONFIG_PHY_TERANETICS) += teranetics.o obj-$(CONFIG_PHY_TI) += ti.o obj-$(CONFIG_PHY_XILINX) += xilinx_phy.o obj-$(CONFIG_PHY_VITESSE) += vitesse.o +obj-$(CONFIG_PHY_MSCC) += mscc.o diff --git a/drivers/net/phy/mscc.c b/drivers/net/phy/mscc.c new file mode 100644 index 0000000..e665b50 --- /dev/null +++ b/drivers/net/phy/mscc.c @@ -0,0 +1,509 @@ +/* + * Microsemi PHY drivers + * + * SPDX-License-Identifier: The MIT License (MIT) + * + * Copyright (c) 2016 Microsemi Corporation + * + * Author: John Haechten + * + */ + +#include +#include + +/* Microsemi PHY ID's */ +#define PHY_ID_VSC8530 0x00070560 +#define PHY_ID_VSC8531 0x00070570 +#define PHY_ID_VSC8540 0x00070760 +#define PHY_ID_VSC8541 0x00070770 + +/* Microsemi VSC85xx PHY Register Pages */ +#define MSCC_EXT_PAGE_ACCESS 31 /* Page Access Register */ +#define MSCC_PHY_PAGE_STD 0x0000 /* Standard registers */ +#define MSCC_PHY_PAGE_EXT1 0x0001 /* Extended registers - page 1 */ +#define MSCC_PHY_PAGE_EXT2 0x0002 /* Extended registers - page 2 */ +#define MSCC_PHY_PAGE_EXT3 0x0003 /* Extended registers - page 3 */ +#define MSCC_PHY_PAGE_EXT4 0x0004 /* Extended registers - page 4 */ +#define MSCC_PHY_PAGE_GPIO 0x0010 /* GPIO registers */ +#define MSCC_PHY_PAGE_TEST 0x2A30 /* TEST Page registers */ +#define MSCC_PHY_PAGE_TR 0x52B5 /* Token Ring Page registers */ + +/* Std Page Register 28 - PHY AUX Control/Status */ +#define MIIM_AUX_CNTRL_STAT_REG 28 +#define MIIM_AUX_CNTRL_STAT_ACTIPHY_TO (0x0004) +#define MIIM_AUX_CNTRL_STAT_F_DUPLEX (0x0020) +#define MIIM_AUX_CNTRL_STAT_SPEED_MASK (0x0018) +#define MIIM_AUX_CNTRL_STAT_SPEED_POS (3) +#define MIIM_AUX_CNTRL_STAT_SPEED_10M (0x0) +#define MIIM_AUX_CNTRL_STAT_SPEED_100M (0x1) +#define MIIM_AUX_CNTRL_STAT_SPEED_1000M (0x2) + +/* Std Page Register 23 - Extended PHY CTRL_1 */ +#define MSCC_PHY_EXT_PHY_CNTL_1_REG 23 +#define MAC_IF_SELECTION_MASK (0x1800) +#define MAC_IF_SELECTION_GMII (0) +#define MAC_IF_SELECTION_RMII (1) +#define MAC_IF_SELECTION_RGMII (2) +#define MAC_IF_SELECTION_POS (11) +#define MAC_IF_SELECTION_WIDTH (2) + +/* Extended Page 2 Register 20E2 */ +#define MSCC_PHY_RGMII_CNTL_REG 20 +#define VSC_FAST_LINK_FAIL2_ENA_MASK (0x8000) +#define RX_CLK_OUT_MASK (0x0800) +#define RX_CLK_OUT_POS (11) +#define RX_CLK_OUT_WIDTH (1) +#define RX_CLK_OUT_NORMAL (0) +#define RX_CLK_OUT_DISABLE (1) +#define RGMII_RX_CLK_DELAY_POS (4) +#define RGMII_RX_CLK_DELAY_WIDTH (3) +#define RGMII_RX_CLK_DELAY_MASK (0x0070) +#define RGMII_TX_CLK_DELAY_POS (0) +#define RGMII_TX_CLK_DELAY_WIDTH (3) +#define RGMII_TX_CLK_DELAY_MASK (0x0007) + +/* Extended Page 2 Register 27E2 */ +#define MSCC_PHY_WOL_MAC_CONTROL 27 +#define EDGE_RATE_CNTL_POS (5) +#define EDGE_RATE_CNTL_WIDTH (3) +#define EDGE_RATE_CNTL_MASK (0x00E0) +#define RMII_CLK_OUT_ENABLE_POS (4) +#define RMII_CLK_OUT_ENABLE_WIDTH (1) +#define RMII_CLK_OUT_ENABLE_MASK (0x10) + +/* Token Ring Page 0x52B5 Registers */ +#define MSCC_PHY_REG_TR_ADDR_16 16 +#define MSCC_PHY_REG_TR_DATA_17 17 +#define MSCC_PHY_REG_TR_DATA_18 18 + +/* Token Ring - Read Value in */ +#define MSCC_PHY_TR_16_READ (0xA000) +/* Token Ring - Write Value out */ +#define MSCC_PHY_TR_16_WRITE (0x8000) + +/* Token Ring Registers */ +#define MSCC_PHY_TR_LINKDETCTRL_POS (3) +#define MSCC_PHY_TR_LINKDETCTRL_WIDTH (2) +#define MSCC_PHY_TR_LINKDETCTRL_VAL (3) +#define MSCC_PHY_TR_LINKDETCTRL_MASK (0x0018) +#define MSCC_PHY_TR_LINKDETCTRL_ADDR (0x07F8) + +#define MSCC_PHY_TR_VGATHRESH100_POS (0) +#define MSCC_PHY_TR_VGATHRESH100_WIDTH (7) +#define MSCC_PHY_TR_VGATHRESH100_VAL (0x0018) +#define MSCC_PHY_TR_VGATHRESH100_MASK (0x007f) +#define MSCC_PHY_TR_VGATHRESH100_ADDR (0x0FA4) + +#define MSCC_PHY_TR_VGAGAIN10_U_POS (0) +#define MSCC_PHY_TR_VGAGAIN10_U_WIDTH (1) +#define MSCC_PHY_TR_VGAGAIN10_U_MASK (0x0001) +#define MSCC_PHY_TR_VGAGAIN10_U_VAL (0) + +#define MSCC_PHY_TR_VGAGAIN10_L_POS (12) +#define MSCC_PHY_TR_VGAGAIN10_L_WIDTH (4) +#define MSCC_PHY_TR_VGAGAIN10_L_MASK (0xf000) +#define MSCC_PHY_TR_VGAGAIN10_L_VAL (0x0001) +#define MSCC_PHY_TR_VGAGAIN10_ADDR (0x0F92) + +/* General Timeout Values */ +#define MSCC_PHY_RESET_TIMEOUT (100) +#define MSCC_PHY_MICRO_TIMEOUT (500) + +/* RGMII/GMII Clock Delay (Skew) Options */ enum vsc_phy_rgmii_skew { + VSC_PHY_RGMII_DELAY_200_PS, + VSC_PHY_RGMII_DELAY_800_PS, + VSC_PHY_RGMII_DELAY_1100_PS, + VSC_PHY_RGMII_DELAY_1700_PS, + VSC_PHY_RGMII_DELAY_2000_PS, + VSC_PHY_RGMII_DELAY_2300_PS, + VSC_PHY_RGMII_DELAY_2600_PS, + VSC_PHY_RGMII_DELAY_3400_PS, +}; + +/* MAC i/f Clock Edge Rage Control (Slew), See Reg27E2 */ enum +vsc_phy_clk_slew { + VSC_PHY_CLK_SLEW_RATE_0, + VSC_PHY_CLK_SLEW_RATE_1, + VSC_PHY_CLK_SLEW_RATE_2, + VSC_PHY_CLK_SLEW_RATE_3, + VSC_PHY_CLK_SLEW_RATE_4, + VSC_PHY_CLK_SLEW_RATE_5, + VSC_PHY_CLK_SLEW_RATE_6, + VSC_PHY_CLK_SLEW_RATE_7, +}; + + +static int mscc_vsc8531_vsc8541_init_scripts(struct phy_device *phydev) +{ + u16 reg_val; + + /* Set to Access Token Ring Registers */ + phy_write(phydev, MDIO_DEVAD_NONE, + MSCC_EXT_PAGE_ACCESS, MSCC_PHY_PAGE_TR); + + /* Update LinkDetectCtrl default to optimized values */ + /* Determined during Silicon Validation Testing */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_ADDR_16, + (MSCC_PHY_TR_LINKDETCTRL_ADDR | MSCC_PHY_TR_16_READ)); + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_17); + reg_val = bitfield_replace(reg_val, MSCC_PHY_TR_LINKDETCTRL_POS, + MSCC_PHY_TR_LINKDETCTRL_WIDTH, + MSCC_PHY_TR_LINKDETCTRL_VAL); + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_17, reg_val); + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_ADDR_16, + (MSCC_PHY_TR_LINKDETCTRL_ADDR | MSCC_PHY_TR_16_WRITE)); + + /* Update VgaThresh100 defaults to optimized values */ + /* Determined during Silicon Validation Testing */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_ADDR_16, + (MSCC_PHY_TR_VGATHRESH100_ADDR | MSCC_PHY_TR_16_READ)); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_18); + reg_val = bitfield_replace(reg_val, MSCC_PHY_TR_VGATHRESH100_POS, + MSCC_PHY_TR_VGATHRESH100_WIDTH, + MSCC_PHY_TR_VGATHRESH100_VAL); + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_18, reg_val); + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_ADDR_16, + (MSCC_PHY_TR_VGATHRESH100_ADDR | MSCC_PHY_TR_16_WRITE)); + + /* Update VgaGain10 defaults to optimized values */ + /* Determined during Silicon Validation Testing */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_ADDR_16, + (MSCC_PHY_TR_VGAGAIN10_ADDR | MSCC_PHY_TR_16_READ)); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_18); + reg_val = bitfield_replace(reg_val, MSCC_PHY_TR_VGAGAIN10_U_POS, + MSCC_PHY_TR_VGAGAIN10_U_WIDTH, + MSCC_PHY_TR_VGAGAIN10_U_VAL); + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_18, reg_val); + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_17); + reg_val = bitfield_replace(reg_val, MSCC_PHY_TR_VGAGAIN10_L_POS, + MSCC_PHY_TR_VGAGAIN10_L_WIDTH, + MSCC_PHY_TR_VGAGAIN10_L_VAL); + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_DATA_17, reg_val); + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_REG_TR_ADDR_16, + (MSCC_PHY_TR_VGAGAIN10_ADDR | MSCC_PHY_TR_16_WRITE)); + + /* Set back to Access Standard Page Registers */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_STD); + + return 0; +} + +static int mscc_parse_status(struct phy_device *phydev) { + u16 speed; + u16 mii_reg; + + mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_AUX_CNTRL_STAT_REG); + + if (mii_reg & MIIM_AUX_CNTRL_STAT_F_DUPLEX) + phydev->duplex = DUPLEX_FULL; + else + phydev->duplex = DUPLEX_HALF; + + speed = mii_reg & MIIM_AUX_CNTRL_STAT_SPEED_MASK; + speed = speed >> MIIM_AUX_CNTRL_STAT_SPEED_POS; + + switch (speed) { + case MIIM_AUX_CNTRL_STAT_SPEED_1000M: + phydev->speed = SPEED_1000; + break; + case MIIM_AUX_CNTRL_STAT_SPEED_100M: + phydev->speed = SPEED_100; + break; + case MIIM_AUX_CNTRL_STAT_SPEED_10M: + phydev->speed = SPEED_10; + break; + default: + phydev->speed = SPEED_10; + break; + } + + return 0; +} + +static int mscc_startup(struct phy_device *phydev) { + int retval; + + retval = genphy_update_link(phydev); + + if (retval) + return retval; + + return mscc_parse_status(phydev); +} + +static int mscc_phy_soft_reset(struct phy_device *phydev) { + int retval = 0; + u16 timeout = MSCC_PHY_RESET_TIMEOUT; + u16 reg_val = 0; + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_STD); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); + phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, (reg_val | BMCR_RESET)); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); + + while ((reg_val & BMCR_RESET) && (timeout > 0)) { + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); + timeout--; + udelay(1000); /* 1 ms */ + } + + if (timeout == 0) { + printf("MSCC PHY Soft_Reset Error: mac i/f = 0x%x\n", + phydev->interface); + retval = -ETIME; + } + + return retval; +} + +static int vsc8531_vsc8541_mac_config(struct phy_device *phydev) { + u16 reg_val = 0; + u16 mac_if = 0; + u16 rx_clk_out = 0; + + /* For VSC8530/31 the only MAC modes are RMII/RGMII. */ + /* For VSC8540/41 the only MAC modes are (G)MII and RMII/RGMII. */ + /* Setup MAC Configuration */ + switch (phydev->interface) { + case PHY_INTERFACE_MODE_MII: + case PHY_INTERFACE_MODE_GMII: + /* Set Reg23.12:11=0 */ + mac_if = MAC_IF_SELECTION_GMII; + /* Set Reg20E2.11=1 */ + rx_clk_out = RX_CLK_OUT_DISABLE; + break; + + case PHY_INTERFACE_MODE_RMII: + /* Set Reg23.12:11=1 */ + mac_if = MAC_IF_SELECTION_RMII; + /* Set Reg20E2.11=0 */ + rx_clk_out = RX_CLK_OUT_NORMAL; + break; + + case PHY_INTERFACE_MODE_RGMII: + /* Set Reg23.12:11=2 */ + mac_if = MAC_IF_SELECTION_RGMII; + /* Set Reg20E2.11=0 */ + rx_clk_out = RX_CLK_OUT_NORMAL; + break; + + default: + printf("MSCC PHY - INVALID MAC i/f Config: mac i/f = 0x%x\n", + phydev->interface); + return -EINVAL; + } + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_STD); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, + MSCC_PHY_EXT_PHY_CNTL_1_REG); + /* Set MAC i/f bits Reg23.12:11 */ + reg_val = bitfield_replace(reg_val, MAC_IF_SELECTION_POS, + MAC_IF_SELECTION_WIDTH, mac_if); + /* Update Reg23.12:11 */ + phy_write(phydev, MDIO_DEVAD_NONE, + MSCC_PHY_EXT_PHY_CNTL_1_REG, reg_val); + /* Setup ExtPg_2 Register Access */ + phy_write(phydev, MDIO_DEVAD_NONE, + MSCC_EXT_PAGE_ACCESS, MSCC_PHY_PAGE_EXT2); + /* Read Reg20E2 */ + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, + MSCC_PHY_RGMII_CNTL_REG); + reg_val = bitfield_replace(reg_val, RX_CLK_OUT_POS, + RX_CLK_OUT_WIDTH, rx_clk_out); + /* Update Reg20E2.11 */ + phy_write(phydev, MDIO_DEVAD_NONE, + MSCC_PHY_RGMII_CNTL_REG, reg_val); + /* Before leaving - Change back to Std Page Register Access */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_STD); + + return 0; +} + +static int vsc8531_config(struct phy_device *phydev) { + int retval = -EINVAL; + u16 reg_val; + u16 rmii_clk_out; + enum vsc_phy_rgmii_skew rx_clk_skew = VSC_PHY_RGMII_DELAY_1700_PS; + enum vsc_phy_rgmii_skew tx_clk_skew = VSC_PHY_RGMII_DELAY_800_PS; + enum vsc_phy_clk_slew edge_rate = VSC_PHY_CLK_SLEW_RATE_4; + + /* For VSC8530/31 and VSC8540/41 the init scripts are the same */ + mscc_vsc8531_vsc8541_init_scripts(phydev); + + /* For VSC8530/31 the only MAC modes are RMII/RGMII. */ + switch (phydev->interface) { + case PHY_INTERFACE_MODE_RMII: + case PHY_INTERFACE_MODE_RGMII: + retval = vsc8531_vsc8541_mac_config(phydev); + if (retval != 0) + return retval; + + retval = mscc_phy_soft_reset(phydev); + if (retval != 0) + return retval; + break; + default: + printf("PHY 8530/31 MAC i/f Config Error: mac i/f = 0x%x\n", + phydev->interface); + return -EINVAL; + } + /* Default RMII Clk Output to 0=OFF/1=ON */ + rmii_clk_out = 0; + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_EXT2); + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_RGMII_CNTL_REG); + + /* Reg20E2 - Update RGMII RX_Clk Skews. */ + reg_val = bitfield_replace(reg_val, RGMII_RX_CLK_DELAY_POS, + RGMII_RX_CLK_DELAY_WIDTH, rx_clk_skew); + /* Reg20E2 - Update RGMII TX_Clk Skews. */ + reg_val = bitfield_replace(reg_val, RGMII_TX_CLK_DELAY_POS, + RGMII_TX_CLK_DELAY_WIDTH, tx_clk_skew); + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_RGMII_CNTL_REG, reg_val); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_WOL_MAC_CONTROL); + /* Reg27E2 - Update Clk Slew Rate. */ + reg_val = bitfield_replace(reg_val, EDGE_RATE_CNTL_POS, + EDGE_RATE_CNTL_WIDTH, edge_rate); + /* Reg27E2 - Update RMII Clk Out. */ + reg_val = bitfield_replace(reg_val, RMII_CLK_OUT_ENABLE_POS, + RMII_CLK_OUT_ENABLE_WIDTH, rmii_clk_out); + /* Update Reg27E2 */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_WOL_MAC_CONTROL, reg_val); + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_STD); + + return genphy_config_aneg(phydev); +} + +static int vsc8541_config(struct phy_device *phydev) { + int retval = -EINVAL; + u16 reg_val; + u16 rmii_clk_out; + enum vsc_phy_rgmii_skew rx_clk_skew = VSC_PHY_RGMII_DELAY_1700_PS; + enum vsc_phy_rgmii_skew tx_clk_skew = VSC_PHY_RGMII_DELAY_800_PS; + enum vsc_phy_clk_slew edge_rate = VSC_PHY_CLK_SLEW_RATE_4; + + /* For VSC8530/31 and VSC8540/41 the init scripts are the same */ + mscc_vsc8531_vsc8541_init_scripts(phydev); + + /* For VSC8540/41 the only MAC modes are (G)MII and RMII/RGMII. */ + switch (phydev->interface) { + case PHY_INTERFACE_MODE_MII: + case PHY_INTERFACE_MODE_GMII: + case PHY_INTERFACE_MODE_RMII: + case PHY_INTERFACE_MODE_RGMII: + retval = vsc8531_vsc8541_mac_config(phydev); + if (retval != 0) + return retval; + + retval = mscc_phy_soft_reset(phydev); + if (retval != 0) + return retval; + break; + default: + printf("PHY 8541 MAC i/f config Error: mac i/f = 0x%x\n", + phydev->interface); + return -EINVAL; + } + /* Default RMII Clk Output to 0=OFF/1=ON */ + rmii_clk_out = 0; + + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_EXT2); + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_RGMII_CNTL_REG); + /* Reg20E2 - Update RGMII RX_Clk Skews. */ + reg_val = bitfield_replace(reg_val, RGMII_RX_CLK_DELAY_POS, + RGMII_RX_CLK_DELAY_WIDTH, rx_clk_skew); + /* Reg20E2 - Update RGMII TX_Clk Skews. */ + reg_val = bitfield_replace(reg_val, RGMII_TX_CLK_DELAY_POS, + RGMII_TX_CLK_DELAY_WIDTH, tx_clk_skew); + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_RGMII_CNTL_REG, reg_val); + + reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MSCC_PHY_WOL_MAC_CONTROL); + /* Reg27E2 - Update Clk Slew Rate. */ + reg_val = bitfield_replace(reg_val, EDGE_RATE_CNTL_POS, + EDGE_RATE_CNTL_WIDTH, edge_rate); + /* Reg27E2 - Update RMII Clk Out. */ + reg_val = bitfield_replace(reg_val, RMII_CLK_OUT_ENABLE_POS, + RMII_CLK_OUT_ENABLE_WIDTH, rmii_clk_out); + /* Update Reg27E2 */ + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_PHY_WOL_MAC_CONTROL, reg_val); + phy_write(phydev, MDIO_DEVAD_NONE, MSCC_EXT_PAGE_ACCESS, + MSCC_PHY_PAGE_STD); + + return genphy_config_aneg(phydev); +} + +static struct phy_driver VSC8530_driver = { + .name = "Microsemi VSC8530", + .uid = PHY_ID_VSC8530, + .mask = 0x000ffff0, + .features = PHY_BASIC_FEATURES, + .config = &vsc8531_config, + .startup = &mscc_startup, + .shutdown = &genphy_shutdown, +}; + +static struct phy_driver VSC8531_driver = { + .name = "Microsemi VSC8531", + .uid = PHY_ID_VSC8531, + .mask = 0x000ffff0, + .features = PHY_GBIT_FEATURES, + .config = &vsc8531_config, + .startup = &mscc_startup, + .shutdown = &genphy_shutdown, +}; + +static struct phy_driver VSC8540_driver = { + .name = "Microsemi VSC8540", + .uid = PHY_ID_VSC8540, + .mask = 0x000ffff0, + .features = PHY_BASIC_FEATURES, + .config = &vsc8541_config, + .startup = &mscc_startup, + .shutdown = &genphy_shutdown, +}; + +static struct phy_driver VSC8541_driver = { + .name = "Microsemi VSC8541", + .uid = PHY_ID_VSC8541, + .mask = 0x000ffff0, + .features = PHY_GBIT_FEATURES, + .config = &vsc8541_config, + .startup = &mscc_startup, + .shutdown = &genphy_shutdown, +}; + +int phy_mscc_init(void) +{ + phy_register(&VSC8530_driver); + phy_register(&VSC8531_driver); + phy_register(&VSC8540_driver); + phy_register(&VSC8541_driver); + + return 0; +} diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 80bdfb6..8db6574 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -512,6 +512,9 @@ int phy_init(void) #ifdef CONFIG_PHY_XILINX phy_xilinx_init(); #endif +#ifdef CONFIG_PHY_MSCC + phy_mscc_init(); +#endif return 0; } diff --git a/include/config_phylib_all_drivers.h b/include/config_phylib_all_drivers.h index 12828c6..d2965ed 100644 --- a/include/config_phylib_all_drivers.h +++ b/include/config_phylib_all_drivers.h @@ -14,6 +14,7 @@ #ifdef CONFIG_PHYLIB +#define CONFIG_PHY_MSCC #define CONFIG_PHY_VITESSE #define CONFIG_PHY_MARVELL #define CONFIG_PHY_MICREL diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index ec70b72..694e249 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -433,6 +433,9 @@ #define CONFIG_PHY_SMSC /* Enable Atheros phy driver */ #define CONFIG_PHY_ATHEROS +/* Enable MSCC phy driver */ +#define CONFIG_PHY_MSCC + /* * NOR Size = 16 MiB diff --git a/include/phy.h b/include/phy.h index 268d9a1..5477496 100644 --- a/include/phy.h +++ b/include/phy.h @@ -266,6 +266,7 @@ int phy_teranetics_init(void); int phy_ti_init(void); int phy_vitesse_init(void); int phy_xilinx_init(void); +int phy_mscc_init(void); int board_phy_config(struct phy_device *phydev); int get_phy_id(struct mii_dev *bus, int addr, int devad, u32 *phy_id); -- 1.9.1 _______________________________________________ U-Boot mailing list