On Mon, 28 Jan 2019 at 01:21, Dan Rue dan.rue@linaro.org wrote:
On Fri, Jan 25, 2019 at 04:54:27PM +0000, Neil Williams wrote:
On Fri, 25 Jan 2019 at 15:39, Dan Rue dan.rue@linaro.org wrote:
On Thu, Jan 24, 2019 at 09:45:50AM +0000, Neil Williams wrote:
On Tue, 22 Jan 2019 at 21:38, Dan Rue dan.rue@linaro.org wrote:
On Mon, Jan 21, 2019 at 11:08:07AM +0000, Neil Williams wrote:
On Fri, 11 Jan 2019 at 20:28, Dan Rue dan.rue@linaro.org wrote:
Isn't there just an option to eat the first =>, or, to not send the extra \n? I'm missing something in my understanding.
No, because we don't have the data to know, for certain, whether this is something that LAVA can fix. "Just consuming the first prompt" produces a high risk of timing errors where the first prompt is missed and the test job hangs until the timeout.
It's possible that it's also related to the annoying U-Boot behaviour of repeating the last shell command every time the shell receives an empty newline instead of merely issuing a prompt.
In other situations, setting the boot_character_delay fixes the problem, indicating that at least in some cases, this is related to how the board receives keyboard input and how the buffer is handled within U-Boot.
There have been a lot of guesses in this area. A range of people have tried a range of solutions on a wide range of different U-Boot configurations without actually establishing any useful data on which config options on which versions show which behaviour and which combinations are fixed by which method.
A methodical approach is what is required to fix this intermittent problem. We need reliable, deterministic data on exactly what happens with each permutation.
Good news - there is an option to change the default behavior of sending a new line with the interrupt character during uboot. Matt pointed me to the code and we found that I just had to set interrupt-newline to False.
OK, so that needs documentation in https://master.lavasoftware.org/static/docs/v2/integrate-uboot.html#configur...
I did have to make the following change to the base template to allow it to be used for uboot (I guess it was written for grub).
https://git.lavasoftware.org/danrue/lava/commit/ab2ea1f817fe264e5671cce21a65...
This change looks ok. It would be good to have the documentation change in the same merge request.
The docs content would be particularly useful as a new section at the same level as Configuration and Prompts. Crucially, the section needs to describe the symptoms and how to detect the need for this option. I don't know the source of U-Boot at all but if there is a chance that this is somehow related to a configuration option within the U-Boot build or something which can be detected on the device after U-Boot has been deployed, it would be very useful to include such content. Feel free to include a link to this thread in the list archive for this list. https://lists.lavasoftware.org/pipermail/lava-users/2019-January/001533.html
With an addition to the docs, your branch can be turned into a merge request and I'd expect that to be accepted, subject to the normal CI.
I'm not sure if that's the right place for the change but if it is I'm happy to submit it.
So, with the above base template change, I added the following line to my device template:
{% set uboot_interrupt_newline = False %}
This option also does not seem to be documented, but again, I'm not sure where the correct place is to document it.
https://master.lavasoftware.org/static/docs/v2/integrate-uboot.html#configur...
The source in git for this page is doc/v2/integrate-uboot.rst
I updated the commit to include documentation for this option as suggested, as well as interrupt_char at https://git.lavasoftware.org/lava/lava/merge_requests/350
I was a bit confused between interrupt-character (in base.jinja2), interrupt_char (in base-uboot.jinja2), and uboot_interrupt_character (in base.jinja2). One defaults to '', one to ' ', and the source comment in base-uboot.jinja2 disagreed with the line of code following it... I documented the behavior based on what I observed empirically, but I'm not certain of its correctness.
base.jinja2: interrupt-character: '{{ uboot_interrupt_character | default(" ") }}'
This is the base constant for u-boot.
base-uboot.jinja2: interrupt_char: "{{ interrupt_char }}" base-uboot.jinja2: interrupt_char: "{{ interrupt_char|default('') }}"
These are the method specific variables. The first only affects devices which require loading fastboot from U-Boot.
There are a couple of different use cases and there's been a couple of different changes, some of which have not affected all use cases.
The relevant code is the BootloaderInterruptAction class in https://git.lavasoftware.org/lava/lava/blob/master/lava_dispatcher/actions/b...
This needs some reworking but it's hard to do that when so many different devices have varying behaviour in this area. (It's one of the reasons for developing lavafed.)
So it's something we need to revisit and simplify.