From patchwork Sun Oct 15 01:00:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 826046 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; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="afyrCqfc"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3yFWF82MVHz9sxR for ; Mon, 16 Oct 2017 06:08:12 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 17C9CC21C39; Sun, 15 Oct 2017 19:07:21 +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=FREEMAIL_FROM, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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 F215CC21DBA; Sun, 15 Oct 2017 19:06:10 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id B3A26C21C45; Sun, 15 Oct 2017 01:01:06 +0000 (UTC) Received: from mail-oi0-f65.google.com (mail-oi0-f65.google.com [209.85.218.65]) by lists.denx.de (Postfix) with ESMTPS id 14A09C21C57 for ; Sun, 15 Oct 2017 01:01:06 +0000 (UTC) Received: by mail-oi0-f65.google.com with SMTP id s185so5286878oif.3 for ; Sat, 14 Oct 2017 18:01:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1xo4f1HkNUo/xh9YVF/jQpZZ4fejahbg266Y0VPa9q8=; b=afyrCqfc9Ug2Bn8zbM5SBOoSz+AuyZjN328qBl6VNxCMEPbXpFb9wEK8pH6LItpv8P ipQ7JBKa2Jgf+F+ccsIGuXnLqhv05EYAiKB9jTixmxNAkM8KWf7BYubcuXKWNVR70tGx 1k/bEInnHMtR7q6g9rhct39BlMHGIMV+SNnVFEZ4qoO4teKunIy1jdpc2kS6FaStOs4e qTz7RWkwiQtgrtATkc41k212vNc4wFSuUMcrZTVd+GIZygaGklYk5+7Ux1G1BHHh0/wh LcbhOk1OjxIk0u4QMH/j2PLUyTTFMvqA7WyzE68/qfFdYDL4PpxjUz+MLu3pAm9kbtO9 /8sA== 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; bh=1xo4f1HkNUo/xh9YVF/jQpZZ4fejahbg266Y0VPa9q8=; b=ZwcG3osRzl0X2TIzewWZWEkIDC3LabiFbyqh4uHOlv8r1RPR9ta/8jpStdk++DAjaE LBBY38FLH0k1bRy23mCBLZU92fPezfwbjCiiTPDXo9PVoKfdGGw5lz/4FI5GrBupFXTh KzqbjrevcnvZpuce1dE3h24r+Y/6v4KB/asDV6k0+vIAqKG80C8bVgRs+nZoyJinj0ZI a/MZ8vclflLv2uyCsHahiprxlJlOTg6Z40oN6gUbC7Y3Rdr1AcwlnlNcDfjo5tmCTTkZ Iti5JTCJnHEBMg6XgHAU2QFwNj1YBr30GiTXZySwdMxTUG4Ka3h3/8EXo9c+rozR3JZS GKbQ== X-Gm-Message-State: AMCzsaWMF7VzRRlGytoGEIs7nS73GcsLScvWJDDGlyFHJr+8oGMJPAkT AQe9inHlJaAGueFW+sscUtu0xTPM X-Google-Smtp-Source: AOwi7QCNPYOpmbjHQ/FCkRgUMWnyMmWtH+Qz2/jD6hxz/C8m6j5deX+hBmzN3jvl7oBp11beQf66cg== X-Received: by 10.157.58.70 with SMTP id j64mr3311231otc.337.1508029264413; Sat, 14 Oct 2017 18:01:04 -0700 (PDT) Received: from bender.lan ([2001:470:d:73f:d5a:2b53:a262:c0c4]) by smtp.gmail.com with ESMTPSA id b50sm2233068otc.13.2017.10.14.18.01.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 14 Oct 2017 18:01:03 -0700 (PDT) From: Florian Fainelli To: u-boot@lists.denx.de Date: Sat, 14 Oct 2017 18:00:15 -0700 Message-Id: <20171015010016.18815-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171015010016.18815-1-f.fainelli@gmail.com> References: <20171015010016.18815-1-f.fainelli@gmail.com> X-Mailman-Approved-At: Sun, 15 Oct 2017 19:06:07 +0000 Cc: Alexandru Gagniuc , hdegoede@redhat.com, Joe Hershberger , Stefan Roese , Jelle de Jong , maxime.ripard@free-electrons.com Subject: [U-Boot] [PATCH 3/4] net: phy: b53: Add b53_reg read/write commands 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add a b53_reg read/write command which allows inspecting the switch registers. Because the Broadcom BCM53xx registers have different sizes, we need to split the accesses in 8, 16, 32, 48 or 64 bits to obtain expected results. Signed-off-by: Florian Fainelli Reviewed-by: Stefan Roese Acked-by: Joe Hershberger --- drivers/net/phy/b53.c | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/drivers/net/phy/b53.c b/drivers/net/phy/b53.c index fa37d051130b..a68d2ae39fa9 100644 --- a/drivers/net/phy/b53.c +++ b/drivers/net/phy/b53.c @@ -627,3 +627,141 @@ int phy_b53_init(void) return 0; } + +int do_b53_reg_read(const char *name, int argc, char * const argv[]) +{ + u8 page, offset, width; + struct mii_dev *bus; + int ret = -EINVAL; + u64 value64 = 0; + u32 value32 = 0; + u16 value16 = 0; + u8 value8 = 0; + + bus = miiphy_get_dev_by_name(name); + if (!bus) { + printf("unable to find MDIO bus: %s\n", name); + return ret; + } + + page = simple_strtoul(argv[1], NULL, 16); + offset = simple_strtoul(argv[2], NULL, 16); + width = simple_strtoul(argv[3], NULL, 10); + + switch (width) { + case 8: + ret = b53_mdio_read8(bus, page, offset, &value8); + printf("page=0x%02x, offset=0x%02x, value=0x%02x\n", + page, offset, value8); + break; + case 16: + ret = b53_mdio_read16(bus, page, offset, &value16); + printf("page=0x%02x, offset=0x%02x, value=0x%04x\n", + page, offset, value16); + break; + case 32: + ret = b53_mdio_read32(bus, page, offset, &value32); + printf("page=0x%02x, offset=0x%02x, value=0x%08x\n", + page, offset, value32); + break; + case 48: + ret = b53_mdio_read48(bus, page, offset, &value64); + printf("page=0x%02x, offset=0x%02x, value=0x%012llx\n", + page, offset, value64); + break; + case 64: + ret = b53_mdio_read48(bus, page, offset, &value64); + printf("page=0x%02x, offset=0x%02x, value=0x%016llx\n", + page, offset, value64); + break; + default: + printf("Unsupported width: %d\n", width); + break; + } + + return ret; +} + +int do_b53_reg_write(const char *name, int argc, char * const argv[]) +{ + u8 page, offset, width; + struct mii_dev *bus; + int ret = -EINVAL; + u64 value64 = 0; + u32 value = 0; + + bus = miiphy_get_dev_by_name(name); + if (!bus) { + printf("unable to find MDIO bus: %s\n", name); + return ret; + } + + page = simple_strtoul(argv[1], NULL, 16); + offset = simple_strtoul(argv[2], NULL, 16); + width = simple_strtoul(argv[3], NULL, 10); + if (width == 48 || width == 64) + value64 = simple_strtoull(argv[4], NULL, 16); + else + value = simple_strtoul(argv[4], NULL, 16); + + switch (width) { + case 8: + ret = b53_mdio_write8(bus, page, offset, value & 0xff); + break; + case 16: + ret = b53_mdio_write16(bus, page, offset, value); + break; + case 32: + ret = b53_mdio_write32(bus, page, offset, value); + break; + case 48: + ret = b53_mdio_write48(bus, page, offset, value64); + break; + case 64: + ret = b53_mdio_write64(bus, page, offset, value64); + break; + default: + printf("Unsupported width: %d\n", width); + break; + } + + return ret; +} + +int do_b53_reg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + const char *cmd, *mdioname; + int ret = 0; + + if (argc < 2) + return cmd_usage(cmdtp); + + cmd = argv[1]; + --argc; + ++argv; + + if (!strcmp(cmd, "write")) { + if (argc < 4) + return cmd_usage(cmdtp); + mdioname = argv[1]; + --argc; + ++argv; + ret = do_b53_reg_write(mdioname, argc, argv); + } else if (!strcmp(cmd, "read")) { + if (argc < 5) + return cmd_usage(cmdtp); + mdioname = argv[1]; + --argc; + ++argv; + ret = do_b53_reg_read(mdioname, argc, argv); + } else + return cmd_usage(cmdtp); + + return ret; +} + +U_BOOT_CMD(b53_reg, 7, 1, do_b53_reg, + "Broadcom B53 switch register access", + "write mdioname page (hex) offset (hex) width (dec) value (hex)\n" + "read mdioname page (hex) offset (hex) width (dec)\n" + );