From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758349AbdJMOu2 (ORCPT ); Fri, 13 Oct 2017 10:50:28 -0400 Received: from mail-bl2nam02on0044.outbound.protection.outlook.com ([104.47.38.44]:25918 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1757889AbdJMOuV (ORCPT ); Fri, 13 Oct 2017 10:50:21 -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: Madalin Bucur To: , CC: , , , , Subject: [PATCH v2 2/5] dpaa_eth: move of_phy_connect() to the eth driver Date: Fri, 13 Oct 2017 17:50:09 +0300 Message-ID: <1507906212-10076-3-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1507906212-10076-1-git-send-email-madalin.bucur@nxp.com> References: <1507906212-10076-1-git-send-email-madalin.bucur@nxp.com> Reply-To: X-EOPAttributedMessage: 0 X-Matching-Connectors: 131523798199845007;(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)(7966004)(336005)(39380400002)(376002)(346002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(50986999)(189998001)(76176999)(3450700001)(43066003)(110136005)(54906003)(50466002)(498600001)(53936002)(106466001)(105606002)(6666003)(2906002)(48376002)(5003940100001)(2950100002)(316002)(16586007)(5890100001)(85426001)(33646002)(97736004)(8936002)(305945005)(356003)(104016004)(81166006)(86362001)(575784001)(5660300001)(50226002)(77096006)(4326008)(39060400002)(36756003)(68736007)(81156014)(47776003)(8676002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR03MB2353;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD045;1:Nrorcx/sCwV+bHX7laNt4Y6h0lpcaYIZx/aIeMyZzNaOYoCsOWTZfDJsZfoYfEKLPezHQpsbRpw6tCq8VtmKXO/59OPHJsNx9o9qna5Dl0sA9lASSwhsq+h0WpRikayP MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bacb8798-a432-41e8-408f-08d51249b9ad X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017052603199)(201703131430075)(201703131517081);SRVR:BN3PR03MB2353; X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2353;3:ecHG3Q9sx2uSQ3/FU6caVF3pHwNF1N0m/4spZMBBq8Hl8q1x90cu3Q7AkDH1yxVvFjbGZoI7+PfoDFz/soT2dSUo6SxkqsMQkV3VEWGzPXgM7lGqoj2zgnwA0Wn/8ZDbY4xDTcvACsigNhdulNya2UenAqmmdv97YR0lRYRi1Q/LiNEZI3xbSY3b+5XH4HYJTL0MNL7leYJfBRTfFDUc+NN9xgRCFCYC6J9Eb/j3vcTrsALA5bjUxlexyTxvJukaKj3pXjmBWSE5AnNl2gY0KUlbXuGqrnBqB2kbPEs6yjOMREAIeLOWWo9FdRZPAJ38wrIZTOJ6oChGdnOvg/WfZ/y0lK5mF6ylNbEru0eb0iY=;25:Y6BrbxL0zB6O+CmqN7D4rWCZya06Xw/zww3iiHcVkUeth7JMqYlWx3s6p+f+QQouXawqmpQjmjaTRiyYYgNDVEHqygsP006wfw7pfndAqhRIW/tL1R+TdACU7e9Ysgv1nZLN9upr934tsSUNrYwbRgvQX2b+X1SRRr7RJnpvLDoVtN7ChMVEsdPBe5L8HfMGnusLfYn5FMu99O6w9OK7fj51BusNGsTLLW5vcI1OpcPfcXpSeTpE2DX54Is6uagsZgxRDI+qeGVxBa3bLgSLubB2mrFde92BnqNL8g6/gCV26U9VIZvxtaRjH6t8priIN8WlIDuLAbmVC3TX/RjgQg== X-MS-TrafficTypeDiagnostic: BN3PR03MB2353: X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2353;31:3ojALz/LnGhP5YfgQBPyOPERvabevIdbJHU1Yj/YJo8tGdzk6Plnx1VdsIrWsMgiiUI/Yvq3CuUABlC7yptgsz51E9TGTwvJXzTAb9pfXgjfGnyOFi9twuBZmb1Y++LRZG5lFK33KYNotihLlFfOyad85HYBJzAWqmkfi/wIArQfThmFhUeKwNt8sHnr30PVHaQLF9V8SKvrqGR4q3TAUfZqZN+iHRloYvYaMpEC9wk=;4:A1NxCMP49rvYoVsgWJ905NiTXUimmbrPy3Wx69kKnBTfh0KMdjDmGW2Oo+O4F7yoGJy2QWtO4EUmnXz9PnN7MO0bKbBeUsIMAsChIwDn9fRxKKRjsEhkSMu+/iirOIRqMMkDBjPaejO3GwD3I68dZ4mRDZLLprhTnD4vAf/ucm1TRUp1X1d/CkI6YIObhcdTP9Xm1C2d2IoNb3vUsD0jUwDf3MKEbB7ihwzKqnfBDeQzPLCVRHk/qvoh4uc3WnJvkOrFhRKA808vmiUHBhpMAQRcmN09NJ+M7o2OUynYWbX6xhtSEhYseRfTLvXCKDwUQt5Y7xouhVjq0ehVdPp/MA== X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(21532816269658); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(10201501046)(3002001)(100000703101)(100105400095)(93006095)(93001095)(6055026)(6096035)(20161123565025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123561025)(20161123559100)(20161123563025)(20161123556025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:BN3PR03MB2353;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:BN3PR03MB2353; X-Forefront-PRVS: 04599F3534 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR03MB2353;23:rG4GcCJs/SNGAPIA+eWxHfTe9vhZxjajxH9J88+fB?= =?us-ascii?Q?wT7fYH5vg0p4eukvmwt2uyoXIfr897eWs/IBu5DJBflK0FmY1FlSL5pw2ggG?= =?us-ascii?Q?if5+X50Y0YgyVho+OSnmbazNcw/Lnc8YDMtWe2uxf+bVwKQxgu/30p58lMNF?= =?us-ascii?Q?JEcORrs2CsbUuyE/ybIHgoLvPloAq2TRmmhhayIUqd9e8SVHawX5CS0bTJje?= =?us-ascii?Q?XdOiHk77XoXq7pZ4kSrHFm1WMcMeB5/1LtgkixTRj9hbY9jL0mzPpQ/IeaKd?= =?us-ascii?Q?gn8VjUuWbskseMMrGUq+pVvT8Hpi7/5ohXsYC7fODg0vpFScorp/8RXNNhuf?= =?us-ascii?Q?0MJ05HfOD+HfnMPNeihLHmHzVwGyh7BHumN+PBLmK8gMr8D2X2x8Tt5Y8Zf1?= =?us-ascii?Q?pHzTGcyGsssynV9qXLBEgWrYehdDu+EFpSVCXTvT4ffW1VL0XfSX33Jzlv++?= =?us-ascii?Q?7xueNUHaf3FBL0iLTcP2kEcRhx7yNbaPJv16XVcxu5gK+XdFX/WuEG0T1z6h?= =?us-ascii?Q?8LajiqnxTv7t6k7gvkoSJwOaRx1ROrnU1WCK8rst0M+Or3lI1lyW8uFtiebA?= =?us-ascii?Q?buVjtEs5QYNjwj5otzHSL3E+n5HIyQ40rUUpsx52XSJribt2tJDfj4NXOT3f?= =?us-ascii?Q?Vx8L7SOt71dyIfSMcWbOK3aGWjzs8auu0n3YZ4sllTfrr4fma16XPFPHdlU7?= =?us-ascii?Q?8BeGBDcUnFJlDJjoanwzvuwoUKo6TdfmJeAmpLbgDdZUtFRYRXpFjPDPyUCl?= =?us-ascii?Q?GFkI8Dd6sLwIEudi8VPix5Vv3Z2sGEpvqZngAFViMMdfBW9rBjL1nOMRCy4Z?= =?us-ascii?Q?/HNWXa6gfzFquZsaGarrAfeeOs4MkftUP43F98TLLvdkZ8d/Gs+PQH4ESR4M?= =?us-ascii?Q?DL9JD2X6xjO1/k57vlFLvppzcU2bRFoFqL/gcoEfX+gKYyZs0RXyDYsUR89q?= =?us-ascii?Q?ZXxY2QBQgRD66B8Ed+e6/oNnx7wgiBBe4i1ZjyRUDfYw9Nuhe38vwp3yHC0H?= =?us-ascii?Q?OGDCEUMM9ZjezZFdKtW6PQ2ep+pQGoR+sSrw/2FR/FwEKF9RSBMYw5bpjUno?= =?us-ascii?Q?c8BrnXkMutt72Qgj9N4UP9ThE9kG1t7eHtAFP5lwZEOmDpT2ErmLHHVR2qrh?= =?us-ascii?Q?xJxzQPtU5Nd56piG0kxQJeesoSzZUX37yMZ3+iS2/7BSWww7IR77B3A54Gzu?= =?us-ascii?Q?Pdpo9+wiSTnfkAcFiTtLZOqyPdvaBDc5o6vdDYDxXKNjAfYeS9LfRrmN8XwV?= =?us-ascii?Q?cGiGzrVpAFZpiV5SonwF6NPLPf4Qa/y0nPHJ8xD?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2353;6:FIlbbnxX4Z7UOAttqvXfOWI8tiv+DFZYjNXLztTt5ofGvBTzZVKxZ52cEWoQuL1t92ndW0/g/DyYxtq+aCRcTP5xNCRG37kx1SliCjWTgDjvRdPTc+1yKUQGPOrgBAps8k4wutnJVzNtuzSQBHu6fOp5JaslAtlbXjp2MLyr1bqGdQtyw12U3MB67BSNV3B5di9VE88AAjg4Ep0t/WJaIFjLdoEwf0ZzTGvuhF9TKJgkcIacJURMDjzpu9VVwjWfkCV6qq0hELczwlIvZqNhyXUQCIl3HuM4Nr4oYMJioA4S6rRm8Cg6+lS9TPwxfziuxWhA/Eh3pLX9BVPruJ8eAg==;5:Qt/EqVRjbaszag/PW3aja4JptTfaEEmiJaD72YbBSfwR4/La5P8PhAAAl42woezYDNbwE58hPR2QGKk4bS7xsw52cG5EqYgWM7KoCCVjZq89WuLGZUYwj5yu2mNH2SHJXk/y9Sb5I9gAGuYqF9cE/A==;24:p+j/jG0qDtbiNX5dHA5xMMWl46ERJXuuZzanW576nzM0Gt2v2mcwagrdjbWsyH57mGjl7RgAOlnvNUisOs0dy353MqkfvG6doobEw+YF/Xs=;7:AuEICjuHiG6Dcc5uxiVGUGPrR3FearNxedbTHeBsOxlGzU+D5j8bs+SBsP4FxCE4jo5PDqGv9m0gMSA5tIM/oQt5Xy86uUbFlP9f6SIAw7RTu0dIJZetUNEjYu6wL0KsD+CSCPfZgLdsnOR0Z8ZipEd4W2nHUv9+DhpD1BOMG8NjC4zbs91EQAr/YY+MDV19X0vZnYDdyOvrdoD/tNRv9pbp8nTz3/cZrUGAdEmIyGU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2017 14:50:19.6413 (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: BN3PR03MB2353 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 48 +++++++++++-- drivers/net/ethernet/freescale/fman/mac.c | 97 ++++++-------------------- drivers/net/ethernet/freescale/fman/mac.h | 5 +- 3 files changed, 66 insertions(+), 84 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index 4225806..7cf61d6 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -2435,6 +2435,48 @@ static void dpaa_eth_napi_disable(struct dpaa_priv *priv) } } +static void dpaa_adjust_link(struct net_device *net_dev) +{ + struct mac_device *mac_dev; + struct dpaa_priv *priv; + + priv = netdev_priv(net_dev); + mac_dev = priv->mac_dev; + mac_dev->adjust_link(mac_dev); +} + +static int dpaa_phy_init(struct net_device *net_dev) +{ + struct mac_device *mac_dev; + struct phy_device *phy_dev; + struct dpaa_priv *priv; + + priv = netdev_priv(net_dev); + mac_dev = priv->mac_dev; + + phy_dev = of_phy_connect(net_dev, mac_dev->phy_node, + &dpaa_adjust_link, 0, + mac_dev->phy_if); + if (!phy_dev) { + netif_err(priv, ifup, net_dev, "init_phy() failed\n"); + return -ENODEV; + } + + /* Remove any features not supported by the controller */ + phy_dev->supported &= mac_dev->if_support; + + /* Enable the symmetric and asymmetric PAUSE frame advertisements, + * as most of the PHY drivers do not enable them by default. + */ + phy_dev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); + phy_dev->advertising = phy_dev->supported; + + mac_dev->phy_dev = phy_dev; + net_dev->phydev = phy_dev; + + return 0; +} + static int dpaa_open(struct net_device *net_dev) { struct mac_device *mac_dev; @@ -2445,12 +2487,8 @@ static int dpaa_open(struct net_device *net_dev) mac_dev = priv->mac_dev; dpaa_eth_napi_enable(priv); - net_dev->phydev = mac_dev->init_phy(net_dev, priv->mac_dev); - if (!net_dev->phydev) { - netif_err(priv, ifup, net_dev, "init_phy() failed\n"); - err = -ENODEV; + if (dpaa_phy_init(net_dev)) goto phy_init_failed; - } for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) { err = fman_port_enable(mac_dev->port[i]); diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c index 9a265f8..a0a3107 100644 --- a/drivers/net/ethernet/freescale/fman/mac.c +++ b/drivers/net/ethernet/freescale/fman/mac.c @@ -57,9 +57,7 @@ struct mac_priv_s { struct device *dev; void __iomem *vaddr; u8 cell_index; - phy_interface_t phy_if; struct fman *fman; - struct device_node *phy_node; struct device_node *internal_phy_node; /* List of multicast addresses */ struct list_head mc_addr_list; @@ -106,7 +104,7 @@ static void set_fman_mac_params(struct mac_device *mac_dev, resource_size(mac_dev->res)); memcpy(¶ms->addr, mac_dev->addr, sizeof(mac_dev->addr)); params->max_speed = priv->max_speed; - params->phy_if = priv->phy_if; + params->phy_if = mac_dev->phy_if; params->basex_if = false; params->mac_id = priv->cell_index; params->fm = (void *)priv->fman; @@ -419,15 +417,12 @@ void fman_get_pause_cfg(struct mac_device *mac_dev, bool *rx_pause, } EXPORT_SYMBOL(fman_get_pause_cfg); -static void adjust_link_void(struct net_device *net_dev) +static void adjust_link_void(struct mac_device *mac_dev) { } -static void adjust_link_dtsec(struct net_device *net_dev) +static void adjust_link_dtsec(struct mac_device *mac_dev) { - struct device *dev = net_dev->dev.parent; - struct dpaa_eth_data *eth_data = dev->platform_data; - struct mac_device *mac_dev = eth_data->mac_dev; struct phy_device *phy_dev = mac_dev->phy_dev; struct fman_mac *fman_mac; bool rx_pause, tx_pause; @@ -444,14 +439,12 @@ static void adjust_link_dtsec(struct net_device *net_dev) fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); if (err < 0) - netdev_err(net_dev, "fman_set_mac_active_pause() = %d\n", err); + dev_err(mac_dev->priv->dev, "fman_set_mac_active_pause() = %d\n", + err); } -static void adjust_link_memac(struct net_device *net_dev) +static void adjust_link_memac(struct mac_device *mac_dev) { - struct device *dev = net_dev->dev.parent; - struct dpaa_eth_data *eth_data = dev->platform_data; - struct mac_device *mac_dev = eth_data->mac_dev; struct phy_device *phy_dev = mac_dev->phy_dev; struct fman_mac *fman_mac; bool rx_pause, tx_pause; @@ -463,60 +456,12 @@ static void adjust_link_memac(struct net_device *net_dev) fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); if (err < 0) - netdev_err(net_dev, "fman_set_mac_active_pause() = %d\n", err); -} - -/* Initializes driver's PHY state, and attaches to the PHY. - * Returns 0 on success. - */ -static struct phy_device *init_phy(struct net_device *net_dev, - struct mac_device *mac_dev, - void (*adj_lnk)(struct net_device *)) -{ - struct phy_device *phy_dev; - struct mac_priv_s *priv = mac_dev->priv; - - phy_dev = of_phy_connect(net_dev, priv->phy_node, adj_lnk, 0, - priv->phy_if); - if (!phy_dev) { - netdev_err(net_dev, "Could not connect to PHY\n"); - return NULL; - } - - /* Remove any features not supported by the controller */ - phy_dev->supported &= mac_dev->if_support; - /* Enable the symmetric and asymmetric PAUSE frame advertisements, - * as most of the PHY drivers do not enable them by default. - */ - phy_dev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); - phy_dev->advertising = phy_dev->supported; - - mac_dev->phy_dev = phy_dev; - - return phy_dev; -} - -static struct phy_device *dtsec_init_phy(struct net_device *net_dev, - struct mac_device *mac_dev) -{ - return init_phy(net_dev, mac_dev, &adjust_link_dtsec); -} - -static struct phy_device *tgec_init_phy(struct net_device *net_dev, - struct mac_device *mac_dev) -{ - return init_phy(net_dev, mac_dev, adjust_link_void); -} - -static struct phy_device *memac_init_phy(struct net_device *net_dev, - struct mac_device *mac_dev) -{ - return init_phy(net_dev, mac_dev, &adjust_link_memac); + dev_err(mac_dev->priv->dev, "fman_set_mac_active_pause() = %d\n", + err); } static void setup_dtsec(struct mac_device *mac_dev) { - mac_dev->init_phy = dtsec_init_phy; mac_dev->init = dtsec_initialization; mac_dev->set_promisc = dtsec_set_promiscuous; mac_dev->change_addr = dtsec_modify_mac_address; @@ -528,14 +473,13 @@ static void setup_dtsec(struct mac_device *mac_dev) mac_dev->set_multi = set_multi; mac_dev->start = start; mac_dev->stop = stop; - + mac_dev->adjust_link = adjust_link_dtsec; mac_dev->priv->enable = dtsec_enable; mac_dev->priv->disable = dtsec_disable; } static void setup_tgec(struct mac_device *mac_dev) { - mac_dev->init_phy = tgec_init_phy; mac_dev->init = tgec_initialization; mac_dev->set_promisc = tgec_set_promiscuous; mac_dev->change_addr = tgec_modify_mac_address; @@ -547,14 +491,13 @@ static void setup_tgec(struct mac_device *mac_dev) mac_dev->set_multi = set_multi; mac_dev->start = start; mac_dev->stop = stop; - + mac_dev->adjust_link = adjust_link_void; mac_dev->priv->enable = tgec_enable; mac_dev->priv->disable = tgec_disable; } static void setup_memac(struct mac_device *mac_dev) { - mac_dev->init_phy = memac_init_phy; mac_dev->init = memac_initialization; mac_dev->set_promisc = memac_set_promiscuous; mac_dev->change_addr = memac_modify_mac_address; @@ -566,7 +509,7 @@ static void setup_memac(struct mac_device *mac_dev) mac_dev->set_multi = set_multi; mac_dev->start = start; mac_dev->stop = stop; - + mac_dev->adjust_link = adjust_link_memac; mac_dev->priv->enable = memac_enable; mac_dev->priv->disable = memac_disable; } @@ -850,13 +793,13 @@ static int mac_probe(struct platform_device *_of_dev) mac_node); phy_if = PHY_INTERFACE_MODE_SGMII; } - priv->phy_if = phy_if; + mac_dev->phy_if = phy_if; - priv->speed = phy2speed[priv->phy_if]; + priv->speed = phy2speed[mac_dev->phy_if]; priv->max_speed = priv->speed; mac_dev->if_support = DTSEC_SUPPORTED; /* We don't support half-duplex in SGMII mode */ - if (priv->phy_if == PHY_INTERFACE_MODE_SGMII) + if (mac_dev->phy_if == PHY_INTERFACE_MODE_SGMII) mac_dev->if_support &= ~(SUPPORTED_10baseT_Half | SUPPORTED_100baseT_Half); @@ -865,12 +808,12 @@ static int mac_probe(struct platform_device *_of_dev) mac_dev->if_support |= SUPPORTED_1000baseT_Full; /* The 10G interface only supports one mode */ - if (priv->phy_if == PHY_INTERFACE_MODE_XGMII) + if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) mac_dev->if_support = SUPPORTED_10000baseT_Full; /* Get the rest of the PHY information */ - priv->phy_node = of_parse_phandle(mac_node, "phy-handle", 0); - if (!priv->phy_node && of_phy_is_fixed_link(mac_node)) { + mac_dev->phy_node = of_parse_phandle(mac_node, "phy-handle", 0); + if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) { struct phy_device *phy; err = of_phy_register_fixed_link(mac_node); @@ -884,8 +827,8 @@ static int mac_probe(struct platform_device *_of_dev) goto _return_dev_set_drvdata; } - priv->phy_node = of_node_get(mac_node); - phy = of_phy_find_device(priv->phy_node); + mac_dev->phy_node = of_node_get(mac_node); + phy = of_phy_find_device(mac_dev->phy_node); if (!phy) { err = -EINVAL; goto _return_dev_set_drvdata; @@ -903,7 +846,7 @@ static int mac_probe(struct platform_device *_of_dev) err = mac_dev->init(mac_dev); if (err < 0) { dev_err(dev, "mac_dev->init() = %d\n", err); - of_node_put(priv->phy_node); + of_node_put(mac_dev->phy_node); goto _return_dev_set_drvdata; } diff --git a/drivers/net/ethernet/freescale/fman/mac.h b/drivers/net/ethernet/freescale/fman/mac.h index d7313f0..1ca85a1 100644 --- a/drivers/net/ethernet/freescale/fman/mac.h +++ b/drivers/net/ethernet/freescale/fman/mac.h @@ -50,6 +50,8 @@ struct mac_device { struct fman_port *port[2]; u32 if_support; struct phy_device *phy_dev; + phy_interface_t phy_if; + struct device_node *phy_node; bool autoneg_pause; bool rx_pause_req; @@ -58,11 +60,10 @@ struct mac_device { bool tx_pause_active; bool promisc; - struct phy_device *(*init_phy)(struct net_device *net_dev, - struct mac_device *mac_dev); int (*init)(struct mac_device *mac_dev); int (*start)(struct mac_device *mac_dev); int (*stop)(struct mac_device *mac_dev); + void (*adjust_link)(struct mac_device *mac_dev); int (*set_promisc)(struct fman_mac *mac_dev, bool enable); int (*change_addr)(struct fman_mac *mac_dev, enet_addr_t *enet_addr); int (*set_multi)(struct net_device *net_dev, -- 2.1.0