[PATCH net-next v7 0/3] dpll: add SiTime SiT9531x DPLL clock driver
Ali Rouhi <[email protected]>
| Newsgroups | org.kernel.vger.netdev,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
This series adds a DPLL subsystem driver for the SiTime SiT95316 and SiT95317 I2C clock generators. Each device integrates four PLLs with automatic/manual reference selection and on-chip TDC phase-offset measurement, and is used for synchronization in telecom, networking, and data-center timing. The series contains the device-tree binding, the driver under drivers/dpll/sit9531x/, and the MAINTAINERS entry. v1: https://lore.kernel.org/netdev/[email protected]/ v2: https://lore.kernel.org/netdev/[email protected]/ v3: https://lore.kernel.org/netdev/[email protected]/ v4: https://lore.kernel.org/netdev/[email protected]/ v5: https://lore.kernel.org/netdev/[email protected]/ v6: https://lore.kernel.org/netdev/[email protected]/ Changes since v6 (driver only; the bindings are unchanged): - Remove a conflict marker that slipped into a comment block in dpll.c. It sat inside /* */, so it built and checkpatch, which has no check for markers, did not report it. - Unwind DPLL registration when it fails partway. dev_start() returned on the first failure without unregistering the DPLLs already done, and the caller then freed them, leaving the subsystem with pointers into freed memory. - Report an input as selectable only for the DPLL that can select it. The test used the physical receiver state, which every DPLL fed from that lane shares. A lane in LOS no longer drops to disconnected either: signal quality belongs in the pin's own attributes. - Refuse DPLL_PIN_STATE_CONNECTED on an input instead of treating it as selectable. The device selects by priority and has no mode that pins one reference, so the request cannot be honoured. - Keep the rest of the priority table when one input moves. prio_set used to fill every lower-priority slot with the same source, which discarded the fallbacks the caller had not asked about. - Refuse to drive INTSYNC from a PLL that already selects it. - Drop the SYSREF/SYNCB/pulser claim from the commit message: only the esync default is reachable, the other modes are not exposed. The AI review also reported a use-after-free of the pin properties. It is a false positive: dpll_pin_alloc() calls dpll_pin_prop_dup(), which copies freq_supported with kmemdup() and the labels with kstrdup(), so the core owns its copies and the driver has to free its own. Ali Rouhi (3): dt-bindings: vendor-prefixes: add SiTime Corporation dt-bindings: dpll: add SiTime SiT95316 clock generator dpll: add SiTime SiT9531x DPLL clock driver .../bindings/dpll/sitime,sit95316.yaml | 171 + .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 7 + drivers/dpll/Kconfig | 1 + drivers/dpll/Makefile | 1 + drivers/dpll/sit9531x/Kconfig | 17 + drivers/dpll/sit9531x/Makefile | 4 + drivers/dpll/sit9531x/core.c | 3111 +++++++++++++++++ drivers/dpll/sit9531x/core.h | 372 ++ drivers/dpll/sit9531x/dpll.c | 1232 +++++++ drivers/dpll/sit9531x/dpll.h | 69 + drivers/dpll/sit9531x/prop.c | 397 +++ drivers/dpll/sit9531x/prop.h | 39 + drivers/dpll/sit9531x/regs.h | 371 ++ 14 files changed, 5794 insertions(+) create mode 100644 Documentation/devicetree/bindings/dpll/sitime,sit95316.yaml create mode 100644 drivers/dpll/sit9531x/Kconfig create mode 100644 drivers/dpll/sit9531x/Makefile create mode 100644 drivers/dpll/sit9531x/core.c create mode 100644 drivers/dpll/sit9531x/core.h create mode 100644 drivers/dpll/sit9531x/dpll.c create mode 100644 drivers/dpll/sit9531x/dpll.h create mode 100644 drivers/dpll/sit9531x/prop.c create mode 100644 drivers/dpll/sit9531x/prop.h create mode 100644 drivers/dpll/sit9531x/regs.h base-commit: 001b5d347d8ba39b2dccaefcc57967b18caec8fe -- 2.34.1