From patchwork Sat Oct 14 20:20:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 825876 X-Patchwork-Delegate: trini@ti.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="kNKet66P"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3yDxbh0Xnfz9s7g for ; Sun, 15 Oct 2017 07:52:16 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id CE901C21F60; Sat, 14 Oct 2017 20:51:30 +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 8072BC21F41; Sat, 14 Oct 2017 20:50:05 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 20701C21D99; Sat, 14 Oct 2017 20:21:17 +0000 (UTC) Received: from mail-oi0-f67.google.com (mail-oi0-f67.google.com [209.85.218.67]) by lists.denx.de (Postfix) with ESMTPS id 913CEC21C45 for ; Sat, 14 Oct 2017 20:21:16 +0000 (UTC) Received: by mail-oi0-f67.google.com with SMTP id e123so5158385oig.2 for ; Sat, 14 Oct 2017 13:21:16 -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=kNKet66PXU8jUFfuedOultK0QWMMauZIPdBDWglpUsEwwOlRhw6Bt5Bw/jEOTJfvKY Jpjls0HLdDfkZigffN+wrTu6kiro6BTgMgKHJrXSorvZcMhk8BzX2N1w7kDnMH5LXxgX WgKv6UUh1xrQgp9i2n2+b2cXuZ+nWOuGp6Oj1bA7k2LP09gUyQNLUv+GECBpdHJoTEwB FCT+h5C/gNIvIWIKQ1/Jg38OfebJ7zB8jDuFJ0XuA7K48YU8V0SSHLrfNMVAt1LH9ngP BTkHtG8BCdoHtaGZDCZYLwikAQL9Szqw/VqKqWCaCTpebvw+9islvknXZ1eq+3SlXtxF XiDA== 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=VHCT8kgLbmQNhWsdTpANJVhnE/6Qe9CqzmfDUdJCd2hAhJ4uXAAe+hQQNWpS9O9/2R DWKWqbW4vC7nNCSkb6fC0BQiBPIsZF3hmzlPU9Mqv79jmQRSDTVDJJKlFdJFsgNvfKab MvOP4PE7la5trXa+45eMHt7Ndqt2iWeiI1hkM1hYjXK2puuMkq2lW2YR5sGKlR/SCKM5 xIMYavjZcXxXsUigS+ySFrXjT9S/d4RCJaxWtUIb8f27y4I70UobDpDTFigOQaMtuIlD WwMs1nXRF/fTUJc/K09TYrVT+muV1rGzgJGUhkxrvJCp53rEVOOKSM0Rsxfr8BjpfjLZ q/Ww== X-Gm-Message-State: AMCzsaVeA2DFdNJrNUO8AEYywKpdjIMoq0CJdLN9oYfDh2e57HCmwBHy yUVhjUZtbbPSs19iRhFUAi5JXK/Q X-Google-Smtp-Source: AOwi7QCg36es0n4FbuqwIOBLH/ta6wpdGi9SvWNwi3uWgBVPR45yiGKZnT4Ox1FUTmB1ZDFQ6AGxLg== X-Received: by 10.157.19.102 with SMTP id q35mr2895284otq.496.1508012475052; Sat, 14 Oct 2017 13:21:15 -0700 (PDT) Received: from bender.lan ([2001:470:d:73f:d5a:2b53:a262:c0c4]) by smtp.gmail.com with ESMTPSA id j3sm1978003otc.69.2017.10.14.13.21.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 14 Oct 2017 13:21:14 -0700 (PDT) From: Florian Fainelli To: u-boot@lists.denx.de Date: Sat, 14 Oct 2017 13:20:59 -0700 Message-Id: <20171014202100.18053-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171014202100.18053-1-f.fainelli@gmail.com> References: <20171014202100.18053-1-f.fainelli@gmail.com> X-Mailman-Approved-At: Sat, 14 Oct 2017 20:50:00 +0000 Cc: Alexandru Gagniuc , Florian Fainelli , 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 --- 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" + );