Re: [PATCH] nvmem: add explicit config option to read OF fixed cells
From: Rafał Miłecki
Date: Tue Feb 21 2023 - 17:29:59 EST
On 21.02.2023 22:38, Martin Blumenstingl wrote:
On Tue, Feb 21, 2023 at 3:50 PM Rafał Miłecki <zajec5@xxxxxxxxx> wrote:
From: Rafał Miłecki <rafal@xxxxxxxxxx>
NVMEM subsystem looks for fixed NVMEM cells (specified in DT) by
default. This behaviour made sense in early days before adding support
for dynamic cells.
With every new supported NVMEM device with dynamic cells current
behaviour becomes non-optimal. It results in unneeded iterating over DT
nodes and may result in false discovery of cells (depending on used DT
properties).
I am not familiar with the recent changes around dynamic cells.
Is there any discussion/summary that I can read to get up to speed?
Some NVMEM devices don't store specific data at hardcoded offsets. For
such devices we have drivers (to become: layouts) that parse their magic
content. They discover cells and register them and provide matching with
proper DT nodes.
For bindings see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=084973e944bec21804f8afb0515b25434438699a
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a607a850ba1fa966cbb035544c1588e24a6307df
For example driver see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e977eaa8280e957b87904b536661550f2a6b3e8
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=207775f7e17b8fd0426a2ac4a5b81e4e1d71849e
For usage see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8442f0fb09ca3d842b9b23d1d0650f649fd10f8
My main thought is: if there are many "fixed OF cells" implementations
and only a few "dynamic" ones - does it make sense to flip the logic
and introduce a new "use_dynamic_of_cells" flag instead?
The problem is that there are more cases than just two. We can have:
1. No cells at all
2. Fixed cells in DT
3. Dynamic cells with references in DT
4. Driver specified cells (specified within config)
5. Cells defined in a global table
So we need to reference DT cells explicitly (we can't just confirm /
deny *dynamic* cells).
Another solution would be to have "no_fixed_of_cells" but:
1. Personally I think negation is less clear / easy to follow
2. There may be actually more drivers with no fixed cells.
I think I modified 18 drivers. It seems devm_nvmem_register() is
referenced in 44 places. Few of them may be not actual users but it
still seems to be about equal.