From patchwork Tue Jun 23 16:48:54 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Codrin Ciubotariu X-Patchwork-Id: 487734 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 025CA140157 for ; Wed, 24 Jun 2015 02:51:05 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 161134B6DA; Tue, 23 Jun 2015 18:50:18 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kniJs3FXshpW; Tue, 23 Jun 2015 18:50:17 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A3BB14B6E8; Tue, 23 Jun 2015 18:50:03 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 13B534B686 for ; Tue, 23 Jun 2015 18:49:56 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qkqqmc3vNAt3 for ; Tue, 23 Jun 2015 18:49:56 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0116.outbound.protection.outlook.com [157.56.110.116]) by theia.denx.de (Postfix) with ESMTPS id 27C534B668 for ; Tue, 23 Jun 2015 18:49:35 +0200 (CEST) Received: from BLUPR0301CA0016.namprd03.prod.outlook.com (10.162.113.154) by DM2PR0301MB0669.namprd03.prod.outlook.com (10.160.96.19) with Microsoft SMTP Server (TLS) id 15.1.195.15; Tue, 23 Jun 2015 16:49:33 +0000 Received: from BN1BFFO11FD043.protection.gbl (2a01:111:f400:7c10::1:163) by BLUPR0301CA0016.outlook.office365.com (2a01:111:e400:5259::26) with Microsoft SMTP Server (TLS) id 15.1.201.16 via Frontend Transport; Tue, 23 Jun 2015 16:49:33 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BN1BFFO11FD043.mail.protection.outlook.com (10.58.144.106) with Microsoft SMTP Server (TLS) id 15.1.190.9 via Frontend Transport; Tue, 23 Jun 2015 16:49:17 +0000 Received: from fsr-fed2064-105.ea.freescale.net (fsr-fed2064-105.ea.freescale.net [10.171.73.172]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t5NGmum8027924; Tue, 23 Jun 2015 09:49:11 -0700 From: Codrin Ciubotariu To: Date: Tue, 23 Jun 2015 19:48:54 +0300 Message-ID: <1435078136-22809-10-git-send-email-codrin.ciubotariu@freescale.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1435078136-22809-1-git-send-email-codrin.ciubotariu@freescale.com> References: <1435078136-22809-1-git-send-email-codrin.ciubotariu@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD043; 1:w32+3ZC8AaSSXzHXkCKIc2RcX7HECmYqlFc12b3aiu68LPnw2dcOlzHNmE4i7bQoRHTVyOepGTiWb0KmCgNlbs4tF+2azj4kF37oCjLtzhSkh5Osm8hhDIr/lPia4mzSwvgiJfRws4wKfd5m5e0Rn6MnYE8zlFtqNA0MR0z2VrM9ETjpFdMFUji8+nYrVTQ8H2sLwBogpuvUi7PEe36T1nTlRiSY73oH6UmOnyvTssObcUjbBn5en3xGwdWwgylXpXpJfNRMEujp5CuxMdYZCocrB/4XY2Hgj5IZ0RDbjwVpVMZODo6PYmFPbSyuuiR8i/JBvaLtpK4ZAEBlXlbaIw== X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(339900001)(199003)(189002)(19580405001)(19580395003)(86362001)(50986999)(87936001)(47776003)(107886002)(76176999)(5001960100002)(2950100001)(110136002)(189998001)(92566002)(50466002)(229853001)(77096005)(2351001)(106466001)(104016003)(33646002)(48376002)(105606002)(36756003)(77156002)(62966003)(50226001)(6806004)(46102003)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:DM2PR0301MB0669; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:sfv; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0669; 2:DczNJaNiNMOH2LY+RNmESMeC+Xy3hypv+mH+Fw1jvMnO4xoo0hpYCEoat4cvPpCn; 3:LwhlwHntnvVmP2I9FCoFbgpeB5/WbQIGJU5lYBIZJBDhe1vWIiahCN5o+5WEfjKX6QfmXzg7uTrssWqCkmhMJsc39rhau1Bj6CaBWZdoot1WoefnUgiTz2cw+oN2s6LbLJUOB5PDsVm5M3M/olUyrQdRX2xDa0P+1O/6TlNw1ne0EbZftYECGcn4fLC4q3HPjLzvJoWXgJWhl7PJkI68NUn2jyJ2bJjocLf5vgAPNl4=; 20:+jzmFfDLAfhZMs0aU1iQjYUROXpV/6HpcqwY0711agHtz9+luMWOBLKGqTF3QR9UBbiTpJy8vtJcaK1e7DRQ8UJBsCZdxzTHQWFeg52jkbsQzBxQocLGxdEytA2y7i95TgJr5M97MZ8nEuByIzM3QSoH/SOAQuQ+F8F7OVRdfanxLoXSVFR4Tgro8C5nUKB/MfsHci6l0MjNRlFuxCQdIkJdqdLQdn1U7IMRYUExEqtwO7vJx2zSP+0m+D8/N+44QraWB44uQSs//hMFuqSegtjo7DV2qHlGnwvRhyo0Djia9OohmLWEKpLvRqHqfVNVFKHxd8Lrvhg+T8wR0FdWFURm5ry7aPl+BE5HHwmzN5k= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0669; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(3002001); SRVR:DM2PR0301MB0669; BCL:0; PCL:0; RULEID:; SRVR:DM2PR0301MB0669; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0669; 4:3cddt9Xm7nQuRBeiRtVVgoXuMzJXcrByyf9RpYKnoe9WRid57wMlKB/EM8j/b3b/CBCguIA99eL2QOTnisqKmTeE9JF29NA/RLjL0fOUVQ7UK6jB7KKiVcBKY454AyXUVS2vSd7+TY/6Xya+KU6WFHaleIlYG0I/XqIiq33GBhpkSjiD5c1EPcPUdJVpjIVJ7opDq2RC5aVtg5u0+/iY38YgVk01fEFbRfNMtgHpWDvqSsbt3BxHst5KcbM+Ii2pfFcYLymqxix7OlWpQamGGNfLgQn6RFd2vzy8VLcSQo8= X-Forefront-PRVS: 06167FAD59 X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0669; 23:8lOjxALxMtDKVDRx6mmFVLU7WSOwyweGWQQgxRuYM0Bwoam9asPsUW7W34m2U0gqm7e57HDT14VgopGTnbJPOYN8nk5m0c1FKeoxjbE9pES4vGPKP7DtvqfQHxwM1gkREEamf1aaZjL9gJGVQjBEgu9n3sRgfJM4Ijm6Ul3rUeyQEn4l1BfO2aF4w3oenJyLFiG1TiTtDGb10UV1wyJFdCxi0/yWAhwywbsgZo2WCffdrLSThasDtw2rQqzltwXmSbUm9/c1hmFWoj7Tc6EGZMnVANsSSw22cWYMNuZCs5Cynfb7pYNAAJbpsBgdtwANZyYDqDzy5NDfhse65Pyo/m6F4i2ikGpPQn5A0UtUbzpZCwk30bR1IIA4y4JkmsG6+Pl868x4DgoxaLxS3ldEdresOsmOy22b38DiFhxi7+W6PupYHOhO1SglMEiMz4Ya4LUlAg3GFP6C5+hLTI6IpBvg+sGYGyT/k8otAdaJBaiuo+FTLJAxQT9uRTD/4j8egOzxVFtihnO5vn9ZQ5IexoMAAudySWcwLaUwGtyX6S+yW/edxU4Zgddks8zWgE/5iSzlQMt1T+jI8GwihUeDEuidtQ5w5vqZmFvIXh3Bge1OrZB2kJ9NGVsNhu7gtM/n9C3y5tJyLQCxOcGyCRiUTHGwh+Y8J6W0xUiFvfoISweIgbfEpcuoopxoKzegj6eK2Fn6otA4iYjcEvXMu6ojedZ70/eQ+EolCeCFVO9oOe26TF/4b1IKtOWWu1DEnzFPScD2AnAyg9Z/42rH1TUtPrRegHprHYDGsidgtnDGAD1yjY1zi4vu3wcWWndF6mhXbRMqfgau3YchnqkGxwoYDjXRbEEySeA4wrJ/0XAj/xy8p9UWHpAlaneqoq0Ys0knq8l4UNNmesPR09klKcR6rw== X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0669; 5:wqg4qtnp5brS21sZOenpum5loXxGx+9052Eta48H9iANmZZ+XxhojBaYuBi9w8IU8DZzbC4fW14fpfDMYgB3GhaymroyV8785Xu1iIrkAN1M/RhQXeDFeR/LOEINlaahxo1HMzp5l+aTv02D52/tNQ==; 24:rFD9aAeYoZMambrbFYK91HVHQRzYPd9Bm+/sTc9hV/6SSjsO8ybFRkc+//idQ1EU63+OgpyFj7MXn2lp4raCBCbGEoQ+4z5EySOQMP29uRE=; 20:Zolu5CmmXiI1GdO2NfPg4oOe8HG7qoUSqxiFOmRbM517UqKexMsx+QVXO/53Ftjig8Rr9C5XnqMCaIY9XhIlQg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2015 16:49:17.6039 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0669 Cc: joe.hershberger@ni.com, yorksun@freescale.com Subject: [U-Boot] [PATCH 09/11 v2] drivers/net/vsc9953: Add command for shared/private VLAN learning X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 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" The command: ethsw vlan fdb { [help] | show | shared | private } - make VLAN learning shared or private" configures the FDB to share the FDB entries learned on multiple VLANs or to keep them separated. By default, the FBD uses private VLAN learning. Signed-off-by: Johnson Leung Signed-off-by: Codrin Ciubotariu --- Changes for v2: - removed Change-id field; drivers/net/vsc9953.c | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/vsc9953.h | 3 + 2 files changed, 158 insertions(+) diff --git a/drivers/net/vsc9953.c b/drivers/net/vsc9953.c index b78a941..3129b03 100644 --- a/drivers/net/vsc9953.c +++ b/drivers/net/vsc9953.c @@ -1503,6 +1503,58 @@ static void vsc9953_mac_table_flush(int port, int vid) vsc9953_mac_table_age(port, vid); } +/* VSC9953 VLAN learning modes */ +enum vlan_learning_mode { + SHARED_VLAN_LEARNING, + PRIVATE_VLAN_LEARNING, +}; + +/* Set VLAN learning mode for VSC9953 */ +static void vsc9953_vlan_learning_set(enum vlan_learning_mode lrn_mode) +{ + struct vsc9953_analyzer *l2ana_reg; + + l2ana_reg = (struct vsc9953_analyzer *)(VSC9953_OFFSET + + VSC9953_ANA_OFFSET); + + switch (lrn_mode) { + case SHARED_VLAN_LEARNING: + setbits_le32(&l2ana_reg->ana.agen_ctrl, + CONFIG_VSC9953_FID_MASK_ALL); + break; + case PRIVATE_VLAN_LEARNING: + clrbits_le32(&l2ana_reg->ana.agen_ctrl, + CONFIG_VSC9953_FID_MASK_ALL); + break; + default: + printf("Unknown VLAN learn mode\n"); + } +} + +/* Get VLAN learning mode for VSC9953 */ +static int vsc9953_vlan_learning_get(enum vlan_learning_mode *lrn_mode) +{ + u32 val; + struct vsc9953_analyzer *l2ana_reg; + + l2ana_reg = (struct vsc9953_analyzer *)(VSC9953_OFFSET + + VSC9953_ANA_OFFSET); + + val = in_le32(&l2ana_reg->ana.agen_ctrl); + + if (!(val & CONFIG_VSC9953_FID_MASK_ALL)) { + *lrn_mode = PRIVATE_VLAN_LEARNING; + } else if ((val & CONFIG_VSC9953_FID_MASK_ALL) == + CONFIG_VSC9953_FID_MASK_ALL) { + *lrn_mode = SHARED_VLAN_LEARNING; + } else { + printf("Unknown VLAN learning mode\n"); + return -EINVAL; + } + + return 0; +} + enum egress_vlan_tag { EGR_TAG_CLASS = 0, EGR_TAG_PVID, @@ -1572,6 +1624,8 @@ enum keyword_id { id_egress, id_tag, id_classified, + id_shared, + id_private, id_count, /* keep last */ }; @@ -1868,6 +1922,61 @@ static int vsc9953_vlan_set_key_func(struct command_def *parsed_cmd) return 0; } +#define VSC9953_VLAN_FDB_HELP "ethsw vlan fdb " \ +"{ [help] | show | shared | private } " \ +"- make VLAN learning shared or private" + +static int vsc9953_vlan_learn_help_key_func(struct command_def *parsed_cmd) +{ + printf(VSC9953_VLAN_FDB_HELP"\n"); + + return 0; +} + +static int vsc9953_vlan_learn_show_key_func(struct command_def *parsed_cmd) +{ + int rc; + enum vlan_learning_mode mode; + + rc = vsc9953_vlan_learning_get(&mode); + if (rc) + goto __out_return; + + switch (mode) { + case SHARED_VLAN_LEARNING: + printf("VLAN learning mode: shared\n"); + break; + case PRIVATE_VLAN_LEARNING: + printf("VLAN learning mode: private\n"); + break; + default: + printf("Unknown VLAN learning mode\n"); + rc = -EINVAL; + } + +__out_return: + return rc; +} + +static int vsc9953_vlan_learn_set_key_func(struct command_def *parsed_cmd) +{ + enum vlan_learning_mode mode; + + /* keywords for shared/private are the last in the array */ + if (parsed_cmd->cmd_to_keywords[parsed_cmd->cmd_keywords_nr - 1] == + id_shared) + mode = SHARED_VLAN_LEARNING; + else if (parsed_cmd->cmd_to_keywords[parsed_cmd->cmd_keywords_nr - 1] == + id_private) + mode = PRIVATE_VLAN_LEARNING; + else + return -1; + + vsc9953_vlan_learning_set(mode); + + return 0; +} + #define VSC9953_PORT_UNTAG_HELP "ethsw [port ] untagged " \ "{ [help] | show | all | none | pvid } " \ " - set egress tagging mod for a port" @@ -2331,6 +2440,45 @@ struct keywords_to_function { id_key_end, }, .keyword_function = &vsc9953_fdb_entry_del_key_func, + }, { + .cmd_keyword = { + id_vlan, + id_fdb, + id_key_end, + }, + .keyword_function = &vsc9953_vlan_learn_help_key_func, + }, { + .cmd_keyword = { + id_vlan, + id_fdb, + id_help, + id_key_end, + }, + .keyword_function = &vsc9953_vlan_learn_help_key_func, + }, { + .cmd_keyword = { + id_vlan, + id_fdb, + id_show, + id_key_end, + }, + .keyword_function = &vsc9953_vlan_learn_show_key_func, + }, { + .cmd_keyword = { + id_vlan, + id_fdb, + id_shared, + id_key_end, + }, + .keyword_function = &vsc9953_vlan_learn_set_key_func, + }, { + .cmd_keyword = { + id_vlan, + id_fdb, + id_private, + id_key_end, + }, + .keyword_function = &vsc9953_vlan_learn_set_key_func, }, }; @@ -2447,6 +2595,12 @@ struct keyword_def { }, { .keyword_name = "classified", .match = &keyword_match_gen, + }, { + .keyword_name = "shared", + .match = &keyword_match_gen, + }, { + .keyword_name = "private", + .match = &keyword_match_gen, }, }; @@ -2770,6 +2924,7 @@ U_BOOT_CMD(ethsw, VSC9953_MAX_CMD_PARAMS, 0, do_ethsw, VSC9953_PVID_HELP"\n" VSC9953_PORT_UNTAG_HELP"\n" VSC9953_EGR_VLAN_TAG_HELP"\n" + VSC9953_VLAN_FDB_HELP"\n" ); #endif /* CONFIG_VSC9953_CMD */ diff --git a/include/vsc9953.h b/include/vsc9953.h index 6eb22a9..26a08aa 100644 --- a/include/vsc9953.h +++ b/include/vsc9953.h @@ -142,6 +142,9 @@ /* Macros for vsc9953_qsys_sys.switch_port_mode register */ #define CONFIG_VSC9953_PORT_ENA 0x00002000 +/* Macros for vsc9953_ana_ana.agen_ctrl register */ +#define CONFIG_VSC9953_FID_MASK_ALL 0x00fff000 + /* Macros for vsc9953_ana_ana.adv_learn register */ #define CONFIG_VSC9953_VLAN_CHK 0x00000400