From patchwork Fri Nov 27 11:52:00 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Ardelean X-Patchwork-Id: 549408 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 028511402D0 for ; Fri, 27 Nov 2015 22:52:22 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=qVTMQWOW; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 72FE228098D; Fri, 27 Nov 2015 12:52:11 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 3FCCF28021B for ; Fri, 27 Nov 2015 12:52:06 +0100 (CET) X-policyd-weight: using cached result; rate: -8.5 Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Fri, 27 Nov 2015 12:52:05 +0100 (CET) Received: by wmec201 with SMTP id c201so67139648wme.0 for ; Fri, 27 Nov 2015 03:52:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=cLZwsyVOYe7YqtfVxWtFbfXk14/byEHCv5CVXAWxLMs=; b=qVTMQWOWWbDk5KGpHgfU51cdB2eKIeBhFh5lijj23YxLMUDmI26WXmGBmOEH9HyJ7B qosTvMP4GoJM4vw+GKwAQGM1efwaNV8NI/fCZ0R5Opb0dd0nr0w11APrV0zDdf2kj36w Oiw2J8AEesGtiAhK3F4fwOTl3s3EjIDh22v1TvaKaSxviicHCGA02lD2b3pQPo/LzxFN mefF+Y+IABcd7AP0S2r9IJLg5stOKI0T5PpA/iU2CUsOO/iNJgES1s267rOo1xtxP+s0 +l+3E1mdSP/EUgts8AmRSMF8rhe4i0/N8mcX5adnHmYnJFL860mYe30CFqmok0o2qmw0 gu/g== X-Received: by 10.194.117.68 with SMTP id kc4mr42941470wjb.77.1448625126748; Fri, 27 Nov 2015 03:52:06 -0800 (PST) Received: from orion.ocedo.cluj.local ([5.2.198.78]) by smtp.gmail.com with ESMTPSA id jt9sm32611730wjc.24.2015.11.27.03.52.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 27 Nov 2015 03:52:05 -0800 (PST) From: Alexandru Ardelean To: openwrt-devel@lists.openwrt.org Date: Fri, 27 Nov 2015 13:52:00 +0200 Message-Id: <1448625120-22620-1-git-send-email-ardeleanalex@gmail.com> X-Mailer: git-send-email 2.1.4 Subject: [OpenWrt-Devel] [PATCH] b53: add 'flush_arl' command per port X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" This would in essence re-use the current b53_flush_arl() function with the added part that we can select a single port to flush ARL for. Signed-off-by: Alexandru Ardelean --- .../generic/files/drivers/net/phy/b53/b53_common.c | 29 ++++++++++++++++++---- .../generic/files/drivers/net/phy/b53/b53_regs.h | 4 +++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c index 859d8d1..8c8d217 100644 --- a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c +++ b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c @@ -336,12 +336,17 @@ static int b53_set_jumbo(struct b53_device *dev, int enable, int allow_10_100) return b53_write16(dev, B53_JUMBO_PAGE, dev->jumbo_size_reg, max_size); } -static int b53_flush_arl(struct b53_device *dev) +static int b53_flush_arl(struct b53_device *dev, int port) { unsigned int i; + u8 age_ctrl = FAST_AGE_DONE | FAST_AGE_DYNAMIC | FAST_AGE_STATIC; - b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_CTRL, - FAST_AGE_DONE | FAST_AGE_DYNAMIC | FAST_AGE_STATIC); + if (port > -1 && port < B53_N_PORTS) { + b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_PORT_CTRL, FAST_AGE_SINGLE_PORT(port)); + age_ctrl |= FAST_AGE_PORT; + } + + b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_CTRL, age_ctrl); for (i = 0; i < 10; i++) { u8 fast_age_ctrl; @@ -355,7 +360,7 @@ static int b53_flush_arl(struct b53_device *dev) mdelay(1); } - pr_warn("time out while flushing ARL\n"); + pr_warn("time out while flushing ARL, port %d\n", port); return -EINVAL; } @@ -565,7 +570,7 @@ static int b53_switch_reset(struct b53_device *dev) b53_enable_mib(dev); - return b53_flush_arl(dev); + return b53_flush_arl(dev, -1); } /* @@ -890,6 +895,14 @@ static int b53_port_get_mib(struct switch_dev *sw_dev, return 0; } +static int b53_port_flush_arl(struct switch_dev *sw_dev, + const struct switch_attr *attr, + struct switch_val *val) +{ + struct b53_device *dev = sw_to_b53(sw_dev); + return b53_flush_arl(dev, val->port_vlan); +} + static struct switch_attr b53_global_ops_25[] = { { .type = SWITCH_TYPE_INT, @@ -976,6 +989,12 @@ static struct switch_attr b53_port_ops[] = { .description = "Get port's MIB counters", .get = b53_port_get_mib, }, + { + .type = SWITCH_TYPE_NOVAL, + .name = "flush_arl", + .description = "Flush ARL", + .set = b53_port_flush_arl, + }, }; static struct switch_attr b53_no_ops[] = { diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h b/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h index 144e1c8..138d26b 100644 --- a/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h +++ b/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h @@ -135,6 +135,10 @@ #define FAST_AGE_MC BIT(5) #define FAST_AGE_DONE BIT(7) +/* Fast Aging Port Control register (8 bit) */ +#define B53_FAST_AGE_PORT_CTRL 0x89 +#define FAST_AGE_SINGLE_PORT(p) ((u8)(0xf & p)) + /************************************************************************* * Status Page registers *************************************************************************/