[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <384919bc-7d45-445a-bc85-630c599d43ef@tuxon.dev>
Date: Tue, 20 Aug 2024 14:54:59 +0300
From: claudiu beznea <claudiu.beznea@...on.dev>
To: linux-clk@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org
Subject: Re: get, prepare, enable a clock not in DT?
Hi, Alexander,
On 16.08.2024 17:34, Alexander Dahl wrote:
> Hello everyone,
>
> while further investigating timeout issues with the at91 otpc
> controller on sam9x60 [1] I came to the conclusion the main RC
> oscillator on that SoC must be enabled for that driver to work.
Not sure how that works (unless undocumented) as figure Figure 28-1. Clock
Generator Block Diagram from [1] states that main_rc_osc feeds only the mainck.
Also, Table 9-1. Peripheral Identifiers from [1] say that there is no clock
control for OTCP on the PMC side.
[1]
https://ww1.microchip.com/downloads/aemDocuments/documents/MPU32/ProductDocuments/DataSheets/SAM9X60-Data-Sheet-DS60001579.pdf
> (Verified that by poking single bits in registers through devmem
> already.)
>
> Fortunately the necessary clk is already registered from the SoC code
> in drivers/clk/at91/sam9x60.c [2] and I can see the clock in sysfs clk
> summary:
>
> root@...troKit:~ head -n4 /sys/kernel/debug/clk/clk_summary
> enable prepare protect duty hardware connection
> clock count count count rate accuracy phase cycle enable consumer id
> ---------------------------------------------------------------------------------------------------------------------------------------------
> main_rc_osc 0 0 0 12000000 50000000 0 50000 Y deviceless no_connection_id
>
> That clock has no parent and is not found anywhere in devicetree, nor
> is it handled by the two clock-producers on that platform, so
> from within mchp_otpc_probe() I just tried this:
>
> otpc->clk = devm_clk_get_enabled(&pdev->dev, "main_rc_osc");
>
> However that returns with -ENOENT, so I assume I can not reference the
> clock just by name? Same result with this:
>
> otpc->clk = devm_clk_get_enabled(NULL, "main_rc_osc");
>
> How do I get a pointer to that clk then to enable it? Docs [3] where
To expose it though DT you may want to save its hw object to one array
entry in sam9x60_pmc, sam9x60_pmc->chws[] fits best for this atm.
Otherwise, you can try to register the main_rc_osc with CLK_IS_CRITICAL for
simple trials.
Thank you,
Claudiu Beznea
> not as useful as I hoped for, neither was clk.h header docs. :-/
>
> From what I understood from header docs reading 'device for clock
> "consumer"' I must pass the device from which I call that clk_get() as
> first parameter, so this would be the otpc device then, right? What's
> that second parameter clock consumer id then? Are these terms
> explained somewhere?
>
> Greets
> Alex
>
> [1] <20240813-payable-ecology-8a9e739704bb@...rsis.com>
> [2] https://elixir.bootlin.com/linux/v6.10.4/source/drivers/clk/at91/sam9x60.c#L217
> [3] https://kernel.org/doc/html/latest/driver-api/clk.html
>
Powered by blists - more mailing lists