Thread (28 messages) 28 messages, 5 authors, 2023-12-17

Re: [PATCH v3 4/6] thermal: sun8i: add syscon register access code

From: Chen-Yu Tsai <hidden>
Date: 2023-11-29 17:09:27
Also in: linux-devicetree, linux-pm, linux-sunxi

On Thu, Nov 30, 2023 at 1:03 AM Andre Przywara [off-list ref] wrote:
Hi,

On 28/11/2023 16:50, Rob Herring wrote:
quoted
On Tue, Nov 28, 2023 at 10:10 AM Andre Przywara [off-list ref] wrote:
quoted
On Tue, 28 Nov 2023 15:48:18 +0100
Krzysztof Kozlowski [off-list ref] wrote:

Hi,

(adding Maxime for the syscon question below)
quoted
On 28/11/2023 15:33, Andre Przywara wrote:
quoted
On Tue, 28 Nov 2023 08:43:32 +0100
Krzysztof Kozlowski [off-list ref] wrote:

Hi,
quoted
On 28/11/2023 01:58, Andre Przywara wrote:
quoted
+static struct regmap *sun8i_ths_get_syscon_regmap(struct device_node *node)
+{
+ struct device_node *syscon_node;
+ struct platform_device *syscon_pdev;
+ struct regmap *regmap = NULL;
+
+ syscon_node = of_parse_phandle(node, "syscon", 0);
Nope. For the 100th time, this cannot be generic.
Unless it is the 100th time for the submitter, please just point to
the documentation.

Can we simply ban "syscon" as a property name? It looks like we have
65 cases in upstream dts files. Maybe that's doable. This is where we
need levels of warnings with okay for existing vs. don't use in new
designs.
quoted
quoted
quoted
OK. Shall this name refer to the required functionality (temperature
offset fix) or to the target syscon node (like allwinner,misc-syscon).
The problem is that this is really a syscon, as in: "random collection of
bits that we didn't know where else to put in", so "syscon" alone actually
says it all.
Every syscon is a "random collection of bits...", but not every "random
collection of bits..." is a syscon.

Your target device does not implement syscon nodes. Your Linux
implementation does not use it as syscon. Therefore if something does
not look like syscon and does not behave like syscon, it is not a syscon.

I looked at the bit and this is SRAM, not syscon. I am sorry, but it is
something entirely different and we have a binding for it: "sram", I think.
Well, it's somehow both: On the face of it it's a SRAM controller, indeed:
it can switch the control of certain SRAM regions between CPU access and
peripheral access (for the video and the display engine). But then it's
also a syscon, because on top of that, it also controls those random bits,
for instance the EMAC clock register, and this ominous THS bit.
I guess in hindsight we should have never dropped that "syscon" string
then, but I am not sure if adding it back has side effects?

And as I mentioned in the cover letter: modelling this as some SRAM
region, as you suggest, might be an alternative, but it doesn't sound right
either, as I don't think it really is one: I just tried in U-Boot, and I
can write and read the whole SRAM C region just fine, with and without the
bit set. And SRAM content is preserved, even with the thermal sensor
running and the bit cleared (or set).

So adding the "syscon" to the compatible would fix most things, but then
we need to keep the open coded lookup code in dwmac-sun8i.c (because older
DTs would break otherwise).
Really, I'd like to get rid of the "syscon" compatible. It is nothing
more than a flag for Linux to create a regmap.
Yeah, so thinking about it indeed feels a bit like we are changing the
DT here to cater for some Linux implementation detail. After all we
already access the regmap successfully in dwmac-sun8i.c, is that
approach frowned upon (because: driver model) and just tolerated because
it's already in the code base?
quoted
Not a fully baked idea, but perhaps what is needed is drivers that
request a regmap for a node simply get one regardless. That kind of > throws out the Linux driver model though. Alternatively with no
"syscon" compatible, we'd have to have table(s) of 100s of compatibles
in the kernel.
So do you mean to either just remove the explicit syscon compatible
check in syscon_node_to_regmap(), or replace it with a check against a
list of allowed devices?
There is already device_node_to_regmap() which skips the check. It still
bypasses the driver model though.
Wouldn't it be sufficient to leave that check to the (syscon-like)
devices, by them exporting a regmap in the first place or not? And we
can do filtering of accesses there, like we do in sunxi_sram.c?

Cheers,
Andre

quoted
Rob
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help