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 7167045A79; Tue, 1 Oct 2024 13:05:16 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EB0AB40A87; Tue, 1 Oct 2024 13:04:03 +0200 (CEST) Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11011021.outbound.protection.outlook.com [52.101.65.21]) by mails.dpdk.org (Postfix) with ESMTP id 380F7406BC for ; Tue, 1 Oct 2024 13:03:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Nys1YR5dzV8N8Fp9XBqEvVaJX5/8OKEG2OzakPCzZslLJWANbcSmguETtEJ/+l7V7gK07ToZxW2+mSghOFyeknyTkrCEGYQ7rUl4crWV7X1WmuB3igyWPuK+DFTxH70eWRydg0565At3PPF3XlfqffoKy+BFXWTcyv3F2e39YfNJOtnKLfd4qnMmoTUJbI5ERNgsk7tXUKAKLHp095VnaSnmoZTAE0UAVGvgW1hiW73qGIILcEJLPBvLPbtdbVv1MK49poch3c1/Kbc91wXadjU+CGlwjFJlozYx+YWn/z4bVMQ5o4wG/lltXNEVVHhV5o1u+dd+4EbaaWi4Snm35g== 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=OXzG5G8sRtPuMnErx25Yg7WupGBfkwvoKjMEppumXiM=; b=k6mtY3gCKJlhDWTTsEh3axbRvJSaxx5duR5mJthZv9dTPmoRwfS+pPl7GgP7p410CZtsVW6WEYS+M/4U+sKiQRww70guBLD0YG0mzvrhqPUHoEExM5heJo57cZf/fJNaOJHrLAnLhXQ6AmkB3yTn17fXj8b8GK7V8zZ5XHN9rPDqn85fdYkmhsW7tQniG/A5JhEVXhFM17HsyKLi8wwRiTTOi7fFnCAY6YJM6JWsl4IIzoo1N5UEmLqEx3z/j9ClrJXJ64hADeCX9FQkkMLkoUKfn0RdcKT9dLo0XQIxJBKog/CzX2juY1ZadXDf1OyQfoO45AcUw8V9KEaVrkONeg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OXzG5G8sRtPuMnErx25Yg7WupGBfkwvoKjMEppumXiM=; b=QkwA8zk+Bxick0qs9Y5apBQ0GzRE0Lo5L3e9JW/VuuImPVyc9kjoUU8LiyZ0tQml4nnp53ooYoACHlqSY+eCXAhW4UnT+9t2FXY1dgaTq71cUklpuDOiria+jqX+SrX/S+6qKNj8RXkRC8EU8CHOzUdfP1+4koRli7hFCu4XxGUvAFdO4qPwZnYxhwNJuwZFfQgAZ584BF3kuDz2KHuXaaxJgs+S3TJ+z/5GKvJvkCkVfBaeKemNtyLDJKn36hp1+dg7NAYxsJSrzr+G/LvuFvkoRrNWgdNy+bLX2s9VaCEm81ji7IPecFAJ/Uqp4xYSfLHC1JhCajNBDOWSJbMHHw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9328.eurprd04.prod.outlook.com (2603:10a6:102:2b6::15) by PAXPR04MB8702.eurprd04.prod.outlook.com (2603:10a6:102:21d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.27; Tue, 1 Oct 2024 11:03:57 +0000 Received: from PAXPR04MB9328.eurprd04.prod.outlook.com ([fe80::367:d59:375:fb87]) by PAXPR04MB9328.eurprd04.prod.outlook.com ([fe80::367:d59:375:fb87%3]) with mapi id 15.20.8005.026; Tue, 1 Oct 2024 11:03:57 +0000 From: Hemant Agrawal To: dev@dpdk.org Cc: ferruh.yigit@amd.com, Vanshika Shukla Subject: [PATCH v5 10/18] net/dpaa: support IEEE 1588 PTP Date: Tue, 1 Oct 2024 16:33:17 +0530 Message-Id: <20241001110325.4173762-11-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20241001110325.4173762-1-hemant.agrawal@nxp.com> References: <20240930121525.3452847-1-hemant.agrawal@nxp.com> <20241001110325.4173762-1-hemant.agrawal@nxp.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SG2PR02CA0086.apcprd02.prod.outlook.com (2603:1096:4:90::26) To PAXPR04MB9328.eurprd04.prod.outlook.com (2603:10a6:102:2b6::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9328:EE_|PAXPR04MB8702:EE_ X-MS-Office365-Filtering-Correlation-Id: 28e13cba-3390-4fc7-3b56-08dce208bf12 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|376014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/ROioU0+3YjjCR3bEAv0T9xA483u7ya4ihCPQ7ICYW3xYunINKAIdQHcL7L6?= =?us-ascii?Q?cHExUE5XN1KhJhrb6brOB10tvcjKLIjSadbN89Hwkd8gkoDAi88tBXaVEBlt?= =?us-ascii?Q?7h6/d3r3CQ8UxFOgaLZvPzaEf5BfHf18s1+wlKM6EHzPUwls2II8GquP1hpN?= =?us-ascii?Q?3ops3qnLoN7mf4A/FpfitoEC76cW5zbj1fhj9SMavuDjd+6Hn6v4ZwCPBo+B?= =?us-ascii?Q?8FzuF0ssmQpLOSAuMaGAeXV2cTMhOsYLpkC6/3cjhM4Ny/cx4TLSgFjyngsX?= =?us-ascii?Q?fJusgyyl1OGpMllitcpwdAUoqC/w7ieGkubCJdeRZ4yQUKP9lOstcMYUjOWn?= =?us-ascii?Q?twevobuR1VT8iKp3cUK2VEri/TQvrN3ig/mn2gAyTvkmGf6w1jidO/g6AYyt?= =?us-ascii?Q?VnKeQNKm4wBCm9xBG6FEKDCKiasn+KWYTa+R2/QVXzP6b4pbaknftPREP3Q0?= =?us-ascii?Q?NdbYFCLSPpupr7U1KFT11LdhwA3Lqjq15rrfOhrzs1k8AIeQtF+KjDvcApcZ?= =?us-ascii?Q?mtSN8p9b/EvWeiMK81qC6S5qQkxBuEguRMBkTFLUIOEidPOi3tNzDb3z0lMQ?= =?us-ascii?Q?dPTpq1jNqHMtooRX984DNYx1yJ0ND7BCV6/mA/r588jogq1qMbFMxfBp973k?= =?us-ascii?Q?LWEGbdFvaxbWKySVrw/TcsyKpFp9KVF2FLR0zsIDhuzrgBAg7NJA7kyuS8/7?= =?us-ascii?Q?taVIEkYLMCPwMtuVk0GLybOpIKg6RvMixZIHMAr0k62Vu6VtA5QpvT09nupo?= =?us-ascii?Q?WkgsS4f518W7r1AGIUlzTZU4qNnCvXjFDf9gWQvTe440PJDbOm6g230Y/ONL?= =?us-ascii?Q?7spKQDTtaTWFhEvSZjKMukvmE6APPCqPnB9F1tfbpaFrIBjNGxRyYr17amiv?= =?us-ascii?Q?YDEBm/J67f732RAKKU14LduFtzNg8ry4fBVIVMxz7mRCTF5VoIoKReSBM59Q?= =?us-ascii?Q?Qxv323BXpk5JIpt2Q2n5MynW1zzsfzEL32OwMFVxhf4yTKflPwJXWQBydjda?= =?us-ascii?Q?xUiv1Y06q7iA4L+wXB9fTvAwu5QqGNUiTGAF25uQxid0w3NJZB2wy1OpjF5J?= =?us-ascii?Q?yXAGNKhFV5CubXjdFMqcvLHP+SgFhWnh5wS4vCFy/+guOHoppPwhU5TGJ5WV?= =?us-ascii?Q?JeVW83/1+aGnJGkAzeWYQhL9ihLXUJmTaq5OPeOZGtqlsx75YDiwF19Z4prF?= =?us-ascii?Q?llW6AitpX0govII7Rbu+aOI4TPO3DrhZ/siN6GCQgp5jKA2/jwgKoSw2yvKl?= =?us-ascii?Q?3Bay78Nx5PeuwUU1R5AIvx5+61SqYhTmf0l+n7+glIP62IBXptHSjBW2FeMr?= =?us-ascii?Q?L4Q1iF6L26sKiWKOQY4fNp0oSSKW8W3ThEK6xgOnq8N4vw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR04MB9328.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(52116014)(1800799024)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+M2JobrF574VbuyRo2rshWexLG+cJj5FJT5TiDFryTAha2jy0vpTGnCc3D+P?= =?us-ascii?Q?+7/pwkJ0RL08hcmQNv5N9mmOAnt8zbC0qd9kmDQCnQcXbsRv2UQCOGq/Qut9?= =?us-ascii?Q?C6h+kzXp8CCZhh+exL27BSjrS5Z79PKvALxkrklIHzkEH39hUikaBBFOWkYb?= =?us-ascii?Q?0z0Ha+CFrzyKoh1dy9yZmI4LNdknX6/PNfzA7JmNki966FvDO/D/lKVPBmRW?= =?us-ascii?Q?FLkkqeXi2IdECM81rVcFeVTPHPtjhk5Dsi77aDllj3UP7a/HzwxxReZktgos?= =?us-ascii?Q?TRn3ED4T95X7QtdAA22VBucL6HAxUB2kids98pgjHB7gYc6I8k7ZOyEU38tx?= =?us-ascii?Q?ElHkDM9QtLD1aPdoXUS0JiPSaDaZLDXYYv6dqaNRIfsfaDbnUbGFbS4uBrWh?= =?us-ascii?Q?D9Pe/QiZuUjgbC/efW9a+qzEWC6VBsSW+60hhRNzhthGd0+KuwEt0MTHywlq?= =?us-ascii?Q?JyIV/cZJABguNqQlH+h/hKGxIcCaWUM58hmW2zxIicIQEzWDgmHN098WPMSd?= =?us-ascii?Q?T68G2z8wvzPcPLaOFWZ2NHu86eO+84IknwfKCXeqVZIYwpd2B0smtZruvRZx?= =?us-ascii?Q?hf5iTvI+88U0g9O5sGF5yV4/E14FzF9obw5XgAOKBuduAtU4hl0CaH89K2kD?= =?us-ascii?Q?77FikHIuFGUucpmkYc6Hto0a25EhxLWrtPzFtBwSb9oZ/FtGwlO9JiKGu1v9?= =?us-ascii?Q?QXX9Ienw+xGJwyJlHKxpBYJNKnH12au33/kQUHzQoFmnbHfj2Fgkn+KCSzsY?= =?us-ascii?Q?7kQGUcY/gp/VCQrLWtpVqMuhhjFW7l14+CYj47nx/Xa/8IP1S6NAQGlGGjNW?= =?us-ascii?Q?gAupaW1e1t1mVV3o6o1hJk+xyX8eH1EBsoapbUvn1BrNPXk0m7s1MxMAcb+0?= =?us-ascii?Q?jTZ1QuVXxKFlwofRcIDpDFqU+XBnufzZ9i22miG2q97r4waYHqAnaJhHVQT2?= =?us-ascii?Q?ALxV4PVjacttadsd1V5lfGPgLV0FqMWPabZtcdXW+b7EzYmgLm2oTAcyX+zo?= =?us-ascii?Q?2BSmHiqI2BS1awxEHasylywqDyHFxoocWK7FoGfVwiI3GCAmqTHxqpBGbvyn?= =?us-ascii?Q?qQ9y+zbfiQTIVTNFc0OLSterhgK+LlIK1WLEHz9Xkne0Ve567mbzBHrjyd4g?= =?us-ascii?Q?snCoLpVdXWQwmQisFe5iuFWWgLfg+Jjj2MIdaoD3QTk/ikGH3v+TPB1sslS7?= =?us-ascii?Q?3zNE611sz2QhmLFGPIgLX7eCaJM1gzlEG0LsCRBrN0CqdWZciuXNZ4eW2dXJ?= =?us-ascii?Q?EvrDFkQc+r4C3/Ea3adFny7R8bwfZmFbu2SE9FIvEN7DSqmdFP71YYUbvH8e?= =?us-ascii?Q?esTcanlGoBXeYWQE2JAiWUxfNTFc88Gu+Er18foWIajpGwUYm5bxHDI9ANvF?= =?us-ascii?Q?Rf9yOfc+mOgYjDYirGersbGBaj8MMWO2iRUyVDUR8JsT3LIj54uLTrAdjoZn?= =?us-ascii?Q?rRsNoX5+5w6D4erMfjqemUEcvXp9ZpDcvUa4mazAZ+UaWzd3cKCHe22TIFh2?= =?us-ascii?Q?DEUVC8CuGhFjqs0LLl15raQ3hw2cOrXsKEt3zweZ69zKp+IvtX7wFpgzjr6Y?= =?us-ascii?Q?h/Z4vwvlDnXCFKH/oCuGL3/9tqbhinjY9kZFEhQk9/wL2JxpCcdUJ3lMqo8s?= =?us-ascii?Q?1g=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28e13cba-3390-4fc7-3b56-08dce208bf12 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9328.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2024 11:03:57.4530 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9Mbvm5x+q1IIX3bqrfgb5Rhu7GqYW3m62Y69p3LzUw2ktih2ShQZ0t2cStRSKRIW2mS3wY7gJ6qhRDU/BRkSmw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8702 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 From: Vanshika Shukla This patch adds the support for the ethdev APIs to enable/disable and read/write/adjust IEEE1588 PTP timestamps for DPAA platform. Signed-off-by: Vanshika Shukla --- doc/guides/nics/dpaa.rst | 1 + doc/guides/nics/features/dpaa.ini | 1 + drivers/bus/dpaa/base/fman/fman.c | 15 ++++++ drivers/bus/dpaa/include/fman.h | 45 +++++++++++++++++ drivers/net/dpaa/dpaa_ethdev.c | 5 ++ drivers/net/dpaa/dpaa_ethdev.h | 16 +++++++ drivers/net/dpaa/dpaa_ptp.c | 80 ++++++++++++++++++++++++++++++- 7 files changed, 161 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/dpaa.rst b/doc/guides/nics/dpaa.rst index acf4daab02..ea86e6146c 100644 --- a/doc/guides/nics/dpaa.rst +++ b/doc/guides/nics/dpaa.rst @@ -148,6 +148,7 @@ Features - Packet type information - Checksum offload - Promiscuous mode + - IEEE1588 PTP DPAA Mempool Driver ~~~~~~~~~~~~~~~~~~~ diff --git a/doc/guides/nics/features/dpaa.ini b/doc/guides/nics/features/dpaa.ini index 4196dd800c..4f31b61de1 100644 --- a/doc/guides/nics/features/dpaa.ini +++ b/doc/guides/nics/features/dpaa.ini @@ -19,6 +19,7 @@ Flow control = Y L3 checksum offload = Y L4 checksum offload = Y Packet type parsing = Y +Timesync = Y Timestamp offload = Y Basic stats = Y Extended stats = Y diff --git a/drivers/bus/dpaa/base/fman/fman.c b/drivers/bus/dpaa/base/fman/fman.c index e39bc8c252..e2b7120237 100644 --- a/drivers/bus/dpaa/base/fman/fman.c +++ b/drivers/bus/dpaa/base/fman/fman.c @@ -28,6 +28,7 @@ u32 fman_dealloc_bufs_mask_lo; int fman_ccsr_map_fd = -1; static COMPAT_LIST_HEAD(__ifs); +void *rtc_map; /* This is the (const) global variable that callers have read-only access to. * Internally, we have read-write access directly to __ifs. @@ -539,6 +540,20 @@ fman_if_init(const struct device_node *dpa_node) goto err; } + if (!rtc_map) { + __if->rtc_map = mmap(NULL, FMAN_IEEE_1588_SIZE, + PROT_READ | PROT_WRITE, MAP_SHARED, + fman_ccsr_map_fd, FMAN_IEEE_1588_OFFSET); + if (__if->rtc_map == MAP_FAILED) { + pr_err("Can not map FMan RTC regs base\n"); + _errno = -EINVAL; + goto err; + } + rtc_map = __if->rtc_map; + } else { + __if->rtc_map = rtc_map; + } + /* No channel ID for MAC-less */ assert(lenp == sizeof(*tx_channel_id)); na = of_n_addr_cells(mac_node); diff --git a/drivers/bus/dpaa/include/fman.h b/drivers/bus/dpaa/include/fman.h index 09d1ddb897..e8bc913943 100644 --- a/drivers/bus/dpaa/include/fman.h +++ b/drivers/bus/dpaa/include/fman.h @@ -64,6 +64,12 @@ #define GROUP_ADDRESS 0x0000010000000000LL #define HASH_CTRL_ADDR_MASK 0x0000003F +#define FMAN_RTC_MAX_NUM_OF_ALARMS 3 +#define FMAN_RTC_MAX_NUM_OF_PERIODIC_PULSES 4 +#define FMAN_RTC_MAX_NUM_OF_EXT_TRIGGERS 3 +#define FMAN_IEEE_1588_OFFSET 0X1AFE000 +#define FMAN_IEEE_1588_SIZE 4096 + /* Pre definitions of FMAN interface and Bpool structures */ struct __fman_if; struct fman_if_bpool; @@ -307,6 +313,44 @@ struct tx_bmi_regs { uint32_t fmbm_trlmts; /**< Tx Rate Limiter Scale*/ uint32_t fmbm_trlmt; /**< Tx Rate Limiter*/ }; + +/* Description FM RTC timer alarm */ +struct t_tmr_alarm { + uint32_t tmr_alarm_h; + uint32_t tmr_alarm_l; +}; + +/* Description FM RTC timer Ex trigger */ +struct t_tmr_ext_trigger { + uint32_t tmr_etts_h; + uint32_t tmr_etts_l; +}; + +struct rtc_regs { + uint32_t tmr_id; /* 0x000 Module ID register */ + uint32_t tmr_id2; /* 0x004 Controller ID register */ + uint32_t reserved0008[30]; + uint32_t tmr_ctrl; /* 0x0080 timer control register */ + uint32_t tmr_tevent; /* 0x0084 timer event register */ + uint32_t tmr_temask; /* 0x0088 timer event mask register */ + uint32_t reserved008c[3]; + uint32_t tmr_cnt_h; /* 0x0098 timer counter high register */ + uint32_t tmr_cnt_l; /* 0x009c timer counter low register */ + uint32_t tmr_add; /* 0x00a0 timer drift compensation addend register */ + uint32_t tmr_acc; /* 0x00a4 timer accumulator register */ + uint32_t tmr_prsc; /* 0x00a8 timer prescale */ + uint32_t reserved00ac; + uint32_t tmr_off_h; /* 0x00b0 timer offset high */ + uint32_t tmr_off_l; /* 0x00b4 timer offset low */ + struct t_tmr_alarm tmr_alarm[FMAN_RTC_MAX_NUM_OF_ALARMS]; + /* 0x00b8 timer alarm */ + uint32_t tmr_fiper[FMAN_RTC_MAX_NUM_OF_PERIODIC_PULSES]; + /* 0x00d0 timer fixed period interval */ + struct t_tmr_ext_trigger tmr_etts[FMAN_RTC_MAX_NUM_OF_EXT_TRIGGERS]; + /* 0x00e0 time stamp general purpose external */ + uint32_t reserved00f0[4]; +}; + struct fman_port_qmi_regs { uint32_t fmqm_pnc; /**< PortID n Configuration Register */ uint32_t fmqm_pns; /**< PortID n Status Register */ @@ -396,6 +440,7 @@ struct __fman_if { void *ccsr_map; void *bmi_map; void *tx_bmi_map; + void *rtc_map; void *qmi_map; struct list_head node; }; diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index 682cb1c77e..82d1960356 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -1673,6 +1673,11 @@ static struct eth_dev_ops dpaa_devops = { .rx_queue_intr_disable = dpaa_dev_queue_intr_disable, .rss_hash_update = dpaa_dev_rss_hash_update, .rss_hash_conf_get = dpaa_dev_rss_hash_conf_get, + .timesync_enable = dpaa_timesync_enable, + .timesync_disable = dpaa_timesync_disable, + .timesync_read_time = dpaa_timesync_read_time, + .timesync_write_time = dpaa_timesync_write_time, + .timesync_adjust_time = dpaa_timesync_adjust_time, .timesync_read_rx_timestamp = dpaa_timesync_read_rx_timestamp, .timesync_read_tx_timestamp = dpaa_timesync_read_tx_timestamp, }; diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h index bbdb0936c0..7884cc034c 100644 --- a/drivers/net/dpaa/dpaa_ethdev.h +++ b/drivers/net/dpaa/dpaa_ethdev.h @@ -245,6 +245,22 @@ int dpaa_timesync_read_tx_timestamp(struct rte_eth_dev *dev, struct timespec *timestamp); +int +dpaa_timesync_enable(struct rte_eth_dev *dev); + +int +dpaa_timesync_disable(struct rte_eth_dev *dev); + +int +dpaa_timesync_read_time(struct rte_eth_dev *dev, + struct timespec *timestamp); + +int +dpaa_timesync_write_time(struct rte_eth_dev *dev, + const struct timespec *timestamp); +int +dpaa_timesync_adjust_time(struct rte_eth_dev *dev, int64_t delta); + int dpaa_timesync_read_rx_timestamp(struct rte_eth_dev *dev, struct timespec *timestamp, diff --git a/drivers/net/dpaa/dpaa_ptp.c b/drivers/net/dpaa/dpaa_ptp.c index 2ecdda6db0..48e29e22eb 100644 --- a/drivers/net/dpaa/dpaa_ptp.c +++ b/drivers/net/dpaa/dpaa_ptp.c @@ -16,7 +16,82 @@ #include #include -int dpaa_timesync_read_tx_timestamp(struct rte_eth_dev *dev, +int +dpaa_timesync_enable(struct rte_eth_dev *dev __rte_unused) +{ + return 0; +} + +int +dpaa_timesync_disable(struct rte_eth_dev *dev __rte_unused) +{ + return 0; +} + +int +dpaa_timesync_read_time(struct rte_eth_dev *dev, + struct timespec *timestamp) +{ + uint32_t *tmr_cnt_h, *tmr_cnt_l; + struct __fman_if *__fif; + struct fman_if *fif; + uint64_t time; + + fif = dev->process_private; + __fif = container_of(fif, struct __fman_if, __if); + + tmr_cnt_h = &((struct rtc_regs *)__fif->rtc_map)->tmr_cnt_h; + tmr_cnt_l = &((struct rtc_regs *)__fif->rtc_map)->tmr_cnt_l; + + time = (uint64_t)in_be32(tmr_cnt_l); + time |= ((uint64_t)in_be32(tmr_cnt_h) << 32); + + *timestamp = rte_ns_to_timespec(time); + return 0; +} + +int +dpaa_timesync_write_time(struct rte_eth_dev *dev, + const struct timespec *ts) +{ + uint32_t *tmr_cnt_h, *tmr_cnt_l; + struct __fman_if *__fif; + struct fman_if *fif; + uint64_t time; + + fif = dev->process_private; + __fif = container_of(fif, struct __fman_if, __if); + + tmr_cnt_h = &((struct rtc_regs *)__fif->rtc_map)->tmr_cnt_h; + tmr_cnt_l = &((struct rtc_regs *)__fif->rtc_map)->tmr_cnt_l; + + time = rte_timespec_to_ns(ts); + + out_be32(tmr_cnt_l, (uint32_t)time); + out_be32(tmr_cnt_h, (uint32_t)(time >> 32)); + + return 0; +} + +int +dpaa_timesync_adjust_time(struct rte_eth_dev *dev, int64_t delta) +{ + struct timespec ts = {0, 0}, *timestamp = &ts; + uint64_t ns; + + dpaa_timesync_read_time(dev, timestamp); + + ns = rte_timespec_to_ns(timestamp); + ns += delta; + *timestamp = rte_ns_to_timespec(ns); + + dpaa_timesync_write_time(dev, timestamp); + + return 0; +} + +int +dpaa_timesync_read_tx_timestamp(struct rte_eth_dev *dev, struct timespec *timestamp) { struct dpaa_if *dpaa_intf = dev->data->dev_private; @@ -32,7 +107,8 @@ int dpaa_timesync_read_tx_timestamp(struct rte_eth_dev *dev, return 0; } -int dpaa_timesync_read_rx_timestamp(struct rte_eth_dev *dev, +int +dpaa_timesync_read_rx_timestamp(struct rte_eth_dev *dev, struct timespec *timestamp, uint32_t flags __rte_unused) { -- 2.25.1