From patchwork Fri Sep 18 20:52:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Marko X-Patchwork-Id: 250162 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D1791C43464 for ; Fri, 18 Sep 2020 20:52:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 90837235FD for ; Fri, 18 Sep 2020 20:52:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=sartura-hr.20150623.gappssmtp.com header.i=@sartura-hr.20150623.gappssmtp.com header.b="vobeWwYm" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726533AbgIRUwj (ORCPT ); Fri, 18 Sep 2020 16:52:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726501AbgIRUwe (ORCPT ); Fri, 18 Sep 2020 16:52:34 -0400 Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7E4CC0613CE for ; Fri, 18 Sep 2020 13:52:33 -0700 (PDT) Received: by mail-wr1-x442.google.com with SMTP id g4so6878110wrs.5 for ; Fri, 18 Sep 2020 13:52:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sartura-hr.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+JO/vRiLXpeB8VcV6Xg2lUUCdaWgeJtk26slYXjrIcM=; b=vobeWwYmo7S0l34NyjNzjICAmjbBDuFO2B63Xhjc0h99nUk+yVIwjhxEmNn0eUsS7T YGQufSHm0IXhrzvVKLvroepijQAOah7GhhHLc2ABljb5hvG8y+7siFo9ui4JcACjNyfr mX1iNnQsVPM/rZFwa0/ZG1guMJtDzfzs4pabG0CR+XDeTuyt2g2OiIJqJjQFMyE3deO7 QTgtVfWoY5YvqXXLhqLtoge9beNEAOdzesj0vx+3bK2UjgzPI9lYX9gU9xzJHb2pEdNg EXfHoWACs8XYciBfjnL/5699gbdA3UnGQQ93tt9Ea+Eayr+cgPMUbsdbpV6Rmop2MQW2 r/MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+JO/vRiLXpeB8VcV6Xg2lUUCdaWgeJtk26slYXjrIcM=; b=Fo3zxE8GXqngP7Bij2ONGofSmLlQk0JKAFQg76nxk3R67NIIrgCksHMOnuzzenlTLL WvRFPdQreh6WMcKiRdX3de/j4h/EXFWvpWH8qNih27bcujZf9Kgs+LPI1k3bxXhAfhhQ mvpV1rZGqy959TJ0yBCy6UeRAu+Jd8Jih9pGKHFUEwS5XLx9Jg/HQ62VwffH+52GDtSD zquX2DWZsfC0kgEblgO1SF9+UW/xU2RQprArmkK2lv9QLQ6qfHHgf98ABXB4+WN2fqMw tKHBWW3QzF5jejrHQP7JW9xzOBxpvoC6D1BRKPyDi1YCyQ9UMylL1RlbZuwJHUKeVCgV J45A== X-Gm-Message-State: AOAM531GmLnGNi3lD/FMlQYtXp4f4ML9lkNtBBwlTM/XxKthvUssQfnf ZTRmNqf6XmluF2Cx2Fho4pZPFQ== X-Google-Smtp-Source: ABdhPJz4YtWsNsUCsdNJ1RjgsLmYbXxPyBBCR5isQie3XJGzd8Sv/eF6OmcNGLrGvOG4aC9sDfOymw== X-Received: by 2002:adf:fd12:: with SMTP id e18mr40830264wrr.96.1600462352376; Fri, 18 Sep 2020 13:52:32 -0700 (PDT) Received: from localhost.localdomain (dh207-97-14.xnet.hr. [88.207.97.14]) by smtp.googlemail.com with ESMTPSA id z19sm6694041wmi.3.2020.09.18.13.52.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2020 13:52:31 -0700 (PDT) From: Robert Marko To: andrew@lunn.ch, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Robert Marko , Luka Perkov , Florian Fainelli Subject: [PATCH v2 1/2] net: mdio-ipq4019: change defines to upper case Date: Fri, 18 Sep 2020 22:52:21 +0200 Message-Id: <20200918205222.2698102-2-robert.marko@sartura.hr> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200918205222.2698102-1-robert.marko@sartura.hr> References: <20200918205222.2698102-1-robert.marko@sartura.hr> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org In the commit adding the IPQ4019 MDIO driver, defines for timeout and sleep partially used lower case. Lets change it to upper case in line with the rest of driver defines. Signed-off-by: Robert Marko Cc: Luka Perkov Reviewed-by: Andrew Lunn Reviewed-by: Florian Fainelli --- drivers/net/phy/mdio-ipq4019.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/phy/mdio-ipq4019.c b/drivers/net/phy/mdio-ipq4019.c index 1ce81ff2f41d..64b169e5a699 100644 --- a/drivers/net/phy/mdio-ipq4019.c +++ b/drivers/net/phy/mdio-ipq4019.c @@ -21,8 +21,8 @@ #define MDIO_CMD_ACCESS_CODE_READ 0 #define MDIO_CMD_ACCESS_CODE_WRITE 1 -#define ipq4019_MDIO_TIMEOUT 10000 -#define ipq4019_MDIO_SLEEP 10 +#define IPQ4019_MDIO_TIMEOUT 10000 +#define IPQ4019_MDIO_SLEEP 10 struct ipq4019_mdio_data { void __iomem *membase; @@ -35,7 +35,7 @@ static int ipq4019_mdio_wait_busy(struct mii_bus *bus) return readl_poll_timeout(priv->membase + MDIO_CMD_REG, busy, (busy & MDIO_CMD_ACCESS_BUSY) == 0, - ipq4019_MDIO_SLEEP, ipq4019_MDIO_TIMEOUT); + IPQ4019_MDIO_SLEEP, IPQ4019_MDIO_TIMEOUT); } static int ipq4019_mdio_read(struct mii_bus *bus, int mii_id, int regnum) From patchwork Fri Sep 18 20:52:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Marko X-Patchwork-Id: 292761 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1AE1C43465 for ; Fri, 18 Sep 2020 20:52:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 57D972311A for ; Fri, 18 Sep 2020 20:52:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=sartura-hr.20150623.gappssmtp.com header.i=@sartura-hr.20150623.gappssmtp.com header.b="JZwZfS9O" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726522AbgIRUwj (ORCPT ); Fri, 18 Sep 2020 16:52:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726507AbgIRUwh (ORCPT ); Fri, 18 Sep 2020 16:52:37 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B72E0C0613D2 for ; Fri, 18 Sep 2020 13:52:36 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id m6so6903519wrn.0 for ; Fri, 18 Sep 2020 13:52:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sartura-hr.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EhooCBlS96MjfCXJxgfsgQ1Ti7nqGrVAG9Oz5i5Ijzg=; b=JZwZfS9O5YJSeHgrTbzTMuOYxQeJu0LEob1BU9fNFKfB+lzgR3dtgz9ZlcxYmWa++3 lGBbSbrMQrRxUE6tckD+uIhKlAfk77thfqHCdFDmFdAFi5kJiX6oPLfxXEq5K4Sq+PtT oBTgVtuc2RmRWsKDonEypgsX8NtoluvzcECYomKgq0MOMdr1GpI5MTIH+zEarobYpIkm +8YyB8mSbq34uVkDYZWsV4ZqVAz0W8gAablmAmjZDa+pK8RS78glMF/AG3//u/2jxzB0 g5OBWtUsalP2PLi7FmZ/fWADuWi2CFDK3aU9MyHGJRPQPoO55JPHvqOfldp2sPjipi2W 71qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EhooCBlS96MjfCXJxgfsgQ1Ti7nqGrVAG9Oz5i5Ijzg=; b=Lke5zVB2Kdc3YeA8/OKnNG+TOf2rj3s4Ofd8buMW6iJVOb3JSK7k4cHkKH0yV0xLK7 tD6XS1SrpGjU5qg2TfFkxKWxnAy16NObVapbuKOAYRCmttEc61XoAPg0YwgtlbZjLXEI mCPwTYymZAMqaymD40ojYA/Sr1Ke1TW3+SC4/QyXVI9azfazHb+zNqjzb3bIPf8BHqBq fXJHjPSgGJiKZ++yLi8LOjo/H3aEb0hibjJyBfRRQ+QZ6JOYju4qNxHAIiPdWtQ/s6AD ZBYIFruHD92v24mKKZ97pg3SsmbxMRTLvKJQtKeRrKIGZdleQHaTzcUUFcNQXT34cMJL 0qyQ== X-Gm-Message-State: AOAM533HJnXAwrhdIaxiJZyATEBr/gp8FdoEu4cdvCvoqR2/2VcQhnUp Cl4WnGrShLPy5iZhvyQH+08lnTJ1CBYrUzVR X-Google-Smtp-Source: ABdhPJxfpnyNDvZKbfjkEH72vYZZ7jrP9x/RX5ezgQmSi26YnBX1aDTmIlTnJfmGOJ3hXXuel2B+Sg== X-Received: by 2002:adf:e44b:: with SMTP id t11mr17262050wrm.101.1600462355415; Fri, 18 Sep 2020 13:52:35 -0700 (PDT) Received: from localhost.localdomain (dh207-97-14.xnet.hr. [88.207.97.14]) by smtp.googlemail.com with ESMTPSA id z19sm6694041wmi.3.2020.09.18.13.52.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2020 13:52:34 -0700 (PDT) From: Robert Marko To: andrew@lunn.ch, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Robert Marko , Luka Perkov Subject: [PATCH v2 2/2] net: mdio-ipq4019: add Clause 45 support Date: Fri, 18 Sep 2020 22:52:22 +0200 Message-Id: <20200918205222.2698102-3-robert.marko@sartura.hr> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200918205222.2698102-1-robert.marko@sartura.hr> References: <20200918205222.2698102-1-robert.marko@sartura.hr> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org While up-streaming the IPQ4019 driver it was thought that the controller had no Clause 45 support, but it actually does and its activated by writing a bit to the mode register. So lets add it as newer SoC-s use the same controller and Clause 45 compliant PHY-s. Signed-off-by: Robert Marko Cc: Luka Perkov --- drivers/net/phy/mdio-ipq4019.c | 103 ++++++++++++++++++++++++++++----- 1 file changed, 89 insertions(+), 14 deletions(-) diff --git a/drivers/net/phy/mdio-ipq4019.c b/drivers/net/phy/mdio-ipq4019.c index 64b169e5a699..d507cfa77c9e 100644 --- a/drivers/net/phy/mdio-ipq4019.c +++ b/drivers/net/phy/mdio-ipq4019.c @@ -12,6 +12,7 @@ #include #include +#define MDIO_MODE_REG 0x40 #define MDIO_ADDR_REG 0x44 #define MDIO_DATA_WRITE_REG 0x48 #define MDIO_DATA_READ_REG 0x4c @@ -20,6 +21,12 @@ #define MDIO_CMD_ACCESS_START BIT(8) #define MDIO_CMD_ACCESS_CODE_READ 0 #define MDIO_CMD_ACCESS_CODE_WRITE 1 +#define MDIO_CMD_ACCESS_CODE_C45_ADDR 0 +#define MDIO_CMD_ACCESS_CODE_C45_WRITE 1 +#define MDIO_CMD_ACCESS_CODE_C45_READ 2 + +/* 0 = Clause 22, 1 = Clause 45 */ +#define MDIO_MODE_BIT BIT(8) #define IPQ4019_MDIO_TIMEOUT 10000 #define IPQ4019_MDIO_SLEEP 10 @@ -41,19 +48,44 @@ static int ipq4019_mdio_wait_busy(struct mii_bus *bus) static int ipq4019_mdio_read(struct mii_bus *bus, int mii_id, int regnum) { struct ipq4019_mdio_data *priv = bus->priv; + unsigned int data; unsigned int cmd; - /* Reject clause 45 */ - if (regnum & MII_ADDR_C45) - return -EOPNOTSUPP; - if (ipq4019_mdio_wait_busy(bus)) return -ETIMEDOUT; - /* issue the phy address and reg */ - writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); + /* Clause 45 support */ + if (regnum & MII_ADDR_C45) { + unsigned int mmd = (regnum >> 16) & 0x1F; + unsigned int reg = regnum & 0xFFFF; + + /* Enter Clause 45 mode */ + data = readl(priv->membase + MDIO_MODE_REG); + + data |= MDIO_MODE_BIT; + + writel(data, priv->membase + MDIO_MODE_REG); + + /* issue the phy address and mmd */ + writel((mii_id << 8) | mmd, priv->membase + MDIO_ADDR_REG); + + /* issue reg */ + writel(reg, priv->membase + MDIO_DATA_WRITE_REG); + + cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_C45_ADDR; + } else { + /* Enter Clause 22 mode */ + data = readl(priv->membase + MDIO_MODE_REG); - cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_READ; + data &= ~MDIO_MODE_BIT; + + writel(data, priv->membase + MDIO_MODE_REG); + + /* issue the phy address and reg */ + writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); + + cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_READ; + } /* issue read command */ writel(cmd, priv->membase + MDIO_CMD_REG); @@ -62,6 +94,15 @@ static int ipq4019_mdio_read(struct mii_bus *bus, int mii_id, int regnum) if (ipq4019_mdio_wait_busy(bus)) return -ETIMEDOUT; + if (regnum & MII_ADDR_C45) { + cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_C45_READ; + + writel(cmd, priv->membase + MDIO_CMD_REG); + + if (ipq4019_mdio_wait_busy(bus)) + return -ETIMEDOUT; + } + /* Read and return data */ return readl(priv->membase + MDIO_DATA_READ_REG); } @@ -71,22 +112,56 @@ static int ipq4019_mdio_write(struct mii_bus *bus, int mii_id, int regnum, { struct ipq4019_mdio_data *priv = bus->priv; unsigned int cmd; - - /* Reject clause 45 */ - if (regnum & MII_ADDR_C45) - return -EOPNOTSUPP; + unsigned int data; if (ipq4019_mdio_wait_busy(bus)) return -ETIMEDOUT; - /* issue the phy address and reg */ - writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); + /* Clause 45 support */ + if (regnum & MII_ADDR_C45) { + unsigned int mmd = (regnum >> 16) & 0x1F; + unsigned int reg = regnum & 0xFFFF; + + /* Enter Clause 45 mode */ + data = readl(priv->membase + MDIO_MODE_REG); + + data |= MDIO_MODE_BIT; + + writel(data, priv->membase + MDIO_MODE_REG); + + /* issue the phy address and mmd */ + writel((mii_id << 8) | mmd, priv->membase + MDIO_ADDR_REG); + + /* issue reg */ + writel(reg, priv->membase + MDIO_DATA_WRITE_REG); + + cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_C45_ADDR; + + writel(cmd, priv->membase + MDIO_CMD_REG); + + if (ipq4019_mdio_wait_busy(bus)) + return -ETIMEDOUT; + } else { + /* Enter Clause 22 mode */ + data = readl(priv->membase + MDIO_MODE_REG); + + data &= ~MDIO_MODE_BIT; + + writel(data, priv->membase + MDIO_MODE_REG); + + /* issue the phy address and reg */ + writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); + } /* issue write data */ writel(value, priv->membase + MDIO_DATA_WRITE_REG); - cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_WRITE; /* issue write command */ + if (regnum & MII_ADDR_C45) + cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_C45_WRITE; + else + cmd = MDIO_CMD_ACCESS_START | MDIO_CMD_ACCESS_CODE_WRITE; + writel(cmd, priv->membase + MDIO_CMD_REG); /* Wait write complete */