Re: Kernel quirks on QNAP TS-109 (Marvell orion)
Martin Michlmayr <tbm@cyrius.com> writes:
> * Matthieu CERDA <kegeruneku+debianarm@ironflake.org> [2019-07-26 00:17]:
>> * On stretch stock kernel (4.9.0-9-marvell), qcontrol does not work:
>> calling it with "qcontrol --direct buzzer" outputs no error, but
>> does nothing, and the status led stays red/green after system has
>> booted.
>
> There are different potential causes for this but I think I've seen
> this before myself and this particular issue hasn't been reported.
>
>> * On stretch backports kernel (4.19.0-0.bpo.5-marvell), qcontrol does
>> not work as well, and more annoyingly, no Ethernet interface gets
>> initialized. dmesg shows a kernel oops. (copy attached)
>
> This sounds like https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908712
As noted in the bug, might worth reporting to Andrew. iirc ts109 are
devices without device tree and I'm curious to see how the kernel handle
things like of_clk_get(pdev->dev.of_node, i) on a system without DT.
of_clk_get() is coded like this:
struct clk *of_clk_get(struct device_node *np, int index)
{
return __of_clk_get(np, index, np->full_name, NULL);
}
afair in systems without DT, of_node is null, np->full_name has high
chances to crash. Again, as noted by the bug, it's likely coming from
96cb4342382290c935d933a08feb57d6d0183071 which is replacing
the devm_clk_get() call to of_clk_get().
Might worth trying to build a kernel with code looking like
(not even compile tested):
if (pdev->dev.of_node) {
for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
...
}
if (!IS_ERR(of_clk_get(pdev->dev.of_node, ARRAY_SIZE(dev->clk))))
...
else {
dev->clk[0] = clk_get(&pdev->dev, NULL);
if (!IS_ERR(dev->clk[0]))
clk_prepare_enable(dev->clk[0]);
}
Arnaud.
Reply to: