Hello Stefan,
Thank you for your answer!
On 11/21/22
16:45, Stefan Kalkowski wrote:
Thank you for the detailed explanation and background information!
The CCM register definitions alone are not necessarily the only thing
that differ. You might need to look at the tree structure, meaning
the dependencies in between the clocks too.
You are correct! There exist differences within the 'Clock Root
selects' as well.
I have corrected them already, but it did not help with my initial
problem. Furthermore,
I first tried to make the MMIO struct from `Driver::Ccm` match the
current bit-sets of the i.MX8MM.
It turns out, some bit-sets from the CCM's control registers of
the i.MX8MQ does not exist
in the CCM's control register of the i.MX8MM.
Maybe it helps to identify the differences within the Linux kernel
code at drivers/clk/imx/clk-imx8m*.c?
This is a good suggestion! I can use this as a guideline to
implement `void Frac_pll:rate(Rate rate)`
and `Clock::rate Frac_pll::rate() const`. In fact, I confused some
things while reading the reference manual.
After reading again, 5.1.5.4.4 'SSCG and Fractional PLLs', I have
a better understanding of what actually happen in
your implementation for the i.MX8MQ. And, I have found what needs
to be corrected for the i.MX8MM SoC implementation.
I really don't know, but I would not necessarily exclude it. But when
looking at the device-tree of the `imx8mm-*.dts` files in Linux, I
assume the pin settings are more important.
Currently, I assume those to be correct, as it seems, it did not
change with the most recent BSP Linux available. And
the driver works on the older board revision with those IOMUXC
settings. Then, as advised, I will not
take it for granted, and better have a second look at it.
For getting fast results, we've set static IOMUX controls within
bootstrap, but nothing keeps you from having a dedicated pin control
service, which allows changing the pin settings dynamically. Please,
have a look at the example driver `src/drivers/pin` within the
genode-allwinner repository.
When having such a driver, you can change the settings dynamically via
the pin_control and pin_state session interfaces.
I will have a look at this!
Thanks to you, I have now good material to
move forward!
Cheers!
Jad
----
Jean-Adrien Domage
Software Engineer
Gapfruit AG