<div>Добрый вечер!</div><div> </div><div>19.10.2021, 16:17, "Ivan A. Melnikov" &lt;iv@altlinux.org&gt;:</div><blockquote><p>On Tue, Oct 19, 2021 at 12:21:08PM +0300, Дмитрий Терехин wrote:</p><blockquote>    Добрый день, коллеги!<br />     <br />    Имеется проблема с ядром 5.14.12 на плате Unmatched - при подаче команды<br />    poweroff питание на выключается.<br />     <br />    Приложил такой патч для исправления проблемы:<br />    <a href="http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=commitdiff;h=3de78e80c1a472ae940b225c1d2c3caa09f68adf" rel="noopener noreferrer">http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=commitdiff;h=3de78e80c1a472ae940b225c1d2c3caa09f68adf</a><br />    Нужные конфиги включены:<br />    CONFIG_POWER_RESET=y<br />    CONFIG_POWER_RESET_GPIO=y<br />    CONFIG_POWER_RESET_GPIO_RESTART=y<br />     <br />    Не помогло.<br />     <br />    В документации есть описание, похожее на сделанное в патче:<br />    <a href="http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=blob;f=Documentation/devicetree/bindings/power/reset/gpio-poweroff.txt;h=3e56c1b34a4c9cc9cb4da6dfc2cb24e0c0037499;hb=3de78e80c1a472ae940b225c1d2c3caa09f68adf#l37" rel="noopener noreferrer">http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=blob;f=Documentation/devicetree/bindings/power/reset/gpio-poweroff.txt;h=3e56c1b34a4c9cc9cb4da6dfc2cb24e0c0037499;hb=3de78e80c1a472ae940b225c1d2c3caa09f68adf#l37</a><br />     <br />    В лог выдаётся сообщение:<br />    dmesg | grep poweroff<br />    [    3.418791] poweroff-gpio gpio-poweroff: gpio_poweroff_probe:<br />    pm_power_off function already registered<br />    [    3.427377] poweroff-gpio: probe of gpio-poweroff failed with error -16<br />     <br />    Насколько я понял из кода, это значит, что функция gpio_poweroff_probe<br />    <a href="http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=blob;f=drivers/power/reset/gpio-poweroff.c;h=1c5af2fef1423af68dbbbd1880b8aab6480f2957;hb=3de78e80c1a472ae940b225c1d2c3caa09f68adf#l49" rel="noopener noreferrer">http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=blob;f=drivers/power/reset/gpio-poweroff.c;h=1c5af2fef1423af68dbbbd1880b8aab6480f2957;hb=3de78e80c1a472ae940b225c1d2c3caa09f68adf#l49</a><br />    завершилась с ошибкой и присвоение<br />    <a href="http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=blob;f=drivers/power/reset/gpio-poweroff.c;h=1c5af2fef1423af68dbbbd1880b8aab6480f2957;hb=3de78e80c1a472ae940b225c1d2c3caa09f68adf#l77" rel="noopener noreferrer">http://git.altlinux.org/people/jqt4/packages/?p=kernel-image.git;a=blob;f=drivers/power/reset/gpio-poweroff.c;h=1c5af2fef1423af68dbbbd1880b8aab6480f2957;hb=3de78e80c1a472ae940b225c1d2c3caa09f68adf#l77</a><br />    не выполнено.<br />     <br />    Однако, тестирование данной проблемы в системе, поставляемой с платой,<br />    показало, что сообщение об ошибке также выдаётся:<br />    dmesg | grep poweroff<br />    [    1.875417] poweroff-gpio gpio-poweroff: gpio_poweroff_probe:<br />    pm_power_off function already registered<br />    [    1.875431] poweroff-gpio: probe of gpio-poweroff failed with error -16<br />    Однако, после подачи команды poweroff плата выключается, несмотря на<br />    ошибку.<br />     <br />    Я предполагаю, что выключение платы происходит не с помощью функции<br />    gpio_poweroff_do_poweroff,<br />    как как-то иначе, только мне непонятно как.<br />     <br />    Подскажите, что можно сделать дальше, как исследовать данную проблему.</blockquote><p><br />Действительно, интересно, чему же на самом деле будет<br />равна pm_power_off. Я бы предположил, что это<br />sbi_power_off из arch/riscv/kernel/sbi.c.</p></blockquote><div> </div><div>Как оказалось, указателю pm_power_off присвоен адрес sbi_shutdown.</div><div> </div><div>Попробовал присвоить pm_power_off адрес gpio_poweroff_do_poweroff насильно,</div><div>примерно как в <a href="https://gist.github.com/pelwell/e4c5662c331fcae1e707" rel="noopener noreferrer" target="_blank">https://gist.github.com/pelwell/e4c5662c331fcae1e707</a></div><div> </div><div>Судя по тому, что сообщения</div><div>poweroff-gpio: probe of gpio-poweroff failed with error -16</div><div>пропали, это получилось.</div><div>Но выключаться плата не начала.</div><div> </div><div><div>С уважением</div><div>Дмитрий Терёхин</div></div><blockquote><p><br />OpenSBI 0.9 сам по себе не умеет выключать Unmatched.<br />Поддержка выключения в каком-то виде есть только<br />в master и в 0.9-alt2 в репозитории arei@. В апстриме,<br />кстати, кажется, немного другие изменения для этого,<br />но суть та же.<br /><br />В обоих случаях OpenSBI ориентируютется на devicetree,<br />который берёт от u-boot'а. Там должен быть node<br />описывающий gpio-poweroff.<br /> </p>--<br />  wbr,<br />    iv m.<br />.</blockquote>