From patchwork Fri Apr 29 23:30:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin Foster X-Patchwork-Id: 12832985 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD5A4C433EF for ; Fri, 29 Apr 2022 23:31:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381781AbiD2Xe1 (ORCPT ); Fri, 29 Apr 2022 19:34:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358365AbiD2Xe0 (ORCPT ); Fri, 29 Apr 2022 19:34:26 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam08on2109.outbound.protection.outlook.com [40.107.101.109]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3BDD3B0D20; Fri, 29 Apr 2022 16:31:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T+6hI6Xn4JTbsqCZ1MFXK7CCu/0f8GFtjWLTKHHD0fARYAPgR2EUtdXt/l56z4pF7iXzFUEgW+H3CgKPq22Y7uFxZZ0YhXLdqpUZhcFMaMxG0ivY67l1RsYlQvb95hAwWTaa+5zxGKV3b49jJW3HdKfDrmbBz3KGYbQzp9Hns0GzIWKvhwjSvyCRjHLXtZzoixD2elzDWgtNICV5/vQSDwSX5H6e050rkWLpbOt/onGdTK35dPlNHgVkyMsNk5CPGhR5IiEt3zVM4JFqt0VHC7LeLHKqApfC2xSTcwcB+3sWROK82l5vlCF4ortN0F9sKSkH/fO7GNMgMwXaU485RQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DRsb6dJVe4CoeJbOLOmOJgUiLZR2pP08TVhRIdTISmA=; b=eQpdYrpspn2eunnnSLsJJEcQ3rw5aHNdU8lYmt0cAIg24vTMxJW1DNI+gtxRIqQ4kKz1OGbwZZcmFeDtrSwZUSeVDWrqRNohwlZTi0DX38rqvgWdrx3JhCsyKWOAs3nGN9k0UsCRrQJUgkCKk3Q9BZgW/PqvuF3Id39twP4k49QzMFw9p/OVVZh0mTzvKWDghkPpyijH5ZmFLnXjnuAbs0YnIuIj5APOZJx+DKmApBrOloBcgEJSSRdn0GVZQ5qRaij5612hMeoWTQd2RuwFI4lL874KhSp990/E9ZlGndsusMmUGd+ChYt6v2y4NgMLb8L8Wz6aHWt/VRkDJY16Yw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=in-advantage.com; dmarc=pass action=none header.from=in-advantage.com; dkim=pass header.d=in-advantage.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inadvantage.onmicrosoft.com; s=selector2-inadvantage-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DRsb6dJVe4CoeJbOLOmOJgUiLZR2pP08TVhRIdTISmA=; b=vjW7Jpfy/7rvv2gUIhAzThF66+XWTwhlA+YIISo47gIOgjY+lafpzEsnaeE5boI+Dzo+otcZAAbCoAze0Z2jBLWKzqU5boN+WBFvr9VHx1Sb1uuiok7GIKVphu52Vsb8vvAijxu9bYRf+XVEGHsab6ZDEV4z7kjFMqNkRjWbwQQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=in-advantage.com; Received: from MWHPR1001MB2351.namprd10.prod.outlook.com (2603:10b6:301:35::37) by PH0PR10MB5483.namprd10.prod.outlook.com (2603:10b6:510:ee::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Fri, 29 Apr 2022 23:31:03 +0000 Received: from MWHPR1001MB2351.namprd10.prod.outlook.com ([fe80::4581:787c:1a7a:873e]) by MWHPR1001MB2351.namprd10.prod.outlook.com ([fe80::4581:787c:1a7a:873e%3]) with mapi id 15.20.5186.026; Fri, 29 Apr 2022 23:31:03 +0000 From: Colin Foster To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S. Miller" , Florian Fainelli , Vivien Didelot , Andrew Lunn , UNGLinuxDriver@microchip.com, Alexandre Belloni , Claudiu Manoil , Vladimir Oltean Subject: [PATCH v1 net 1/2] net: ethernet: ocelot: rename vcap_props to clearly be an ocelot member Date: Fri, 29 Apr 2022 16:30:48 -0700 Message-Id: <20220429233049.3726791-2-colin.foster@in-advantage.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220429233049.3726791-1-colin.foster@in-advantage.com> References: <20220429233049.3726791-1-colin.foster@in-advantage.com> X-ClientProxiedBy: BYAPR07CA0024.namprd07.prod.outlook.com (2603:10b6:a02:bc::37) To MWHPR1001MB2351.namprd10.prod.outlook.com (2603:10b6:301:35::37) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 475fcbaa-1fb0-43ca-fa97-08da2a38534d X-MS-TrafficTypeDiagnostic: PH0PR10MB5483:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tu/wZpNjuWnH7EwnwlV/neRE3lkftzINku8ps30jpiPOjAEK0Nr/DQU2xTYYw8s4QjcXHig1bOe+g5tLZOK2h2m0O2DZWujxR+mIgF4yEFnXEjT9aiD++9XvgvZKhevozqn+o7yGyP2HdRYFxMaZfcB0g4Cq/jkAUJMJAplFh/hiGEG/tSvXtkMfNfqMF7VljZb6C3W7YbkrWpxffdJ45xJZ6VY3slRhkD+CT8ywVHt55EqMMAX8TU3jkIhpIbWR0bnoT01ehnMDb603+cQbsk3F/sNvaVnJbSkhMhbfKNg6MjRvqFzAQWY9y3/9Xzb96WiipIemprp7YjNPJhIn9VuIb/IgyCqv0FKiEeyItccxtpEMf/WceDqrwvCCdcSc7x6nzyRm3o7VAvUCjWcU/H2JvZeAvO+JhzDpodhrgNNhcWKCjnnq72NarMuEmbdLRIk/DqIj9SmuamJ9NVZr4ZzqUHtT9QhaeoGCO3K1gPUOJuVGuNLTAEUEylvf0riJx8dFjUrAa5fQBSuCgOtFEraN+MH4+/4rqzubULcCi42spp+0ioujh1KA68HlvtVz7a1A79WyUF+cz2L8j1HjnbOlfvZU9zFEXUfVDWKgUgaKmJl9sB2PyA3XppkNjZtJVHanX7vAOgFsUqM9dlxfP77w9sNCZjGcCmuKr2uko+gMk6YffGJma4Vf947QWxVdy4fISFSvFtLN8cqc8wcFCQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1001MB2351.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(136003)(396003)(39830400003)(366004)(346002)(376002)(508600001)(86362001)(44832011)(6512007)(30864003)(8936002)(36756003)(7416002)(6506007)(316002)(5660300002)(186003)(6486002)(83380400001)(6666004)(38100700002)(38350700002)(52116002)(2906002)(2616005)(26005)(1076003)(66946007)(4326008)(8676002)(54906003)(66476007)(66556008);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: O141oc6xOuo+ugy7UsnzrJSkGgJa/zUDpHTuDqBL0lzLwdEthup1ktalTtsRjwhioi5aJJdYbEq2wegavzH3nR1h4ZhAd0JAQF9f65LsFBI0hwiSjN0PHq5uAJK1qZLevilWTI43h1pI7+V8YSiTob9KTEKATYxVqmfUtZFKCPN0Yu47kLJzJENoGLwWCnAdZMjeNuTZF1d/Ij7b+U52CtA/m2KEm3V8Zm0EUBx1H1fx3ymGTXUZnIuPaAA2lg31zHNuEeDBQez+wK+If30YySw/TuXknJV/91DEiBrudaheVkOlOTLbbiuglt0xErWqxtwug3dw9+34lBgVdFz6ECyhHSMTHDLFGeDA5JGPYSjkEEZYl+EClYduVnw6GuVqPKFAtc7BSqD71QtHc0lI4eU8chlBXMYtnc3+bnVL4fI9JFzQcFeOgvoqOTi2bSGjQx5HwL8uZAaaBpfsnoiKSQhwWYEJLgnP5vwpwRCNXNptNPko3NTqlpdNJYPg17kbwF/7TVEFmR7bL2UmjI+S5vHCCFkYDhkWpzxdybW8cwfIAmODKSSTZo+qTBQ9KLMbvmsQmu4nlpvcnjyLw6FvYdRxdmch1ep3fUXbkWMGRJ2Fid6ObiBv2mNF5tzPINU6SpBHIp6JJ8lrAHpfVYeyFxPN4Cd9MPs7dRgM4D8kJwH/2keKkiCjMvx9vRvTjGYUVrwS9cFrUVN+g/yHrrzn4v+hcPthYdGyMOQxwZHPB/OuByu73XhKiLLxLCZo9bhgKuOcj8O5PAD8i9xnBLapJPXk2p8wDy9gGOu8JfuHVgR/tMZH636Df9ygLoLhYZ94qH/vOyJz8tBXEBnbho6dfawO/AGtIl7nRfwd8JzHtGlyJhlteTG4ubtoBHBaJ4QhLPyRpvtBlRYxIwZq4KDqn6Db0EkPBaENhR2L3rbw1r/r6wXTQYJOHV05sCXPrgj6XX2bb3tSiXE1GMbPePdolaMNT8cHlkM9hyYaWyb+hV1KBafwfZDdmFeTuzpLXMPh2OcH+TcQQ7QwH/RMwBWh0YQzRGSy0PSVbcZYyn3H09UWXhJdtIA/VcvISePOYwWISzJpHdbf05kePq0n/igAESJOglp7B2Ev4tgfleBjcmAJG8wxKKl+R+VYnPmWSZs40lscFUkC7GydxlJqX6BZeJjf/KLD9kFZJjAke9NnrY2qvXV6k3YfUVs4g4rrtWdsrIzPLZj7A0tdV7LFClYY6+pyT1EefsLY2UB4wUFVl7TH2K2DWHqQiIxSS7ukZhnreZxPxQXu9Mcuri54am9mSq3Tcmtq+QsK7lzg9nvHcRlHjXhXpx9mWb4FFjZNHGkvftwLVnLAW+GGkv/TQxxFP4yREmL/3Q4eLJqihsNuDVmWjUavhyRPY/tIbcCs+CC0F6sDnGpiGXDiaVbTZKw9rUBhXWX+v/PGsaTLXJ2HuuWMXBcIP4cSDDUB7CNK23dejuobiuj2W+CiiKkXB39qkukSjSxFkVwiZnZHhiRguC7yS+DLe2Sv8n2C5hYpiX3LW65mhTtvS8H9ATilg+mpmcjfWrkWWoha2m1B4lqqyFVOLCXXZMEft64XzSXC3nkFuP+UGvUzLL/pZQQZ5lT1+jA0REgUFNmY5YHe/COqoQhvocx0wnSdP/nbNE22mV3n55G0Oz87Acr7NqOZm8a9XsMkoiAzxOZugaYPL4U/aPSDRfmaTfFq0AcGTRoZN4yQvrrlBihYR/Hm87+hHTvxvwWxe5KG91aMfVq1py+t7pAegpNolISv3R/tYycLcot+ X-OriginatorOrg: in-advantage.com X-MS-Exchange-CrossTenant-Network-Message-Id: 475fcbaa-1fb0-43ca-fa97-08da2a38534d X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2351.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2022 23:31:03.3000 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 48e842ca-fbd8-4633-a79d-0c955a7d3aae X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: v1kjPJDCEKHZ7ShDaDroIP6O2/TZ9mXWMn5mcLAKbko9Tq8pV7PJ62QoTyh71eeTSWnKsxprVxDE1DopL0bykrcpk1lNd1qfmAQAuvY8Dyg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5483 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org The vcap_props structure is part of the ocelot driver. It is in the process of being exported to a wider scope, so renaming it to match other structure definitions in the include/soc/mscc/ocelot.h makes sense. I'm splitting the rename operation into this separate commit, since it should make the actual bug fix (next commit) easier to review. Signed-off-by: Colin Foster --- drivers/net/dsa/ocelot/felix.h | 2 +- drivers/net/dsa/ocelot/felix_vsc9959.c | 2 +- drivers/net/dsa/ocelot/seville_vsc9953.c | 2 +- drivers/net/ethernet/mscc/ocelot_flower.c | 4 +- drivers/net/ethernet/mscc/ocelot_vcap.c | 54 +++++++++++----------- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 2 +- include/soc/mscc/ocelot.h | 2 +- include/soc/mscc/ocelot_vcap.h | 2 +- 8 files changed, 36 insertions(+), 34 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix.h b/drivers/net/dsa/ocelot/felix.h index f083b06fdfe9..d6cf5e5a48c5 100644 --- a/drivers/net/dsa/ocelot/felix.h +++ b/drivers/net/dsa/ocelot/felix.h @@ -27,7 +27,7 @@ struct felix_info { unsigned int num_stats; int num_ports; int num_tx_queues; - struct vcap_props *vcap; + struct ocelot_vcap_props *vcap; u16 vcap_pol_base; u16 vcap_pol_max; u16 vcap_pol_base2; diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c index 52a8566071ed..a60dbedc1b1c 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -845,7 +845,7 @@ static struct vcap_field vsc9959_vcap_is2_actions[] = { [VCAP_IS2_ACT_HIT_CNT] = { 44, 32}, }; -static struct vcap_props vsc9959_vcap_props[] = { +static struct ocelot_vcap_props vsc9959_vcap_props[] = { [VCAP_ES0] = { .action_type_width = 0, .action_table = { diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/ocelot/seville_vsc9953.c index 68ef8f111bbe..2fda65fb21a3 100644 --- a/drivers/net/dsa/ocelot/seville_vsc9953.c +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c @@ -829,7 +829,7 @@ static struct vcap_field vsc9953_vcap_is2_actions[] = { [VCAP_IS2_ACT_HIT_CNT] = { 50, 32}, }; -static struct vcap_props vsc9953_vcap_props[] = { +static struct ocelot_vcap_props vsc9953_vcap_props[] = { [VCAP_ES0] = { .action_type_width = 0, .action_table = { diff --git a/drivers/net/ethernet/mscc/ocelot_flower.c b/drivers/net/ethernet/mscc/ocelot_flower.c index 03b5e59d033e..59b040ad1fee 100644 --- a/drivers/net/ethernet/mscc/ocelot_flower.c +++ b/drivers/net/ethernet/mscc/ocelot_flower.c @@ -504,8 +504,8 @@ static int ocelot_flower_parse_indev(struct ocelot *ocelot, int port, struct flow_cls_offload *f, struct ocelot_vcap_filter *filter) { + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; struct flow_rule *rule = flow_cls_offload_flow_rule(f); - const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; int key_length = vcap->keys[VCAP_ES0_IGR_PORT].length; struct netlink_ext_ack *extack = f->common.extack; struct net_device *dev, *indev; @@ -786,7 +786,7 @@ static struct ocelot_vcap_filter if (ingress) { filter->ingress_port_mask = BIT(port); } else { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; int key_length = vcap->keys[VCAP_ES0_EGR_PORT].length; filter->egress_port.value = port; diff --git a/drivers/net/ethernet/mscc/ocelot_vcap.c b/drivers/net/ethernet/mscc/ocelot_vcap.c index c8701ac955a8..816c8144e18e 100644 --- a/drivers/net/ethernet/mscc/ocelot_vcap.c +++ b/drivers/net/ethernet/mscc/ocelot_vcap.c @@ -47,13 +47,14 @@ struct vcap_data { }; static u32 vcap_read_update_ctrl(struct ocelot *ocelot, - const struct vcap_props *vcap) + const struct ocelot_vcap_props *vcap) { return ocelot_target_read(ocelot, vcap->target, VCAP_CORE_UPDATE_CTRL); } -static void vcap_cmd(struct ocelot *ocelot, const struct vcap_props *vcap, - u16 ix, int cmd, int sel) +static void vcap_cmd(struct ocelot *ocelot, + const struct ocelot_vcap_props *vcap, u16 ix, int cmd, + int sel) { u32 value = (VCAP_CORE_UPDATE_CTRL_UPDATE_CMD(cmd) | VCAP_CORE_UPDATE_CTRL_UPDATE_ADDR(ix) | @@ -79,14 +80,15 @@ static void vcap_cmd(struct ocelot *ocelot, const struct vcap_props *vcap, } /* Convert from 0-based row to VCAP entry row and run command */ -static void vcap_row_cmd(struct ocelot *ocelot, const struct vcap_props *vcap, - u32 row, int cmd, int sel) +static void vcap_row_cmd(struct ocelot *ocelot, + const struct ocelot_vcap_props *vcap, u32 row, int cmd, + int sel) { vcap_cmd(ocelot, vcap, vcap->entry_count - row - 1, cmd, sel); } static void vcap_entry2cache(struct ocelot *ocelot, - const struct vcap_props *vcap, + const struct ocelot_vcap_props *vcap, struct vcap_data *data) { u32 entry_words, i; @@ -103,7 +105,7 @@ static void vcap_entry2cache(struct ocelot *ocelot, } static void vcap_cache2entry(struct ocelot *ocelot, - const struct vcap_props *vcap, + const struct ocelot_vcap_props *vcap, struct vcap_data *data) { u32 entry_words, i; @@ -121,7 +123,7 @@ static void vcap_cache2entry(struct ocelot *ocelot, } static void vcap_action2cache(struct ocelot *ocelot, - const struct vcap_props *vcap, + const struct ocelot_vcap_props *vcap, struct vcap_data *data) { u32 action_words, mask; @@ -146,7 +148,7 @@ static void vcap_action2cache(struct ocelot *ocelot, } static void vcap_cache2action(struct ocelot *ocelot, - const struct vcap_props *vcap, + const struct ocelot_vcap_props *vcap, struct vcap_data *data) { u32 action_words; @@ -170,7 +172,7 @@ static void vcap_cache2action(struct ocelot *ocelot, } /* Calculate offsets for entry */ -static void vcap_data_offset_get(const struct vcap_props *vcap, +static void vcap_data_offset_get(const struct ocelot_vcap_props *vcap, struct vcap_data *data, int ix) { int num_subwords_per_entry, num_subwords_per_action; @@ -251,8 +253,8 @@ static void vcap_key_field_set(struct vcap_data *data, u32 offset, u32 width, vcap_data_set(data->mask, offset + data->key_offset, width, mask); } -static void vcap_key_set(const struct vcap_props *vcap, struct vcap_data *data, - int field, u32 value, u32 mask) +static void vcap_key_set(const struct ocelot_vcap_props *vcap, + struct vcap_data *data, int field, u32 value, u32 mask) { u32 offset = vcap->keys[field].offset; u32 length = vcap->keys[field].length; @@ -260,7 +262,7 @@ static void vcap_key_set(const struct vcap_props *vcap, struct vcap_data *data, vcap_key_field_set(data, offset, length, value, mask); } -static void vcap_key_bytes_set(const struct vcap_props *vcap, +static void vcap_key_bytes_set(const struct ocelot_vcap_props *vcap, struct vcap_data *data, int field, u8 *val, u8 *msk) { @@ -291,7 +293,7 @@ static void vcap_key_bytes_set(const struct vcap_props *vcap, } } -static void vcap_key_l4_port_set(const struct vcap_props *vcap, +static void vcap_key_l4_port_set(const struct ocelot_vcap_props *vcap, struct vcap_data *data, int field, struct ocelot_vcap_udp_tcp *port) { @@ -303,7 +305,7 @@ static void vcap_key_l4_port_set(const struct vcap_props *vcap, vcap_key_field_set(data, offset, length, port->value, port->mask); } -static void vcap_key_bit_set(const struct vcap_props *vcap, +static void vcap_key_bit_set(const struct ocelot_vcap_props *vcap, struct vcap_data *data, int field, enum ocelot_vcap_bit val) { @@ -317,7 +319,7 @@ static void vcap_key_bit_set(const struct vcap_props *vcap, vcap_key_field_set(data, offset, length, value, msk); } -static void vcap_action_set(const struct vcap_props *vcap, +static void vcap_action_set(const struct ocelot_vcap_props *vcap, struct vcap_data *data, int field, u32 value) { int offset = vcap->actions[field].offset; @@ -330,7 +332,7 @@ static void vcap_action_set(const struct vcap_props *vcap, static void is2_action_set(struct ocelot *ocelot, struct vcap_data *data, struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS2]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_IS2]; struct ocelot_vcap_action *a = &filter->action; vcap_action_set(vcap, data, VCAP_IS2_ACT_MASK_MODE, a->mask_mode); @@ -345,7 +347,7 @@ static void is2_action_set(struct ocelot *ocelot, struct vcap_data *data, static void is2_entry_set(struct ocelot *ocelot, int ix, struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS2]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_IS2]; struct ocelot_vcap_key_vlan *tag = &filter->vlan; u32 val, msk, type, type_mask = 0xf, i, count; struct ocelot_vcap_u64 payload; @@ -647,7 +649,7 @@ static void is2_entry_set(struct ocelot *ocelot, int ix, static void is1_action_set(struct ocelot *ocelot, struct vcap_data *data, const struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS1]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_IS1]; const struct ocelot_vcap_action *a = &filter->action; vcap_action_set(vcap, data, VCAP_IS1_ACT_VID_REPLACE_ENA, @@ -670,7 +672,7 @@ static void is1_action_set(struct ocelot *ocelot, struct vcap_data *data, static void is1_entry_set(struct ocelot *ocelot, int ix, struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS1]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_IS1]; struct ocelot_vcap_key_vlan *tag = &filter->vlan; struct ocelot_vcap_u64 payload; struct vcap_data data; @@ -783,7 +785,7 @@ static void is1_entry_set(struct ocelot *ocelot, int ix, static void es0_action_set(struct ocelot *ocelot, struct vcap_data *data, const struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; const struct ocelot_vcap_action *a = &filter->action; vcap_action_set(vcap, data, VCAP_ES0_ACT_PUSH_OUTER_TAG, @@ -811,7 +813,7 @@ static void es0_action_set(struct ocelot *ocelot, struct vcap_data *data, static void es0_entry_set(struct ocelot *ocelot, int ix, struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; struct ocelot_vcap_key_vlan *tag = &filter->vlan; struct ocelot_vcap_u64 payload; struct vcap_data data; @@ -856,7 +858,7 @@ static void es0_entry_set(struct ocelot *ocelot, int ix, static void vcap_entry_get(struct ocelot *ocelot, int ix, struct ocelot_vcap_filter *filter) { - const struct vcap_props *vcap = &ocelot->vcap[filter->block_id]; + const struct ocelot_vcap_props *vcap = &ocelot->vcap[filter->block_id]; struct vcap_data data; int row, count; u32 cnt; @@ -1313,7 +1315,7 @@ int ocelot_vcap_filter_stats_update(struct ocelot *ocelot, } static void ocelot_vcap_init_one(struct ocelot *ocelot, - const struct vcap_props *vcap) + const struct ocelot_vcap_props *vcap) { struct vcap_data data; @@ -1332,7 +1334,7 @@ static void ocelot_vcap_init_one(struct ocelot *ocelot, } static void ocelot_vcap_detect_constants(struct ocelot *ocelot, - struct vcap_props *vcap) + struct ocelot_vcap_props *vcap) { int counter_memory_width; int num_default_actions; @@ -1421,7 +1423,7 @@ int ocelot_vcap_init(struct ocelot *ocelot) for (i = 0; i < OCELOT_NUM_VCAP_BLOCKS; i++) { struct ocelot_vcap_block *block = &ocelot->block[i]; - struct vcap_props *vcap = &ocelot->vcap[i]; + struct ocelot_vcap_props *vcap = &ocelot->vcap[i]; INIT_LIST_HEAD(&block->rules); diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ethernet/mscc/ocelot_vsc7514.c index 4f4a495a60ad..12c739cb89f9 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -344,7 +344,7 @@ static const struct ocelot_ops ocelot_ops = { .netdev_to_port = ocelot_netdev_to_port, }; -static struct vcap_props vsc7514_vcap_props[] = { +static struct ocelot_vcap_props vsc7514_vcap_props[] = { [VCAP_ES0] = { .action_type_width = 0, .action_table = { diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 9b4e6c78d0f4..42634183d062 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -727,7 +727,7 @@ struct ocelot { struct list_head dummy_rules; struct ocelot_vcap_block block[3]; struct ocelot_vcap_policer vcap_pol; - struct vcap_props *vcap; + struct ocelot_vcap_props *vcap; struct ocelot_mirror *mirror; struct ocelot_psfp_list psfp; diff --git a/include/soc/mscc/ocelot_vcap.h b/include/soc/mscc/ocelot_vcap.h index 7b2bf9b1fe69..05bd73c63675 100644 --- a/include/soc/mscc/ocelot_vcap.h +++ b/include/soc/mscc/ocelot_vcap.h @@ -36,7 +36,7 @@ enum { #define OCELOT_NUM_VCAP_BLOCKS __VCAP_COUNT -struct vcap_props { +struct ocelot_vcap_props { u16 tg_width; /* Type-group width (in bits) */ u16 sw_count; /* Sub word count */ u16 entry_count; /* Entry count */ From patchwork Fri Apr 29 23:30:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin Foster X-Patchwork-Id: 12832986 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0D93C433F5 for ; Fri, 29 Apr 2022 23:31:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381836AbiD2Xeu (ORCPT ); Fri, 29 Apr 2022 19:34:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380711AbiD2Xe1 (ORCPT ); Fri, 29 Apr 2022 19:34:27 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam08on2109.outbound.protection.outlook.com [40.107.101.109]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 719A1C1CA3; Fri, 29 Apr 2022 16:31:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=axX0d2FdYGngqaTpWDmEG/TXSG/LYhhkeSB1MukbXtD3WG3wgwt+2VHkN1X7eKlAehwwhxKNYzzjmHYuSFIxEsPQyDl0PYTu+pZiaPnn8TX+xEnVhWYRpijMk2l4hI3dxOWcEtheQw2hHyImlELZLXQe69RC+EA8vYaxxZA+U7XairyFSlZU2jjuCtza/VG8wwWDui89cy9ME5W7Q0wW3oyF4cg2eRk9mCpSunmMxm43IxnsnO4sYYjNS+1/4FEJRXgQUch/o0ikJCpg/Y6oMxRneyUFM/SzBvq6XsuyrFTtRwioxS+ouUFbeMT425dSeoD4yfebMB7pAn9aGepGJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7rZGRA6+G/vzVk+PgixnEzL+UQ6MeT+IAJXg366OR78=; b=EsXtVENvnmFysba5JIxcnAoYc9rI59ulBASgBPLVnPBgNzaCv9Qp1e48DOpl7bfVlmq0PM6wsuw6Qpb3T6ETYJZ57ss8tadTWcL1Y6YUZpW3No2LnB00DhL8ENxgg4Uiol+ECvYbZLZIizCRaw0na7WZa7SsXH/NgeI+4ukPkd0A1S4dM4KiWLKiWLHRWuAncmtogwILi7Hf8pCWsP14NN+fM9hejOXssfPhejTnFJD7MaEx09BS35pxT0AaNei23pRKWRdXbVtBtt8PRkJ67KD5lm1JGTq4BmimsjqvftNTEqP5CwmrWQwlgqLK2EMv+gukfylTj3EkC6kGx0MTMg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=in-advantage.com; dmarc=pass action=none header.from=in-advantage.com; dkim=pass header.d=in-advantage.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inadvantage.onmicrosoft.com; s=selector2-inadvantage-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7rZGRA6+G/vzVk+PgixnEzL+UQ6MeT+IAJXg366OR78=; b=YBstt23Duw96rzkBUd0bH6vuwLfK4iQtM1+CBRSmD0lPw3NAJ9plAxhIkTVO9DObTui5FLlEJQ7fh17/JTjUwWLsdQZwR5NxYfRZJeTkNsHGBxEKKLl2RsjH16jP1NPfFgjLyH5scxASuG5jqkzDGRedCKYxih1/9/GJoTmJy7I= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=in-advantage.com; Received: from MWHPR1001MB2351.namprd10.prod.outlook.com (2603:10b6:301:35::37) by PH0PR10MB5483.namprd10.prod.outlook.com (2603:10b6:510:ee::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Fri, 29 Apr 2022 23:31:04 +0000 Received: from MWHPR1001MB2351.namprd10.prod.outlook.com ([fe80::4581:787c:1a7a:873e]) by MWHPR1001MB2351.namprd10.prod.outlook.com ([fe80::4581:787c:1a7a:873e%3]) with mapi id 15.20.5186.026; Fri, 29 Apr 2022 23:31:04 +0000 From: Colin Foster To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S. Miller" , Florian Fainelli , Vivien Didelot , Andrew Lunn , UNGLinuxDriver@microchip.com, Alexandre Belloni , Claudiu Manoil , Vladimir Oltean Subject: [PATCH v1 net 2/2] net: mscc: ocelot: fix possible memory conflict for vcap_props Date: Fri, 29 Apr 2022 16:30:49 -0700 Message-Id: <20220429233049.3726791-3-colin.foster@in-advantage.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220429233049.3726791-1-colin.foster@in-advantage.com> References: <20220429233049.3726791-1-colin.foster@in-advantage.com> X-ClientProxiedBy: BYAPR07CA0024.namprd07.prod.outlook.com (2603:10b6:a02:bc::37) To MWHPR1001MB2351.namprd10.prod.outlook.com (2603:10b6:301:35::37) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3a3279f1-47b2-4dcb-2a13-08da2a385403 X-MS-TrafficTypeDiagnostic: PH0PR10MB5483:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6DVfc9UtZMBtN8mp4NOQxdYXsy8yyg5Myax+H7sMZhthhol8ZfAZIzHB5uz3nfYo0bz3hg1zkWSjrtkdRV0093jRazDNScAok9MNTRy/8f0WEY4hq8k7LAnoGtxw9WmhPVTvmff3R5ShN7KTiSZggsWOAgdgj+DLYUFPJAxI5FaL8ZWxoZ3reyoENulRmf3MuPe5TYPGN7CCazC5aZiFJf+bns4WYw5sU97FZfUnas2sk6Oqpw5UOh4ayDNGAYeW288i5P/dMuPPvYyJCeCZ2zXbx8h/S0sTbICRaVGfUd4EteYUYqxkoTbLEHT77igPvQnk9pCBOYKoT5lyynymgQBFonD9RO0T0lr/aJNFXLTAE3O8d5CDa9XrFCx+oJMgEOuQhsCne9DW29GLiDQVYylbTWrdPcspgfF5RsXltp/coyZ6teGR8RndMCyhvhJx3ocBxZwilT8vSJNSi+aLaJzu3QimY9wPfVc7rLJRp9+yHq5+1Woqgzl3bRdKGTGYSyvgv32XutdskqkMHxe+otOEMGVYzweR7IrJ/fIv2DI1unVZfIyOotVdmRbJIpAdTjAzfSPYwEu46D/xqaebyQl4Tz5P2P2yfF0AflTAe5K7eQkh6R2c9OGldaL4dCnm9yme1omLh+GZ84V//pAE6eglBUuWZ70aOOPj9hQF1VBpVIi877Du5sRZcqTjWZdWiswiHtxuqEdpQFqJBK4Txw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1001MB2351.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(136003)(396003)(39830400003)(366004)(346002)(376002)(508600001)(86362001)(44832011)(6512007)(8936002)(36756003)(7416002)(6506007)(316002)(5660300002)(186003)(6486002)(83380400001)(6666004)(38100700002)(38350700002)(52116002)(2906002)(2616005)(26005)(1076003)(66946007)(4326008)(8676002)(54906003)(66476007)(66556008);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2tFEFMBDl3Ld5SrlwLFMdokf8r2OsEpzFDMLlcsoVie5ksiZedBwrmGT5B+PwDCyBO6ZWPKL+sJoNVXpGa274MD3H/+gXq7BB0NKdQ/BP9BydvASzRoPkXZnD4CZcutQIOsUOX9+HgZJgYVg52E6QPVSCniDNUQxyEWxljuuFc5PlPeSWcPh/stMt+4TBRC6gjuwccq5beXZgFD3rYvpqJAuooE2HVHmD1Lr7Fe95iP9PS7jx30QFb/UKqxFjAJG+B3xiaCDH51hYuutwDZ+D9Es99J9hWAHjR43lC4hOJeFYSvNOSIKEPTbcSG604UUQr47zDhgU3u9iVkyqKG3EZtJTHdoOR5Avg9blmeLyIqcsg13HxahmDTYuVnGmxtDSlLRBfYSFRYkCks45wycBfyXdwYEEfz3aOj3vDgyNguzMIDDtg24hf8XEmPtbUNrDX6o25zAoyNAj7RhfBaVBrYTbB8HcVe/J8TDxrajM1scQGxx4zLJ8YRzib9ur28v/duQbTEYES5uYjT6fBE2C7F1y/g7E3DAYKgqCPzJbQJxIdvJeYsfzxtzDwlZ0EWOE3dpn4V2VShFxkZnf7hUue5KZGRI/XmQefi83teIWVT2pap5dSZeTuzhfwoHkfGBUMt3gwuhWSToczDbjWh5v+HzXV4Vn1tvRljJudfAxMtqwk+gC2JBjuOcPuaheH2gwgE7bLbYN4YaGmTIEdTgWy24geBf80EiP7I0S+j8N7UMmbYKcgYFbNEn6S0LcKjVEyhWX+fyBtquFQA1ZuvIF6IZtlEK1XadojEdmJXbkKCEPHOO52NPabYtRWaZ/3dZQ0qgRspWOGRS35LTXMCUF9rYS3uZVc0TShtwo04cRgvUxrQXnnRx+YmxhSqh1csZ4V4B6Fk3NvJfaBhzokQ1mqeXpL66bKL1CWGfz6uGd2goEWtskxxNUJISo9jBd8IFyvRoHPmbtWSBifqVDe+H6lO5Y7vBo1M8+BR6pEoXBnkIGJxoifKTbzC9z7P47r+wttxcei7XX4DpKyZdEEM1VBBA4HG0/gmZgfFa5Bzg0M/O24ebx+F/BCgVcoyi63omoikkiiVBHyivVhFV7Z88PZYtrFLv7Frgd7mPYl0RfZVklpC2qIYGjmSVICBJnx3H9ntfySWMLPWS2Cx8XQtEWmz8HPShrqZv+OoAzBNB/OMj1XFlIfmcrhzfivPStpzpBOULAV+yc4xMUSZKIE8cT4HLhjavMJN7kBCCArGETsN/moA1MC8H5QsZK8BF6RMPMI1ZymNpVD9CC11T/uYT/jK3cGyB5CBC85BUt0iGuzO+UTfheyyxq6MZZplGo5O5siUJI7wWmPOmNayp2O7iYqTzYjXIqJO4wJoSN6h181u8CAvgxmwDP4fhSMBLb4QmWvUMAYsKUeU1yxks1/6GoLQ8ly+kQeJqh9Q2cYtHveCS2s/AqvZLfD2Mj3fXkxJ/oWJ2rvMth44CalmT21fCPMHf9J0s6i9ugVJp7jvemEuPXKQX5BQ6o1SopwjGDvzR2jtc43b88HIuAJbHiI3Thqnsce1dntD0GFDjyH5vq9sGaJzyshl2/eN3x52oJ8SKVSf0tgtZv01wzfatqu+rfgqDtnaWD/DCSPoasjjX484xUQWWV3UbDqUsk+Rd5W4zaH5Lyb6nTtAAHSycu8pvu6SNhlPt6teWyULsUHYWDLIb2KHcUgy5uqXz6gw/Wqtj/MGivdrlv+iQ8FvjTgPIuJXyvm0P/YqlS1Z+3SXu1oB41TYO+iv+VDryZrjR+BSk X-OriginatorOrg: in-advantage.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a3279f1-47b2-4dcb-2a13-08da2a385403 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2351.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2022 23:31:04.4406 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 48e842ca-fbd8-4633-a79d-0c955a7d3aae X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DQXQ2lnFDgF/Hb0SQy3qjcm12+9pgLhaQ+hd5TJQWwOV8OU0g6CUKpelKecUXSAxA4JWisX4uhJ4xhseGQmRppKUhYn/jLJDFu4I05RLgtg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5483 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Each instance of an ocelot struct has the ocelot_vcap_props structure being referenced. During initialization (ocelot_init), these vcap_props are detected and the structure contents are modified. In the case of the standard ocelot driver, there will probably only be one instance of struct ocelot, since it is part of the chip. For the Felix driver, there could be multiple instances of struct ocelot. In that scenario, the second time ocelot_init would get called, it would corrupt what had been done in the first call because they both reference *ocelot->vcap. Both of these instances were assigned the same memory location. Move this vcap_props memory to within struct ocelot, so that each instance can modify the structure to their heart's content without corrupting other instances. Fixes: 2096805497e2b ("net: mscc: ocelot: automatically detect VCAP constants") Signed-off-by: Colin Foster --- drivers/net/dsa/ocelot/felix.c | 3 +- drivers/net/dsa/ocelot/felix.h | 2 +- drivers/net/dsa/ocelot/felix_vsc9959.c | 2 +- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 5 ++-- include/soc/mscc/ocelot.h | 34 +++++++++++++++++++++- include/soc/mscc/ocelot_vcap.h | 32 -------------------- 6 files changed, 40 insertions(+), 38 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c index 9e28219b223d..f6a1e8e90bda 100644 --- a/drivers/net/dsa/ocelot/felix.c +++ b/drivers/net/dsa/ocelot/felix.c @@ -1199,7 +1199,8 @@ static int felix_init_structs(struct felix *felix, int num_phys_ports) ocelot->stats_layout = felix->info->stats_layout; ocelot->num_stats = felix->info->num_stats; ocelot->num_mact_rows = felix->info->num_mact_rows; - ocelot->vcap = felix->info->vcap; + memcpy(&ocelot->vcap, felix->info->vcap, + OCELOT_NUM_VCAP_BLOCKS * sizeof(*felix->info->vcap)); ocelot->vcap_pol.base = felix->info->vcap_pol_base; ocelot->vcap_pol.max = felix->info->vcap_pol_max; ocelot->vcap_pol.base2 = felix->info->vcap_pol_base2; diff --git a/drivers/net/dsa/ocelot/felix.h b/drivers/net/dsa/ocelot/felix.h index d6cf5e5a48c5..fb928c8bf544 100644 --- a/drivers/net/dsa/ocelot/felix.h +++ b/drivers/net/dsa/ocelot/felix.h @@ -27,7 +27,7 @@ struct felix_info { unsigned int num_stats; int num_ports; int num_tx_queues; - struct ocelot_vcap_props *vcap; + const struct ocelot_vcap_props *vcap; u16 vcap_pol_base; u16 vcap_pol_max; u16 vcap_pol_base2; diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c index a60dbedc1b1c..ddf4e8a9905c 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -845,7 +845,7 @@ static struct vcap_field vsc9959_vcap_is2_actions[] = { [VCAP_IS2_ACT_HIT_CNT] = { 44, 32}, }; -static struct ocelot_vcap_props vsc9959_vcap_props[] = { +static const struct ocelot_vcap_props vsc9959_vcap_props[] = { [VCAP_ES0] = { .action_type_width = 0, .action_table = { diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ethernet/mscc/ocelot_vsc7514.c index 12c739cb89f9..4fe51591afa8 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -344,7 +344,7 @@ static const struct ocelot_ops ocelot_ops = { .netdev_to_port = ocelot_netdev_to_port, }; -static struct ocelot_vcap_props vsc7514_vcap_props[] = { +static const struct ocelot_vcap_props vsc7514_vcap_props[] = { [VCAP_ES0] = { .action_type_width = 0, .action_table = { @@ -638,7 +638,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) ocelot->num_phys_ports = of_get_child_count(ports); ocelot->num_flooding_pgids = 1; - ocelot->vcap = vsc7514_vcap_props; + memcpy(&ocelot->vcap, &vsc7514_vcap_props, + OCELOT_NUM_VCAP_BLOCKS * sizeof(*vsc7514_vcap_props)); ocelot->vcap_pol.base = VSC7514_VCAP_POLICER_BASE; ocelot->vcap_pol.max = VSC7514_VCAP_POLICER_MAX; diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 42634183d062..b097b97993b0 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -525,6 +525,15 @@ enum { VCAP_CONST_IF_CNT, }; +enum { + VCAP_ES0, + VCAP_IS1, + VCAP_IS2, + __VCAP_COUNT, +}; + +#define OCELOT_NUM_VCAP_BLOCKS __VCAP_COUNT + enum ocelot_ptp_pins { PTP_PIN_0, PTP_PIN_1, @@ -583,6 +592,29 @@ struct ocelot_vcap_block { int count; }; +struct ocelot_vcap_props { + u16 tg_width; /* Type-group width (in bits) */ + u16 sw_count; /* Sub word count */ + u16 entry_count; /* Entry count */ + u16 entry_words; /* Number of entry words */ + u16 entry_width; /* Entry width (in bits) */ + u16 action_count; /* Action count */ + u16 action_words; /* Number of action words */ + u16 action_width; /* Action width (in bits) */ + u16 action_type_width; /* Action type width (in bits) */ + struct { + u16 width; /* Action type width (in bits) */ + u16 count; /* Action type sub word count */ + } action_table[2]; + u16 counter_words; /* Number of counter words */ + u16 counter_width; /* Counter width (in bits) */ + + enum ocelot_target target; + + const struct vcap_field *keys; + const struct vcap_field *actions; +}; + struct ocelot_bridge_vlan { u16 vid; unsigned long portmask; @@ -727,7 +759,7 @@ struct ocelot { struct list_head dummy_rules; struct ocelot_vcap_block block[3]; struct ocelot_vcap_policer vcap_pol; - struct ocelot_vcap_props *vcap; + struct ocelot_vcap_props vcap[OCELOT_NUM_VCAP_BLOCKS]; struct ocelot_mirror *mirror; struct ocelot_psfp_list psfp; diff --git a/include/soc/mscc/ocelot_vcap.h b/include/soc/mscc/ocelot_vcap.h index 05bd73c63675..96ca1498f722 100644 --- a/include/soc/mscc/ocelot_vcap.h +++ b/include/soc/mscc/ocelot_vcap.h @@ -27,38 +27,6 @@ * ================================================================= */ -enum { - VCAP_ES0, - VCAP_IS1, - VCAP_IS2, - __VCAP_COUNT, -}; - -#define OCELOT_NUM_VCAP_BLOCKS __VCAP_COUNT - -struct ocelot_vcap_props { - u16 tg_width; /* Type-group width (in bits) */ - u16 sw_count; /* Sub word count */ - u16 entry_count; /* Entry count */ - u16 entry_words; /* Number of entry words */ - u16 entry_width; /* Entry width (in bits) */ - u16 action_count; /* Action count */ - u16 action_words; /* Number of action words */ - u16 action_width; /* Action width (in bits) */ - u16 action_type_width; /* Action type width (in bits) */ - struct { - u16 width; /* Action type width (in bits) */ - u16 count; /* Action type sub word count */ - } action_table[2]; - u16 counter_words; /* Number of counter words */ - u16 counter_width; /* Counter width (in bits) */ - - enum ocelot_target target; - - const struct vcap_field *keys; - const struct vcap_field *actions; -}; - /* VCAP Type-Group values */ #define VCAP_TG_NONE 0 /* Entry is invalid */ #define VCAP_TG_FULL 1 /* Full entry */