Received: by 2002:ab2:4a89:0:b0:1f4:a8b6:6e69 with SMTP id w9csp80371lqj; Wed, 10 Apr 2024 04:52:21 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUBMi7Iips0qTtoo5fF4K6g8HEytxGhfqs2T7hTU5K5FIpBlEufbFfNjlDrHGLw4ysLQq1VIn8W1HIF6dO7z1gEjCUFToGnpXooYQ+X3w== X-Google-Smtp-Source: AGHT+IFS/0cKV1SaDAYEAslCmJ6ZvNyttlzAMaamGAyw6AA05XL94FLnhXn5cv3YhReeecfxyWiM X-Received: by 2002:a17:90a:e2c9:b0:29c:5b1b:f75c with SMTP id fr9-20020a17090ae2c900b0029c5b1bf75cmr1911842pjb.47.1712749941310; Wed, 10 Apr 2024 04:52:21 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712749941; cv=pass; d=google.com; s=arc-20160816; b=ssZIijwq7jvmzhEuJdEFoCr4Q8ak52kSixGXYQsswWxfvfHuRDUvRw0abD/r8/ZGJV WTWf5mqTas3XwwwYJ7iQpSnWALG4ZKWxDw7CBuJn29AxBpiX8K4McbqD1AAAcGe4TcFL p3s3fZaGTbnxm6lsHU+YveoqTYYhms2eK8ViveMaP5KkaIIvkOmeDRL5WqcRK2T9Ak3u iUcm1h/4bLtwXXfqcetCGU7A2IO9iPNs6LGPxFN8elPaH7DZRjqiMKFHrZd009TZSEBY ybh/dhHBvWJZhYJxZndnpzcvcrisctBCnusmAHe8jiq4S/xNER5WR9L4n16DbPns0JAV Q0nA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=JE1W2OThhxrweP4GB3+Wjo8nXjcbJgO62AN7qtZSKOI=; fh=9Ba0DaKzo2I1dMve9dlPa9QXf3otfKRHKeoWQOhs61U=; b=Sh5IIiuWFXKo0o8jhwSDH0uudlTJ254PZLVRQ14NJv8mIllzcToauV0UalIlITdZG6 EtO5z3z/JpkBgbnu0LyubBw1g7Ru8YJx/aTaPIX8enPfZtINoO/MHHRto2YBAU8aRiML SPlbFrP1IJy8the7VPIzz6yuZSwnY2s8J3v42+ciLncZkG+LEHVF8rH5vzK8Og48kjRf rPmlPOHDUZJTujErHj6j+j9x0EoyHRnlYfNKZknrzLzwFpS1XJyOzwzVkdKhKreJzgJU UKzcxSQCMr1r7I1x7yTgrFJnrWioeOlQRLX2Rzi0/VPmKRDZL1tmwkIt1I5bA8Hdpi7N pxVA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BFNn2GKt; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-138435-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-138435-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id 142-20020a630194000000b005d8e352afefsi10532884pgb.695.2024.04.10.04.52.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 04:52:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-138435-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BFNn2GKt; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-138435-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-138435-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 6E9FCB24465 for ; Wed, 10 Apr 2024 11:49:06 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4A6B915B113; Wed, 10 Apr 2024 11:48:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BFNn2GKt" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18ACA15ADA9; Wed, 10 Apr 2024 11:48:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.14 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712749720; cv=none; b=ai7WEMmwYOKmLQ/2D4z5rQ1XK3YMlVbOpgaA5mP4CgMZvsyB2V56QRxBJmPsRjf990eaWlGxqFdI4gtsuKZQfzywUrLg1rK6iAOfV0GWkEx9yrFi1MXSySj2ctvW15IoOPDVLZDfvYo6cINIMGFUoUuxG+F3d+u5BJBH4huU2CA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712749720; c=relaxed/simple; bh=souuJwWgY2tifwYTnw9HWDzS9btUpbdg1MYPZs6YGPU=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=G/ida+jCN0+AV4gJQ4hGaVn1FirStGn1AkTjdGkWZVwuFtNz2nv3wUr2EB7panOTwlrmnxAjgvf88sv4wwC6I/hkPq7JTChvZZW7dgOaPy/R+d/4/YK+4P4JjIr9okFVDtpiEaabrTqdYzuOIkzCHWO7u3DPOihE2RbuCsjg4to= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=BFNn2GKt; arc=none smtp.client-ip=198.175.65.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1712749719; x=1744285719; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=souuJwWgY2tifwYTnw9HWDzS9btUpbdg1MYPZs6YGPU=; b=BFNn2GKtXf8LdQM9b0P/PJ5MinIJFkYh/I561wnzFvLlfDAdBx/K4ZoF XpNDKqoAfmovC94PbOQ8ptUIyDHb3+GaNj2/S6uZ3VK7i00dIbeLXkVyT /4deT7HALqwiAtIqA7M8BIZtNoPdWby7Tn+zFMpw130lgvfoDDMkP3Ezj Ae4Aat/BVATZf8fi982UzxnvzpXcPD9Cgj3XaN86vz3xp/UjYPUcwqg1D LJc+5QxjmcYGRu/vNcgxcZg9szXc03unJtV0z5NjhvMVWdfeYOrNoqiox 6+aMGZz3wVsdYZ9+VbuaLXlQKFQUZwi2R4qFX2vdWd+xc+nBpKfn9x3Ry A==; X-CSE-ConnectionGUID: cv2YMsRMQJyO7m9uHiWtSg== X-CSE-MsgGUID: jlJcBlthQCq/LJL81JSXmQ== X-IronPort-AV: E=McAfee;i="6600,9927,11039"; a="11944050" X-IronPort-AV: E=Sophos;i="6.07,190,1708416000"; d="scan'208";a="11944050" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2024 04:48:37 -0700 X-CSE-ConnectionGUID: cShSBgw5Tu+rDMKH3Ibh4A== X-CSE-MsgGUID: nHnq7B66TIepyBTD5O5gWw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,190,1708416000"; d="scan'208";a="43769234" Received: from inlubt0316.iind.intel.com ([10.191.20.213]) by fmviesa002.fm.intel.com with ESMTP; 10 Apr 2024 04:48:30 -0700 From: lakshmi.sowjanya.d@intel.com To: tglx@linutronix.de, jstultz@google.com, giometti@enneenne.com, corbet@lwn.net, linux-kernel@vger.kernel.org Cc: x86@kernel.org, netdev@vger.kernel.org, linux-doc@vger.kernel.org, intel-wired-lan@lists.osuosl.org, andriy.shevchenko@linux.intel.com, eddie.dong@intel.com, christopher.s.hall@intel.com, jesse.brandeburg@intel.com, davem@davemloft.net, alexandre.torgue@foss.st.com, joabreu@synopsys.com, mcoquelin.stm32@gmail.com, perex@perex.cz, linux-sound@vger.kernel.org, anthony.l.nguyen@intel.com, peter.hilber@opensynergy.com, pandith.n@intel.com, subramanian.mohan@intel.com, thejesh.reddy.t.r@intel.com, lakshmi.sowjanya.d@intel.com Subject: [PATCH v6 00/11] Add support for Intel PPS Generator Date: Wed, 10 Apr 2024 17:18:17 +0530 Message-Id: <20240410114828.25581-1-lakshmi.sowjanya.d@intel.com> X-Mailer: git-send-email 2.35.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Lakshmi Sowjanya D The goal of the PPS (Pulse Per Second) hardware/software is to generate a signal from the system on a wire so that some third-party hardware can observe that signal and judge how close the system's time is to another system or piece of hardware. Existing methods (like parallel ports) require software to flip a bit at just the right time to create a PPS signal. Many things can prevent software from doing this precisely. This (Timed I/O) method is better because software only "arms" the hardware in advance and then depends on the hardware to "fire" and flip the signal at just the right time. To generate a PPS signal with this new hardware, the kernel wakes up twice a second, once for 1->0 edge and other for the 0->1 edge. It does this shortly (~10ms) before the actual change in the signal needs to be made. It computes the TSC value at which edge will happen, convert to a value hardware understands and program this value to Timed I/O hardware. The actual edge transition happens without any further action from the kernel. The result here is a signal coming out of the system that is roughly 1,000 times more accurate than the old methods. If the system is heavily loaded, the difference in accuracy is larger in old methods. Application Interface: The API to use Timed I/O is very simple. It is enabled and disabled by writing a '1' or '0' value to the sysfs enable attribute associated with the Timed I/O PPS device. Each Timed I/O pin is represented by a PPS device. When enabled, a pulse-per-second (PPS) synchronized with the system clock is continuously produced on the Timed I/O pin, otherwise it is pulled low. The Timed I/O signal on the motherboard is enabled in the BIOS setup. Intel Advanced Menu -> PCH IO Configuration -> Timed I/O References: https://en.wikipedia.org/wiki/Pulse-per-second_signal https://drive.google.com/file/d/1vkBRRDuELmY8I3FlfOZaEBp-DxLW6t_V/view https://youtu.be/JLUTT-lrDqw Patch 1 adds base clock properties in clocksource structure Patch 2 adds function to convert realtime to base clock Patch 3 - 7 removes reference to convert_art_to_tsc function across drivers Patch 8 removes the convert art to tsc functions which are no longer used Patch 9 adds the pps(pulse per second) generator tio driver to the pps subsystem. Patch 10 documentation and usage of the pps tio generator module. Patch 11 includes documentation for sysfs interface. Please help to review the changes. Thanks in advance, Sowjanya Changes from v2: - Split patch 1 to remove the functions in later stages. - Include required headers in pps_gen_tio. Changes from v3: - Corrections in Documentation. - Introducing non-RFC version of the patch series. Changes from v4: - Setting id in ice_ptp - Modified conversion logic in convert_base_to_cs. - Included the usage of the APIs in the commit message of 2nd patch. Changes from v5: - Change nsecs variable to use_nsecs. - Change order of 1&2 patches and modify the commit message. - Add sysfs abi file entry in MAINTAINERS file. - Add check to find if any event is missed and diable hardware accordingly. Lakshmi Sowjanya D (6): x86/tsc: Add base clock properties in clocksource structure x86/tsc: Remove art to tsc conversion functions which are obsolete timekeeping: Add function to convert realtime to base clock pps: generators: Add PPS Generator TIO Driver Documentation: driver-api: pps: Add Intel Timed I/O PPS generator ABI: pps: Add ABI documentation for Intel TIO Thomas Gleixner (5): e1000e: remove convert_art_to_tsc() igc: remove convert_art_to_tsc() stmmac: intel: remove convert_art_to_tsc() ALSA: hda: remove convert_art_to_tsc() ice/ptp: remove convert_art_to_tsc() .../ABI/testing/sysfs-platform-pps-tio | 7 + Documentation/driver-api/pps.rst | 22 ++ MAINTAINERS | 1 + arch/x86/include/asm/tsc.h | 3 - arch/x86/kernel/tsc.c | 92 ++----- drivers/net/ethernet/intel/e1000e/ptp.c | 3 +- drivers/net/ethernet/intel/ice/ice_ptp.c | 3 +- drivers/net/ethernet/intel/igc/igc_ptp.c | 6 +- .../net/ethernet/stmicro/stmmac/dwmac-intel.c | 3 +- drivers/pps/generators/Kconfig | 16 ++ drivers/pps/generators/Makefile | 1 + drivers/pps/generators/pps_gen_tio.c | 258 ++++++++++++++++++ include/linux/clocksource.h | 27 ++ include/linux/clocksource_ids.h | 1 + include/linux/timekeeping.h | 6 + kernel/time/timekeeping.c | 107 +++++++- sound/pci/hda/hda_controller.c | 3 +- 17 files changed, 476 insertions(+), 83 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-platform-pps-tio create mode 100644 drivers/pps/generators/pps_gen_tio.c -- 2.35.3