From patchwork Sun Jun 2 21:11:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108980 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TJhg/oQg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9rM3cRtz9s4Y for ; Mon, 3 Jun 2019 07:12:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726800AbfFBVMg (ORCPT ); Sun, 2 Jun 2019 17:12:36 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:37562 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726485AbfFBVMf (ORCPT ); Sun, 2 Jun 2019 17:12:35 -0400 Received: by mail-wr1-f67.google.com with SMTP id h1so9976573wro.4 for ; Sun, 02 Jun 2019 14:12:34 -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=1CzywQKWR8l8+0v7JkCrcMlW0rK00Kzd9BC4KmPsbks=; b=TJhg/oQgzDgE15PM1Z/ZQCvovlX92II2L+UH51pnYDzAnvAJ6NzMTOjO+Vl4ePlvg8 1DZP++nkQTVyknZbEKHk7kQ1EV679ojE5JtcaGT22efk2OZP0jcPWB4xV48s6/GrwuUS JwYCVVVmrKVW3Yd6lbzDIUtST484l3TbODpGTmRpxQRRGp7kHtlt7zbtw84I7/S80rQQ WRfbWQa3KNt0VJyukRQIpbW3ilr87E8D4OgVNNmJN+O5zPGno6RzkA2/3NaF0ZXW9GbI MhfgOULOUbIIBxnqyhOZeCfDdrv2+6ifLtX8WI3Q9fdIUtvJHjeln4Kp/Bd2Sv7aA82x BiZQ== 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=1CzywQKWR8l8+0v7JkCrcMlW0rK00Kzd9BC4KmPsbks=; b=cS3ub4m3Sb3Gmc2ZafENj0yMwp5nODy8D2oJtLJufsOna9TzyejynW50jLLZ3gu6Zg jleDTMBATs3xxMSk1GKTJrSE1onk7kWAxQtGDy2YSN4Wp38YjEB6FyT3MkjbskQ4CCqI dPidBDnEn6IMgl6WSCWMM+bjGOyVz0g9aRCFhpHoKuCu4YJqbg6DMr+D3bRjsI6PRP7o Z/tUWdrZgLM2EZ1nK7p12bTNPaBHPoBncOjWlG79YQhM/I6Mf8wlKrGV6LL8z2CD2NzG i9rSIc1cmJT33wPiaNXlOLYVrrruS7H5RJ99rAzDugYlC/hpvFdnHk87+k+n2AsRdpb8 8QCw== X-Gm-Message-State: APjAAAVDKDz2OunU6eAEOTpEf80FNTGhbKCbBLRv7DuYGAR5zL0V2Jg4 qEH+D4sFLIfhuX15eG3X5Uo= X-Google-Smtp-Source: APXvYqyXgJMOT439lDmcZzegaJaCBUKOlOI3AFXw7SUY8UnVXbyUxJCp5JDjSukAVvQLatMmTum0JA== X-Received: by 2002:a5d:63cb:: with SMTP id c11mr13809266wrw.65.1559509953671; Sun, 02 Jun 2019 14:12:33 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.12.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:12:33 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 01/11] net: dsa: sja1105: Shim declaration of struct sja1105_dyn_cmd Date: Mon, 3 Jun 2019 00:11:53 +0300 Message-Id: <20190602211203.17773-2-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This structure is merely an implementation detail and should be hidden from the sja1105_dynamic_config.h header, which provides to the rest of the driver an abstract access to the dynamic configuration interface of the switch. Signed-off-by: Vladimir Oltean Reviewed-by: Florian Fainelli --- drivers/net/dsa/sja1105/sja1105_dynamic_config.c | 8 ++++++++ drivers/net/dsa/sja1105/sja1105_dynamic_config.h | 8 +------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index e73ab28bf632..c981c12eb181 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -35,6 +35,14 @@ #define SJA1105_MAX_DYN_CMD_SIZE \ SJA1105PQRS_SIZE_MAC_CONFIG_DYN_CMD +struct sja1105_dyn_cmd { + u64 valid; + u64 rdwrset; + u64 errors; + u64 valident; + u64 index; +}; + static void sja1105pqrs_l2_lookup_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd, enum packing_op op) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.h b/drivers/net/dsa/sja1105/sja1105_dynamic_config.h index 77be59546a55..49c611eb02cb 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.h +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.h @@ -7,13 +7,7 @@ #include "sja1105.h" #include -struct sja1105_dyn_cmd { - u64 valid; - u64 rdwrset; - u64 errors; - u64 valident; - u64 index; -}; +struct sja1105_dyn_cmd; struct sja1105_dynamic_table_ops { /* This returns size_t just to keep same prototype as the From patchwork Sun Jun 2 21:11:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108981 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uDc3V6F1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9rN0hLwz9s6w for ; Mon, 3 Jun 2019 07:12:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726824AbfFBVMh (ORCPT ); Sun, 2 Jun 2019 17:12:37 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:41272 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726799AbfFBVMg (ORCPT ); Sun, 2 Jun 2019 17:12:36 -0400 Received: by mail-wr1-f67.google.com with SMTP id c2so9971481wrm.8 for ; Sun, 02 Jun 2019 14:12:36 -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=iW92S/TfpsdxTxWJKbo7zdWmVh0zKjrbJoCAgZoHifk=; b=uDc3V6F1IfVUBma0pN+Ob+r+CE+T+188pZ9M5vG99hZzGmHCdKNvtPvvTm6KD5SdW3 i+lZSXn1+cySU2dEYNVbF8lKCLPAB/wNai6uMhcI5gva5B3FDqrMtO/xMnQ7jBq6byE0 qJSU42rSFuD2VupxPI8RdUfro3KegoKEQeeZoKYINIAXCd5oOWobOxr5K+CtYtkW+C5Z dbelTT8AmJ0ZEUtbloibd+tY2ojkCK8oPkhaAhgiRw7sT6y2i/8aG4pD0dt7sSPJeyGZ Me65wk7xFCxsNOEFL5P37U847Z1V5f43jixAECpjua3YCILYB4JS5Biws/Ux2fkpsLRa f+4g== 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=iW92S/TfpsdxTxWJKbo7zdWmVh0zKjrbJoCAgZoHifk=; b=mrno+KlWioOUuj+Nnbq749FQW1+b9IkY/wfOI3GfyWRuFQ29vE9Sebbp186dSv3hMW RXVDLhIEMRW7MatyVdP87RiOWRW3O9Ejn13Qd8EWbAK28Ll8rv0KyZGyzA5NnlmUYcUM Ld3bnipIHXUPTKf52e+KJLszG3GtEnEPy+UMR20RXgDXEUAdyiUNVCmYFXxs6IRaFpuC NqAeq0/JMHoADl/zzA1IkKrpG9Q7PEudkx9I0zaTH8H4tU1naseG7jyY/5tyCaWAC0NO sTzyS+AKIZFsVrHN8J5K99L/573KOCTiMvCUdE3dYqCynNkH8IWZIIuQaUuoViX6Rjb2 THcA== X-Gm-Message-State: APjAAAU3tv9xv/kD0p2BSBIsRtcK/yBS+WSlud+37MVthaX5YXFPKm3K 30DUO2jJj3eX+ofvLurUCyw= X-Google-Smtp-Source: APXvYqyU7v+/im7E1v+HvIi6s7ccPLKjjYbDv64TMVL2lTbm8oYtaClYvQV5COXeBt+zwL+bvF8ACA== X-Received: by 2002:adf:b688:: with SMTP id j8mr13476539wre.238.1559509955636; Sun, 02 Jun 2019 14:12:35 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.12.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:12:34 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 02/11] net: dsa: sja1105: Fix bit offsets of index field from L2 lookup entries Date: Mon, 3 Jun 2019 00:11:54 +0300 Message-Id: <20190602211203.17773-3-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This was inadvertently copied from the SJA1105 E/T structure and not tested. Cross-checking with the P/Q/R/S documentation (UM11040) makes it immediately obvious what the correct bit offsets for this field are. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105_dynamic_config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index c981c12eb181..0023b03a010d 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -62,7 +62,7 @@ sja1105pqrs_l2_lookup_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd, * such that our API doesn't need to ask for a full-blown entry * structure when e.g. a delete is requested. */ - sja1105_packing(buf, &cmd->index, 29, 20, + sja1105_packing(buf, &cmd->index, 15, 6, SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY, op); /* TODO hostcmd */ } From patchwork Sun Jun 2 21:11:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108982 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="e6Ayehf8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9rN4Xnxz9s1c for ; Mon, 3 Jun 2019 07:12:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726876AbfFBVMm (ORCPT ); Sun, 2 Jun 2019 17:12:42 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:37567 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726799AbfFBVMl (ORCPT ); Sun, 2 Jun 2019 17:12:41 -0400 Received: by mail-wr1-f66.google.com with SMTP id h1so9976657wro.4 for ; Sun, 02 Jun 2019 14:12:40 -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=/7idbJYbPkvOwXVW3F5WgG4aMeUuxl7rBeCsGS57eDU=; b=e6Ayehf8/PKp4dyuHktqCbzZW3gPe6RQt+4KlwS7CR8QOOn/uLIiIPBmJc2Ipcovcm MA5xAyO8TRcIHvgso7XN0I8rMbMJrjAyO15x3PHIKGafaYD2nc5C8fUDyOOBZ6so5l+s mQg1sFvgtE6/I3/UBKI1hlu7aC4TVVroTYa5V18CVPkPuyya45Du3+mbH1214ocn5TDL BAxri6hByLAIpwH98Fx47imd6/luz6+PLSHCCQW4VTN36gcksTLxkFAVNYVjNqM/KW6S yZdawHgyel9YG0uQDh7iQR+w4VUZ1YOe1pwq9oUFvx80O3B71PqyAjmsi7dg4Y+VRDjL lSvA== 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=/7idbJYbPkvOwXVW3F5WgG4aMeUuxl7rBeCsGS57eDU=; b=cKcPhAWQ2b7oT8HHZ7HvcPqJDoEbbRZmGGiA+2LEavf8C4MazqfwJBepPpblaOUohr 70t3k6rmbTisYpA7h895ceJ3IeEL5UfnaszpqsLgs+2rXwOc51fxcHPIXzDmvCEvMsyb c8aOhm8Qt2wJBbIOlyh13UYcXJEWMyqhdtco16+iPNFZtwhZnpH6nyBENeLa5aUdrQyK lpoyLld+O9fLaoP7DY8LdmBjUsnjF0Q7ZiS4sfCar+AZ7BvJxjLgylan/+/u+/HxDhaP 88xC359pJxJFIJHTPjSp/oJrnBODcHvFhZvZBcdpkWxrpX4DVAHs4gRV8hNpTNKVfLXE GCvQ== X-Gm-Message-State: APjAAAWIW0j0jwmYlBpUazzqI7CQH+vILfEY7I0/6hS0qfp0zQrtW7i5 MoAHdhsaGU43In8zk9dx2eVC4Ule X-Google-Smtp-Source: APXvYqw2cLTIMKRA82vFlUkKm59+/5K3SGJnWX7A8MvdxyOTlPiEumPX7QMp/Q6W7HsrUTXC87LBfA== X-Received: by 2002:adf:e34e:: with SMTP id n14mr9014274wrj.169.1559509960242; Sun, 02 Jun 2019 14:12:40 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.12.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:12:37 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 03/11] net: dsa: sja1105: Add missing L2 Forwarding Table definitions for P/Q/R/S Date: Mon, 3 Jun 2019 00:11:55 +0300 Message-Id: <20190602211203.17773-4-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This appends to the L2 Forwarding and L2 Forwarding Parameters tables (originally added for first-generation switches) the bits that are new in the second generation. Signed-off-by: Vladimir Oltean --- .../net/dsa/sja1105/sja1105_static_config.c | 18 ++++++++++--- .../net/dsa/sja1105/sja1105_static_config.h | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_static_config.c b/drivers/net/dsa/sja1105/sja1105_static_config.c index 7e90e62da389..6d65a7b09395 100644 --- a/drivers/net/dsa/sja1105/sja1105_static_config.c +++ b/drivers/net/dsa/sja1105/sja1105_static_config.c @@ -236,10 +236,20 @@ size_t sja1105pqrs_l2_lookup_entry_packing(void *buf, void *entry_ptr, const size_t size = SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY; struct sja1105_l2_lookup_entry *entry = entry_ptr; - /* These are static L2 lookup entries, so the structure - * should match UM11040 Table 16/17 definitions when - * LOCKEDS is 1. - */ + if (entry->lockeds) { + sja1105_packing(buf, &entry->tsreg, 159, 159, size, op); + sja1105_packing(buf, &entry->mirrvlan, 158, 147, size, op); + sja1105_packing(buf, &entry->takets, 146, 146, size, op); + sja1105_packing(buf, &entry->mirr, 145, 145, size, op); + sja1105_packing(buf, &entry->retag, 144, 144, size, op); + } else { + sja1105_packing(buf, &entry->touched, 159, 159, size, op); + sja1105_packing(buf, &entry->age, 158, 144, size, op); + } + sja1105_packing(buf, &entry->mask_iotag, 143, 143, size, op); + sja1105_packing(buf, &entry->mask_vlanid, 142, 131, size, op); + sja1105_packing(buf, &entry->mask_macaddr, 130, 83, size, op); + sja1105_packing(buf, &entry->iotag, 82, 82, size, op); sja1105_packing(buf, &entry->vlanid, 81, 70, size, op); sja1105_packing(buf, &entry->macaddr, 69, 22, size, op); sja1105_packing(buf, &entry->destports, 21, 17, size, op); diff --git a/drivers/net/dsa/sja1105/sja1105_static_config.h b/drivers/net/dsa/sja1105/sja1105_static_config.h index 069ca8fd059c..d513b1c91b98 100644 --- a/drivers/net/dsa/sja1105/sja1105_static_config.h +++ b/drivers/net/dsa/sja1105/sja1105_static_config.h @@ -122,9 +122,35 @@ struct sja1105_l2_lookup_entry { u64 destports; u64 enfport; u64 index; + /* P/Q/R/S only */ + u64 mask_iotag; + u64 mask_vlanid; + u64 mask_macaddr; + u64 iotag; + bool lockeds; + union { + /* LOCKEDS=1: Static FDB entries */ + struct { + u64 tsreg; + u64 mirrvlan; + u64 takets; + u64 mirr; + u64 retag; + }; + /* LOCKEDS=0: Dynamically learned FDB entries */ + struct { + u64 touched; + u64 age; + }; + }; }; struct sja1105_l2_lookup_params_entry { + u64 start_dynspc; /* P/Q/R/S only */ + u64 drpnolearn; /* P/Q/R/S only */ + u64 use_static; /* P/Q/R/S only */ + u64 owr_dyn; /* P/Q/R/S only */ + u64 learn_once; /* P/Q/R/S only */ u64 maxage; /* Shared */ u64 dyn_tbsz; /* E/T only */ u64 poly; /* E/T only */ From patchwork Sun Jun 2 21:11:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108983 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uVb13Syg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9rP1jCMz9s4Y for ; Mon, 3 Jun 2019 07:12:53 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726982AbfFBVMu (ORCPT ); Sun, 2 Jun 2019 17:12:50 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:41287 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726879AbfFBVMu (ORCPT ); Sun, 2 Jun 2019 17:12:50 -0400 Received: by mail-wr1-f65.google.com with SMTP id c2so9971691wrm.8 for ; Sun, 02 Jun 2019 14:12:48 -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=X7Isc7dkSAG4gSYUlK60oTHltsGixfWJEjAtfvpYsUM=; b=uVb13Syg+Dt3mG4w8+W4CoRY9/4GeGGPbigRzsXkSBq7DF262fY/cY/qOPyC7rKsdq ZI2auQnMqXPDEDdxWm59D9o6i83s9/sfHWl0iXYr+CzFhWaAPZkDyVzmUOld4/l5lYSc SbtObgAf8eeQq2Qreb+mn8bVDLVu2XWq6IKCjYwRZSTqF4wd9G2ud4XDbuWv5L707JhL aaWUehk8c7HZyYfblC1eZqUGUYIf6s4ujhYtynuRIq1JBYd/ZFMCGeF4x56Wbt6bp5wl XxCcMb+7pUcFKIs8rDSVGHQaVbe13YjrjuikL8bkiWczwryo2meVk95W6tdodeMUIZAH DOgQ== 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=X7Isc7dkSAG4gSYUlK60oTHltsGixfWJEjAtfvpYsUM=; b=r7HsWLK2WkuA8pOAJ2whPq5koFQcSDMELhoHfE4EWatShE7NNhxoqqJTSEBfrPK/zz MGQ1h9d76M7eaYvFA0FKw/NRIRIHso8fST54iTEazg9419sLtGfAgYCI4wJiTS0vQHb4 J10qdd9wBb6PxYigOoYrh6+E+D8lcAZxydDl3DqOBCCe3R2WQZl6U+OSagjpK3j1uMHl JhWILm+hZT2TiNSmWPcPzSxysI1p3lQ6iLFvm4jEuB9mEkjJHtl+xzwWPICJ+W7eMRAE HiKiJz+Foxr8KHIzQK7xsLHrRwzIemfDZFDmP3wum6YO16uG61gc7p5AuwELbaReM6H/ Uodg== X-Gm-Message-State: APjAAAUoCbVOuGE+BMqgmnOGQF+JOjNVwo+IdDVam8w08Fg7fI9dyBtk QhSxktTO5c+TCDtrfEHh5FW6UA0m X-Google-Smtp-Source: APXvYqy5Ah+QqY5rf7N00T62yC7hlJIGYIKjUOxL5V8sW9S0JH/pis6v2Jw2wODdgkYManhVpa/73Q== X-Received: by 2002:adf:e9c4:: with SMTP id l4mr101628wrn.142.1559509967634; Sun, 02 Jun 2019 14:12:47 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.12.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:12:42 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 04/11] net: dsa: sja1105: Plug in support for TCAM searches via the dynamic interface Date: Mon, 3 Jun 2019 00:11:56 +0300 Message-Id: <20190602211203.17773-5-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Only a single dynamic configuration table of the SJA1105 P/Q/R/S supports this operation: the FDB. To keep the existing structure in place (sja1105_dynamic_config_read and sja1105_dynamic_config_write) and not introduce any new function, a convention is made for sja1105_dynamic_config_read that a negative index argument denotes a search for the entry provided as argument. Signed-off-by: Vladimir Oltean --- .../net/dsa/sja1105/sja1105_dynamic_config.c | 36 ++++++++++++++++++- .../net/dsa/sja1105/sja1105_dynamic_config.h | 3 ++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index 0023b03a010d..7e7efc2e8ee4 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -36,6 +36,7 @@ SJA1105PQRS_SIZE_MAC_CONFIG_DYN_CMD struct sja1105_dyn_cmd { + bool search; u64 valid; u64 rdwrset; u64 errors; @@ -248,6 +249,7 @@ sja1105et_general_params_entry_packing(void *buf, void *entry_ptr, #define OP_READ BIT(0) #define OP_WRITE BIT(1) #define OP_DEL BIT(2) +#define OP_SEARCH BIT(3) /* SJA1105E/T: First generation */ struct sja1105_dynamic_table_ops sja1105et_dyn_ops[BLK_IDX_MAX_DYN] = { @@ -367,6 +369,24 @@ struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN] = { [BLK_IDX_XMII_PARAMS] = {0}, }; +/* Provides read access to the settings through the dynamic interface + * of the switch. + * @blk_idx is used as key to select from the sja1105_dynamic_table_ops. + * The selection is limited by the hardware in respect to which + * configuration blocks can be read through the dynamic interface. + * @index is used to retrieve a particular table entry. If negative, + * (and if the @blk_idx supports the searching operation) a search + * is performed by the @entry parameter. + * @entry Type-casted to an unpacked structure that holds a table entry + * of the type specified in @blk_idx. + * Usually an output argument. If @index is negative, then this + * argument is used as input/output: it should be pre-populated + * with the element to search for. Entries which support the + * search operation will have an "index" field (not the @index + * argument to this function) and that is where the found index + * will be returned (or left unmodified - thus negative - if not + * found). + */ int sja1105_dynamic_config_read(struct sja1105_private *priv, enum sja1105_blk_idx blk_idx, int index, void *entry) @@ -385,6 +405,8 @@ int sja1105_dynamic_config_read(struct sja1105_private *priv, if (index >= ops->max_entry_count) return -ERANGE; + if (index < 0 && !(ops->access & OP_SEARCH)) + return -EOPNOTSUPP; if (!(ops->access & OP_READ)) return -EOPNOTSUPP; if (ops->packed_size > SJA1105_MAX_DYN_CMD_SIZE) @@ -396,9 +418,19 @@ int sja1105_dynamic_config_read(struct sja1105_private *priv, cmd.valid = true; /* Trigger action on table entry */ cmd.rdwrset = SPI_READ; /* Action is read */ - cmd.index = index; + if (index < 0) { + /* Avoid copying a signed negative number to an u64 */ + cmd.index = 0; + cmd.search = true; + } else { + cmd.index = index; + cmd.search = false; + } ops->cmd_packing(packed_buf, &cmd, PACK); + if (cmd.search) + ops->entry_packing(packed_buf, entry, PACK); + /* Send SPI write operation: read config table entry */ rc = sja1105_spi_send_packed_buf(priv, SPI_WRITE, ops->addr, packed_buf, ops->packed_size); @@ -456,6 +488,8 @@ int sja1105_dynamic_config_write(struct sja1105_private *priv, if (index >= ops->max_entry_count) return -ERANGE; + if (index < 0) + return -ERANGE; if (!(ops->access & OP_WRITE)) return -EOPNOTSUPP; if (!keep && !(ops->access & OP_DEL)) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.h b/drivers/net/dsa/sja1105/sja1105_dynamic_config.h index 49c611eb02cb..740dadf43f01 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.h +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.h @@ -7,6 +7,9 @@ #include "sja1105.h" #include +/* Special index that can be used for sja1105_dynamic_config_read */ +#define SJA1105_SEARCH -1 + struct sja1105_dyn_cmd; struct sja1105_dynamic_table_ops { From patchwork Sun Jun 2 21:11:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108984 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="U+y/b4kH"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9rm0pLSz9s1c for ; Mon, 3 Jun 2019 07:13:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726996AbfFBVNJ (ORCPT ); Sun, 2 Jun 2019 17:13:09 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:56237 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726879AbfFBVNJ (ORCPT ); Sun, 2 Jun 2019 17:13:09 -0400 Received: by mail-wm1-f65.google.com with SMTP id 16so4777880wmg.5 for ; Sun, 02 Jun 2019 14:13: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=IEJlP2IFNv1AEVXTSPVIlSUf+kHI7zpH9o/BzpeSxJM=; b=U+y/b4kHzbfcwdTjy2LW7aBsRaGQrkPOtqKpwA822+ueyMPdGRNXg8XCA6LH2t5+7o PM3gBBVr8WWt8IeXy3eTKuPV3YjbLcAwzHJKwYTnHAFIskoZgeitQ2TLVTuwcAb3RzeD iwLxPKay682V2P6v2XHT887TRbcoyD70hNd5ZQKuaaWKoMBk4nzf0wMXY7yYwFnm3o9k h/CACO+3Z0K4blriiS4Cf/DjsgDHDXH1lP0La13AvaTdlQH1TmEE3FAWV65FvG+/CBuF fMlftTkKOnP0GbmO+HDiu1JzS2SofEhYC39jYYGnsmANilWW2LSgKKDnN6cOypdf1ogc /n5w== 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=IEJlP2IFNv1AEVXTSPVIlSUf+kHI7zpH9o/BzpeSxJM=; b=RIyx80rbvuA9PzWDfIxiIJW0kn26ZMnA4Va6mYCYWctSpYEChxlHvX00NH6VrzlaAA RmxeyRinvNLGFTeJsXIAw/5UcIRacMK9iZbtQ4wKN28g2b1lJjgcm2DJTyLPQt2jSZd9 /dgbH17X+fzlF6m7iRqeq/CtsrJylnQmckbwZoVRR5rlPxkE7+DuD5ljF1GPI7HU7dB7 1ZyE7YIEODh9//ZtTUgAJYuzAxA3qDTK4CUJI3zvsv4Z1/3gVBM+tFCjetfZNWETMhYd 1ngCxXIDZl3z1yPF5UOFLPXPpEZ4O93JqjSoxoTM5eQrugwN71sMeRg462frQ5z9KT0Z cc4w== X-Gm-Message-State: APjAAAV4x1+CHhvZREbUSVaC99+mI70SaCt1IbLW5MMDVbz0nASIM+LE mlBkjAa/VFnp1iXh3+C02sI= X-Google-Smtp-Source: APXvYqyNqjYUNh7V8r+FzA3t7R4Myl+Meia6aW1OulgfGMaViRRH1l9YmlzAryPtTxmXVWDXUB3zjA== X-Received: by 2002:a1c:65c3:: with SMTP id z186mr52651wmb.116.1559509985930; Sun, 02 Jun 2019 14:13:05 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.12.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:12:50 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 05/11] net: dsa: sja1105: Make room for P/Q/R/S FDB operations Date: Mon, 3 Jun 2019 00:11:57 +0300 Message-Id: <20190602211203.17773-6-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The DSA callbacks were written with the E/T (first generation) in mind, which is quite different. For P/Q/R/S completely new implementations need to be provided, which are held as function pointers in the priv->info structure. We are taking a slightly roundabout way for this (a function from sja1105_main.c reads a structure defined in sja1105_spi.c that points to a function defined in sja1105_main.c), but it is what it is. The FDB dump callback works for both families, hence no function pointer for that. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105.h | 15 ++++- .../net/dsa/sja1105/sja1105_dynamic_config.c | 2 +- drivers/net/dsa/sja1105/sja1105_main.c | 56 ++++++++++++++----- drivers/net/dsa/sja1105/sja1105_spi.c | 12 ++++ 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sja1105.h index b043bfc408f2..f55e95d1b731 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -55,6 +55,11 @@ struct sja1105_info { const struct sja1105_regs *regs; int (*reset_cmd)(const void *ctx, const void *data); int (*setup_rgmii_delay)(const void *ctx, int port); + /* Prototypes from include/net/dsa.h */ + int (*fdb_add_cmd)(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid); + int (*fdb_del_cmd)(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid); const char *name; }; @@ -142,7 +147,15 @@ int sja1105_dynamic_config_write(struct sja1105_private *priv, enum sja1105_blk_idx blk_idx, int index, void *entry, bool keep); -u8 sja1105_fdb_hash(struct sja1105_private *priv, const u8 *addr, u16 vid); +u8 sja1105et_fdb_hash(struct sja1105_private *priv, const u8 *addr, u16 vid); +int sja1105et_fdb_add(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid); +int sja1105et_fdb_del(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid); +int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid); +int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid); /* Common implementations for the static and dynamic configs */ size_t sja1105_l2_forwarding_entry_packing(void *buf, void *entry_ptr, diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index 7e7efc2e8ee4..3a8b0d0ab330 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -552,7 +552,7 @@ static u8 sja1105_crc8_add(u8 crc, u8 byte, u8 poly) * is also received as argument in the Koopman notation that the switch * hardware stores it in. */ -u8 sja1105_fdb_hash(struct sja1105_private *priv, const u8 *addr, u16 vid) +u8 sja1105et_fdb_hash(struct sja1105_private *priv, const u8 *addr, u16 vid) { struct sja1105_l2_lookup_params_entry *l2_lookup_params = priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS].entries; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index cfdefd9f1905..c78d2def52f1 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -786,10 +786,10 @@ static inline int sja1105et_fdb_index(int bin, int way) return bin * SJA1105ET_FDB_BIN_SIZE + way; } -static int sja1105_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin, - const u8 *addr, u16 vid, - struct sja1105_l2_lookup_entry *match, - int *last_unused) +static int sja1105et_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin, + const u8 *addr, u16 vid, + struct sja1105_l2_lookup_entry *match, + int *last_unused) { int way; @@ -818,8 +818,8 @@ static int sja1105_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin, return -1; } -static int sja1105_fdb_add(struct dsa_switch *ds, int port, - const unsigned char *addr, u16 vid) +int sja1105et_fdb_add(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid) { struct sja1105_l2_lookup_entry l2_lookup = {0}; struct sja1105_private *priv = ds->priv; @@ -827,10 +827,10 @@ static int sja1105_fdb_add(struct dsa_switch *ds, int port, int last_unused = -1; int bin, way; - bin = sja1105_fdb_hash(priv, addr, vid); + bin = sja1105et_fdb_hash(priv, addr, vid); - way = sja1105_is_fdb_entry_in_bin(priv, bin, addr, vid, - &l2_lookup, &last_unused); + way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, + &l2_lookup, &last_unused); if (way >= 0) { /* We have an FDB entry. Is our port in the destination * mask? If yes, we need to do nothing. If not, we need @@ -874,17 +874,17 @@ static int sja1105_fdb_add(struct dsa_switch *ds, int port, true); } -static int sja1105_fdb_del(struct dsa_switch *ds, int port, - const unsigned char *addr, u16 vid) +int sja1105et_fdb_del(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid) { struct sja1105_l2_lookup_entry l2_lookup = {0}; struct sja1105_private *priv = ds->priv; int index, bin, way; bool keep; - bin = sja1105_fdb_hash(priv, addr, vid); - way = sja1105_is_fdb_entry_in_bin(priv, bin, addr, vid, - &l2_lookup, NULL); + bin = sja1105et_fdb_hash(priv, addr, vid); + way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, + &l2_lookup, NULL); if (way < 0) return 0; index = sja1105et_fdb_index(bin, way); @@ -905,6 +905,34 @@ static int sja1105_fdb_del(struct dsa_switch *ds, int port, index, &l2_lookup, keep); } +int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid) +{ + return -EOPNOTSUPP; +} + +int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid) +{ + return -EOPNOTSUPP; +} + +static int sja1105_fdb_add(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid) +{ + struct sja1105_private *priv = ds->priv; + + return priv->info->fdb_add_cmd(ds, port, addr, vid); +} + +static int sja1105_fdb_del(struct dsa_switch *ds, int port, + const unsigned char *addr, u16 vid) +{ + struct sja1105_private *priv = ds->priv; + + return priv->info->fdb_del_cmd(ds, port, addr, vid); +} + static int sja1105_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb, void *data) { diff --git a/drivers/net/dsa/sja1105/sja1105_spi.c b/drivers/net/dsa/sja1105/sja1105_spi.c index 2eb70b8acfc3..b1344ed1697f 100644 --- a/drivers/net/dsa/sja1105/sja1105_spi.c +++ b/drivers/net/dsa/sja1105/sja1105_spi.c @@ -541,6 +541,8 @@ struct sja1105_info sja1105e_info = { .static_ops = sja1105e_table_ops, .dyn_ops = sja1105et_dyn_ops, .reset_cmd = sja1105et_reset_cmd, + .fdb_add_cmd = sja1105et_fdb_add, + .fdb_del_cmd = sja1105et_fdb_del, .regs = &sja1105et_regs, .name = "SJA1105E", }; @@ -550,6 +552,8 @@ struct sja1105_info sja1105t_info = { .static_ops = sja1105t_table_ops, .dyn_ops = sja1105et_dyn_ops, .reset_cmd = sja1105et_reset_cmd, + .fdb_add_cmd = sja1105et_fdb_add, + .fdb_del_cmd = sja1105et_fdb_del, .regs = &sja1105et_regs, .name = "SJA1105T", }; @@ -559,6 +563,8 @@ struct sja1105_info sja1105p_info = { .static_ops = sja1105p_table_ops, .dyn_ops = sja1105pqrs_dyn_ops, .reset_cmd = sja1105pqrs_reset_cmd, + .fdb_add_cmd = sja1105pqrs_fdb_add, + .fdb_del_cmd = sja1105pqrs_fdb_del, .regs = &sja1105pqrs_regs, .name = "SJA1105P", }; @@ -568,6 +574,8 @@ struct sja1105_info sja1105q_info = { .static_ops = sja1105q_table_ops, .dyn_ops = sja1105pqrs_dyn_ops, .reset_cmd = sja1105pqrs_reset_cmd, + .fdb_add_cmd = sja1105pqrs_fdb_add, + .fdb_del_cmd = sja1105pqrs_fdb_del, .regs = &sja1105pqrs_regs, .name = "SJA1105Q", }; @@ -577,6 +585,8 @@ struct sja1105_info sja1105r_info = { .static_ops = sja1105r_table_ops, .dyn_ops = sja1105pqrs_dyn_ops, .reset_cmd = sja1105pqrs_reset_cmd, + .fdb_add_cmd = sja1105pqrs_fdb_add, + .fdb_del_cmd = sja1105pqrs_fdb_del, .regs = &sja1105pqrs_regs, .name = "SJA1105R", }; @@ -587,5 +597,7 @@ struct sja1105_info sja1105s_info = { .dyn_ops = sja1105pqrs_dyn_ops, .regs = &sja1105pqrs_regs, .reset_cmd = sja1105pqrs_reset_cmd, + .fdb_add_cmd = sja1105pqrs_fdb_add, + .fdb_del_cmd = sja1105pqrs_fdb_del, .name = "SJA1105S", }; From patchwork Sun Jun 2 21:11:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108985 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="S/3Kl9Sk"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9rt10d1z9s1c for ; Mon, 3 Jun 2019 07:13:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727007AbfFBVNQ (ORCPT ); Sun, 2 Jun 2019 17:13:16 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:42593 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726879AbfFBVNQ (ORCPT ); Sun, 2 Jun 2019 17:13:16 -0400 Received: by mail-wr1-f65.google.com with SMTP id o12so2848028wrj.9 for ; Sun, 02 Jun 2019 14:13:14 -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=nO16182GFub7AElElbcH93IRaYnx8DkaEo1pquO7Cvs=; b=S/3Kl9Skm7Jbx2f512nUyLzKJW1QSnfgiN0gE8pgjRPTBcJSUbA6/Qqmu2M05g4Cya zMOa9t+m7VhBi+Y3OcLzpc3NHlSZEUei1t4WNrdifUQr6L40VyQ7SFalETZQe8VW2Ff/ zRL7sXYixlSD7kKlVudMhLaE6sofC3+oLk//2+iFLAejHFfx0HyVsRj1M5xHUy+RnXHf QefdaRFsM9rBO+YQZy0TFUTv8m2qMRpxw1X0CvWcg9niNq1xat/V//R4E0AdDLXYdjPm UZBujzPTCUl7qVbo01ulxd4fqqLtH8Pj8ZEnzXrkTt5uAcrqcyAxmB6sAjaRligy6Gnh p6oQ== 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=nO16182GFub7AElElbcH93IRaYnx8DkaEo1pquO7Cvs=; b=Vdv37XjSzdWnF9llis6HKKzjTQLTWp5aJP3lhUTTImcv7NVMH5XnJvI/9GbwNDb5tX olgqZEN2lg/IOjdnFgQZSWSBZZIPLdNpc2vTO1J3zeUKn+c6w3vf1G5+OLBStFV5yNqr rE9nt+XMhDQ0GzbgOZogctxpEuArQOv0lf3M/1ghY2VKn1X3YfoAwvjE2vgptJFP8rA4 BWtazDpkGTxyDtj6CCzJe5R4vbx87m5Lz4ACNDS64YL3iBryBiqGyWwPy1N1vOgEgA4E dhA7zULxh0g2NeM54woPK7l9A78WGQv8RCxnMPnKmKXbzPOmB+rH4eeOOwFbfRp+Dfk0 h86w== X-Gm-Message-State: APjAAAWkiE8cmNAiUXIuJV9kQgouc18YjrXqW1rfKgk4mHv5ImV6Dq5V Bb9iwdtOoyNZxphIbK87aFN81yjB X-Google-Smtp-Source: APXvYqzQJY34iY4w2LmgRBQk6Sb1M1h6zeoB2nPdFh3ZAdOb+TawMXjl5h065ISBgPQCpD1GaZOe1w== X-Received: by 2002:adf:9267:: with SMTP id 94mr89971wrj.338.1559509993771; Sun, 02 Jun 2019 14:13:13 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.13.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:13:06 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 06/11] net: dsa: sja1105: Add P/Q/R/S support for dynamic L2 lookup operations Date: Mon, 3 Jun 2019 00:11:58 +0300 Message-Id: <20190602211203.17773-7-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org These are needed in order to implement the switchdev FDB callbacks. Compared to the E/T generation, not only the ABI (bit offsets) is different, but also the introduction of the HOSTCMD field which permits O(1) TCAM search for an FDB entry. Make use of the newly introduce OP_SEARCH to permit that. It will be used while adding and deleting an FDB entry (to see whether it exists or not). Signed-off-by: Vladimir Oltean --- .../net/dsa/sja1105/sja1105_dynamic_config.c | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index 3a8b0d0ab330..7db1f8258287 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -44,17 +44,63 @@ struct sja1105_dyn_cmd { u64 index; }; +enum sja1105_hostcmd { + SJA1105_HOSTCMD_SEARCH = 1, + SJA1105_HOSTCMD_READ = 2, + SJA1105_HOSTCMD_WRITE = 3, + SJA1105_HOSTCMD_INVALIDATE = 4, +}; + static void sja1105pqrs_l2_lookup_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd, enum packing_op op) { u8 *p = buf + SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY; const int size = SJA1105_SIZE_DYN_CMD; + u64 lockeds = 0; + u64 hostcmd; sja1105_packing(p, &cmd->valid, 31, 31, size, op); sja1105_packing(p, &cmd->rdwrset, 30, 30, size, op); sja1105_packing(p, &cmd->errors, 29, 29, size, op); + sja1105_packing(p, &lockeds, 28, 28, size, op); sja1105_packing(p, &cmd->valident, 27, 27, size, op); + + /* VALIDENT is supposed to indicate "keep or not", but in SJA1105 E/T, + * using it to delete a management route was unsupported. UM10944 + * said about it: + * + * In case of a write access with the MGMTROUTE flag set, + * the flag will be ignored. It will always be found cleared + * for read accesses with the MGMTROUTE flag set. + * + * SJA1105 P/Q/R/S keeps the same behavior w.r.t. VALIDENT, but there + * is now another flag called HOSTCMD which does more stuff (quoting + * from UM11040): + * + * A write request is accepted only when HOSTCMD is set to write host + * or invalid. A read request is accepted only when HOSTCMD is set to + * search host or read host. + * + * So it is possible to translate a RDWRSET/VALIDENT combination into + * HOSTCMD so that we keep the dynamic command API in place, and + * at the same time achieve compatibility with the management route + * command structure. + */ + if (cmd->rdwrset == SPI_READ) { + if (cmd->search) + hostcmd = SJA1105_HOSTCMD_SEARCH; + else + hostcmd = SJA1105_HOSTCMD_READ; + } else { + /* SPI_WRITE */ + if (cmd->valident) + hostcmd = SJA1105_HOSTCMD_WRITE; + else + hostcmd = SJA1105_HOSTCMD_INVALIDATE; + } + sja1105_packing(p, &hostcmd, 25, 23, size, op); + /* Hack - The hardware takes the 'index' field within * struct sja1105_l2_lookup_entry as the index on which this command * will operate. However it will ignore everything else, so 'index' @@ -65,7 +111,6 @@ sja1105pqrs_l2_lookup_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd, */ sja1105_packing(buf, &cmd->index, 15, 6, SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY, op); - /* TODO hostcmd */ } static void @@ -319,9 +364,9 @@ struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN] = { [BLK_IDX_L2_LOOKUP] = { .entry_packing = sja1105pqrs_l2_lookup_entry_packing, .cmd_packing = sja1105pqrs_l2_lookup_cmd_packing, - .access = (OP_READ | OP_WRITE | OP_DEL), + .access = (OP_READ | OP_WRITE | OP_DEL | OP_SEARCH), .max_entry_count = SJA1105_MAX_L2_LOOKUP_COUNT, - .packed_size = SJA1105ET_SIZE_L2_LOOKUP_DYN_CMD, + .packed_size = SJA1105PQRS_SIZE_L2_LOOKUP_DYN_CMD, .addr = 0x24, }, [BLK_IDX_L2_POLICING] = {0}, @@ -403,7 +448,7 @@ int sja1105_dynamic_config_read(struct sja1105_private *priv, ops = &priv->info->dyn_ops[blk_idx]; - if (index >= ops->max_entry_count) + if (index >= 0 && index >= ops->max_entry_count) return -ERANGE; if (index < 0 && !(ops->access & OP_SEARCH)) return -EOPNOTSUPP; @@ -426,6 +471,7 @@ int sja1105_dynamic_config_read(struct sja1105_private *priv, cmd.index = index; cmd.search = false; } + cmd.valident = true; ops->cmd_packing(packed_buf, &cmd, PACK); if (cmd.search) From patchwork Sun Jun 2 21:11:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108986 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="f+APhyfI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9s36cBbz9s1c for ; Mon, 3 Jun 2019 07:13:27 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727021AbfFBVN0 (ORCPT ); Sun, 2 Jun 2019 17:13:26 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:35311 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726879AbfFBVNZ (ORCPT ); Sun, 2 Jun 2019 17:13:25 -0400 Received: by mail-wm1-f68.google.com with SMTP id c6so6133596wml.0 for ; Sun, 02 Jun 2019 14:13:24 -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=Qhh+ZRi0m7Fl7rphx81TRgM+7smPSvb6Eoiou0mpCzc=; b=f+APhyfIKJwnaCmUORIt5Suw5x4RmF1mICmsppKPlNpfAwsnxxjiL5ppgwOjorgcW7 gjumsbdseacbIfHcPw6/KYk7DDQfkqc17+HBpvxasWw3e1ffas+ztn5o4H+YhNdQJOSm xuKTr/PYIcAfi032VpYczzmGyS6+lj9V5J2qFq/N5kL5w46xJfAPAcLGHPgy235noDUU aZ6/qf6WjdoXaWByO+j1ATUOjB7pkZf09LLHseSaQeXepKlhcB/aJkIyPRIH+z0SuTq4 ISkSFnLf2qFlNqJzAATfegf6O2rgU8YM4dEYOs1VVAdKfJ2MmuFa4KrH69xEp5ZJHL1m IJnA== 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=Qhh+ZRi0m7Fl7rphx81TRgM+7smPSvb6Eoiou0mpCzc=; b=BY1Ic2iwCwCS2jb7ZA5NK7l1V8roKPmVVPwofNMc65Cdipz3X5htawClg54Ev+9noC g5SFldYJqPoERdCt+7qoi8/Hj/Qw2m1l29vGd9odS5faDjKt60gvrjggbRvVidGdcYvX lr+4MG2tDvxeyncvZ5n8sc2q50javV8ipPoq2ODo3DnJm/xys06W1BVsKXIVEvciUKqH /dPmxXpRrTkMV219J2TFbWYKxPzk6I3lxJesQ1kamjK597RGiLShvDFhwLcgmIn+LCF/ t09hmtRaR4ikAAmB+zhkQ3bvYPgGaHepK+QXmzYq8ck+9NE+osDqvzBrmlax8v4IqYo9 Lpjg== X-Gm-Message-State: APjAAAX69u55sbVb/TEWCnPrfOTNcZuoIXrW8g9OtO5RCFYO5JnwS/Dt VFzqhSOKqp2MpReTkem6yLo= X-Google-Smtp-Source: APXvYqxX6OU8R9xlcleuf4V7IY1l01+zVHyJw7v8qdKXRdMFCKddZpSG1C3rNT8GmQNDyO5x/5b3rQ== X-Received: by 2002:a7b:c003:: with SMTP id c3mr42754wmb.157.1559510003574; Sun, 02 Jun 2019 14:13:23 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id q11sm9548193wmc.15.2019.06.02.14.13.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:13:17 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 07/11] net: dsa: sja1105: Make dynamic_config_read return -ENOENT if not found Date: Mon, 3 Jun 2019 00:11:59 +0300 Message-Id: <20190602211203.17773-8-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190602211203.17773-1-olteanv@gmail.com> References: <20190602211203.17773-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Conceptually, if an entry is not found in the requested hardware table, it is not an invalid request - so change the error returned appropriately. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105_dynamic_config.c | 2 +- drivers/net/dsa/sja1105/sja1105_main.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index 7db1f8258287..02a67df4437e 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -502,7 +502,7 @@ int sja1105_dynamic_config_read(struct sja1105_private *priv, * So don't error out in that case. */ if (!cmd.valident && blk_idx != BLK_IDX_MGMT_ROUTE) - return -EINVAL; + return -ENOENT; cpu_relax(); } while (cmd.valid && --retries); diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index c78d2def52f1..dc9803efdbbd 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -948,7 +948,7 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port, rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, i, &l2_lookup); /* No fdb entry at i, not an issue */ - if (rc == -EINVAL) + if (rc == -ENOENT) continue; if (rc) { dev_err(dev, "Failed to dump FDB: %d\n", rc); From patchwork Sun Jun 2 21:15:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108987 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BRDvxO0N"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9vg0KCsz9s00 for ; Mon, 3 Jun 2019 07:15:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726879AbfFBVPm (ORCPT ); Sun, 2 Jun 2019 17:15:42 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:36221 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726693AbfFBVPl (ORCPT ); Sun, 2 Jun 2019 17:15:41 -0400 Received: by mail-wr1-f68.google.com with SMTP id n4so6926550wrs.3 for ; Sun, 02 Jun 2019 14:15:40 -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; bh=kENYGijRJXdKjo4gcTmbCUDdyWtUcvt1iTG4bwFTD00=; b=BRDvxO0Nylj7VvHAljGpSDYGrD8+9Tw6aqpMiH98t3Cze3t45/SwcA165jdTVoKH2S Q1QuDHdp4LTEUGpH+TVXiDDFFTLdT7rpLpmeU5UEDOf3YPHzBMOvzhFkhpiZw1fH7hSV Vw+wWN8gHMnYE38EcJn0vD8kNP7R8WlUnlalEjWjkvveByXSA0CbbfuGrzaAu91eIEqO 7sFybMDUiNDKHLDUPfUZHDgZWKWgpFzMZ3/U/F0ZC/KnwqZPlilQ5wIDxKH2rvXrgD3k eGw9wIKvlqFWV9Ae6LaJIPXYSb87E5LG0Kbm8EZyNY/WGLRHFayoeLocOP4CN6PcsJVH mdiQ== 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; bh=kENYGijRJXdKjo4gcTmbCUDdyWtUcvt1iTG4bwFTD00=; b=CczsLn9GkECo2yX9oOqJ5q9euzVBfi8kXEINOJOdpIPM1kr4+NJUNxkimdgGV5S/1t VfbvkPQjuUd9IMkE+v8qbvnO2LGLv68HWe0AwWEuqXQo2Iy9ybcaboKkI4Uju5zj4xK3 joAUT6Y7OMFRjj+AbKuhw3qDaKbu/aL8VQGay1OnjxgN6trd9GVUh362T7Whhbk/Bcza yxkimeZ3GX1SqzK83GtsRfFvbcyynahJju9wK5AiK6NxIBZteXS4CuukbqIyd1iEWBG1 IMy93INJgwFKB7PMUaEYcvUkWD55y6n7wkz9IQcUeDRpveOe0BScxHKAo0mvhuA0yiyt ffAw== X-Gm-Message-State: APjAAAWMLV9E5hBPdweVxHTpU11sd3iPLOFhNokUp85bvwyCzGl4AOjl yuZfcBDdFF0U6sOzC7a8m8zo7HOB X-Google-Smtp-Source: APXvYqwA8gKPRmkPZPKBeDPFSon/SuOvxUpNbbWKPbgiqxAeSLCRsVw8dAr6ch54VsFFHLT8BSqH6Q== X-Received: by 2002:a5d:4004:: with SMTP id n4mr14305901wrp.240.1559510139794; Sun, 02 Jun 2019 14:15:39 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id p11sm8858589wrs.5.2019.06.02.14.15.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:15:39 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 08/11] net: dsa: sja1105: Add P/Q/R/S management route support via dynamic interface Date: Mon, 3 Jun 2019 00:15:33 +0300 Message-Id: <20190602211533.18855-1-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Management routes are one-shot FDB rules installed on the CPU port for sending link-local traffic. They are a prerequisite for STP, PTP etc to work. Also make a note that removing a management route was not supported on the previous generation of switches. Signed-off-by: Vladimir Oltean --- .../net/dsa/sja1105/sja1105_dynamic_config.c | 40 ++++++++++++++++++- drivers/net/dsa/sja1105/sja1105_main.c | 2 + 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c index 02a67df4437e..352bb6e89297 100644 --- a/drivers/net/dsa/sja1105/sja1105_dynamic_config.c +++ b/drivers/net/dsa/sja1105/sja1105_dynamic_config.c @@ -161,6 +161,36 @@ static size_t sja1105et_mgmt_route_entry_packing(void *buf, void *entry_ptr, return size; } +static void +sja1105pqrs_mgmt_route_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd, + enum packing_op op) +{ + u8 *p = buf + SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY; + u64 mgmtroute = 1; + + sja1105pqrs_l2_lookup_cmd_packing(buf, cmd, op); + if (op == PACK) + sja1105_pack(p, &mgmtroute, 26, 26, SJA1105_SIZE_DYN_CMD); +} + +static size_t sja1105pqrs_mgmt_route_entry_packing(void *buf, void *entry_ptr, + enum packing_op op) +{ + const size_t size = SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY; + struct sja1105_mgmt_entry *entry = entry_ptr; + + /* In P/Q/R/S, enfport got renamed to mgmtvalid, but its purpose + * is the same (driver uses it to confirm that frame was sent). + * So just keep the name from E/T. + */ + sja1105_packing(buf, &entry->tsreg, 71, 71, size, op); + sja1105_packing(buf, &entry->takets, 70, 70, size, op); + sja1105_packing(buf, &entry->macaddr, 69, 22, size, op); + sja1105_packing(buf, &entry->destports, 21, 17, size, op); + sja1105_packing(buf, &entry->enfport, 16, 16, size, op); + return size; +} + /* In E/T, entry is at addresses 0x27-0x28. There is a 4 byte gap at 0x29, * and command is at 0x2a. Similarly in P/Q/R/S there is a 1 register gap * between entry (0x2d, 0x2e) and command (0x30). @@ -359,7 +389,7 @@ struct sja1105_dynamic_table_ops sja1105et_dyn_ops[BLK_IDX_MAX_DYN] = { [BLK_IDX_XMII_PARAMS] = {0}, }; -/* SJA1105P/Q/R/S: Second generation: TODO */ +/* SJA1105P/Q/R/S: Second generation */ struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN] = { [BLK_IDX_L2_LOOKUP] = { .entry_packing = sja1105pqrs_l2_lookup_entry_packing, @@ -369,6 +399,14 @@ struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN] = { .packed_size = SJA1105PQRS_SIZE_L2_LOOKUP_DYN_CMD, .addr = 0x24, }, + [BLK_IDX_MGMT_ROUTE] = { + .entry_packing = sja1105pqrs_mgmt_route_entry_packing, + .cmd_packing = sja1105pqrs_mgmt_route_cmd_packing, + .access = (OP_READ | OP_WRITE | OP_DEL | OP_SEARCH), + .max_entry_count = SJA1105_NUM_PORTS, + .packed_size = SJA1105PQRS_SIZE_L2_LOOKUP_DYN_CMD, + .addr = 0x24, + }, [BLK_IDX_L2_POLICING] = {0}, [BLK_IDX_VLAN_LOOKUP] = { .entry_packing = sja1105_vlan_lookup_entry_packing, diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index dc9803efdbbd..f9bbc780f835 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -1475,6 +1475,8 @@ static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, if (!timeout) { /* Clean up the management route so that a follow-up * frame may not match on it by mistake. + * This is only hardware supported on P/Q/R/S - on E/T it is + * a no-op and we are silently discarding the -EOPNOTSUPP. */ sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, slot, &mgmt_route, false); From patchwork Sun Jun 2 21:15:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108988 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WLNdAuva"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9vq5lvVz9s00 for ; Mon, 3 Jun 2019 07:15:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726909AbfFBVPu (ORCPT ); Sun, 2 Jun 2019 17:15:50 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:36225 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726663AbfFBVPu (ORCPT ); Sun, 2 Jun 2019 17:15:50 -0400 Received: by mail-wr1-f68.google.com with SMTP id n4so6926680wrs.3 for ; Sun, 02 Jun 2019 14:15:48 -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; bh=E74MMGf2KBXbo4P0ocVGsRMk5ZgBipC1AALJcdJysiQ=; b=WLNdAuva3yg5aOZaxQpW3f0c4XszUtlO66QeI9NLmj7/1LOm5/oGJQXjhwMxoyRAtC G7jKr58bnZRvC6cuZhintpIcffo+dxFiCYgTQp4006mwAkK3kWrjXk/rSWLxuYmXRO74 b9PlryYWZ8rzJXuuH3QH+ix9PZnrMSMxqg+PBz/zxuvKFGNsbrqpuSuwiL6oAboyPhSo 2RKOy6e0kOyv6Smm27m6gs022kdD1vVDfmMR7ZHzw9ShNe8TIglF/cP69XRokV4aSsOl ZwXEr7yn0PtVzXZaSu7jsuqMGR60e9AqFC+8KYIr4RyfIWIGCzyGcIX7RDV6h0YGVEBl MzvA== 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; bh=E74MMGf2KBXbo4P0ocVGsRMk5ZgBipC1AALJcdJysiQ=; b=LpxXh6XeQQvo+xJ8BmqhPkPeEI/VoCKQ81zunQmFbFAZGa9QnEN656pnJy/8cc/caH ypbFyg4BJAh9P+DGKKtZll7cXSGi6fO3C6GHOePwz2LD7/bwkAdhHKOBJibMKCwL7/u+ 0ozL7izVNUCZtCvcf3BHk2sYH9dd0rmIBJRr2OhDwQPEcf/rAK/47yX8ZShFYBic6unX zGbQhRkVxHEyxTYYx5sac7SzTYwbuTrCk4ixQgtiXV/grBh4LNlc7qzMx/Jze5sfVfPb lMNl6/PbcZNGJdkFNfT0mTNi22HGK2qwNXLIgeueH6iewOj2LUODCT3liQ2nq1Qh69YO ApVg== X-Gm-Message-State: APjAAAVIvpb3Jptb7Ah9wpyeRNURsGfJMozzi0/7LGi9jweVig9SDWsO RTQE8a7Ux4GqAhip8QVKVFQ= X-Google-Smtp-Source: APXvYqwRf05/zg9PiZ0PXUprLA5TgEdh3HGC83xC/BWcFhpLyAHXkKgiaAYJhmif8slhmCCBfLFy6w== X-Received: by 2002:a5d:4089:: with SMTP id o9mr8277896wrp.6.1559510148034; Sun, 02 Jun 2019 14:15:48 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id s11sm9520534wro.17.2019.06.02.14.15.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:15:47 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 09/11] net: dsa: sja1105: Add FDB operations for P/Q/R/S series Date: Mon, 3 Jun 2019 00:15:45 +0300 Message-Id: <20190602211545.18967-1-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This adds support for manipulating the L2 forwarding database (dump, add, delete) for the second generation of NXP SJA1105 switches. At the moment only FDB entries installed statically through 'bridge fdb' are visible in the dump callback - the dynamically learned ones are still under investigation. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105.h | 5 ++ drivers/net/dsa/sja1105/sja1105_main.c | 89 +++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sja1105.h index f55e95d1b731..61d00682de60 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -147,6 +147,11 @@ int sja1105_dynamic_config_write(struct sja1105_private *priv, enum sja1105_blk_idx blk_idx, int index, void *entry, bool keep); +enum sja1105_iotag { + SJA1105_C_TAG = 0, /* Inner VLAN header */ + SJA1105_S_TAG = 1, /* Outer VLAN header */ +}; + u8 sja1105et_fdb_hash(struct sja1105_private *priv, const u8 *addr, u16 vid); int sja1105et_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid); diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index f9bbc780f835..46e2cc7b9ddc 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -210,6 +210,8 @@ static int sja1105_init_l2_lookup_params(struct sja1105_private *priv) .maxage = SJA1105_AGEING_TIME_MS(300000), /* All entries within a FDB bin are available for learning */ .dyn_tbsz = SJA1105ET_FDB_BIN_SIZE, + /* And the P/Q/R/S equivalent setting: */ + .start_dynspc = 0, /* 2^8 + 2^5 + 2^3 + 2^2 + 2^1 + 1 in Koopman notation */ .poly = 0x97, /* This selects between Independent VLAN Learning (IVL) and @@ -225,6 +227,13 @@ static int sja1105_init_l2_lookup_params(struct sja1105_private *priv) * Maybe correlate with no_linklocal_learn from bridge driver? */ .no_mgmt_learn = true, + /* P/Q/R/S only */ + .use_static = true, + /* Dynamically learned FDB entries can overwrite other (older) + * dynamic FDB entries + */ + .owr_dyn = true, + .drpnolearn = true, }; table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; @@ -908,13 +917,89 @@ int sja1105et_fdb_del(struct dsa_switch *ds, int port, int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid) { - return -EOPNOTSUPP; + struct sja1105_l2_lookup_entry l2_lookup = {0}; + struct sja1105_private *priv = ds->priv; + int rc, i; + + /* Search for an existing entry in the FDB table */ + l2_lookup.macaddr = ether_addr_to_u64(addr); + l2_lookup.vlanid = vid; + l2_lookup.iotag = SJA1105_S_TAG; + l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); + l2_lookup.mask_vlanid = VLAN_VID_MASK; + l2_lookup.mask_iotag = BIT(0); + l2_lookup.destports = BIT(port); + + rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, + SJA1105_SEARCH, &l2_lookup); + if (rc == 0) { + /* Found and this port is already in the entry's + * port mask => job done + */ + if (l2_lookup.destports & BIT(port)) + return 0; + /* l2_lookup.index is populated by the switch in case it + * found something. + */ + l2_lookup.destports |= BIT(port); + goto skip_finding_an_index; + } + + /* Not found, so try to find an unused spot in the FDB. + * This is slightly inefficient because the strategy is knock-knock at + * every possible position from 0 to 1023. + */ + for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { + rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, + i, NULL); + if (rc < 0) + break; + } + if (i == SJA1105_MAX_L2_LOOKUP_COUNT) { + dev_err(ds->dev, "FDB is full, cannot add entry.\n"); + return -EINVAL; + } + l2_lookup.index = i; + +skip_finding_an_index: + return sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, + l2_lookup.index, &l2_lookup, + true); } int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid) { - return -EOPNOTSUPP; + struct sja1105_l2_lookup_entry l2_lookup = {0}; + struct sja1105_private *priv = ds->priv; + bool keep; + int rc; + + l2_lookup.macaddr = ether_addr_to_u64(addr); + l2_lookup.vlanid = vid; + l2_lookup.iotag = SJA1105_S_TAG; + l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); + l2_lookup.mask_vlanid = VLAN_VID_MASK; + l2_lookup.mask_iotag = BIT(0); + l2_lookup.destports = BIT(port); + + rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, + SJA1105_SEARCH, &l2_lookup); + if (rc < 0) + return 0; + + l2_lookup.destports &= ~BIT(port); + + /* Decide whether we remove just this port from the FDB entry, + * or if we remove it completely. + */ + if (l2_lookup.destports) + keep = true; + else + keep = false; + + return sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, + l2_lookup.index, &l2_lookup, keep); } static int sja1105_fdb_add(struct dsa_switch *ds, int port, From patchwork Sun Jun 2 21:15:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108989 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YxQv1j1l"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9w02S2Kz9s00 for ; Mon, 3 Jun 2019 07:16:00 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727015AbfFBVP7 (ORCPT ); Sun, 2 Jun 2019 17:15:59 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:37164 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726663AbfFBVP7 (ORCPT ); Sun, 2 Jun 2019 17:15:59 -0400 Received: by mail-wm1-f66.google.com with SMTP id 22so830822wmg.2 for ; Sun, 02 Jun 2019 14:15:57 -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; bh=sj4dqvMm0mIJobNSmfRRpHGF+qpUHGKapyqUALrmjSc=; b=YxQv1j1lqYzAZKcsHusMA/G+KBQK3lWH4AC24VXVvIPyQ6TX5TKmbMMk5YJTCCziWx LFkd7fL1rF5ZpGnYyEM5VEG3ekK6AaSTHYkbDdyOfpJvk0EGELfvlP93wp2OQFeLyjJw ZjLNXphGgwLhh1Mm2SCRiQK9GEKb0aaflYbpV60CjctZqiap52fLwEUgTkhgHJCEQLtw qlYUUeyrgWid8/2y1ADi+uQcWn1TJvamR89tqEmSRiTRHBnwN7Gado2XMnxv5yk8/6s7 9J8Ya50qG1keMUWh4c0PtfLphI9hcV1FP9j/FMreHYQpZJeBwLADtBgKKj8s6opGQTIU XiJQ== 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; bh=sj4dqvMm0mIJobNSmfRRpHGF+qpUHGKapyqUALrmjSc=; b=bSXef/fUoznc5bI8ARp+CBGQfIke2+AMw1lzR/opnUu5nxlyI0e01toiIS6uOCykcT /6LSXa0NEDcyD0g8FluMetYkNkJTOR0M/xHdv1xX2rm/8pFJp56x+A4kbayue7ten+9Z h2K601MomJld6GBQtyiU0EwnCHgv0bt7XJg/KHvP6BaawyWQTG7QOfUrj/Ymc9ut+UQ+ C9WFhv9vp+WIv5Ri2bxO6NG1afmpflxr/uGiWS5Md6H8FvRfuknwWWW/CwZF63TTpFK6 oxXAmlR96G57q3xIu0iUH9ZGZj77i/SrpGumkm3weNJIrsVy8TZNb51J+baSVyyZlw3p 8XLw== X-Gm-Message-State: APjAAAVHE4433uWd8cAqQzGDhPqqM6p/GY/7XIXY1s+6RpmvDYKEQ6no vZR2KoX6P889NfOkV0JJOSFEvpXK X-Google-Smtp-Source: APXvYqx6NFPMAVgN7g4GfJ1n6WrQRkohWUSYZtFB9VaASv5IqM/tZz9KcijV+ntCEwzwIlq3aeqy+A== X-Received: by 2002:a1c:b046:: with SMTP id z67mr3449wme.49.1559510157078; Sun, 02 Jun 2019 14:15:57 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id b5sm2507790wru.69.2019.06.02.14.15.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:15:57 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 10/11] net: dsa: sja1105: Unset port from forwarding mask unconditionally on fdb_del Date: Mon, 3 Jun 2019 00:15:54 +0300 Message-Id: <20190602211554.19066-1-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This is a cosmetic patch that simplifies the code by removing a redundant check. A logical AND-with-zero performed on a zero is still zero. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 46e2cc7b9ddc..8343dcf48384 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -903,8 +903,8 @@ int sja1105et_fdb_del(struct dsa_switch *ds, int port, * need to completely evict the FDB entry. * Otherwise we just write it back. */ - if (l2_lookup.destports & BIT(port)) - l2_lookup.destports &= ~BIT(port); + l2_lookup.destports &= ~BIT(port); + if (l2_lookup.destports) keep = true; else From patchwork Sun Jun 2 21:16:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1108990 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="qq2x0/bp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45H9w713Jtz9s00 for ; Mon, 3 Jun 2019 07:16:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727032AbfFBVQG (ORCPT ); Sun, 2 Jun 2019 17:16:06 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:41450 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726663AbfFBVQF (ORCPT ); Sun, 2 Jun 2019 17:16:05 -0400 Received: by mail-wr1-f65.google.com with SMTP id c2so9974664wrm.8 for ; Sun, 02 Jun 2019 14:16:05 -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; bh=RPC40hnGNPlUQtj7Er2lSee3fyXOHmsMs5ve+6z4rTM=; b=qq2x0/bpCfnnWKx8O1VTr+PQuQn1SkapJV/LQP2hYC4bQW2talnKwS/oVEMmiIkkA9 knB0fKScyHtZJ+5GtBTCxJQyoShs0cLs2tNCUBipT5uAECOTJCdt6zChtU1Al6S4yhKE w6kk1+4HMJ4h5yk5k6fwHOTE+DUVgtl1Ssj607cg7evMfvFaLkfdHv4RkdUzxBJQcgLp yBJuT5osS2Om9pnK2A1teqs8iJGXJ6msqOXaaFRWUBD/TGEhEv5JavpnLnECUgD5w0nc hL2geeW1ihPpWbQhCU9zSumZ2ToFm299wHzFV4ESlHKmsKLOpomw12jFOuXKhQlWrsrg 4pJQ== 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; bh=RPC40hnGNPlUQtj7Er2lSee3fyXOHmsMs5ve+6z4rTM=; b=Ng4M6csM3vYLEDeHX3oYQ0QxuKsTe/YG0o1MfvpwnknVo5/AIE6c4cZi82qAL6xqZM gF0Ek1E5O12O8vvQm+x+TOV+/vymQPd/iLrYlwqdDaqT47G80f3zBW4eR4JYncksD+pj pkKgOIKc0MmUYgDJViS8fOyzb2RFA8ZTa+XHYZq6QWj6YvWGd6oGyTR/BV2sxl4DZLDb cF88j4cMEE1fv/4hS15Oidz6ffczzX7lZsdOvrbKdTJZqxus5MS0w2RKESbhf7C949M1 v7nZN8v4BZvcqaA4ELZ7u2b/olxvcc7tCQxtKWNGYXw9u1RA5PKfvCWKrHc6x5lvm8WS JP+Q== X-Gm-Message-State: APjAAAX13bLFHsfavIe5gtOlFQuiy1ezHVHF7S9mZsbFYoSE6v616ZMB o4RBoUluue7b+WOf9AGukRG2Ie3T X-Google-Smtp-Source: APXvYqyoWdDZhpvdYWaus5nDGfpinDEutfX8dOft9VtGSCImxT4FtIccIKo4M33VT2fgaOU94/NUJg== X-Received: by 2002:adf:9e4c:: with SMTP id v12mr14020473wre.312.1559510164349; Sun, 02 Jun 2019 14:16:04 -0700 (PDT) Received: from localhost.localdomain ([86.121.27.188]) by smtp.gmail.com with ESMTPSA id j123sm20392857wmb.32.2019.06.02.14.16.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Jun 2019 14:16:03 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 11/11] net: dsa: sja1105: Hide the dsa_8021q VLANs from the bridge fdb command Date: Mon, 3 Jun 2019 00:16:01 +0300 Message-Id: <20190602211601.19169-1-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org TX VLANs and RX VLANs are an internal implementation detail of DSA for frame tagging. They work by installing special VLANs on switch ports in the operating modes where no behavior change w.r.t. VLANs can be observed by the user. Therefore it makes sense to hide these VLANs in the 'bridge fdb' command, as well as translate the pvid into the RX VID and TX VID on 'bridge fdb add' and 'bridge fdb del' commands. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105_main.c | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 8343dcf48384..b151a8fafb9e 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -1006,7 +1006,21 @@ static int sja1105_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid) { struct sja1105_private *priv = ds->priv; + int rc; + + /* Since we make use of VLANs even when the bridge core doesn't tell us + * to, translate these FDB entries into the correct dsa_8021q ones. + */ + if (!dsa_port_is_vlan_filtering(&ds->ports[port])) { + unsigned int upstream = dsa_upstream_port(priv->ds, port); + u16 tx_vid = dsa_8021q_tx_vid(ds, port); + u16 rx_vid = dsa_8021q_rx_vid(ds, port); + rc = priv->info->fdb_add_cmd(ds, port, addr, tx_vid); + if (rc < 0) + return rc; + return priv->info->fdb_add_cmd(ds, upstream, addr, rx_vid); + } return priv->info->fdb_add_cmd(ds, port, addr, vid); } @@ -1014,7 +1028,21 @@ static int sja1105_fdb_del(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid) { struct sja1105_private *priv = ds->priv; + int rc; + /* Since we make use of VLANs even when the bridge core doesn't tell us + * to, translate these FDB entries into the correct dsa_8021q ones. + */ + if (!dsa_port_is_vlan_filtering(&ds->ports[port])) { + unsigned int upstream = dsa_upstream_port(priv->ds, port); + u16 tx_vid = dsa_8021q_tx_vid(ds, port); + u16 rx_vid = dsa_8021q_rx_vid(ds, port); + + rc = priv->info->fdb_del_cmd(ds, port, addr, tx_vid); + if (rc < 0) + return rc; + return priv->info->fdb_del_cmd(ds, upstream, addr, rx_vid); + } return priv->info->fdb_del_cmd(ds, port, addr, vid); } @@ -1049,6 +1077,15 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port, if (!(l2_lookup.destports & BIT(port))) continue; u64_to_ether_addr(l2_lookup.macaddr, macaddr); + + /* We need to hide the dsa_8021q VLAN from the user. + * Convert the TX VID into the pvid that is active in + * standalone and non-vlan_filtering modes, aka 1. + * The RX VID is applied on the CPU port, which is not seen by + * the bridge core anyway, so there's nothing to hide. + */ + if (!dsa_port_is_vlan_filtering(&ds->ports[port])) + l2_lookup.vlanid = 1; cb(macaddr, l2_lookup.vlanid, false, data); } return 0;