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 E982D45BB4; Wed, 23 Oct 2024 19:05:28 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5FD3842FF1; Wed, 23 Oct 2024 19:02:00 +0200 (CEST) Received: from egress-ip42b.ess.de.barracuda.com (egress-ip42b.ess.de.barracuda.com [18.185.115.246]) by mails.dpdk.org (Postfix) with ESMTP id 47CF042F63 for ; Wed, 23 Oct 2024 19:01:21 +0200 (CEST) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03lp2173.outbound.protection.outlook.com [104.47.51.173]) by mx-outbound21-18.eu-central-1b.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 23 Oct 2024 17:01:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r70wFbThdZEOavhYJjbmg8AtaLH/wPcpjNl4nhsNLUKGdwOkyXROy8j4pntpA6ITebTpJ0I/cBsnOFbcJsE/8njwa+PZ/b7Se71eN3MsoGJbOLxKVebkP58xlaQdr4/VibETLPkx+Hnd/0xq3kI0qObEH8bR0MSsiDiJp+WsO0mw7C58MquvmzWRSoMBvgCsIQgHd6Ney55YmDsL+/p7pnNDXzYR/JLPbkdWfiomEbiszYnBOgq7S+TMU5S2tddNDFzfY6w7UcLPma7+buUvyz/PZe4UI+DBc86mlmMAw+2eJNDPn/N1IsQrfdrG8YemDLsZW6r+abXZlIxgIWCgCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=v6vIxbABequO1PYH1M/bwB7UCd/excfHnGZZ9mLs5XM=; b=HDjP7QwBbzBdfddyIUVXImVMrzz8teYKgS30sfr7mzlJqhbp/kTpIQRWhup2jSbnQ5T3K65Ph84cyimnwh+a1EZJSy47gyP7JpkqApmDi/h9a1BoGktkHS0TrfRkRSg4q4+IGNVQVV6hsx0n5bx5vf2cznNUReNhJCEqapzLH+H4mtJD4OZfNdFL8euIKyvp3Iy+QkoJ6UiLSXap3D8Q+7u1uoKq4YxPWx8v7PaX1iBk0Wqel4p/fAWSofv6Tke5w1CYVzwKe6gqa4qi+o/u7Dtrw8ag8dbFWTKTlEWYoT53aRNWpB74yM0+e+irqhtbnLtdGZp4xlZzn8vCs0bbSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 178.72.21.4) smtp.rcpttodomain=dpdk.org smtp.mailfrom=napatech.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=napatech.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=napatech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v6vIxbABequO1PYH1M/bwB7UCd/excfHnGZZ9mLs5XM=; b=Xb2BNBE2Twr5XkJwM3pzHwIbMMnaPxkR/lSddk5OpYVkdFXbmDJmmJcfL8DcDvi4OQ/Syf56qhg79oonhnTAQfDEM+SVV/VPv6vF+QkBU6Xr0KxyHRbb8jYhNDTNxw6V/9fW248p1b8eYOEOIEynvU6MDNXxy5O6+KtVZLWyupM= Received: from DU7PR01CA0018.eurprd01.prod.exchangelabs.com (2603:10a6:10:50f::12) by DU4P190MB2221.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:56e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.16; Wed, 23 Oct 2024 17:01:17 +0000 Received: from DB5PEPF00014B9E.eurprd02.prod.outlook.com (2603:10a6:10:50f:cafe::b7) by DU7PR01CA0018.outlook.office365.com (2603:10a6:10:50f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.16 via Frontend Transport; Wed, 23 Oct 2024 17:01:17 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 178.72.21.4) smtp.mailfrom=napatech.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=napatech.com; Received-SPF: Fail (protection.outlook.com: domain of napatech.com does not designate 178.72.21.4 as permitted sender) receiver=protection.outlook.com; client-ip=178.72.21.4; helo=localhost.localdomain; Received: from localhost.localdomain (178.72.21.4) by DB5PEPF00014B9E.mail.protection.outlook.com (10.167.8.171) with Microsoft SMTP Server id 15.20.8093.14 via Frontend Transport; Wed, 23 Oct 2024 17:01:17 +0000 From: Serhii Iliushyk To: dev@dpdk.org Cc: mko-plv@napatech.com, sil-plv@napatech.com, ckm@napatech.com, andrew.rybchenko@oktetlabs.ru, ferruh.yigit@amd.com Subject: [PATCH v3 39/73] net/ntnic: add GMF (Generic MAC Feeder) module Date: Wed, 23 Oct 2024 18:59:47 +0200 Message-ID: <20241023170032.314155-40-sil-plv@napatech.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20241023170032.314155-1-sil-plv@napatech.com> References: <20241021210527.2075431-1-sil-plv@napatech.com> <20241023170032.314155-1-sil-plv@napatech.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB5PEPF00014B9E:EE_|DU4P190MB2221:EE_ Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: ccad79a9-57ce-446f-dadb-08dcf3844fa5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|82310400026|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?q7UBjInbolm0YJMlgSGJIXtT6N+KkIq+mSKCbcDekfxD0OvVLhmYo2tIMPwy?= =?us-ascii?Q?rgFyfVqkdvLppayE4VPtLdIhOobigp95XvmejBpP/UY00DlXoL45l/PnINtx?= =?us-ascii?Q?x6dIE7V2TQsKv7Ogxb3+xxobhhkxUNRhx+rSneGdPhu/Ra4RNIZKJhn9HLl7?= =?us-ascii?Q?MH31VZu1VoI7VNyNIGWJAm9XgAww0MnaQtp4vI1AgecgX5XWKoKMOmz7qoHE?= =?us-ascii?Q?IGe1WCTHFpaSWPDUfF+Z/q8HVIGuXoX0FaVIU9xHo1VhzKzH5XPR6gg8FQmK?= =?us-ascii?Q?tTzzShjoF5uta7FsnBi7//n/a4Cc9BoFrH/gBEWAT5vQH9DCf1ageb1f9zeF?= =?us-ascii?Q?NRMK/Oiv7VPU6IInZOQPznFHOA2pEkUefNqrGDXWJrWzEKElFueEuBwc75lH?= =?us-ascii?Q?Ep0lks/thGiethwKf5Ipo01QM3DY1z8V3uqZXmYJxyF9Crva4lKIUjiaLHGe?= =?us-ascii?Q?4vIQD113Ric76JNq+soRtulkwCc5URzanoysIG+Q+4BYZctt6F/JZ3ezyllG?= =?us-ascii?Q?6jwj58ra+gx0yBWB22BNXaR6nVDQl9FgOVmkl2z6S7X+PeUFV8DQQTbpSPtC?= =?us-ascii?Q?IgxJ+K1PNPoQ0cyeH/H7lrB7joBp0UGIocbl4SVvWWG1WSeUtPA9B+KSeP0T?= =?us-ascii?Q?7LQ90CD20fgdQbRUuOp121zkQ9g9nQRU0LkcKN6YnRVo+F3Qwp7h76vt7SAM?= =?us-ascii?Q?EUUDyhhWSyFO/cgmLAZ67MgCsE1ZTS8iIPj5+h6KAktxXuAoTl9QTz34WERb?= =?us-ascii?Q?FwSN7QOLx8ppOwSHQe+iHMqxk3pCPAk1JLdGjUOUQ14IbPvh38xLFycQ/bKu?= =?us-ascii?Q?O6Z7dCMHAEKLXm0mgG+QUKuWvNiE5edRD5Un1Tbly/BIxz5EvcEl1swZSSFA?= =?us-ascii?Q?43voN8ODp3VOCUJl6Cu6kxjTqaEINL3UKWerRfi/kVp5d3ZiYVzE/5A5Vp/B?= =?us-ascii?Q?TILZ7yxi5FsfxfvBVnoz/LoWo/wl9ADSoxAB8Ct3YNQS41a7HAYgIJc6RF3u?= =?us-ascii?Q?+3vjZ59L5ivOxEC4zZcwDBo6/9rc5D5EZygVm29fMcU7isWK23+n2sCWghcD?= =?us-ascii?Q?IhkLkAYiIEQdt9TuuHc0ApXeRZtCTkGywOjI54SdNOAEA9T8txMHiWNUCCV1?= =?us-ascii?Q?uyHm9OWqkey9XRThjob8sWmgAm4K7gXMGaA7itReB19tdwf7E4Ik9iM8z5D5?= =?us-ascii?Q?pjrkrA3zpXmSEkIxCKrbLsT1HzwtbPtatpJfW3fFeKyKKny6T0OA4AjONw1p?= =?us-ascii?Q?Gfpig6R9Qw6ipOwh46/I7F6FcvTYWhORqhc0pUkKPrQAXNc4+e9DTh2RUznt?= =?us-ascii?Q?tHpBVsEhQwsEvuOu44ZxW3LX57HGV1Fd4iwetSRpKjeNw3IV/KjCN2SWfqcl?= =?us-ascii?Q?2e2xqCiZ3lsJNU5FMZ8QmUheZ/8sqnp7r5Pz7Sql1T9Zs7TH6w=3D=3D?= X-Forefront-Antispam-Report: CIP:178.72.21.4; CTRY:DK; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:localhost.localdomain; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700013)(82310400026)(1800799024)(376014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: RW7tMrTFsBwKBf4MWj5ft1ChWMalpH58m+Li0dXm2CDbMSJbyQk7/DviJn5yjf7rLZ0Hil5ZcIkV5nqnCfMyq1OJ3YlVCAjETAlNiVngCDv0E+8c6uXSoS1BLH84zoRimdevHJVsGT5sqf6m+bJH4H78doc64f9lkRY93bcvSUWP6bhcQqJlx137lvm9r9Vfjff5BQoWLZ1OIw6tfyF6Zu6iXmEh8xAozLUGC5Mr8WWQANCEfEvUfNS5ynHF3DrqB2/cTwx1MP/jnH7n+f5QD9DjlNzVzInTZYkrGSfmgRfQZT1NLEg2wD34+kkTBiGsQb/bboLwfQf/0PEoOVaR7Wk/HdYqSYgQJH271irzLrHu2VKRlq8wct94ImX0bNOxqxUWR/nMp2jGO3bvE7060c4xnaLx9oCVnug68dpAf0M41AIRUup9GNT65jq4AgpJ2AU0rECUVdhjzrA+5m7vzzVcktew4aJcvEmAQxcMGbZHbRhNj7PudYBudanht3QAgW1ZNSzwZpyMnddpfr5xgnWw0L9wyX6pNwKqCYbPGWqRPXyTEqTEQO430rP7vBHHJkb2rXHjtZwvr+jSU9Ue7gzU82QvxznNt6s2t/7zEW2ZEa+ikLEqr8mIf1huwVmrJmjF1B0AlW6HIepuVC/eHX9B5k2x7L1fR9vP8fI3jLI= X-OriginatorOrg: napatech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2024 17:01:17.4926 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ccad79a9-57ce-446f-dadb-08dcf3844fa5 X-MS-Exchange-CrossTenant-Id: c4540d0b-728a-4233-9da5-9ea30c7ec3ed X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c4540d0b-728a-4233-9da5-9ea30c7ec3ed; Ip=[178.72.21.4]; Helo=[localhost.localdomain] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B9E.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4P190MB2221 X-BESS-ID: 1729702880-305394-16201-13669-1 X-BESS-VER: 2019.1_20241018.1852 X-BESS-Apparent-Source-IP: 104.47.51.173 X-BESS-Parts: H4sIAAAAAAACA4uuVkqtKFGyUioBkjpK+cVKVpaGBgZAVgZQ0MLIyDjFIinFMj XNMC0l0dDMMC3JwMgw1dLCNNHcItlQqTYWANtTvf9BAAAA X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.259925 [from cloudscan22-219.eu-central-1b.ess.aws.cudaops.com] Rule breakdown below pts rule name description ---- ---------------------- -------------------------------- 0.00 BSF_BESS_OUTBOUND META: BESS Outbound X-BESS-Outbound-Spam-Status: SCORE=0.00 using account:ESS113687 scores of KILL_LEVEL=7.0 tests=BSF_BESS_OUTBOUND X-BESS-BRTS-Status: 1 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The Generic MAC Feeder module provides a way to feed data to the MAC modules directly from the FPGA, rather than from host or physical ports. The use case for this is as a test tool and is not used by NTNIC. This module is requireqd for correct initialization Signed-off-by: Serhii Iliushyk --- .../link_mgmt/link_100g/nt4ga_link_100g.c | 8 ++ drivers/net/ntnic/meson.build | 1 + .../net/ntnic/nthw/core/include/nthw_core.h | 1 + .../net/ntnic/nthw/core/include/nthw_gmf.h | 64 +++++++++ drivers/net/ntnic/nthw/core/nthw_gmf.c | 133 ++++++++++++++++++ 5 files changed, 207 insertions(+) create mode 100644 drivers/net/ntnic/nthw/core/include/nthw_gmf.h create mode 100644 drivers/net/ntnic/nthw/core/nthw_gmf.c diff --git a/drivers/net/ntnic/link_mgmt/link_100g/nt4ga_link_100g.c b/drivers/net/ntnic/link_mgmt/link_100g/nt4ga_link_100g.c index 8964458b47..d8e0cad7cd 100644 --- a/drivers/net/ntnic/link_mgmt/link_100g/nt4ga_link_100g.c +++ b/drivers/net/ntnic/link_mgmt/link_100g/nt4ga_link_100g.c @@ -404,6 +404,14 @@ static int _port_init(adapter_info_t *drv, nthw_fpga_t *fpga, int port) _enable_tx(drv, mac_pcs); _reset_rx(drv, mac_pcs); + /* 2.2) Nt4gaPort::setup() */ + if (nthw_gmf_init(NULL, fpga, port) == 0) { + nthw_gmf_t gmf; + + if (nthw_gmf_init(&gmf, fpga, port) == 0) + nthw_gmf_set_enable(&gmf, true); + } + /* Phase 3. Link state machine steps */ /* 3.1) Create NIM, ::createNim() */ diff --git a/drivers/net/ntnic/meson.build b/drivers/net/ntnic/meson.build index d7e6d05556..92167d24e4 100644 --- a/drivers/net/ntnic/meson.build +++ b/drivers/net/ntnic/meson.build @@ -38,6 +38,7 @@ sources = files( 'nthw/core/nt200a0x/reset/nthw_fpga_rst9563.c', 'nthw/core/nt200a0x/reset/nthw_fpga_rst_nt200a0x.c', 'nthw/core/nthw_fpga.c', + 'nthw/core/nthw_gmf.c', 'nthw/core/nthw_gpio_phy.c', 'nthw/core/nthw_hif.c', 'nthw/core/nthw_i2cm.c', diff --git a/drivers/net/ntnic/nthw/core/include/nthw_core.h b/drivers/net/ntnic/nthw/core/include/nthw_core.h index fe32891712..4073f9632c 100644 --- a/drivers/net/ntnic/nthw/core/include/nthw_core.h +++ b/drivers/net/ntnic/nthw/core/include/nthw_core.h @@ -17,6 +17,7 @@ #include "nthw_iic.h" #include "nthw_i2cm.h" +#include "nthw_gmf.h" #include "nthw_gpio_phy.h" #include "nthw_mac_pcs.h" #include "nthw_sdc.h" diff --git a/drivers/net/ntnic/nthw/core/include/nthw_gmf.h b/drivers/net/ntnic/nthw/core/include/nthw_gmf.h new file mode 100644 index 0000000000..cc5be85154 --- /dev/null +++ b/drivers/net/ntnic/nthw/core/include/nthw_gmf.h @@ -0,0 +1,64 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2023 Napatech A/S + */ + +#ifndef __NTHW_GMF_H__ +#define __NTHW_GMF_H__ + +struct nthw_gmf { + nthw_fpga_t *mp_fpga; + nthw_module_t *mp_mod_gmf; + int mn_instance; + + nthw_register_t *mp_ctrl; + nthw_field_t *mp_ctrl_enable; + nthw_field_t *mp_ctrl_ifg_enable; + nthw_field_t *mp_ctrl_ifg_tx_now_always; + nthw_field_t *mp_ctrl_ifg_tx_on_ts_always; + nthw_field_t *mp_ctrl_ifg_tx_on_ts_adjust_on_set_clock; + nthw_field_t *mp_ctrl_ifg_auto_adjust_enable; + nthw_field_t *mp_ctrl_ts_inject_always; + nthw_field_t *mp_ctrl_fcs_always; + + nthw_register_t *mp_speed; + nthw_field_t *mp_speed_ifg_speed; + + nthw_register_t *mp_ifg_clock_delta; + nthw_field_t *mp_ifg_clock_delta_delta; + + nthw_register_t *mp_ifg_clock_delta_adjust; + nthw_field_t *mp_ifg_clock_delta_adjust_delta; + + nthw_register_t *mp_ifg_max_adjust_slack; + nthw_field_t *mp_ifg_max_adjust_slack_slack; + + nthw_register_t *mp_debug_lane_marker; + nthw_field_t *mp_debug_lane_marker_compensation; + + nthw_register_t *mp_stat_sticky; + nthw_field_t *mp_stat_sticky_data_underflowed; + nthw_field_t *mp_stat_sticky_ifg_adjusted; + + nthw_register_t *mp_stat_next_pkt; + nthw_field_t *mp_stat_next_pkt_ns; + + nthw_register_t *mp_stat_max_delayed_pkt; + nthw_field_t *mp_stat_max_delayed_pkt_ns; + + nthw_register_t *mp_ts_inject; + nthw_field_t *mp_ts_inject_offset; + nthw_field_t *mp_ts_inject_pos; + int mn_param_gmf_ifg_speed_mul; + int mn_param_gmf_ifg_speed_div; + + bool m_administrative_block; /* Used to enforce license expiry */ +}; + +typedef struct nthw_gmf nthw_gmf_t; + +int nthw_gmf_init(nthw_gmf_t *p, nthw_fpga_t *p_fpga, int n_instance); + +void nthw_gmf_set_enable(nthw_gmf_t *p, bool enable); + +#endif /* __NTHW_GMF_H__ */ diff --git a/drivers/net/ntnic/nthw/core/nthw_gmf.c b/drivers/net/ntnic/nthw/core/nthw_gmf.c new file mode 100644 index 0000000000..16a4c288bd --- /dev/null +++ b/drivers/net/ntnic/nthw/core/nthw_gmf.c @@ -0,0 +1,133 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2023 Napatech A/S + */ + +#include +#include +#include "ntlog.h" + +#include "nthw_drv.h" +#include "nthw_register.h" + +#include "nthw_gmf.h" + +int nthw_gmf_init(nthw_gmf_t *p, nthw_fpga_t *p_fpga, int n_instance) +{ + nthw_module_t *mod = nthw_fpga_query_module(p_fpga, MOD_GMF, n_instance); + + if (p == NULL) + return mod == NULL ? -1 : 0; + + if (mod == NULL) { + NT_LOG(ERR, NTHW, "%s: GMF %d: no such instance", + p_fpga->p_fpga_info->mp_adapter_id_str, n_instance); + return -1; + } + + p->mp_fpga = p_fpga; + p->mn_instance = n_instance; + p->mp_mod_gmf = mod; + + p->mp_ctrl = nthw_module_get_register(p->mp_mod_gmf, GMF_CTRL); + p->mp_ctrl_enable = nthw_register_get_field(p->mp_ctrl, GMF_CTRL_ENABLE); + p->mp_ctrl_ifg_enable = nthw_register_get_field(p->mp_ctrl, GMF_CTRL_IFG_ENABLE); + p->mp_ctrl_ifg_auto_adjust_enable = + nthw_register_get_field(p->mp_ctrl, GMF_CTRL_IFG_AUTO_ADJUST_ENABLE); + p->mp_ctrl_ts_inject_always = + nthw_register_query_field(p->mp_ctrl, GMF_CTRL_TS_INJECT_ALWAYS); + p->mp_ctrl_fcs_always = nthw_register_query_field(p->mp_ctrl, GMF_CTRL_FCS_ALWAYS); + + p->mp_speed = nthw_module_get_register(p->mp_mod_gmf, GMF_SPEED); + p->mp_speed_ifg_speed = nthw_register_get_field(p->mp_speed, GMF_SPEED_IFG_SPEED); + + p->mp_ifg_clock_delta = nthw_module_get_register(p->mp_mod_gmf, GMF_IFG_SET_CLOCK_DELTA); + p->mp_ifg_clock_delta_delta = + nthw_register_get_field(p->mp_ifg_clock_delta, GMF_IFG_SET_CLOCK_DELTA_DELTA); + + p->mp_ifg_max_adjust_slack = + nthw_module_get_register(p->mp_mod_gmf, GMF_IFG_MAX_ADJUST_SLACK); + p->mp_ifg_max_adjust_slack_slack = nthw_register_get_field(p->mp_ifg_max_adjust_slack, + GMF_IFG_MAX_ADJUST_SLACK_SLACK); + + p->mp_debug_lane_marker = nthw_module_get_register(p->mp_mod_gmf, GMF_DEBUG_LANE_MARKER); + p->mp_debug_lane_marker_compensation = + nthw_register_get_field(p->mp_debug_lane_marker, + GMF_DEBUG_LANE_MARKER_COMPENSATION); + + p->mp_stat_sticky = nthw_module_get_register(p->mp_mod_gmf, GMF_STAT_STICKY); + p->mp_stat_sticky_data_underflowed = + nthw_register_get_field(p->mp_stat_sticky, GMF_STAT_STICKY_DATA_UNDERFLOWED); + p->mp_stat_sticky_ifg_adjusted = + nthw_register_get_field(p->mp_stat_sticky, GMF_STAT_STICKY_IFG_ADJUSTED); + + p->mn_param_gmf_ifg_speed_mul = + nthw_fpga_get_product_param(p_fpga, NT_GMF_IFG_SPEED_MUL, 1); + p->mn_param_gmf_ifg_speed_div = + nthw_fpga_get_product_param(p_fpga, NT_GMF_IFG_SPEED_DIV, 1); + + p->m_administrative_block = false; + + p->mp_stat_next_pkt = nthw_module_query_register(p->mp_mod_gmf, GMF_STAT_NEXT_PKT); + + if (p->mp_stat_next_pkt) { + p->mp_stat_next_pkt_ns = + nthw_register_query_field(p->mp_stat_next_pkt, GMF_STAT_NEXT_PKT_NS); + + } else { + p->mp_stat_next_pkt_ns = NULL; + } + + p->mp_stat_max_delayed_pkt = + nthw_module_query_register(p->mp_mod_gmf, GMF_STAT_MAX_DELAYED_PKT); + + if (p->mp_stat_max_delayed_pkt) { + p->mp_stat_max_delayed_pkt_ns = + nthw_register_query_field(p->mp_stat_max_delayed_pkt, + GMF_STAT_MAX_DELAYED_PKT_NS); + + } else { + p->mp_stat_max_delayed_pkt_ns = NULL; + } + + p->mp_ctrl_ifg_tx_now_always = + nthw_register_query_field(p->mp_ctrl, GMF_CTRL_IFG_TX_NOW_ALWAYS); + p->mp_ctrl_ifg_tx_on_ts_always = + nthw_register_query_field(p->mp_ctrl, GMF_CTRL_IFG_TX_ON_TS_ALWAYS); + + p->mp_ctrl_ifg_tx_on_ts_adjust_on_set_clock = + nthw_register_query_field(p->mp_ctrl, GMF_CTRL_IFG_TX_ON_TS_ADJUST_ON_SET_CLOCK); + + p->mp_ifg_clock_delta_adjust = + nthw_module_query_register(p->mp_mod_gmf, GMF_IFG_SET_CLOCK_DELTA_ADJUST); + + if (p->mp_ifg_clock_delta_adjust) { + p->mp_ifg_clock_delta_adjust_delta = + nthw_register_query_field(p->mp_ifg_clock_delta_adjust, + GMF_IFG_SET_CLOCK_DELTA_ADJUST_DELTA); + + } else { + p->mp_ifg_clock_delta_adjust_delta = NULL; + } + + p->mp_ts_inject = nthw_module_query_register(p->mp_mod_gmf, GMF_TS_INJECT); + + if (p->mp_ts_inject) { + p->mp_ts_inject_offset = + nthw_register_query_field(p->mp_ts_inject, GMF_TS_INJECT_OFFSET); + p->mp_ts_inject_pos = + nthw_register_query_field(p->mp_ts_inject, GMF_TS_INJECT_POS); + + } else { + p->mp_ts_inject_offset = NULL; + p->mp_ts_inject_pos = NULL; + } + + return 0; +} + +void nthw_gmf_set_enable(nthw_gmf_t *p, bool enable) +{ + if (!p->m_administrative_block) + nthw_field_set_val_flush32(p->mp_ctrl_enable, enable ? 1 : 0); +} -- 2.45.0