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