From: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
To: kuba@kernel.org, jiri@resnulli.us,
arkadiusz.kubalewski@intel.com, vadfed@meta.com,
jonathan.lemon@gmail.com, pabeni@redhat.com
Cc: geert+renesas@glider.be, mst@redhat.com, razor@blackwall.org,
phil@nwl.cc, javierm@redhat.com, edumazet@google.com,
benjamin.tissoires@redhat.com, anthony.l.nguyen@intel.com,
linux-clk@vger.kernel.org, lucien.xin@gmail.com, leon@kernel.org,
corbet@lwn.net, linux-rdma@vger.kernel.org, masahiroy@kernel.org,
linux-doc@vger.kernel.org, jesse.brandeburg@intel.com,
intel-wired-lan@lists.osuosl.org, airlied@redhat.com,
vadfed@fb.com, ricardo.canuelo@collabora.com, arnd@arndb.de,
idosch@nvidia.com, richardcochran@gmail.com,
claudiajkang@gmail.com, kuniyu@amazon.com,
jacek.lawrynowicz@linux.intel.com, liuhangbin@gmail.com,
nicolas.dichtel@6wind.com, linux-arm-kernel@lists.infradead.org,
axboe@kernel.dk, sj@kernel.org, vadim.fedorenko@linux.dev,
linux@zary.sk, gregkh@linuxfoundation.org, ogabbay@kernel.org,
nipun.gupta@amd.com, linux-kernel@vger.kernel.org,
andy.ren@getcruise.com, tzimmermann@suse.de,
netdev@vger.kernel.org, saeedm@nvidia.com, davem@davemloft.net,
milena.olech@intel.com, hkallweit1@gmail.com
Subject: [Intel-wired-lan] [RFC PATCH v9 05/10] dpll: api header: Add DPLL framework base functions
Date: Fri, 23 Jun 2023 14:38:15 +0200 [thread overview]
Message-ID: <20230623123820.42850-6-arkadiusz.kubalewski@intel.com> (raw)
In-Reply-To: <20230623123820.42850-1-arkadiusz.kubalewski@intel.com>
From: Vadim Fedorenko <vadim.fedorenko@linux.dev>
DPLL framework is used to represent and configure DPLL devices
in systems. Each device that has DPLL and can configure sources
and outputs can use this framework. Netlink interface is used to
provide configuration data and to receive notification messages
about changes in the configuration or status of DPLL device.
Inputs and outputs of the DPLL device are represented as special
objects which could be dynamically added to and removed from DPLL
device.
Add kernel api header, make dpll subsystem available to device drivers.
Add/update makefiles/Kconfig to allow compilation of dpll subsystem.
Co-developed-by: Milena Olech <milena.olech@intel.com>
Signed-off-by: Milena Olech <milena.olech@intel.com>
Co-developed-by: Michal Michalik <michal.michalik@intel.com>
Signed-off-by: Michal Michalik <michal.michalik@intel.com>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Co-developed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
---
MAINTAINERS | 8 +++
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/dpll/Kconfig | 7 ++
drivers/dpll/Makefile | 9 +++
include/linux/dpll.h | 144 ++++++++++++++++++++++++++++++++++++++++++
6 files changed, 171 insertions(+)
create mode 100644 drivers/dpll/Kconfig
create mode 100644 drivers/dpll/Makefile
create mode 100644 include/linux/dpll.h
diff --git a/MAINTAINERS b/MAINTAINERS
index cb14589d14ab..58040fc550b8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6307,6 +6307,14 @@ F: Documentation/networking/device_drivers/ethernet/freescale/dpaa2/switch-drive
F: drivers/net/ethernet/freescale/dpaa2/dpaa2-switch*
F: drivers/net/ethernet/freescale/dpaa2/dpsw*
+DPLL CLOCK SUBSYSTEM
+M: Vadim Fedorenko <vadfed@fb.com>
+L: netdev@vger.kernel.org
+S: Maintained
+F: drivers/dpll/*
+F: include/net/dpll.h
+F: include/uapi/linux/dpll.h
+
DRBD DRIVER
M: Philipp Reisner <philipp.reisner@linbit.com>
M: Lars Ellenberg <lars.ellenberg@linbit.com>
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 514ae6b24cb2..ce5f63918eba 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -243,4 +243,6 @@ source "drivers/hte/Kconfig"
source "drivers/cdx/Kconfig"
+source "drivers/dpll/Kconfig"
+
endmenu
diff --git a/drivers/Makefile b/drivers/Makefile
index 7241d80a7b29..6fea42a6dd05 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -195,3 +195,4 @@ obj-$(CONFIG_PECI) += peci/
obj-$(CONFIG_HTE) += hte/
obj-$(CONFIG_DRM_ACCEL) += accel/
obj-$(CONFIG_CDX_BUS) += cdx/
+obj-$(CONFIG_DPLL) += dpll/
diff --git a/drivers/dpll/Kconfig b/drivers/dpll/Kconfig
new file mode 100644
index 000000000000..a4cae73f20d3
--- /dev/null
+++ b/drivers/dpll/Kconfig
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Generic DPLL drivers configuration
+#
+
+config DPLL
+ bool
diff --git a/drivers/dpll/Makefile b/drivers/dpll/Makefile
new file mode 100644
index 000000000000..2e5b27850110
--- /dev/null
+++ b/drivers/dpll/Makefile
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Makefile for DPLL drivers.
+#
+
+obj-$(CONFIG_DPLL) += dpll.o
+dpll-y += dpll_core.o
+dpll-y += dpll_netlink.o
+dpll-y += dpll_nl.o
diff --git a/include/linux/dpll.h b/include/linux/dpll.h
new file mode 100644
index 000000000000..a18bcaa13553
--- /dev/null
+++ b/include/linux/dpll.h
@@ -0,0 +1,144 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2023 Meta Platforms, Inc. and affiliates
+ * Copyright (c) 2023 Intel and affiliates
+ */
+
+#ifndef __DPLL_H__
+#define __DPLL_H__
+
+#include <uapi/linux/dpll.h>
+#include <linux/device.h>
+#include <linux/netlink.h>
+
+struct dpll_device;
+struct dpll_pin;
+
+struct dpll_device_ops {
+ int (*mode_get)(const struct dpll_device *dpll, void *dpll_priv,
+ enum dpll_mode *mode, struct netlink_ext_ack *extack);
+ int (*mode_set)(const struct dpll_device *dpll, void *dpll_priv,
+ const enum dpll_mode mode,
+ struct netlink_ext_ack *extack);
+ bool (*mode_supported)(const struct dpll_device *dpll, void *dpll_priv,
+ const enum dpll_mode mode,
+ struct netlink_ext_ack *extack);
+ int (*source_pin_idx_get)(const struct dpll_device *dpll,
+ void *dpll_priv,
+ u32 *pin_idx,
+ struct netlink_ext_ack *extack);
+ int (*lock_status_get)(const struct dpll_device *dpll, void *dpll_priv,
+ enum dpll_lock_status *status,
+ struct netlink_ext_ack *extack);
+ int (*temp_get)(const struct dpll_device *dpll, void *dpll_priv,
+ s32 *temp, struct netlink_ext_ack *extack);
+};
+
+struct dpll_pin_ops {
+ int (*frequency_set)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll, void *dpll_priv,
+ const u64 frequency,
+ struct netlink_ext_ack *extack);
+ int (*frequency_get)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll, void *dpll_priv,
+ u64 *frequency, struct netlink_ext_ack *extack);
+ int (*direction_set)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll, void *dpll_priv,
+ const enum dpll_pin_direction direction,
+ struct netlink_ext_ack *extack);
+ int (*direction_get)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll, void *dpll_priv,
+ enum dpll_pin_direction *direction,
+ struct netlink_ext_ack *extack);
+ int (*state_on_pin_get)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_pin *parent_pin,
+ void *parent_pin_priv,
+ enum dpll_pin_state *state,
+ struct netlink_ext_ack *extack);
+ int (*state_on_dpll_get)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll,
+ void *dpll_priv, enum dpll_pin_state *state,
+ struct netlink_ext_ack *extack);
+ int (*state_on_pin_set)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_pin *parent_pin,
+ void *parent_pin_priv,
+ const enum dpll_pin_state state,
+ struct netlink_ext_ack *extack);
+ int (*state_on_dpll_set)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll,
+ void *dpll_priv,
+ const enum dpll_pin_state state,
+ struct netlink_ext_ack *extack);
+ int (*prio_get)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll, void *dpll_priv,
+ u32 *prio, struct netlink_ext_ack *extack);
+ int (*prio_set)(const struct dpll_pin *pin, void *pin_priv,
+ const struct dpll_device *dpll, void *dpll_priv,
+ const u32 prio, struct netlink_ext_ack *extack);
+};
+
+struct dpll_pin_frequency {
+ u64 min;
+ u64 max;
+};
+
+#define DPLL_PIN_FREQUENCY_RANGE(_min, _max) \
+ { \
+ .min = _min, \
+ .max = _max, \
+ }
+
+#define DPLL_PIN_FREQUENCY(_val) DPLL_PIN_FREQUENCY_RANGE(_val, _val)
+#define DPLL_PIN_FREQUENCY_1PPS \
+ DPLL_PIN_FREQUENCY(DPLL_PIN_FREQUENCY_1_HZ)
+#define DPLL_PIN_FREQUENCY_10MHZ \
+ DPLL_PIN_FREQUENCY(DPLL_PIN_FREQUENCY_10_MHZ)
+#define DPLL_PIN_FREQUENCY_IRIG_B \
+ DPLL_PIN_FREQUENCY(DPLL_PIN_FREQUENCY_10_KHZ)
+#define DPLL_PIN_FREQUENCY_DCF77 \
+ DPLL_PIN_FREQUENCY(DPLL_PIN_FREQUENCY_77_5_KHZ)
+
+struct dpll_pin_properties {
+ const char *board_label;
+ const char *panel_label;
+ const char *package_label;
+ enum dpll_pin_type type;
+ unsigned long capabilities;
+ u32 freq_supported_num;
+ struct dpll_pin_frequency *freq_supported;
+};
+
+struct dpll_device
+*dpll_device_get(u64 clock_id, u32 dev_driver_id, struct module *module);
+
+void dpll_device_put(struct dpll_device *dpll);
+
+int dpll_device_register(struct dpll_device *dpll, enum dpll_type type,
+ const struct dpll_device_ops *ops, void *priv);
+
+void dpll_device_unregister(struct dpll_device *dpll,
+ const struct dpll_device_ops *ops, void *priv);
+
+struct dpll_pin
+*dpll_pin_get(u64 clock_id, u32 dev_driver_id, struct module *module,
+ const struct dpll_pin_properties *prop);
+
+int dpll_pin_register(struct dpll_device *dpll, struct dpll_pin *pin,
+ const struct dpll_pin_ops *ops, void *priv);
+
+void dpll_pin_unregister(struct dpll_device *dpll, struct dpll_pin *pin,
+ const struct dpll_pin_ops *ops, void *priv);
+
+void dpll_pin_put(struct dpll_pin *pin);
+
+int dpll_pin_on_pin_register(struct dpll_pin *parent, struct dpll_pin *pin,
+ const struct dpll_pin_ops *ops, void *priv);
+
+void dpll_pin_on_pin_unregister(struct dpll_pin *parent, struct dpll_pin *pin,
+ const struct dpll_pin_ops *ops, void *priv);
+
+int dpll_device_change_ntf(struct dpll_device *dpll);
+
+int dpll_pin_change_ntf(struct dpll_pin *pin);
+
+#endif
--
2.39.3
_______________________________________________
Intel-wired-lan mailing list
Intel-wired-lan@osuosl.org
https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
next prev parent reply other threads:[~2023-06-23 12:41 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-23 12:38 [Intel-wired-lan] [RFC PATCH v9 00/10] Create common DPLL configuration API Arkadiusz Kubalewski
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 01/10] dpll: documentation on DPLL subsystem interface Arkadiusz Kubalewski
2023-06-28 21:11 ` Jakub Kicinski
2023-07-10 9:45 ` Kubalewski, Arkadiusz
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 02/10] dpll: spec: Add Netlink spec in YAML Arkadiusz Kubalewski
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 03/10] dpll: core: Add DPLL framework base functions Arkadiusz Kubalewski
2023-06-29 8:13 ` Jiri Pirko
2023-07-10 9:50 ` Kubalewski, Arkadiusz
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 04/10] dpll: netlink: " Arkadiusz Kubalewski
2023-06-23 12:38 ` Arkadiusz Kubalewski [this message]
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 06/10] netdev: expose DPLL pin handle for netdevice Arkadiusz Kubalewski
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 07/10] ice: add admin commands to access cgu configuration Arkadiusz Kubalewski
2023-07-27 21:16 ` Linus Walleij
2023-07-28 9:55 ` Kubalewski, Arkadiusz
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 08/10] ice: implement dpll interface to control cgu Arkadiusz Kubalewski
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 09/10] ptp_ocp: implement DPLL ops Arkadiusz Kubalewski
2023-06-23 12:38 ` [Intel-wired-lan] [RFC PATCH v9 10/10] mlx5: Implement SyncE support using DPLL infrastructure Arkadiusz Kubalewski
2023-06-23 15:19 ` [Intel-wired-lan] [RFC PATCH v9 00/10] Create common DPLL configuration API Jiri Pirko
2023-06-23 15:53 ` Jakub Kicinski
2023-06-24 9:23 ` Jiri Pirko
2023-06-24 21:43 ` Jakub Kicinski
2023-06-27 10:18 ` Jiri Pirko
2023-06-28 9:15 ` Kubalewski, Arkadiusz
2023-06-28 9:27 ` Kubalewski, Arkadiusz
2023-06-28 11:11 ` Vadim Fedorenko
2023-06-28 13:09 ` Jiri Pirko
2023-06-28 13:22 ` Vadim Fedorenko
2023-06-28 14:02 ` Jiri Pirko
2023-06-28 11:15 ` Jiri Pirko
2023-07-10 10:07 ` Kubalewski, Arkadiusz
2023-07-10 12:09 ` Jiri Pirko
2023-07-11 10:34 ` Kubalewski, Arkadiusz
2023-07-11 11:52 ` Jiri Pirko
2023-07-11 17:17 ` Kubalewski, Arkadiusz
2023-07-11 20:14 ` Jakub Kicinski
2023-07-12 9:19 ` Kubalewski, Arkadiusz
2023-07-12 16:54 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230623123820.42850-6-arkadiusz.kubalewski@intel.com \
--to=arkadiusz.kubalewski@intel.com \
--cc=airlied@redhat.com \
--cc=andy.ren@getcruise.com \
--cc=anthony.l.nguyen@intel.com \
--cc=arnd@arndb.de \
--cc=axboe@kernel.dk \
--cc=benjamin.tissoires@redhat.com \
--cc=claudiajkang@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=geert+renesas@glider.be \
--cc=gregkh@linuxfoundation.org \
--cc=hkallweit1@gmail.com \
--cc=idosch@nvidia.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacek.lawrynowicz@linux.intel.com \
--cc=javierm@redhat.com \
--cc=jesse.brandeburg@intel.com \
--cc=jiri@resnulli.us \
--cc=jonathan.lemon@gmail.com \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=leon@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux@zary.sk \
--cc=liuhangbin@gmail.com \
--cc=lucien.xin@gmail.com \
--cc=masahiroy@kernel.org \
--cc=milena.olech@intel.com \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=nicolas.dichtel@6wind.com \
--cc=nipun.gupta@amd.com \
--cc=ogabbay@kernel.org \
--cc=pabeni@redhat.com \
--cc=phil@nwl.cc \
--cc=razor@blackwall.org \
--cc=ricardo.canuelo@collabora.com \
--cc=richardcochran@gmail.com \
--cc=saeedm@nvidia.com \
--cc=sj@kernel.org \
--cc=tzimmermann@suse.de \
--cc=vadfed@fb.com \
--cc=vadfed@meta.com \
--cc=vadim.fedorenko@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox