|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-users] i2c pass-through in mpsoc
Hi,
On 25/10/17 11:20, Jesús Lázaro wrote:
> Hi,
> On 25/10/17 11:31, Andre Przywara wrote:
>> On 25/10/17 08:18, Jesús Lázaro wrote:
>>> On 24/10/17 16:05, Julien Grall wrote:
> ...
>> So it looks like the I2C driver misses its clock (see below).
>>
>> It requires a power-domain, which points to pd-i2c1, and that looks
>> fine. But that also means that it's not optional, so you need the
>> compatible in the pd-i2c1 node.
>
> I have added the compatibility, copied from the Dom0 device tree, but no
> apparent change.
So does your Linux kernel have a driver which matches
"xlnx,zynqmp-genpd"? Because I can't find that string in mainline Linux.
Or are you using some Xilinx provided BSP kernel here?
>> So you have a 125 MHz oscillator(?) here, using phandle 2.
> That is correct, the amba clock is 125 MHz
>
> ...
>
>> Just for checking again: Failing to provide a working power-domain is
>> fatal to the device probe process, AFAIK. So are you positive that the
>> PD is working?
>
> Every peripheral has its own power domain, so I do not know how to test
> if it is working in the DomU.
"power-domains =" is a generic DT property handled by the Linux driver
framework. It should be possible to just remove that line, in case the
power-domain is already enabled.
>>
>>> compatible = "cdns,i2c-r1p14",
>>> "cdns,i2c-r1p10";
>>> clocks = <0x3 0x3e>;
>>
>> And here it references clock 62 in phandle 3, which I can't find
>> anywhere. The only clock you have is fixed clock, with #clock-cells = 0,
>> so it can't be referenced like above.
>> So I guess there must be another clock (divider, PLL?), which takes the
>> oscillator as an input and provides a clock 62.
>
> Those clocks are defined in the Dom0 devicetree. I have tried to add the
> clock-names property to that of Dom0 but no change.
Well, I think you are stumbling upon a general problem here: The device
driver needs a SoC specific clock, but you can't expose the whole SoC
clock device, because Dom0 needs this to drive all the other peripherals
and you don't want a DomU to mess with that.
As a quick hack you could learn the rate of that clock in Dom0:
# cat /sys/kernel/debug/clk/clk_summary
and then inject a fixed-clock with that frequency and refer to that from
the i2c node:
i2c0_clk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <the-frequency-here>;
phandle = <3>;
};
i2c@ff030000 {
clocks = <3>;
...
That should make the probe routine happy, but still doesn't mean that
your clock is enabled :-(
Chances are the Dom0 clock driver explicitly disables unused clocks. You
could try to add "clk_ignore_unused" to the Dom0 kernel command line,
but that would only take care of *not disabling* it, it would not enable
the clock explicitly. If you know how, you could try to enable the clock
from firmware (U-Boot command line, for instance).
>> So either you are missing the clock node or are not showing it here? And
>> is there any debug output from the driver? From a brief look I see that
>> the probe should complain about missing properties. The only thing that
>> can fail silently is the MMIO mapping.
>> In general it might be helpful to add pr_info() calls to understand
>> where it's failing.
>
> xl dmesg output complains about some writes to IACTIVER:
This is expected and totally unrelated, please ignore them. We can
hopefully remove them soonish.
But in fact I was hoping for the DomU dmesg, to see if the driver's
probe routine complains and what it says.
> (XEN) eemi: fn=19 No access to MMIO write fd1a00c4
> (XEN) zynqmp-pm: fn=13 No access to node 15
> (XEN) zynqmp-pm: fn=13 No access to node 16
> (XEN) zynqmp-pm: fn=13 No access to node 17
> (XEN) zynqmp-pm: fn=13 No access to node 18
That is interesting, though. But again I can't find anything in mainline
Xen which would produce this output, so are you using a vendor Xen tree?
In this case I am afraid I have to stop here, because I can't reason
about a hacked code base and don't have the time to dive into this. You
have to take this with the provider of this tree, I guess.
>>
>>> status = "okay";
>>> #address-cells = <0x1>;
>>> interrupts = <0x0 0x12 0x4>;
>>> #size-cells = <0x0>;
>>> reg = <0x0 0xff030000 0x0 0x1000>;
>>> clock-frequency = <0x61a80>;
>>
>> That is the 400KHz I2C bus *output* frequency, in case you wonder. So
>> it's no substitute to the input frequency.
>>
>>> };
>>>
>>> pd-i2c1 {
>>> compatible = "xlnx,zynqmp-genpd";
>>
>> I can't find this compatible in the Linux tree. Do you have a driver for
>> that? Does it probe?
>
> When launching without XEN, the i2c works, so it should be somewhere,
> although I cannot find it.
>
> If I modify the passthrough device tree to resemble the power domain
> part in the Dom0:
>
>
> power-domains {
> compatible = "xlnx,zynqmp-genpd";
> pd-i2c1 {
> #power-domain-cells = <0x0>;
> pd-id = <0x26>;
> linux,phandle = <0x1>;
> phandle = <0x1>;
> };
> };
>
>
> Then there is an error in the PM domain:
> [ 2.025089] cdns-i2c ff030000.i2c: failed to add to PM domain
> pd-i2c1: -19
Yes, this is because there is apparently no power-domain driver loaded
(because nothing knows about "xlnx,zynqmp-genpd"), so the device
framework stops loading the i2c driver.
Try to remove the power-domains line from the i2c node.
>>>
>>> I have also tried to change the i2c clocks part to <0x2 0x2> to match
>>> the misc clock phandle, but the result is the same.
>>
>> That doesn't help, because phandle 2 is a fixed clock with
>> #clock-cells = <0>, so it doesn't take an argument.
>> You need some clock with #clock-cells = <1>, or replace that clock
>> specifier with a single <0x2> (though I doubt that this works correctly,
>> unless the clock is already enabled).
>>
> Since the clock is used by other peripherals (and is in the Dom0
> devicetree) it should be running.
Well, the whole clock *device* is used by other peripherals, but unless
you actually use the I2C device in Dom0, I guess its clock will be disabled.
Cheers,
Andre.
_______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxx
https://lists.xen.org/xen-users
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |