From patchwork Fri Feb 8 17:25:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlo Caione X-Patchwork-Id: 1038821 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="GrhIIaAz"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 43x2Hs4hJ9z9sMp for ; Sat, 9 Feb 2019 04:30:01 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 2F16AC2205F; Fri, 8 Feb 2019 17:27:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id DCC9BC2203D; Fri, 8 Feb 2019 17:26:55 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id B4596C22052; Fri, 8 Feb 2019 17:26:01 +0000 (UTC) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by lists.denx.de (Postfix) with ESMTPS id 75145C22035 for ; Fri, 8 Feb 2019 17:26:01 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id v26so4235296wmh.3 for ; Fri, 08 Feb 2019 09:26:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dyUkDghv8g1LLBLR5CpSJvh1+D58PkklZmD3kTVR9d0=; b=GrhIIaAzu1K3dNJ77cz4KM5Rbpp+7olDDIKPMozbWxR1pLkJLUmsuvdUPQTlKV1BhX hhStwISobLrKrkLx8pi1FRdgPNq/oqe6GXhskE5nAdBQj8kEZOujUAsp6NGZKkklM2f4 R0/mPP5GVaeaU1cli/r1lRJjD175HiScyDy2/3qfBmPzw8XJQ/2GXBrjLOAZGvQsNsxW ReeerIM4XPPH9pOyj/DK5M+ejyIBLU41UIanZeZRuQkmhnqe+HHlQSBMrfelyxG/JJTr C4x/3AWaNbz+QS69yVclYPIrYiFB2PvKlbBmS1dwsHW3AniuEeEa0+ZPeFzP6N/baiUI n27g== 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=dyUkDghv8g1LLBLR5CpSJvh1+D58PkklZmD3kTVR9d0=; b=k6NpwP4TkKDI1myk+Bwg5KhFugayZcOYmqjT5JHpIDFXq2bkwnbm7ukf+0svTcmedX QcOeUOCTydSq+Cl/2fEm/4qfSmjnNGTbAvOcl1wSwOPlxgdY+E05pBuJ95Rk601fIbr0 nq2oGOASex/6+Q0nRM8YxIRgsnn2kOC1g7WYsY8BfRuKaMA48sNvzBaKMej+JJkuL86S Z0q8Td+3ur3oRbjj7U9JB6z8Bg+fjZkPROeksufw52etWEaDqa/1PRoeNafvVJIYtPrl zzegQeFxnN3NzyQTJ9b+KMqcnBviIc2QlaEiWGYRhKh55z5YCD0cr8syCd0wEnuP7MLF E+Vg== X-Gm-Message-State: AHQUAuYwBQBan7w2UZ5YyY2fG82FgfCPe5QnyYSjE2WTBJgmbQHfGjK1 Iu0AgucjKe2nK/HQDr7JnVACbA== X-Google-Smtp-Source: AHgI3IZ9jvKhnQ2tluqUIf8b9MPiVxi6jbnFCEPIoVlIi5ekJWRI1m2YP2b9APAhfAQc1s3NEKoLfA== X-Received: by 2002:a1c:6707:: with SMTP id b7mr12407894wmc.138.1549646761004; Fri, 08 Feb 2019 09:26:01 -0800 (PST) Received: from localhost.localdomain ([2a00:23c4:f7a1:ce00:5105:4b7b:c922:7c6]) by smtp.gmail.com with ESMTPSA id p4sm2580872wrs.74.2019.02.08.09.26.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Feb 2019 09:26:00 -0800 (PST) From: Carlo Caione To: joe.hershberger@ni.com, joseph.hershberger@ni.com, vladimir.oltean@nxp.com, u-boot@lists.denx.de Date: Fri, 8 Feb 2019 17:25:08 +0000 Message-Id: <20190208172508.23601-4-ccaione@baylibre.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190208172508.23601-1-ccaione@baylibre.com> References: <20190208172508.23601-1-ccaione@baylibre.com> MIME-Version: 1.0 Cc: Carlo Caione Subject: [U-Boot] [PATCH v5 3/3] cmd: mdio: Switch to generic helpers when accessing the registers X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Switch to use the generic helpers to access the MMD registers so that we can used the same command also for C45 PHYs, C22 PHYs with direct and indirect access and PHYs implementing a custom way to access the registers. Signed-off-by: Carlo Caione Acked-by: Joe Hershberger --- cmd/mdio.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/cmd/mdio.c b/cmd/mdio.c index 184868063a..efe8c9ef09 100644 --- a/cmd/mdio.c +++ b/cmd/mdio.c @@ -39,21 +39,24 @@ static int extract_range(char *input, int *plo, int *phi) return 0; } -static int mdio_write_ranges(struct phy_device *phydev, struct mii_dev *bus, +static int mdio_write_ranges(struct mii_dev *bus, int addrlo, int addrhi, int devadlo, int devadhi, int reglo, int reghi, unsigned short data, int extended) { + struct phy_device *phydev; int addr, devad, reg; int err = 0; for (addr = addrlo; addr <= addrhi; addr++) { + phydev = bus->phymap[addr]; + for (devad = devadlo; devad <= devadhi; devad++) { for (reg = reglo; reg <= reghi; reg++) { if (!extended) - err = bus->write(bus, addr, devad, - reg, data); + err = phy_write_mmd(phydev, devad, + reg, data); else err = phydev->drv->writeext(phydev, addr, devad, reg, data); @@ -68,15 +71,17 @@ err_out: return err; } -static int mdio_read_ranges(struct phy_device *phydev, struct mii_dev *bus, +static int mdio_read_ranges(struct mii_dev *bus, int addrlo, int addrhi, int devadlo, int devadhi, int reglo, int reghi, int extended) { int addr, devad, reg; + struct phy_device *phydev; printf("Reading from bus %s\n", bus->name); for (addr = addrlo; addr <= addrhi; addr++) { + phydev = bus->phymap[addr]; printf("PHY at address %x:\n", addr); for (devad = devadlo; devad <= devadhi; devad++) { @@ -84,7 +89,7 @@ static int mdio_read_ranges(struct phy_device *phydev, struct mii_dev *bus, int val; if (!extended) - val = bus->read(bus, addr, devad, reg); + val = phy_read_mmd(phydev, devad, reg); else val = phydev->drv->readext(phydev, addr, devad, reg); @@ -222,14 +227,14 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) bus = phydev->bus; extended = 1; } else { - return -1; + return CMD_RET_FAILURE; } if (!phydev->drv || (!phydev->drv->writeext && (op[0] == 'w')) || (!phydev->drv->readext && (op[0] == 'r'))) { puts("PHY does not have extended functions\n"); - return -1; + return CMD_RET_FAILURE; } } } @@ -242,13 +247,13 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (pos > 1) if (extract_reg_range(argv[pos--], &devadlo, &devadhi, ®lo, ®hi)) - return -1; + return CMD_RET_FAILURE; default: if (pos > 1) if (extract_phy_range(&argv[2], pos - 1, &bus, &phydev, &addrlo, &addrhi)) - return -1; + return CMD_RET_FAILURE; break; } @@ -264,12 +269,12 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) switch (op[0]) { case 'w': - mdio_write_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi, + mdio_write_ranges(bus, addrlo, addrhi, devadlo, devadhi, reglo, reghi, data, extended); break; case 'r': - mdio_read_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi, + mdio_read_ranges(bus, addrlo, addrhi, devadlo, devadhi, reglo, reghi, extended); break; }