From: Ivan Vecera <ivecera@redhat.com>
To: netdev@vger.kernel.org
Cc: Prathosh Satish <Prathosh.Satish@microchip.com>,
Vadim Fedorenko <vadim.fedorenko@linux.dev>,
Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>,
Jiri Pirko <jiri@resnulli.us>,
Michal Schmidt <mschmidt@redhat.com>,
Petr Oros <poros@redhat.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH net-next v2 0/6] dpll: zl3073x: Refactor state management
Date: Tue, 11 Nov 2025 19:12:37 +0100 [thread overview]
Message-ID: <20251111181243.4570-1-ivecera@redhat.com> (raw)
This patch set is a refactoring of the zl3073x driver to clean up
state management, improve modularity, and significantly reduce
on-demand I/O.
The driver's dpll.c implementation previously performed on-demand
register reads and writes (wrapped in mailbox operations) to get
or set properties like frequency, phase, and embedded-sync settings.
This cluttered the DPLL logic with low-level I/O, duplicated locking,
and led to inefficient bus traffic.
This series addresses this by:
1. Splitting the monolithic 'core.c' into logical units ('ref.c',
'out.c', 'synth.c').
2. Implementing a full read/write-back cache for 'zl3073x_ref' and
'zl3073x_out' structures.
All state is now read once during '_state_fetch()' (and status updated
periodically). DPLL get callbacks read from this cache. Set callbacks
modify a copy of the state, which is then committed via a new
'..._state_set()' function. These '_state_set' functions compare
the new state to the cached state and write *only* the modified
register values back to the hardware, all within a single mailbox
sequence.
The result is a much cleaner 'dpll.c' that is almost entirely
free of direct register I/O, and all state logic is properly
encapsulated in its respective file.
The series is broken down as follows:
* Patch 1: Changes the state structs to store raw register values
(e.g., 'config', 'ctrl') instead of parsed booleans, centralizing
parsing logic into the helpers.
* Patch 2: Splits the logic from 'core.c' into new 'ref.c', 'out.c'
and 'synth.c' files, creating a 'zl3073x_dev_...' abstraction layer.
* Patch 3: Introduces the caching concept by reading and caching
the reference monitor status periodically, removing scattered
reads from 'dpll.c'.
* Patch 4: Expands the 'zl3073x_ref' struct to cache *all* reference
properties and adds 'zl3073x_ref_state_set()' to write back changes.
* Patch 5: Does the same for the 'zl3073x_out' struct, caching all
output properties and adding 'zl3073x_out_state_set()'.
* Patch 6: A final cleanup that removes the 'zl3073x_dev_...' wrapper
functions that became redundant after the refactoring.
Changes:
v2:
- addressed issues found by patchwork bot (details in each patch)
Ivan Vecera (6):
dpll: zl3073x: Store raw register values instead of parsed state
dpll: zl3073x: Split ref, out, and synth logic from core
dpll: zl3073x: Cache reference monitor status
dpll: zl3073x: Cache all reference properties in zl3073x_ref
dpll: zl3073x: Cache all output properties in zl3073x_out
dpll: zl3073x: Remove unused dev wrappers
drivers/dpll/zl3073x/Makefile | 3 +-
drivers/dpll/zl3073x/core.c | 243 +----------
drivers/dpll/zl3073x/core.h | 184 +++-----
drivers/dpll/zl3073x/dpll.c | 776 ++++++++--------------------------
drivers/dpll/zl3073x/out.c | 157 +++++++
drivers/dpll/zl3073x/out.h | 93 ++++
drivers/dpll/zl3073x/prop.c | 12 +-
drivers/dpll/zl3073x/ref.c | 194 +++++++++
drivers/dpll/zl3073x/ref.h | 134 ++++++
drivers/dpll/zl3073x/synth.c | 87 ++++
drivers/dpll/zl3073x/synth.h | 72 ++++
11 files changed, 1009 insertions(+), 946 deletions(-)
create mode 100644 drivers/dpll/zl3073x/out.c
create mode 100644 drivers/dpll/zl3073x/out.h
create mode 100644 drivers/dpll/zl3073x/ref.c
create mode 100644 drivers/dpll/zl3073x/ref.h
create mode 100644 drivers/dpll/zl3073x/synth.c
create mode 100644 drivers/dpll/zl3073x/synth.h
--
2.51.0
next reply other threads:[~2025-11-11 18:12 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-11 18:12 Ivan Vecera [this message]
2025-11-11 18:12 ` [PATCH net-next v2 1/6] dpll: zl3073x: Store raw register values instead of parsed state Ivan Vecera
2025-11-12 14:12 ` Vadim Fedorenko
2025-11-12 19:24 ` Ivan Vecera
2025-11-12 21:52 ` Vadim Fedorenko
2025-11-11 18:12 ` [PATCH net-next v2 2/6] dpll: zl3073x: Split ref, out, and synth logic from core Ivan Vecera
2025-11-11 18:12 ` [PATCH net-next v2 3/6] dpll: zl3073x: Cache reference monitor status Ivan Vecera
2025-11-11 18:12 ` [PATCH net-next v2 4/6] dpll: zl3073x: Cache all reference properties in zl3073x_ref Ivan Vecera
2025-11-11 18:12 ` [PATCH net-next v2 5/6] dpll: zl3073x: Cache all output properties in zl3073x_out Ivan Vecera
2025-11-11 18:12 ` [PATCH net-next v2 6/6] dpll: zl3073x: Remove unused dev wrappers Ivan Vecera
-- strict thread matches above, loose matches on Subject: below --
2026-03-15 17:42 [PATCH net-next v2 0/6] dpll: zl3073x: refactor state management Ivan Vecera
2026-03-18 3:20 ` patchwork-bot+netdevbpf
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=20251111181243.4570-1-ivecera@redhat.com \
--to=ivecera@redhat.com \
--cc=Prathosh.Satish@microchip.com \
--cc=arkadiusz.kubalewski@intel.com \
--cc=jiri@resnulli.us \
--cc=linux-kernel@vger.kernel.org \
--cc=mschmidt@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=poros@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.