From patchwork Tue Oct 18 11:31:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steen Hegelund X-Patchwork-Id: 278 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1909491wrs; Tue, 18 Oct 2022 04:37:49 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6783wY1yMoUmTqRPyDtyR6dYkqkmSLaAYfXIPQoEJ7CdzXcczcGSpI2SQ8YZA6rZDQsdmR X-Received: by 2002:a17:902:d4c6:b0:180:9675:3eac with SMTP id o6-20020a170902d4c600b0018096753eacmr2486869plg.77.1666093068900; Tue, 18 Oct 2022 04:37:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666093068; cv=none; d=google.com; s=arc-20160816; b=mg+5UCLdHYANioKIARPfZGHXoys+e0ypj/MpGT2m2BW1BJVeQdD5uzgl+LHAHRx5MU xVm9WIp2FjUD5a0uJDct5jt/YIHh3JgDe6aTYavtcjKUlOau2gqcJHbpGRZcbpiZ7t1j zO+blm6ljd9YTgIf3e6au4T+I3Q4bc/yeRlCuvinyJ2So+NWbHRIC91El2D8ifDMx96t 51eRP6UeK/jW6aI3OTox1sDcckY5G/Q1sChZTqCIwph0gMV/C4vtuigfABowOXt6UH5X BHbZxXVAe6IpoIHSKnQejuybqklwr29dyWGuiRtWnoXDW5E3scrKwq86u+Qo2hZJ9gAY RT8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=wPAzevUkGMYngVTwLaOiMWOZRoejJuLhxvQMNQXD7FY=; b=gFCJ/TpTRM6o94JtShrd+H5DxkuHZiq13mehf784RmFg10FlV3YaDo55fVT+O2j0ul VAFDcvW12GgS5M/TGdRPAKZxdXJDwJH1pUv4pB0pS9X3PXLjUcHBC9STNSUyPB4DeUf2 /Um31x2NyVtTkkd5kXLasrFEFxQtIUBC3JWlbWMnMejT0ezz/WRHC13Hwvo4Xo8HW+p2 4eK137QlVID6syqzDT1hlH5uaLjcgZ6SB4EmgWqhofZZC6LFENwDeW8uqEmXF26pEbcK j4Iun1r1Mt+4UbMrr64JnFuP3NduzUmCMzCo7oHWGq2a5Zpm42viTlPmcE289MRcjWBT 6bOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=1FWh7Jsz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id pa4-20020a17090b264400b0020940c79fc5si19306021pjb.51.2022.10.18.04.37.36; Tue, 18 Oct 2022 04:37:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=1FWh7Jsz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229674AbiJRLcR (ORCPT + 99 others); Tue, 18 Oct 2022 07:32:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229456AbiJRLcP (ORCPT ); Tue, 18 Oct 2022 07:32:15 -0400 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD0FCA8CF4; Tue, 18 Oct 2022 04:32:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1666092733; x=1697628733; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=IMnUlVlnLDpwEnQaBZc/eyje1E5fqjhxZrMDamIwqX4=; b=1FWh7JszI7I2XKxHBDRlp9X2+oG4f/jut2jf/TgaXm4Kmcu+M4nXXCma 5NX5BEqKb3WKgF2p8DjonBvwm+8DBqIA39o+XatH6BLdEJn1rN56oqR7w NONGSXZQVTwZqUsD4ZuhDtr7W7nPFfmDVHfn6w7uL7jtstFroelyw+z/X /IMJ+r/7fju10O1FRvb9RhwTdfjXOrXNzS5jrHVAI/nG+okF7Br8gqwpj xjLk4CW2F8WGffADaWPWFA56QSh5t1TGdrdTlRGqaZaWzQp8wnujJj52L 3UAIiKERoEkbguMv2PIfI5nvi9vY1cEJPhp1gx4oblC20H3OUe1xx158G Q==; X-IronPort-AV: E=Sophos;i="5.95,193,1661842800"; d="scan'208";a="185316420" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 18 Oct 2022 04:32:12 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.85.144) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Tue, 18 Oct 2022 04:32:12 -0700 Received: from den-dk-m31857.microchip.com (10.10.115.15) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Tue, 18 Oct 2022 04:32:10 -0700 From: Steen Hegelund To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni CC: Steen Hegelund , , Randy Dunlap , "Casper Andersson" , Russell King , Wan Jiabing , "Nathan Huckleberry" , , , Subject: [PATCH net-next 0/9] Add support for Sparx5 IS2 VCAP Date: Tue, 18 Oct 2022 13:31:47 +0200 Message-ID: <20221018113156.2364533-1-steen.hegelund@microchip.com> X-Mailer: git-send-email 2.38.0 MIME-Version: 1.0 X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747025206007793724?= X-GMAIL-MSGID: =?utf-8?q?1747025206007793724?= This provides initial support for the Sparx5 VCAP functionality via the 'tc' traffic control userspace tool and its flower filter. Overview: ========= The supported flower filter keys and actions are: - source and destination MAC address keys - trap action - pass action The supported Sparx5 VCAPs are: IS2 (see below for more info) The VCAP (Versatile Content-Aware Processor) feature is essentially a TCAM with rules consisting of: - Programmable key fields - Programmable action fields - A counter (which may be only one bit wide) Besides this each VCAP has: - A number of independent lookups - A keyset configuration typically per port per lookup VCAPs are used in many of the TSN features such as PSFP, PTP, FRER as well as the general shaping, policing and access control, so it is an important building block for these advanced features. Functionality: ============== When a frame is passed to a VCAP the VCAP will generate a set of keys (keyset) based on the traffic type. If there is a rule created with this keyset in the VCAP and the values of the keys matches the values in the keyset of the frame, the rule is said to match and the actions in the rule will be executed and the rule counter will be incremented. No more rules will be examined in this VCAP lookup. If there is no match in the current lookup the frame will be matched against the next lookup (some VCAPs do the processing of the lookups in parallel). The Sparx5 SoC has 6 different VCAP types: - IS0: Ingress Stage 0 (AKA CLM) mostly handles classification - IS2: Ingress Stage 2 mostly handles access control - IP6PFX: IPv6 prefix: Provides tables for IPV6 address management - LPM: Longest Path Match for IP guarding and routing - ES0: Egress Stage 0 is mostly used for CPU copying and multicast handling - ES2: Egress Stage 2 is known as the rewriter and mostly updates tags Design: ======= The VCAP implementation provides switchcore independent handling of rules and supports: - Creating and deleting rules - Updating and getting rules The platform specific API implementation as well as the platform specific model of the VCAP instances are attached to the VCAP API and a client can then access rules via the API in a platform independent way, with the limitations that each VCAP has in terms of is supported keys and actions. The VCAP model is generated from information delivered by the designers if the VCAP hardware. Here is an illustration of this: +------------------+ +------------------+ | TC flower filter | | PTP client | | for Sparx5 | | for Sparx5 | +-------------\----+ +---------/--------+ \ / \ / \ / \ / \ / +----v--------v----+ | VCAP API | +---------|--------+ | | | | +---------v--------+ | VCAP control | | instance | +----/--------|----+ / | / | / | / | +--------------v---+ +----v-------------+ | Sparx5 VCAP | | Sparx5 VCAP API | | model | | Implementation | +------------------+ +---------|--------+ | | | | +---------v--------+ | Sparx5 VCAP HW | +------------------+ Delivery: ========= For now only the IS2 is supported but later the IS0, ES0 and ES2 will be added. There are currently no plans to support the IP6PFX and the LPM VCAPs. The IS2 VCAP has 4 lookups and they are accessible with a TC chain id: - chain 8000000: IS2 Lookup 0 - chain 8100000: IS2 Lookup 1 - chain 8200000: IS2 Lookup 2 - chain 8300000: IS2 Lookup 3 These lookups are executed in parallel by the IS2 VCAP but the actions are executed in series (the datasheet explains what happens if actions overlap). The functionality of TC flower as well as TC matchall filters will be expanded in later submissions as well as the number of VCAPs supported. This is current plan: - add support for more TC flower filter keys and extend the Sparx5 port keyset configuration - support for TC protocol all - debugfs support for inspecting rules - TC flower filter statistics - Sparx5 IS0 VCAP support and more TC keys and actions to support this - add TC policer and drop action support (depends on the Sparx5 QoS support upstreamed separately) - Sparx5 ES0 VCAP support and more TC actions to support this - TC flower template support - TC matchall filter support for mirroring and policing ports - TC flower filter mirror action support - Sparx5 ES2 VCAP support The LAN966x switchcore will also be updated to use the VCAP API as well as future Microchip switches. The LAN966x has 3 VCAPS (IS1, IS2 and ES0) and a slightly different keyset and actionset portfolio than Sparx5. Steen Hegelund (9): net: microchip: sparx5: Adding initial VCAP API support net: microchip: sparx5: Adding IS2 VCAP model to VCAP API net: microchip: sparx5: Adding IS2 VCAP register interface net: microchip: sparx5: Adding initial tc flower support for VCAP API net: microchip: sparx5: Adding port keyset config and callback interface net: microchip: sparx5: Adding basic rule management in VCAP API net: microchip: sparx5: Writing rules to the IS2 VCAP net: microchip: sparx5: Adding KUNIT test VCAP model net: microchip: sparx5: Adding KUNIT test for the VCAP API MAINTAINERS | 1 + drivers/net/ethernet/microchip/Kconfig | 1 + drivers/net/ethernet/microchip/Makefile | 1 + drivers/net/ethernet/microchip/sparx5/Kconfig | 1 + .../net/ethernet/microchip/sparx5/Makefile | 8 +- .../ethernet/microchip/sparx5/sparx5_main.c | 9 + .../ethernet/microchip/sparx5/sparx5_main.h | 6 + .../microchip/sparx5/sparx5_main_regs.h | 460 +- .../net/ethernet/microchip/sparx5/sparx5_tc.c | 46 + .../net/ethernet/microchip/sparx5/sparx5_tc.h | 14 + .../microchip/sparx5/sparx5_tc_flower.c | 256 + .../microchip/sparx5/sparx5_vcap_ag_api.c | 1351 ++++ .../microchip/sparx5/sparx5_vcap_ag_api.h | 18 + .../microchip/sparx5/sparx5_vcap_impl.c | 527 ++ .../microchip/sparx5/sparx5_vcap_impl.h | 20 + drivers/net/ethernet/microchip/vcap/Kconfig | 52 + drivers/net/ethernet/microchip/vcap/Makefile | 9 + .../net/ethernet/microchip/vcap/vcap_ag_api.h | 326 + .../microchip/vcap/vcap_ag_api_kunit.h | 642 ++ .../net/ethernet/microchip/vcap/vcap_api.c | 1142 ++++ .../net/ethernet/microchip/vcap/vcap_api.h | 272 + .../ethernet/microchip/vcap/vcap_api_client.h | 195 + .../ethernet/microchip/vcap/vcap_api_kunit.c | 933 +++ .../microchip/vcap/vcap_model_kunit.c | 5509 +++++++++++++++++ .../microchip/vcap/vcap_model_kunit.h | 10 + 25 files changed, 11805 insertions(+), 4 deletions(-) create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.h create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.h create mode 100644 drivers/net/ethernet/microchip/vcap/Kconfig create mode 100644 drivers/net/ethernet/microchip/vcap/Makefile create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_ag_api.h create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_ag_api_kunit.h create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_api.c create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_api.h create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_api_client.h create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_model_kunit.c create mode 100644 drivers/net/ethernet/microchip/vcap/vcap_model_kunit.h