From patchwork Fri Aug 21 07:29:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: shaohui xie X-Patchwork-Id: 509397 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id C39911402AC for ; Fri, 21 Aug 2015 17:51:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753463AbbHUHvJ (ORCPT ); Fri, 21 Aug 2015 03:51:09 -0400 Received: from mail-bl2on0062.outbound.protection.outlook.com ([65.55.169.62]:41191 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751803AbbHUHvG (ORCPT ); Fri, 21 Aug 2015 03:51:06 -0400 Received: from CH1PR03CA010.namprd03.prod.outlook.com (10.255.156.155) by BN3PR0301MB1268.namprd03.prod.outlook.com (10.161.209.148) with Microsoft SMTP Server (TLS) id 15.1.243.23; Fri, 21 Aug 2015 07:35:17 +0000 Received: from BY2FFO11FD012.protection.gbl (10.255.156.132) by CH1PR03CA010.outlook.office365.com (10.255.156.155) with Microsoft SMTP Server (TLS) id 15.1.231.21 via Frontend Transport; Fri, 21 Aug 2015 07:35:17 +0000 Authentication-Results: spf=softfail (sender IP is 192.88.158.2) smtp.mailfrom=gmail.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning gmail.com discourages use of 192.88.158.2 as permitted sender) Received: from az84smr01.freescale.net (192.88.158.2) by BY2FFO11FD012.mail.protection.outlook.com (10.1.14.130) with Microsoft SMTP Server (TLS) id 15.1.249.14 via Frontend Transport; Fri, 21 Aug 2015 07:35:17 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t7L7ZDL1013420; Fri, 21 Aug 2015 00:35:14 -0700 From: To: , CC: , Shaohui Xie Subject: [PATCH] net: phy: add interrupt support for aquantia phy Date: Fri, 21 Aug 2015 15:29:29 +0800 Message-ID: <1440142169-37100-1-git-send-email-shh.xie@gmail.com> X-Mailer: git-send-email 2.1.0.27.g96db324 X-EOPAttributedMessage: 0 X-Matching-Connectors: 130846161173252608; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD012; 1:KyMLGZl7YyBdAuiVfzWbqmX47cnnDDz8n1fag3nPYAixYVJlNy03QJzQziJwqVxlpiJFDIqXVathjSxzSaOJtB9JnnhFGWB2CfT2aUkAT3UHdc03hHyftLTFsj9AQxxZueBwpZ3qgATJWxkz+0X1XwEuBqyRioxD7oxZ1FjQJdkeElUEFs6Sww8SgWr6XXUAmNPcXq8qpVzqLb+5//C7hfbcP/FSs/uOfiSv3EC8HFWHgnX5+gg0+N/u4FRIlOmL9NFg7eVBk79JY16304rLmWq/QfviqCZNxASMbBsgs1RtYf9UMOlheVyXidseJBBB+o8VD4gLABf8gOp2BaU3YiL3+cSnws41yx9qV+qss+UqtDp0bzVINLAKDUMrfKI2up9/vqWhzwFjtlAm//NLQ9GQzSlc3j+YeS5AFlut56zr8KjbBmmcNAg2NotKPIkh X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(3050300001)(189002)(199003)(229853001)(36756003)(48376002)(68736005)(69596002)(82202001)(106466001)(77096005)(5003940100001)(33646002)(47776003)(73972006)(61266001)(81442002)(64706001)(189998001)(105596002)(86152002)(50466002)(6806004)(19580405001)(5001830100001)(5001770100001)(62966003)(4001540100001)(5001960100002)(50226001)(5001860100001)(92566002)(107886002)(77156002)(81156007)(87572001)(50986999)(76482005)(104016003)(87936001)(5007970100001)(5001920100001)(19580395003)(73392002)(83322999)(97736004)(86362001)(55446002)(46102003)(4001430100001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0301MB1268; H:az84smr01.freescale.net; FPR:; SPF:SoftFail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1268; 2:JB6cDXUVzAk3iG1ntUr//THCgh+/SdOoagEunW/TJXRaxAyPA9y3YP7q9y2FCvm0olERkly6j1DdWO/Pb2AxAw4CpsswjNKbRXrXEsfkQyKUgrRQNLvNlzSibUZE+7oF8mBjyUpjMPZdvgVX1inP+QW5jmteQnya70LelpeDJkM=; 3:u/2+KtI4bBdNkF4+gX1DM3vPkMDtaLYw99y4F6PGnkbkJQLM0bCPD3k32egkUAKwNCaeRWkvxCL/6WYMtCP1Ry2riADE2+45GfOyy01qgAU8KmLvhN65EPjl7NYPV+zRuzdr/eATxN3eRT9tF/Ol/KOIt0HsETYgxAinktmkWcvWaTqC2R4JVfnONdvwkWZmHFELtqPqPxf6RbewnsmWuRID62aJTK/tiY8+hziXrBk=; 25:M8UdSQTCEN68tEjcovaavUh5EmHwdgzfJoJxfHKJjbVHUYXwhl0RSMgMfxDtZ0xny3cCpFbsV3JDIiQy1sh9sdUv1D4hznCu4kC08Ohb8j2gH8UbaOISm9j5otRiMOpw5o4YFhjm7CdIsend8FSFeX6UhtcmSGPJ+nzAm7nn7QE1O3VhgbLe1usgwdzlG22a8wu8nHXcPpnBS81KlBf65mo1BS9MtL1t1KP43xr+Cr6aoHJDPTkbAXUda42LHHyy4+wOFZhWrujwEOJ5Yw4fOw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0301MB1268; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:BN3PR0301MB1268; BCL:0; PCL:0; RULEID:(400006); SRVR:BN3PR0301MB1268; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1268; 4:CywNUdPbzUdTZbn5QLMoPdZuDwRiWevUkOK697FyLAuA640CyrbfCizfxhJsJUXYvrKmOcgfoEUiuWoLLby+yaEBIBiNUM33EdYDC3cV2r2ezaCzZCM8sFHwYA1BYSfkS96cTLf6gNDtJ8NEy6QmRuPgPf/rAj+OziEzFnPugrH7G6uJXjx0p2AMB12d9rxmJlo6FZMwT9A5l7AOPLeUzZl/fO0zuEFoBzxiPuo2OJqSYjWSJZINPlC4LbUcVR1v3gvOi3bbHkqxnAfVddfczu3UE+Hd/T/1yZrVgNUTjagGVEMPlqOJcPiJXxBv0Y88vyhypMNybE8uoR8EgeRJbA== X-Forefront-PRVS: 067553F396 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB1268; 23:YaXW6r9bE6L4mgTcYaA9zaaE//wJqSndbs/ANIq?= =?us-ascii?Q?xIzZ99PXhEOkZMU112Hi9BFdAeITjuhUa6bxf8NlWsQfS1WNTbh6+MiI/jnV?= =?us-ascii?Q?07OBVRX0QUk3mWmu9HRobqIKpxzJvB5FItYSw38iD7ESlC4+iT5wKDGMxMqC?= =?us-ascii?Q?XPhH/7iGbAj+WyFlGbNWDwTkOntuOaG+raVieLcuNogc5Y8Gu/os2yHk0cHy?= =?us-ascii?Q?IXT9ExJ7RVBD0sBslhuJE1GVpXNoOC2PG6KR+CCzaeoy3iufCXPZf05djPLd?= =?us-ascii?Q?jusdqe7DN5c8e341qE0CIuH63TD7N5ffnfM+HnK5GoltW8ddw0tqhX7/TU3o?= =?us-ascii?Q?0ApVRnsASXZKpslx5nrG0q1kGY04dmYgvKSoEesI03PCdR8CEonwHNYTbAGs?= =?us-ascii?Q?BhWkp2ThMrqfl1eIsK7riUOmnWBCisP+kitvwd6lJNBEJdwChVSMIgqjNdAy?= =?us-ascii?Q?hH1lDd309b9rw8tpr4kEuzK3VaD3786Lh/AI3DAPXkWLBMvl4uDmyf9oXbKW?= =?us-ascii?Q?wS5TIara2IaRqYLpbnShpQjJhbddvJj083ZiCQo9hPggUJwVEpVF1drbAgiS?= =?us-ascii?Q?my736M/CIEY88o1Wr5wRRIkwD64ggOW8gu9IOosJamtOZLRNing0SKL76ArY?= =?us-ascii?Q?cj3uHUzF9snrsx9nWWuSMgn/1JHodvX3y5x4sqEVPr56Io74wDansjwKUPSp?= =?us-ascii?Q?KxAtVUc6PNd9FRTBowqvChGrvvt6lV6FsZqFlIn8AufzBiGz4GNV5mN4CGfA?= =?us-ascii?Q?ul/2s8AHqAV9oEiHdp1JfInm/rAZcSnl4EY2WGX/+3ktCaHt6XJUZrd57nps?= =?us-ascii?Q?omVi4RbxQJqVnIucq4rtbTkMB8uVz9swTIHSuhzfQbU4DrD063csMjTOeHV5?= =?us-ascii?Q?+JOWL0oGcv9iIPO+iXTW1hIhvbFvTiiFOfwHO49hpD6L1oxP1iiYYlts6Mkb?= =?us-ascii?Q?YtiUHVOxdOm22ZHBxZ9vhA/j/wDEChB6LviWKQQQdDzWym+qhmw+l8lCcZ8R?= =?us-ascii?Q?FPsGLTNrW9g9YnDhvrQ+rtlMl1G1mfK61v1itYmFksmnBwrOuNFxWcsmWwd6?= =?us-ascii?Q?u3qUAQHMDtQzTzEV78rXkZUE64Tjh1SFxuYAsH7WnLvwAlvoPd2Y0DU6JaU2?= =?us-ascii?Q?Y3SIfigWpddDmFkVJ+vi01xyDiXpwT+U4hVio6LI/cqmRj86bAZwZGQkiVno?= =?us-ascii?Q?EU3e/6CLnRpxE8P5WnbwdGF6CMYoKqCNZ96Z6Wjn8NuKWeOX9MUyuvWN4rOx?= =?us-ascii?Q?Miuy5WuQ6mnppx98ypIJ+5YUIaZluVIuNCW1PkSTQIgDTlRGpd5CwIfMUsqN?= =?us-ascii?Q?EtM2o+xEC4F8ou0o04vxL+4D+heDd4YzEiKsSARRWiqPq1UBFb0GhIgBlVIa?= =?us-ascii?Q?RX8g6FHhdZLYLAo047QR93TGM5voCoiILB1CO4AUZU38Cq8uC?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1268; 5:FSnnt/p0Yr58bSVHMfVtaxVMj7aJJ1AaaBmgIEs7RkrHaMY+yABI+BJu7JM/Hnb+masKv+s5lRFgIeYI/fTVCHDU4/MH5uScqPA8Fli5zagEYRHL/FObm06j2n1sfBXnXUDXP2S50dPRZ9zdWzKYp5COxJXhbi/yL9kHAE/STz0=; 24:64sfyDwDy/v17E9a5jHgWDU0ACD90c9TPOBpmj642u+Mj833MrPVc4U2JGKnXTnS68zUOn/j5UdMKPVgL4hCqCw029IptYPVAcYSP5/hO7U= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2015 07:35:17.0912 (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.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0301MB1268 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Shaohui Xie By implementing config_intr & ack_interrupt, now the phy can support link connect/disconnect interrupt. Signed-off-by: Shaohui Xie --- drivers/net/phy/aquantia.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/net/phy/aquantia.c b/drivers/net/phy/aquantia.c index 73d347d..d6111af 100644 --- a/drivers/net/phy/aquantia.c +++ b/drivers/net/phy/aquantia.c @@ -44,6 +44,43 @@ static int aquantia_aneg_done(struct phy_device *phydev) return (reg < 0) ? reg : (reg & BMSR_ANEGCOMPLETE); } +static int aquantia_config_intr(struct phy_device *phydev) +{ + int err; + + if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { + err = phy_write_mmd(phydev, MDIO_MMD_AN, 0xd401, 1); + if (err < 0) + return err; + + err = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0xff00, 1); + if (err < 0) + return err; + + err = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0xff01, 0x1001); + } else { + err = phy_write_mmd(phydev, MDIO_MMD_AN, 0xd401, 0); + if (err < 0) + return err; + + err = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0xff00, 0); + if (err < 0) + return err; + + err = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0xff01, 0); + } + + return err; +} + +static int aquantia_ack_interrupt(struct phy_device *phydev) +{ + int reg; + + reg = phy_read_mmd(phydev, MDIO_MMD_AN, 0xcc01); + return (reg < 0) ? reg : 0; +} + static int aquantia_read_status(struct phy_device *phydev) { int reg; @@ -85,8 +122,11 @@ static struct phy_driver aquantia_driver[] = { .phy_id_mask = 0xfffffff0, .name = "Aquantia AQ1202", .features = PHY_AQUANTIA_FEATURES, + .flags = PHY_HAS_INTERRUPT, .aneg_done = aquantia_aneg_done, .config_aneg = aquantia_config_aneg, + .config_intr = aquantia_config_intr, + .ack_interrupt = aquantia_ack_interrupt, .read_status = aquantia_read_status, .driver = { .owner = THIS_MODULE,}, }, @@ -95,8 +135,11 @@ static struct phy_driver aquantia_driver[] = { .phy_id_mask = 0xfffffff0, .name = "Aquantia AQ2104", .features = PHY_AQUANTIA_FEATURES, + .flags = PHY_HAS_INTERRUPT, .aneg_done = aquantia_aneg_done, .config_aneg = aquantia_config_aneg, + .config_intr = aquantia_config_intr, + .ack_interrupt = aquantia_ack_interrupt, .read_status = aquantia_read_status, .driver = { .owner = THIS_MODULE,}, }, @@ -105,8 +148,11 @@ static struct phy_driver aquantia_driver[] = { .phy_id_mask = 0xfffffff0, .name = "Aquantia AQR105", .features = PHY_AQUANTIA_FEATURES, + .flags = PHY_HAS_INTERRUPT, .aneg_done = aquantia_aneg_done, .config_aneg = aquantia_config_aneg, + .config_intr = aquantia_config_intr, + .ack_interrupt = aquantia_ack_interrupt, .read_status = aquantia_read_status, .driver = { .owner = THIS_MODULE,}, }, @@ -115,8 +161,11 @@ static struct phy_driver aquantia_driver[] = { .phy_id_mask = 0xfffffff0, .name = "Aquantia AQR405", .features = PHY_AQUANTIA_FEATURES, + .flags = PHY_HAS_INTERRUPT, .aneg_done = aquantia_aneg_done, .config_aneg = aquantia_config_aneg, + .config_intr = aquantia_config_intr, + .ack_interrupt = aquantia_ack_interrupt, .read_status = aquantia_read_status, .driver = { .owner = THIS_MODULE,}, },