Re: [PATCH RFC v6 0/6] Create common DPLL/clock configuration API

Vadim Fedorenko
2023-03-13T15:39:36Z

On 13/03/2023 12:20, Jiri Pirko wrote:
> Sun, Mar 12, 2023 at 03:28:01AM CET, vadfed@meta.com wrote:
>> Implement common API for clock/DPLL configuration and status reporting.
>> The API utilises netlink interface as transport for commands and event
>> notifications. This API aim to extend current pin configuration and
>> make it flexible and easy to cover special configurations.
>
> Could you please put here some command line examples to work with this?

We don't have open-source tools ready right now for specific hardware,
but with YAML spec published you can use in-kernel tool to manipulate
the values, i.e.:

./tools/net/ynl/cli.py --spec Documentation/netlink/specs/dpll.yaml
--dump device-get
./tools/net/ynl/cli.py --spec Documentation/netlink/specs/dpll.yaml --do
device-get --json '{"id": 0}'
./tools/net/ynl/cli.py --spec Documentation/netlink/specs/dpll.yaml
--dump pin-get
./tools/net/ynl/cli.py --spec Documentation/netlink/specs/dpll.yaml --do
pin-get --json '{"id": 0, "pin-idx":1}'
./tools/net/ynl/cli.py --spec Documentation/netlink/specs/dpll.yaml --do
pin-set --json '{"id":0, "pin-idx":1, "pin-frequency":1}'

>
>>
>> v5 -> v6:
>> * rework pin part to better fit shared pins use cases
>> * add YAML spec to easy generate user-space apps
>> * simple implementation in ptp_ocp is back again
>> v4 -> v5:
>> * fix code issues found during last reviews:
>> - replace cookie with clock id
>> - follow one naming schema in dpll subsys
>> - move function comments to dpll_core.c, fix exports
>> - remove single-use helper functions
>> - merge device register with alloc
>> - lock and unlock mutex on dpll device release
>> - move dpll_type to uapi header
>> - rename DPLLA_DUMP_FILTER to DPLLA_FILTER
>> - rename dpll_pin_state to dpll_pin_mode
>> - rename DPLL_MODE_FORCED to DPLL_MODE_MANUAL
>> - remove DPLL_CHANGE_PIN_TYPE enum value
>> * rewrite framework once again (Arkadiusz)
>> - add clock class:
>> Provide userspace with clock class value of DPLL with dpll device dump
>> netlink request. Clock class is assigned by driver allocating a dpll
>> device. Clock class values are defined as specified in:
>> ITU-T G.8273.2/Y.1368.2 recommendation.
>> - dpll device naming schema use new pattern:
>> "dpll_%s_%d_%d", where:
>> - %s - dev_name(parent) of parent device,
>> - %d (1) - enum value of dpll type,
>> - %d (2) - device index provided by parent device.
>> - new muxed/shared pin registration:
>> Let the kernel module to register a shared or muxed pin without finding
>> it or its parent. Instead use a parent/shared pin description to find
>> correct pin internally in dpll_core, simplifing a dpll API
>> * Implement complex DPLL design in ice driver (Arkadiusz)
>> * Remove ptp_ocp driver from the series for now
>> v3 -> v4:
>> * redesign framework to make pins dynamically allocated (Arkadiusz)
>> * implement shared pins (Arkadiusz)
>> v2 -> v3:
>> * implement source select mode (Arkadiusz)
>> * add documentation
>> * implementation improvements (Jakub)
>> v1 -> v2:
>> * implement returning supported input/output types
>> * ptp_ocp: follow suggestions from Jonathan
>> * add linux-clk mailing list
>> v0 -> v1:
>> * fix code style and errors
>> * add linux-arm mailing list
>>
>> Arkadiusz Kubalewski (3):
>> dpll: spec: Add Netlink spec in YAML
>> ice: add admin commands to access cgu configuration
>> ice: implement dpll interface to control cgu
>>
>> Vadim Fedorenko (3):
>> dpll: Add DPLL framework base functions
>> dpll: documentation on DPLL subsystem interface
>> ptp_ocp: implement DPLL ops
>>
>> Documentation/netlink/specs/dpll.yaml | 514 +++++
>> Documentation/networking/dpll.rst | 347 ++++
>> Documentation/networking/index.rst | 1 +
>> MAINTAINERS | 9 +
>> drivers/Kconfig | 2 +
>> drivers/Makefile | 1 +
>> drivers/dpll/Kconfig | 7 +
>> drivers/dpll/Makefile | 10 +
>> drivers/dpll/dpll_core.c | 835 ++++++++
>> drivers/dpll/dpll_core.h | 99 +
>> drivers/dpll/dpll_netlink.c | 1065 ++++++++++
>> drivers/dpll/dpll_netlink.h | 30 +
>> drivers/dpll/dpll_nl.c | 126 ++
>> drivers/dpll/dpll_nl.h | 42 +
>> drivers/net/ethernet/intel/Kconfig | 1 +
>> drivers/net/ethernet/intel/ice/Makefile | 3 +-
>> drivers/net/ethernet/intel/ice/ice.h | 5 +
>> .../net/ethernet/intel/ice/ice_adminq_cmd.h | 240 ++-
>> drivers/net/ethernet/intel/ice/ice_common.c | 467 +++++
>> drivers/net/ethernet/intel/ice/ice_common.h | 43 +
>> drivers/net/ethernet/intel/ice/ice_dpll.c | 1845 +++++++++++++++++
>> drivers/net/ethernet/intel/ice/ice_dpll.h | 96 +
>> drivers/net/ethernet/intel/ice/ice_lib.c | 17 +-
>> drivers/net/ethernet/intel/ice/ice_main.c | 7 +
>> drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 411 ++++
>> drivers/net/ethernet/intel/ice/ice_ptp_hw.h | 240 +++
>> drivers/net/ethernet/intel/ice/ice_type.h | 1 +
>> drivers/ptp/Kconfig | 1 +
>> drivers/ptp/ptp_ocp.c | 206 +-
>> include/linux/dpll.h | 284 +++
>> include/uapi/linux/dpll.h | 196 ++
>> 31 files changed, 7135 insertions(+), 16 deletions(-)
>> create mode 100644 Documentation/netlink/specs/dpll.yaml
>> create mode 100644 Documentation/networking/dpll.rst
>> create mode 100644 drivers/dpll/Kconfig
>> create mode 100644 drivers/dpll/Makefile
>> create mode 100644 drivers/dpll/dpll_core.c
>> create mode 100644 drivers/dpll/dpll_core.h
>> create mode 100644 drivers/dpll/dpll_netlink.c
>> create mode 100644 drivers/dpll/dpll_netlink.h
>> create mode 100644 drivers/dpll/dpll_nl.c
>> create mode 100644 drivers/dpll/dpll_nl.h
>> create mode 100644 drivers/net/ethernet/intel/ice/ice_dpll.c
>> create mode 100644 drivers/net/ethernet/intel/ice/ice_dpll.h
>> create mode 100644 include/linux/dpll.h
>> create mode 100644 include/uapi/linux/dpll.h
>>
>> --
>> 2.34.1
>>