From: "Andreas Färber" <firstname.lastname@example.org>
To: Paul Walmsley <email@example.com>
Cc: "firstname.lastname@example.org" <email@example.com>,
Yangtao Li <firstname.lastname@example.org>,
Thierry Reding <email@example.com>,
Leonard Crestez <firstname.lastname@example.org>,
Fabien DESSENNE <email@example.com>,
Daniel Baluta <firstname.lastname@example.org>,
Aisheng Dong <email@example.com>,
Paul Walmsley <firstname.lastname@example.org>, James Tai <email@example.com>,
Cheng-Yu Lee <firstname.lastname@example.org>,
Subject: Re: [PATCH 08/17] clk: imx: convert to devm_platform_ioremap_resource
Date: Thu, 12 Dec 2019 06:38:31 +0100 [thread overview]
Message-ID: <email@example.com> (raw)
Am 11.12.19 um 23:49 schrieb Paul Walmsley:
> On Wed, 11 Dec 2019, Andreas Färber wrote:
>> Blocks do have names, but they don't always group registers of the same
>> kind, as Linux expects it
> Linux does not expect that all of the registers in the same IP block are
> of the same kind. That's part of the reason why Linux frameworks exist.
> To consider clocks as the present example, you're welcome to register
> local IP block clock control registers in the local IP block driver via
> the clock framework. There's no need for a separate clock driver with an
> overlapping address range, or anything like that.
If I throw random code into drivers/mfd/ it will not get proper review.
We rely on clk drivers going into drivers/clk/, even if I could
theoretically register clks also from other parts of the code base -
which will then require complex Kconfig dependencies or #ifdef'ery, not
to mention the nightmares of collecting Acks and figuring out through
whose tree which patches go.
> This is nothing new with Realtek.
As this NXP patch proves. :)
> IP blocks that contain many different
> kinds of registers have had Linux driver support without requiring
> overlapping register address ranges long before Realtek ARM SoCs
Hey, you're the one that's trying to pin this on Realtek, not me!
STM32 RCC is another example I know, also Allwinner, etc. My point was
precisely that this is - for good or bad - a rather common scenario that
we need to deal with.
>> Just please accept that hardware does not always allow for unique
>> contiguous memory reservations
> Hardware designs do in fact mandate unique contiguous memory reservations,
> otherwise address decoding would be indeterministic.
Are you not understanding what I'm saying or intentionally gas-lighting?
A contiguous memory _reservation_ is a range of memory like <0xdead0000
0x100> that the kernel (software!) blocks other drivers (software!) from
reserving. This has _nothing_ to do with hardware address line decoding.
It's still about devm_platform_ioremap_resource() and related APIs. Do a
`cat /proc/iomem` to see, e.g., "98007800-9800781f : serial" reservation
in successful case; as mentioned by Leonard, an unsuccessful reservation
usually causes the driver to fail to probe and thus be unavailable.
> What they don't
> mandate is that all of the registers in that region be all of one kind.
> It's certainly possible to have an SoC with one giant IP block with all
> registers mixed together. Even in that case, it is still incorrect to
> have multiple DT entries with overlapping register address ranges.
Says who? Since when? Can we maybe agree that incorrect != invalid?
> It sounds like you're thinking of the difficulties of figuring out how to
> structure the software driver support for those mixed IP block as a Linux
Yes, these are Linux kernel mailing lists and patches after all... I
don't design hardware, that's why I said we need to live with the flawed
reality of the actual hardware we get.
> where it would fit in the tree, what frameworks it would need to
> register with, and who would maintain it. Those issues certainly merit
> careful thought and consideration. They aren't related to multiple
> overlapping address ranges.
Oh they are. Overlapping address ranges of DT nodes are a _result_ of
unexpected hardware design involving blocks not clearly separated the
same way as Linux subsystems (to distinguish from "frameworks") are.
The DT should describe the hardware blocks as they were designed, but on
the other hand, we need to describe it in a way that Linux drivers can
actually bind against the relevant parts and that those drivers can
operate efficiently. There is no ioremap-all-regs helper that I'm aware
of, for instance, as that would result in __iomem base addresses to be
stored per reg entry; compare that to just one for an overlapping range.
reg = <0xf00 0x100>;
reg = <0xf0c 0x4>;
This should be a valid DT example today, as long as the clk driver
doesn't mess with the reset register embedded within its range. In this
case they can't both reserve their ranges as they would mutually cause
each other to fail to probe, depending on probe order.
As I wrote, turning this into
reg = <0xf00 0xc>, <0xf10 0xe0>;
reg = <0xf0c 0x4>;
is helping no one and makes things much more complex, especially when
the number of carve-outs grows or is not predetermined, as I noted about
some of my cases. Thus I disagree with you about the overlapping ranges.
DT needs to be designed forward-looking rather than just around the
handful of registers we might read/write today, not just to relieve Rob
from excessive reviews.
My solution was to do
reg = <0xf00 0x100>;
ranges = ...;
reg = <0x0 0x100>;
reg = <0xc 0x4>;
https://patchwork.kernel.org/cover/11269971/ (and more in my tree)
which clearly models the blocks and shares a syscon for most children,
other than pre-existing 8250 UART, I²C, etc. drivers using platform
helpers such as the one discussed here.
What we lose with syscon is reservations, i.e. /proc/iomem neither
showing the full syscon nor the drivers using parts of it, unless we
explicitly reserve the memory (syscon does the ioremap for us, so no
need for this devm_platform_ioremap_resource helper there).
Also please keep in mind that we actually want to get to the point where
new systems are booting and usable. At least in the Arm world we do have
hardware at plenty to boot Linux. Dying in DT-beauty then is
counter-productive; we also need to come to timely compromises for not
blocking other work. clk drivers don't need to be platform_drivers like
here and thus can coexist easier with other drivers (e.g., syscon
without child), but I clearly contradict the generality in which you
appear to rule out overlapping memory ranges, be it for siblings or for
Hiding overlaps in an mfd driver does not strike me as better than
openly declaring them - if the mfd components are not dynamic, then I
understood simple-mfd were the way to go, which requires some reg(s),
which then for convenience may overlap if there's no clear boundaries.
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer
HRB 36809 (AG Nürnberg)
next prev parent reply other threads:[~2019-12-12 5:38 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-09 19:57 [PATCH 01/17] clk: sunxi: sunxi-ng: convert to devm_platform_ioremap_resource Yangtao Li
2019-12-09 19:57 ` [PATCH 02/17] clk: qcom: " Yangtao Li
2019-12-09 19:57 ` [PATCH 03/17] clk: samsung: " Yangtao Li
2019-12-10 2:10 ` Chanwoo Choi
2019-12-09 19:57 ` [PATCH 04/17] clk: mediatek: " Yangtao Li
2019-12-09 19:57 ` [PATCH 05/17] clk: hisilicon: " Yangtao Li
2019-12-09 19:57 ` [PATCH 06/17] clk: tegra: " Yangtao Li
2019-12-11 9:49 ` Peter De Schrijver
2019-12-09 19:57 ` [PATCH 07/17] clk: mvebu: " Yangtao Li
2019-12-09 19:57 ` [PATCH 08/17] clk: imx: " Yangtao Li
2019-12-09 20:44 ` Leonard Crestez
2019-12-10 13:21 ` Thierry Reding
2019-12-10 14:57 ` Andreas Färber
2019-12-10 15:10 ` mripard
2019-12-11 17:57 ` Paul Walmsley
2019-12-11 19:54 ` Andreas Färber
2019-12-11 22:49 ` Paul Walmsley
2019-12-12 5:38 ` Andreas Färber [this message]
2019-12-12 6:40 ` Thierry Reding
2019-12-11 17:51 ` Paul Walmsley
2019-12-11 18:38 ` Leonard Crestez
2019-12-10 20:37 ` Frank Lee
2019-12-09 19:57 ` [PATCH 09/17] clk: sifive: " Yangtao Li
2019-12-09 19:57 ` [PATCH 10/17] clk: axi-clkgen: " Yangtao Li
2019-12-09 19:57 ` [PATCH 11/17] clk: milbeaut: " Yangtao Li
2019-12-09 19:57 ` [PATCH 12/17] clk: socfpga: " Yangtao Li
2019-12-16 20:20 ` Dinh Nguyen
2019-12-09 19:57 ` [PATCH 13/17] clk: gemini: " Yangtao Li
2019-12-09 19:57 ` [PATCH 14/17] clk: axm5516: " Yangtao Li
2019-12-09 19:57 ` [PATCH 15/17] clk: bm1880: " Yangtao Li
2019-12-09 19:57 ` [PATCH 16/17] clk: actions: " Yangtao Li
2019-12-09 19:57 ` [PATCH 17/17] ARC: clk: " Yangtao Li
2019-12-13 8:05 ` [PATCH 01/17] clk: sunxi: sunxi-ng: " Chen-Yu Tsai
2020-01-31 1:06 ` Stephen Boyd
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:
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
* 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).