Thread (26 messages) 26 messages, 5 authors, 2021-08-13

Re: [PATCH 01/12] dt-bindings: clock: mediatek: document clk bindings for mediatek mt7986 SoC

From: Chen-Yu Tsai <wenst@chromium.org>
Date: 2021-07-30 06:30:23
Also in: linux-arm-kernel, linux-clk, linux-devicetree, linux-gpio, linux-mediatek, linux-serial, linux-watchdog, lkml

On Fri, Jul 30, 2021 at 2:01 PM Sam Shih [off-list ref] wrote:
Hi,

On Mon, 2021-07-26 at 17:20 +0800, Chen-Yu Tsai wrote:
quoted
Furthermore, based on the driver patch and the fact that they share
the
same compatible string, it seems you shouldn't need to have two
compatible
strings for two identical hardware blocks. The need for separate
entries
to have different clock names is an implementation detail. Please
consider
using and supporting clock-output-names.

Also, please check out the MT8195 clock driver series [1]. I'm
guessing
a lot of the comments apply to this one as well.

Regards
ChenYu

[1]
https://urldefense.com/v3/__https://lore.kernel.org/linux-mediatek/20210616224743.5109-1-chun-jie.chen@mediatek.com/T/*t__;Iw!!CTRNKA9wMg0ARbw!29pb4TJiGHLvLbYJgDB2Dhf8Mpw5VU8zV-W3NrMan_RPQrtWT2EdRTyyjWpu0nZE$
I have organized your comments in "Mediatek MT8195 clock support"
series into the following list, reply to your here:
quoted
dt-binding: Move the not-to-be-exposed clock to driver directory or
simply left out
Okay, thanks for your comment, I will update this in the next patch set
See the following file for an example:

    https://elixir.bootlin.com/linux/latest/source/drivers/clk/sunxi-ng/ccu-sun50i-a64.h

I think this is definitely optional, but it makes it safer in that other
drivers would not be able to use the non-exported intermediate clocks.
quoted
describe some of the clock relations between the various clock
controllers
I have checked the files in
"Documentation/devicetree/bindings/arm/mediatek", It seems that all
MediaTek SoC clocks are simply described by each controller, like
"mediatek,infracfg.txt" and "mediatek,topckgen.txt", and those document
only include compatible strings information and examples.
Can we insert the clock relationship of MT7986 directlly in common
documents?
What I meant was that since each clock controller hardware block has
one or many clock inputs, these should be described in the binding
as required "clocks" and "clock-names" properties.

So it's not about describing the actual relationship or clock tree,
but just having the inputs accurately described.
Or we should add a new "mediatek,mt7986-clock.yaml" and move compatible
strings information and example to this file, and insert clock
relationship descriptions to this file? Wouldn’t it be strange to skip
existing files and create a new one?
I think that is a question for the device tree binding maintainer, Rob.
At least for Mediatek stuff, there seem to be many separate files.
quoted
external oscillator's case, the oscillator is described in the device
tree
Yes, we have "clkxtal" in the DT, which stands for external oscillator,
All clocks in apmixedsys use "clkxtal" as the parent clock
So for the apmixedsys device node, it would at least have something like:

    clocks = <&clkxtal>;
    clock-names = "xtal";

For topckgen, since it has xtal and some PLLs from apmixedsys as inputs:

    clocks = <&clkxtal>, <&apmixedsys CLK_ID_PLLXXX>, <&apmixedsys
CLK_ID_PLLYYY>;
    clock-names = "xtal", "pllXXX", "pllYYY"

The above is just an example. You should adapt it to fit your hardware
description. And the bindings should describe what is required. Note
that the clock names used here are local to this device node. They do
not need to match what the clock driver uses for the global name. So
just go with something descriptive.

The point is, cross hardware block dependencies should be clearly described
in the device tree, instead of implicitly buried in the clock drivers.
quoted
Dual license please (and the dts files).
Okay, thanks for your comment, I will update this in the next patch set
quoted
Why are this and other 1:1 factor clks needed? They look like
placeholders. Please remove them.
Okay, thanks for your comment, I will update this in the next patch set
Ideally the clock driver would use the device tree to get local references
for this, but that is going to require some rework to Mediatek's common
clock code.
quoted
Merge duplicate parent instances
We have considered this in the MT7986 basic clock driver, but I will
check again. If corrections are needed, I will make changes in the next
patch set.
quoted
Leaking clk_data if some function return fail
Okay, thanks for your comment, I will update this in the next patch set
quoted
This file contains four drivers. They do not have depend on each
other, and do not need to be in the same file. Please split them into
differen files and preferably different patches
Okay, thanks for your comment, I will separate those clock drivers in
the next patch set
quoted
Is there any particular reason for arch_initcall
We have considered this in MT7986 basic clock driver, and use
CLK_OF_DECLARE instead of arch_initcall.
Having to sequence clock registration manually is likely a symptom of
inadequate clock dependency handling. So if the drivers are only using
global clock names to describe parents, what happens is that even if
the parent isn't in the system yet, the registration is allowed to
succeed. However since the parent clock isn't available yet, any
calculations involving it, such as calculating clock rates, will
yield invalid results, such as 0 clock rate.
Another question:
Should the clock patches in "Add basic SoC support for MediaTek mt7986"
need to be separated into another patch series, such as MT8195
"Mediatek MT8195 clock support" ?
Nope. The MT8195 team seems to be splitting things up by module, with
the device tree being its own separate module. Ideally you want to send
drivers along with the related device tree changes, so people reviewing
can get a sense of how things work. And if the hardware is publicly
available, people can actually test the changes. We can't do that if the
device tree changes aren't bundled together.


Regards
ChenYu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help