From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5783542C45 for ; Wed, 7 Jun 2023 03:57:56 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 530304113F; Wed, 7 Jun 2023 03:57:56 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2091.outbound.protection.outlook.com [40.107.220.91]) by mails.dpdk.org (Postfix) with ESMTP id AE80A40ED5; Wed, 7 Jun 2023 03:57:53 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q9dMwUjWgdVKb6QwS5uLWXdqRbKBUBHcOYAOETuQ6iKyMhutAsZ7EcWqfpaFXPwUpTIT+4k9hCvI26EFthL2TtwscnxDUcdAT7nZXA7Jo9V5RlMinXFiKABY1vIwF6Xh6v2nwmtX2AQfzKR0589GlMAJI45+AtfsgWTDAfI9ARXTsQE54UljfQdZGCmNpZIjoHWK+/9vKuARBYFy10tr12odarOWSsP/QPjiWGdq5GaHpc3qxCruSX9elFqqMkHR/80n70jl5LvUL99lVVqWFdVpMgPdfoFwUVcVUYQ5fL+VHiKqgXdt5EFNf7xiwshiapbPQCa/LDXGjFFSW0qKnw== 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=0ll45wBH6A5M0c91gQ45thAwM1rh4xxT2922M1QQ0NU=; b=AQYuC7CR616KnypyqAV5BVwDt6mwvw6fU/ufe7UsXIqqybIMb/SlLaeYVEB6XPQp2Tf6b6pvNdozRzR6dQb87AaYJk0NNMKt19Y6RWnShJv3fTKEASUAsMUn6XjEHny4AtDj6s62v146n4IrooSUUNwdQcoRk8i2gUxbcGN7oYMz2UKy52K05XPn5bz0mvWMt+NJw3OxCELWZdXz6JOf6A9u8whsMZ/ONwFM5lpiXWL3NF5I5K7P89Q87XSh0o7NMoYLBxE2QHcx8Tl/W+oX8YGxpFo4t5kHeh0hKhLxC5yRGTQ+3hbs9RjyYWuDdC0thYBSqHopL//L1ygrpkHAig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0ll45wBH6A5M0c91gQ45thAwM1rh4xxT2922M1QQ0NU=; b=KKZ+KhE3WligWn4pEDUSEHmDPt4wt3Gc+iCbHh6b95TitwonNG/gkM8PlgvMHBGq/cagYycZSXWazdNn1Qe4GnWNtrgnzD3b4Dwra+4IN40HA7BsFq8+hfZRmrHD2YKO8bPzknfYPrUvK7SXmFUp2xVBpwoDylT978tEPnOVhW4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by PH7PR13MB5453.namprd13.prod.outlook.com (2603:10b6:510:138::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33; Wed, 7 Jun 2023 01:57:52 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174%3]) with mapi id 15.20.6455.030; Wed, 7 Jun 2023 01:57:52 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He , stable@dpdk.org Subject: [PATCH 01/10] net/nfp: fix the problem of rtsym Date: Wed, 7 Jun 2023 09:57:00 +0800 Message-Id: <20230607015709.336420-2-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230607015709.336420-1-chaoyong.he@corigine.com> References: <20230607015709.336420-1-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2PR02CA0131.apcprd02.prod.outlook.com (2603:1096:4:188::6) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5453:EE_ X-MS-Office365-Filtering-Correlation-Id: 01850548-f172-4534-976e-08db66fa9a4e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Xh88ugmX9iyrVyuT1BuwdVmKZZ3xEb4D9LjPTzVhXIB3lYyzUMT2WDRgIS5o9ZD5EvEnvOkZyN1ap8jYYJwARVQyftAYDw9cGdLUFBVTYrUwmdlRHUzTb9+QwRcdQW0TjvWZYzEt0dbcNtZTKeWkg6RmtibSP0U09oxx5piJ9JLf+PojSNZfeTcSS22GpSi5SOORXUM0bNd4tAV6yAMNWNTsozH9UqF5uS4t4gzCm+fr4b1uTQc2vuMBYEBph/67Y+9fU6Jkfuo6PM6csZ1hQ3svTPm7lq0meTfo+JlmrI/yyxLKjrEDIZgNNKVxFoIGa0ryrlgcj9VywCAwtMpFRu12SzBGXhJmupWthbIGTd8ZaHUuoX/vZHjs0761/MQrklCpDaQUYDNzBpzBf6EfzDe7V0ETgpBk801NJ5itkds4YZgwgXu54EIFmWNzEYzla48ByTaYlFgD7q3yxYdnnjWYAtFlkpv1nnQQlDTwBvJPX9SC9G1E/nyKaj/748ZejZOxOAYiwCxq2Gy8LKgSgFaKFbTOgwEzDLJNgceidzrK1zBokHqJepH3LOt4miH1Vptv8HP3qXupi2LpFjo4xeuoqBWDR49daUaJ31oF4lZRj/Zg0ULSlZ0ng8T/iFpR X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(346002)(396003)(376002)(136003)(366004)(39840400004)(451199021)(1076003)(6506007)(26005)(6512007)(36756003)(66574015)(83380400001)(38350700002)(86362001)(38100700002)(186003)(2616005)(8676002)(4326008)(41300700001)(44832011)(6916009)(478600001)(66946007)(66476007)(450100002)(2906002)(316002)(8936002)(5660300002)(6486002)(52116002)(66556008)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?blZQOXVPVFZPbUp6OGtUamVUeHUxTjR1bnovU2tvQzN3V1RXT01CTHQ5TUs3?= =?utf-8?B?WmRSMUZEY0JLVm1HN0xZYUxKOFk3ZkpZZk1VUlg5QVkxeGJsYlArT2RyV3ox?= =?utf-8?B?alVCV241WlMxZzFnMFNjSGNhVTVlNHVJWDAzekx6dndwbmR3S2IzOGd3MGRl?= =?utf-8?B?YW9GZ3B5VnJzWFJNK0JHRU8zMXdjcEFTTVpsREd6ejBVVUMzL1RWUXh2cHZs?= =?utf-8?B?d0xTMTNxSzlIUkNFSVVrbEFKN3E4c0xyRzlGU0JPV2tKL3hrZ1hxTHlmaEx5?= =?utf-8?B?TXdyYXlPTk5kTkVBallzc2FaamEvL0dSRXJJcGI3M1VaRzBJWk9jejlwTDVq?= =?utf-8?B?eVBzVkxxYmJWZ2VmT092Z0NmNy9HT1ZXYWVQYVBZUkl3ZTBRbmhQTUMxMXBr?= =?utf-8?B?cmRrbUx6L2pYT2ozZmIvbENHRFh2TzNmMG1oRzNiRWVTcjhFQVRxdHg4Q3Er?= =?utf-8?B?eHN6VW1KamsyWFJJOFV3VmtZOGcxQWkwNnBQMERveENYb3R5UFN4WEZQVzll?= =?utf-8?B?QitsaDloRC8xTW1WS0FDZUJHK1MvSEF6N0JuWVBZMGdOaHUvTmUvWU5HRVNH?= =?utf-8?B?R2VrQzlaNDBhSWY3RGlEanV0aTlTa1dhUVJvWHZYY1NUMldQOWxaWHNiVVFG?= =?utf-8?B?d1BMNi90SDY5dlVnbENEVWFsZkh5bUZNcEZheXRXNGdvOXgxS2lETkplbnZW?= =?utf-8?B?MUtkV2M0MUVSaElubmM5S1Z5eVhZMUxRZGxzaFFZa2FRM2ErclRUM21TUVJQ?= =?utf-8?B?Z0RITE04OGI3RFNOTlNBZnFqWStHNDNMcUdwWG1sNDd5ME5ZMTdzNk9JMzI1?= =?utf-8?B?NXV2VllzZ0pMSi83am1ZaHRiVFB0OGRuekk3RmJTcUQvWnlwOC9LUDJJbCtJ?= =?utf-8?B?cDBmTmtTZG9BTEpzOVBucWJlcGgrSjh1UllxL3M0ZUVDWHlPdE9peDFoT2ZE?= =?utf-8?B?ZUVONGRHOEFLSEdEL0dFOFB1RjNTZTAwdzBVdDdLZE1SNElXUXJJVUhCY3Qv?= =?utf-8?B?a0dxRjM3TnRKM09UQnVTZ1U1TTdIT3BpZXVoSHI0ZGs3ZytjeGh3K0FHbWVm?= =?utf-8?B?M21aalhHTDkwZk5zZ1lVK1NaR0tIbHRkR2w4L2xtVHVJajFvcG1FWU4zVFYx?= =?utf-8?B?M2d2cUhJMTh0UFIxdmJtbHo3NU80bnlpOUVnLzB3WFNkUDgrWXE0WWxkSmRy?= =?utf-8?B?UytmZVcwT2d0Yk9tRzd6ZklWeGNZWmZyS2JaQ2dNb09oSWxOalJ1WGFqd1VH?= =?utf-8?B?aUhqRnFGMUNVTVpPSHBPYXlmU2pkNDAxMFVEcitZeDZqb25FdlhQTXhmY2Fv?= =?utf-8?B?ZkhLRjRuamdIakhrdm9aOG1yVFBieGpNVCtRalJJcEtTTFdGQVllRkJGK2RD?= =?utf-8?B?WEVuZEFPeEdrazk3N2NsQ1JNZnFIZDFsSTZ2MFFHLzNpTE4vZyszc1Z3bTcy?= =?utf-8?B?QnFkNUFibVgwVllvZWl6am5za3ZnSmppQkhrTEhKeklHa0VDTlNNUE9adXVk?= =?utf-8?B?TndmVXhPRmhiOVYxR2crbnVJYjRjK3JvQ2VuR0FMSkF6M3NYY3B1V0V3MUxZ?= =?utf-8?B?Z3YwdDJVVitCZis0UHpvYWxxNlpTZGJwcHltdE9xS3NFemFYT1Nkai9mR0Uy?= =?utf-8?B?TnRDTWdydXNsWTlPQm1mOStQWjJweHgyY2Y3SDBjdWlWWFhVQzRERHRJUStt?= =?utf-8?B?QmgvNDZTRVFXZFBhOC9ZY0lVckFXTDRGVmRYUEt4MEZvNFdwM3BnWUJULzY0?= =?utf-8?B?bWU4SEUxdmJlOGN1MGpXUFZINk1Lb1RkSmtvMERFTFlXUVBYd0xBdWIwZGpU?= =?utf-8?B?U0VDRGRXdzhaZzErcTQvQmNrYXdUMWxYbjBVYmw1N2JsckwvYzlxSk5xcElo?= =?utf-8?B?MkJ0ZjRGNEhYYW03QkdEV3NZVUNOZGlHU1ZPUzNtU2FkZ0RKaXIweE1uTThI?= =?utf-8?B?ZmMxQXdpUy9rZUdkRzdjNWRXS3lYeUtlUUpteWhvT1poZldYV3NLU0JKbnJJ?= =?utf-8?B?a0tvbzZSbmgwMlhjL1dzN0ZGNE9wUXZWeVo1VnZId2Eybms4UXpsdTRVNTRy?= =?utf-8?B?eHEza1l2QVJDbFlPVEhHaGgzMDEzR3U5ajBNSEhEVTRWVUpOQ0NDN1U2Tkkr?= =?utf-8?B?UnVXK2NxT3BHd1N1LzdaR3I3Y0JIL3lmQkVQdFhqOUoxTjQwcWFqaGw5Q1Zm?= =?utf-8?B?Q1E9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01850548-f172-4534-976e-08db66fa9a4e X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2023 01:57:52.3276 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sR7tAlYCZtKs+4JlBqiEpD4kk2xa9zkpT6HRD1InXtisg7TEcd2l4pS2NetEwwY40u43JG5jFi85ZKJvqcxs7S7gEGXFXu6zE4oizMeC6cQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5453 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org The symbol '_abi_flower_extra_features' is in IMEM for NFP4000, but in EMU_CACHE for NFP3800 because which does not have IMEM. The original logic can't read symbol from EMU_CACHE, so the probe process will fail when we try to offload flows use NFP3800. Modify the related data structure and logics to support read symbol from EMU_CACHE. Fixes: c7e9729da6b5 ("net/nfp: support CPP") Cc: stable@dpdk.org Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_ethdev.c | 4 +- drivers/net/nfp/nfpcore/nfp_cpp.h | 7 +- drivers/net/nfp/nfpcore/nfp_cppcore.c | 51 +++++++--- drivers/net/nfp/nfpcore/nfp_rtsym.c | 132 ++++++++++++++++++++++++-- 4 files changed, 171 insertions(+), 23 deletions(-) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index f73bffc09b..e84d2ac82e 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -937,6 +937,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) int ret; int err = 0; uint64_t addr; + uint32_t cpp_id; struct nfp_cpp *cpp; enum nfp_app_fw_id app_fw_id; struct nfp_pf_dev *pf_dev; @@ -1036,7 +1037,8 @@ nfp_pf_init(struct rte_pci_device *pci_dev) goto pf_cleanup; } - pf_dev->hw_queues = nfp_cpp_map_area(pf_dev->cpp, 0, 0, + cpp_id = NFP_CPP_ISLAND_ID(0, NFP_CPP_ACTION_RW, 0, 0); + pf_dev->hw_queues = nfp_cpp_map_area(pf_dev->cpp, cpp_id, addr, NFP_QCP_QUEUE_AREA_SZ, &pf_dev->hwqueues_area); if (pf_dev->hw_queues == NULL) { diff --git a/drivers/net/nfp/nfpcore/nfp_cpp.h b/drivers/net/nfp/nfpcore/nfp_cpp.h index 2441012b95..8f87c09327 100644 --- a/drivers/net/nfp/nfpcore/nfp_cpp.h +++ b/drivers/net/nfp/nfpcore/nfp_cpp.h @@ -31,6 +31,9 @@ struct nfp_cpp { */ uint32_t imb_cat_table[16]; + /* MU access type bit offset */ + uint32_t mu_locality_lsb; + int driver_lock_needed; }; @@ -455,7 +458,7 @@ struct nfp_cpp_area *nfp_cpp_area_alloc_acquire(struct nfp_cpp *cpp, */ void nfp_cpp_area_release_free(struct nfp_cpp_area *area); -uint8_t *nfp_cpp_map_area(struct nfp_cpp *cpp, int domain, int target, +uint8_t *nfp_cpp_map_area(struct nfp_cpp *cpp, uint32_t cpp_id, uint64_t addr, unsigned long size, struct nfp_cpp_area **area); /* @@ -869,4 +872,6 @@ int nfp_cpp_mutex_unlock(struct nfp_cpp_mutex *mutex); */ int nfp_cpp_mutex_trylock(struct nfp_cpp_mutex *mutex); +uint32_t nfp_cpp_mu_locality_lsb(struct nfp_cpp *cpp); + #endif /* !__NFP_CPP_H__ */ diff --git a/drivers/net/nfp/nfpcore/nfp_cppcore.c b/drivers/net/nfp/nfpcore/nfp_cppcore.c index 681ec93b96..6daee313ce 100644 --- a/drivers/net/nfp/nfpcore/nfp_cppcore.c +++ b/drivers/net/nfp/nfpcore/nfp_cppcore.c @@ -118,6 +118,36 @@ nfp_cpp_area_name(struct nfp_cpp_area *cpp_area) return cpp_area->name; } +#define NFP_IMB_TGTADDRESSMODECFG_MODE_of(_x) (((_x) >> 13) & 0x7) +#define NFP_IMB_TGTADDRESSMODECFG_ADDRMODE RTE_BIT32(12) + +static int +nfp_cpp_set_mu_locality_lsb(struct nfp_cpp *cpp) +{ + int ret; + int mode; + int addr40; + uint32_t imbcppat; + + imbcppat = cpp->imb_cat_table[NFP_CPP_TARGET_MU]; + mode = NFP_IMB_TGTADDRESSMODECFG_MODE_of(imbcppat); + addr40 = imbcppat & NFP_IMB_TGTADDRESSMODECFG_ADDRMODE; + + ret = nfp_cppat_mu_locality_lsb(mode, addr40); + if (ret < 0) + return ret; + + cpp->mu_locality_lsb = ret; + + return 0; +} + +uint32_t +nfp_cpp_mu_locality_lsb(struct nfp_cpp *cpp) +{ + return cpp->mu_locality_lsb; +} + /* * nfp_cpp_area_alloc - allocate a new CPP area * @cpp: CPP handle @@ -142,10 +172,6 @@ nfp_cpp_area_alloc_with_name(struct nfp_cpp *cpp, uint32_t dest, if (cpp == NULL) return NULL; - /* CPP bus uses only a 40-bit address */ - if ((address + size) > (1ULL << 40)) - return NULL; - /* Remap from cpp_island to cpp_target */ err = nfp_target_cpp(dest, tmp64, &dest, &tmp64, cpp->imb_cat_table); if (err < 0) @@ -578,6 +604,13 @@ nfp_cpp_alloc(struct rte_pci_device *dev, int driver_lock_needed) } } + err = nfp_cpp_set_mu_locality_lsb(cpp); + if (err < 0) { + PMD_DRV_LOG(ERR, "Can't calculate MU locality bit offset"); + free(cpp); + return NULL; + } + return cpp; } @@ -809,8 +842,7 @@ __nfp_cpp_model_autodetect(struct nfp_cpp *cpp, uint32_t *model) /* * nfp_cpp_map_area() - Helper function to map an area * @cpp: NFP CPP handler - * @domain: CPP domain - * @target: CPP target + * @cpp_id: CPP ID * @addr: CPP address * @size: Size of the area * @area: Area handle (output) @@ -821,15 +853,12 @@ __nfp_cpp_model_autodetect(struct nfp_cpp *cpp, uint32_t *model) * Return: Pointer to memory mapped area or NULL */ uint8_t * -nfp_cpp_map_area(struct nfp_cpp *cpp, int domain, int target, uint64_t addr, +nfp_cpp_map_area(struct nfp_cpp *cpp, uint32_t cpp_id, uint64_t addr, unsigned long size, struct nfp_cpp_area **area) { uint8_t *res; - uint32_t dest; - - dest = NFP_CPP_ISLAND_ID(target, NFP_CPP_ACTION_RW, 0, domain); - *area = nfp_cpp_area_alloc_acquire(cpp, dest, addr, size); + *area = nfp_cpp_area_alloc_acquire(cpp, cpp_id, addr, size); if (*area == NULL) goto err_eio; diff --git a/drivers/net/nfp/nfpcore/nfp_rtsym.c b/drivers/net/nfp/nfpcore/nfp_rtsym.c index 9713605580..343b0d0bcf 100644 --- a/drivers/net/nfp/nfpcore/nfp_rtsym.c +++ b/drivers/net/nfp/nfpcore/nfp_rtsym.c @@ -211,6 +211,113 @@ nfp_rtsym_lookup(struct nfp_rtsym_table *rtbl, const char *name) return NULL; } +static uint64_t +nfp_rtsym_size(const struct nfp_rtsym *sym) +{ + switch (sym->type) { + case NFP_RTSYM_TYPE_NONE: + PMD_DRV_LOG(ERR, "rtsym '%s': type NONE", sym->name); + return 0; + case NFP_RTSYM_TYPE_OBJECT: /* Fall through */ + case NFP_RTSYM_TYPE_FUNCTION: + return sym->size; + case NFP_RTSYM_TYPE_ABS: + return sizeof(uint64_t); + default: + PMD_DRV_LOG(ERR, "rtsym '%s': unknown type: %d", sym->name, sym->type); + return 0; + } +} + +static int +nfp_rtsym_to_dest(struct nfp_cpp *cpp, + const struct nfp_rtsym *sym, + uint8_t action, + uint8_t token, + uint64_t offset, + uint32_t *cpp_id, + uint64_t *addr) +{ + if (sym->type != NFP_RTSYM_TYPE_OBJECT) { + PMD_DRV_LOG(ERR, "rtsym '%s': direct access to non-object rtsym", + sym->name); + return -EINVAL; + } + + *addr = sym->addr + offset; + + if (sym->target >= 0) { + *cpp_id = NFP_CPP_ISLAND_ID(sym->target, action, token, sym->domain); + } else if (sym->target == NFP_RTSYM_TARGET_EMU_CACHE) { + int locality_off = nfp_cpp_mu_locality_lsb(cpp); + + *addr &= ~(NFP_MU_ADDR_ACCESS_TYPE_MASK << locality_off); + *addr |= NFP_MU_ADDR_ACCESS_TYPE_DIRECT << locality_off; + + *cpp_id = NFP_CPP_ISLAND_ID(NFP_CPP_TARGET_MU, action, token, + sym->domain); + } else { + PMD_DRV_LOG(ERR, "rtsym '%s': unhandled target encoding: %d", + sym->name, sym->target); + return -EINVAL; + } + + return 0; +} + +static int +nfp_rtsym_readl(struct nfp_cpp *cpp, + const struct nfp_rtsym *sym, + uint8_t action, + uint8_t token, + uint64_t offset, + uint32_t *value) +{ + int ret; + uint64_t addr; + uint32_t cpp_id; + + if (offset + 4 > nfp_rtsym_size(sym)) { + PMD_DRV_LOG(ERR, "rtsym '%s': readl out of bounds", sym->name); + return -ENXIO; + } + + ret = nfp_rtsym_to_dest(cpp, sym, action, token, offset, &cpp_id, &addr); + if (ret != 0) + return ret; + + return nfp_cpp_readl(cpp, cpp_id, addr, value); +} + +static int +nfp_rtsym_readq(struct nfp_cpp *cpp, + const struct nfp_rtsym *sym, + uint8_t action, + uint8_t token, + uint64_t offset, + uint64_t *value) +{ + int ret; + uint64_t addr; + uint32_t cpp_id; + + if (offset + 8 > nfp_rtsym_size(sym)) { + PMD_DRV_LOG(ERR, "rtsym '%s': readq out of bounds", sym->name); + return -ENXIO; + } + + if (sym->type == NFP_RTSYM_TYPE_ABS) { + *value = sym->addr; + return 0; + } + + ret = nfp_rtsym_to_dest(cpp, sym, action, token, offset, &cpp_id, &addr); + if (ret != 0) + return ret; + + return nfp_cpp_readq(cpp, cpp_id, addr, value); +} + /* * nfp_rtsym_read_le() - Read a simple unsigned scalar value from symbol * @rtbl: NFP RTsym table @@ -227,7 +334,7 @@ uint64_t nfp_rtsym_read_le(struct nfp_rtsym_table *rtbl, const char *name, int *error) { const struct nfp_rtsym *sym; - uint32_t val32, id; + uint32_t val32; uint64_t val; int err; @@ -237,17 +344,13 @@ nfp_rtsym_read_le(struct nfp_rtsym_table *rtbl, const char *name, int *error) goto exit; } - id = NFP_CPP_ISLAND_ID(sym->target, NFP_CPP_ACTION_RW, 0, sym->domain); - - PMD_DRV_LOG(DEBUG, "Reading symbol %s with size %" PRIu64 " at %" PRIx64 "", - name, sym->size, sym->addr); switch (sym->size) { case 4: - err = nfp_cpp_readl(rtbl->cpp, id, sym->addr, &val32); + err = nfp_rtsym_readl(rtbl->cpp, sym, NFP_CPP_ACTION_RW, 0, 0, &val32); val = val32; break; case 8: - err = nfp_cpp_readq(rtbl->cpp, id, sym->addr, &val); + err = nfp_rtsym_readq(rtbl->cpp, sym, NFP_CPP_ACTION_RW, 0, 0, &val); break; default: PMD_DRV_LOG(ERR, "rtsym '%s' unsupported size: %" PRId64, @@ -272,8 +375,11 @@ uint8_t * nfp_rtsym_map(struct nfp_rtsym_table *rtbl, const char *name, unsigned int min_size, struct nfp_cpp_area **area) { - const struct nfp_rtsym *sym; + int ret; uint8_t *mem; + uint64_t addr; + uint32_t cpp_id; + const struct nfp_rtsym *sym; PMD_DRV_LOG(DEBUG, "mapping symbol %s", name); sym = nfp_rtsym_lookup(rtbl, name); @@ -282,14 +388,20 @@ nfp_rtsym_map(struct nfp_rtsym_table *rtbl, const char *name, return NULL; } + ret = nfp_rtsym_to_dest(rtbl->cpp, sym, NFP_CPP_ACTION_RW, 0, 0, + &cpp_id, &addr); + if (ret != 0) { + PMD_DRV_LOG(ERR, "rtsym '%s': mapping failed", name); + return NULL; + } + if (sym->size < min_size) { PMD_DRV_LOG(ERR, "Symbol %s too small (%" PRIu64 " < %u)", name, sym->size, min_size); return NULL; } - mem = nfp_cpp_map_area(rtbl->cpp, sym->domain, sym->target, sym->addr, - sym->size, area); + mem = nfp_cpp_map_area(rtbl->cpp, cpp_id, addr, sym->size, area); if (mem == NULL) { PMD_INIT_LOG(ERR, "Failed to map symbol %s", name); return NULL; -- 2.39.1