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

Vadim Fedorenko
2023-03-13T16:32:23Z

On 13/03/2023 16:22, Jiri Pirko wrote:
> Mon, Mar 13, 2023 at 04:33:13PM CET, vadim.fedorenko@linux.dev wrote:
>> 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}'
>
> Yep, that is exactly what I was asking for. Thanks.
> Please try to extend it a bit and add to the cover letter. Gives people
> better understanding of how this works.

Sure, will extend the cover letter in the next version, thanks!

>
>>
>>>
>>>>
>>>> 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
>>>>
>>