]> git.dujemihanovic.xyz Git - u-boot.git/log
u-boot.git
14 months agoserial: sh: Fix compile error when lacking HSCIF support
Paul Barker [Mon, 16 Oct 2023 09:25:23 +0000 (10:25 +0100)]
serial: sh: Fix compile error when lacking HSCIF support

If we attempt to compile serial_sh.c for a system which lacks HSCIF
support (e.g. R8A7740), we see the following compilation error:

    In file included from drivers/serial/serial_sh.c:20:
    drivers/serial/serial_sh.c: In function ‘sh_serial_init_generic’:
    drivers/serial/serial_sh.h:429:35: warning: implicit declaration of function ‘sci_HSSRR_out’; did you mean ‘sci_SCSCR_out’? [-Wimplicit-function-declaration]
      429 | #define sci_out(port, reg, value) sci_##reg##_out(port, value)
          |                                   ^~~~
    drivers/serial/serial_sh.c:62:17: note: in expansion of macro ‘sci_out’
       62 |                 sci_out(port, HSSRR, HSSRR_SRE | HSSRR_SRCYC8);
          |                 ^~~~~~~

To fix this, only try to support access to the HSSRR register for SoCs
where it actually exists.

Support for the RZ/G2L will be introduced in following patches, which
selects CONFIG_RCAR_64 but does not have HSCIF interfaces, so check for
CONFIG_RCAR_GEN2 || CONFIG_RCAR_GEN3 || CONFIG_RCAR_GEN4 to determine if
HSCIF is present.

Fixes: bbe36e29ca2c ('serial: sh: Add HSCIF support for R-Car SoC')
Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Cc: Hai Pham <hai.pham.ud@renesas.com>
Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
14 months agoMerge tag 'dm-pull-13oct23' of https://source.denx.de/u-boot/custodians/u-boot-dm
Tom Rini [Sat, 14 Oct 2023 14:50:20 +0000 (10:50 -0400)]
Merge tag 'dm-pull-13oct23' of https://source.denx.de/u-boot/custodians/u-boot-dm

improvements with dev_read_addr_..._ptr()
scan all entries in multi-device boot_targets
EFI empty-capsule support

14 months agoMerge branch '2023-10-13-firmware-scmi-updates'
Tom Rini [Sat, 14 Oct 2023 14:47:52 +0000 (10:47 -0400)]
Merge branch '2023-10-13-firmware-scmi-updates'

- Fix a memset call in the optee_agent code.

Then to quote the author for the rest of the changes:
This patch series allows users to access SCMI base protocol provided by
SCMI server (platform). See SCMI specification document v3.2 beta[1]
for more details about SCMI base protocol.

What is currently not implemented is
- SCMI_BASE_NOTIFY_ERRORS command and notification callback mechanism

This feature won't be very useful in the current U-Boot environment.

[1] https://developer.arm.com/documentation/den0056/e/?lang=en

14 months agofirmware: scmi: Fix clearing variable
Francois Berder [Tue, 10 Oct 2023 17:44:32 +0000 (19:44 +0200)]
firmware: scmi: Fix clearing variable

The sess variable in open_channel was not entirely
cleared to zero at the start of this function.

This commit ensures that the entire struct is cleared.

Signed-off-by: Francois Berder <fberder@outlook.fr>
14 months agofirmware: scmi: add a check against availability of protocols
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:07 +0000 (19:07 +0900)]
firmware: scmi: add a check against availability of protocols

Now that we have Base protocol support, we will be able to check if a given
protocol is really supported by the SCMI server (firmware).

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agotest: dm: add SCMI base protocol test
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:06 +0000 (19:07 +0900)]
test: dm: add SCMI base protocol test

Added is a new unit test for SCMI base protocol, which will exercise all
the commands provided by the protocol, except SCMI_BASE_NOTIFY_ERRORS.
  $ ut dm scmi_base
It is assumed that test.dtb is used as sandbox's device tree.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agosandbox: remove SCMI base node definition from test.dts
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:05 +0000 (19:07 +0900)]
sandbox: remove SCMI base node definition from test.dts

SCMI base protocol is mandatory and doesn't need to be listed in a device
tree.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: install base protocol to SCMI agent
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:04 +0000 (19:07 +0900)]
firmware: scmi: install base protocol to SCMI agent

SCMI base protocol is mandatory, and once SCMI node is found in a device
tree, the protocol handle (udevice) is unconditionally installed to
the agent. Then basic information will be retrieved from SCMI server via
the protocol and saved into the agent instance's local storage.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agotest: dm: simplify SCMI unit test on sandbox
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:03 +0000 (19:07 +0900)]
test: dm: simplify SCMI unit test on sandbox

Adding SCMI base protocol makes it inconvenient to hold the agent instance
(udevice) locally since the agent device will be re-created per each test.
Just remove it and simplify the test flows.
The test scenario is not changed at all.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: fake base protocol commands on sandbox
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:02 +0000 (19:07 +0900)]
firmware: scmi: fake base protocol commands on sandbox

This is a simple implementation of SCMI base protocol for sandbox.
The main use is in SCMI unit test.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: add a version check against base protocol
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:01 +0000 (19:07 +0900)]
firmware: scmi: add a version check against base protocol

In SCMI base protocol version 2 (0x20000), new interfaces,
BASE_SET_DEVICE_PERMISSIONS/BASE_SET_PROTOCOL_PERMISSIONS/
BASE_RESET_AGENT_CONFIGURATION, were added. Moreover, the api of
BASE_DISCOVER_AGENT was changed to support self-agent discovery.

So the driver expects SCMI firmware support version 2 of base protocol.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: implement SCMI base protocol
AKASHI Takahiro [Wed, 11 Oct 2023 10:07:00 +0000 (19:07 +0900)]
firmware: scmi: implement SCMI base protocol

SCMI base protocol is mandatory according to the SCMI specification.

With this patch, SCMI base protocol can be accessed via SCMI transport
layers. All the commands, except SCMI_BASE_NOTIFY_ERRORS, are supported.
This is because U-Boot doesn't support interrupts and the current transport
layers are not able to handle asynchronous messages properly.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agotest: dm: add protocol-specific channel test
AKASHI Takahiro [Wed, 11 Oct 2023 10:06:59 +0000 (19:06 +0900)]
test: dm: add protocol-specific channel test

Any SCMI protocol may have its own channel.
Test this feature on sandbox as the necessary framework was added
in a prior commit.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: framework for installing additional protocols
AKASHI Takahiro [Wed, 11 Oct 2023 10:06:58 +0000 (19:06 +0900)]
firmware: scmi: framework for installing additional protocols

This framework allows SCMI protocols to be installed and bound to the agent
so that the agent can manage and utilize them later.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: move scmi_bind_protocols() backward
AKASHI Takahiro [Wed, 11 Oct 2023 10:06:57 +0000 (19:06 +0900)]
firmware: scmi: move scmi_bind_protocols() backward

Move the location of scmi_bind_protocols() backward for changes
in later patches.
There is no change in functionality.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: support dummy channels for sandbox agent
AKASHI Takahiro [Wed, 11 Oct 2023 10:06:56 +0000 (19:06 +0900)]
firmware: scmi: support dummy channels for sandbox agent

In sandbox scmi agent, channels are not used at all. But in this patch,
dummy channels are supported in order to test protocol-specific channels.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agofirmware: scmi: use a protocol's own channel if assigned
AKASHI Takahiro [Wed, 11 Oct 2023 10:06:55 +0000 (19:06 +0900)]
firmware: scmi: use a protocol's own channel if assigned

SCMI specification allows any protocol to have its own channel for
the transport. While the current SCMI driver may assign its channel
from a device tree, the core function, devm_scmi_process_msg(), doesn't
use a protocol's channel, but always use an agent's channel.

With this commit, devm_scmi_process_msg() tries to find and use
a protocol's channel. If it doesn't exist, use an agent's.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agoscmi: refactor the code to hide a channel from devices
AKASHI Takahiro [Wed, 11 Oct 2023 10:06:54 +0000 (19:06 +0900)]
scmi: refactor the code to hide a channel from devices

The commit 85dc58289238 ("firmware: scmi: prepare uclass to pass channel
reference") added an explicit parameter, channel, but it seems to make
the code complex.

Hiding this parameter will allow for adding a generic (protocol-agnostic)
helper function, i.e. for PROTOCOL_VERSION, in a later patch.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
14 months agoMerge https://source.denx.de/u-boot/custodians/u-boot-usb
Tom Rini [Fri, 13 Oct 2023 20:14:34 +0000 (16:14 -0400)]
Merge https://source.denx.de/u-boot/custodians/u-boot-usb

- atmel gadget controller fix

14 months agobinman: capsule: Add support for generating EFI empty capsules
Sughosh Ganu [Tue, 10 Oct 2023 09:10:59 +0000 (14:40 +0530)]
binman: capsule: Add support for generating EFI empty capsules

Add support in binman for generating EFI empty capsules. These
capsules are used in the FWU A/B update feature. Also add test cases
in binman for the corresponding code coverage.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agobtool: mkeficapsule: Add support for EFI empty capsule generation
Sughosh Ganu [Tue, 10 Oct 2023 09:10:58 +0000 (14:40 +0530)]
btool: mkeficapsule: Add support for EFI empty capsule generation

Add a method to the mkeficapsule bintool to generate empty
capsules. These are capsules needed for the FWU A/B update feature.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agobinman: capsule: Use dumped capsule header contents for verification
Sughosh Ganu [Tue, 10 Oct 2023 09:10:57 +0000 (14:40 +0530)]
binman: capsule: Use dumped capsule header contents for verification

The various fields of a generated capsule are currently verified
through hard-coded offsets. Use the dump-capsule feature for dumping
the capsule header contents and use those for capsule verification.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agobinman: capsule: Remove superfluous [address, size]-cells properties
Sughosh Ganu [Tue, 10 Oct 2023 09:10:56 +0000 (14:40 +0530)]
binman: capsule: Remove superfluous [address, size]-cells properties

The #address-cells and #size-cells are not needed for running the
capsule generation binman tests. Remove the superfluous properties.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agodoc: capsule: Add documentation for the capsule dump feature
Sughosh Ganu [Tue, 10 Oct 2023 09:10:55 +0000 (14:40 +0530)]
doc: capsule: Add documentation for the capsule dump feature

Add documentation to explain the printing of the capsule headers
through the mkeficapsule tool.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agotools: mkeficapsule: Add support to print capsule headers
Sughosh Ganu [Tue, 10 Oct 2023 09:10:54 +0000 (14:40 +0530)]
tools: mkeficapsule: Add support to print capsule headers

Add support to dump the contents of capsule headers. This is useful as
a debug feature for checking the contents of the capsule headers, and
can also be used in capsule verification.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agotreewide: use dev_read_addr_*_ptr() where appropriate
Matthias Schiffer [Wed, 27 Sep 2023 13:33:34 +0000 (15:33 +0200)]
treewide: use dev_read_addr_*_ptr() where appropriate

A follow-up to commit 842fb5de424e
("drivers: use devfdt_get_addr_size_index_ptr when cast to pointer")
and commit 320a1938b6f7
("drivers: use devfdt_get_addr_index_ptr when cast to pointer").

In addition to using the *_ptr variants of these functions where the
address is cast to a pointer, this also changes devfdt_get_addr_*() to
dev_read_addr_*() in a few places. Some variable and field types are
changed from fdt_addr_t or phys_addr_t to void* where the cast was
happening later.

This patch fixes a number of compile warnings when building a 32bit
U-Boot with CONFIG_PHYS_64BIT=y. In some places, it also fixes error
handling where the return value of dev_read_addr() etc. was checked for
NULL instead of FDT_ADDR_T_NONE.

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agopinctrl: single: fix compile warnings with PHYS_64BIT on 32bit
Matthias Schiffer [Wed, 27 Sep 2023 13:33:33 +0000 (15:33 +0200)]
pinctrl: single: fix compile warnings with PHYS_64BIT on 32bit

pinctrl-single uses fdt_addr_t and phys_addr_t inconsistently, but both
are wrong to be passed to readb() etc., which expect a pointer or
pointer-sized integer. Change the driver to use
dev_read_addr_size_index_ptr(), so we consistently deal with void*
(except for the sandbox case and single_get_pin_muxing()).

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Add missing mapmem.h header:
Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocore: introduce dev_read_addr_name[_size]_ptr() functions
Matthias Schiffer [Wed, 27 Sep 2023 13:33:32 +0000 (15:33 +0200)]
core: introduce dev_read_addr_name[_size]_ptr() functions

Same as dev_read_addr_name[_size](), but returns a pointer, cast
through map_sysmem().

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agocore: return FDT_ADDR_T_NONE from devfdt_get_addr_[size_]name() on errors
Matthias Schiffer [Wed, 27 Sep 2023 13:33:31 +0000 (15:33 +0200)]
core: return FDT_ADDR_T_NONE from devfdt_get_addr_[size_]name() on errors

Checking for the error cast to fdt_addr_t is rather awkward - IS_ERR()
can be used, but it's not really made to be used on fdt_addr_t, which
may not even be the same size as a native pointer.

Most places in U-Boot only check for FDT_ADDR_T_NONE; let's adjust the
error return to match the expectation.

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agocore: fix doc comments of dev_read_addr*() and related functions
Matthias Schiffer [Wed, 27 Sep 2023 13:33:30 +0000 (15:33 +0200)]
core: fix doc comments of dev_read_addr*() and related functions

- The dev_read_addr_name*() family of functions has no "index" argument,
  doc comments should refer to "name"
- Specify the error return for several devfdt_get_addr*() functions

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agobinman: bintool: Change make target arg type from string to list
Lukas Funke [Wed, 4 Oct 2023 08:56:35 +0000 (10:56 +0200)]
binman: bintool: Change make target arg type from string to list

The argument type of `build_from_git` was changed from string to list
in d71e7116997f14097735f04cc7847f0a68dbc485.

This commit adapts the argument type of all bintools using this
function.

Signed-off-by: Lukas Funke <lukas.funke@weidmueller.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
14 months agosandbox: fix spl_board_init
Heinrich Schuchardt [Tue, 3 Oct 2023 00:59:46 +0000 (02:59 +0200)]
sandbox: fix spl_board_init

sandbox_spl_defconfig with CONFIG_SPL_UNIT_TEST=n fails to build.

    in function `spl_board_init':
    arch/sandbox/cpu/spl.c:134:(.text.spl_board_init+0x4a):
    undefined reference to `ut_run_list'

Add the missing configuration check.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
14 months agobootstd: Scan all bootdevs in a boot_targets entry
Simon Glass [Sat, 23 Sep 2023 20:50:15 +0000 (14:50 -0600)]
bootstd: Scan all bootdevs in a boot_targets entry

When the boot_targets environment variable is used with the distro-boot
scripts, each device is included individually. For example, if there
are three mmc devices, then we will have something like:

   boot_targets="mmc0 mmc1 mmc2"

In contrast, standard boot supports specifying just the uclass, i.e.:

   boot_targets="mmc"

The intention is that this should scan all MMC devices, but in fact it
currently only scans the first.

Update the logic to handle this case, without required BOOTSTD_FULL to
be enabled.

I believe at least three people reported this, but I found two.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reported-by: Date Huang <tjjh89017@hotmail.com>
Reported-by: Vincent Stehlé <vincent.stehle@arm.com>
14 months agoMerge tag 'efi-2024-01-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi
Tom Rini [Fri, 13 Oct 2023 15:08:10 +0000 (11:08 -0400)]
Merge tag 'efi-2024-01-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi

Pull request efi-2024-01-rc1

Documentation:

* Bump urllib3 version
* Migrate Renesas board docs to rst
* Link an introduction video

UEFI

* Use same GUID as EDK II for auto-created boot options
* Clean up BitBlt test

14 months agoMerge tag 'xilinx-for-v2024.01-rc1-v3' of https://source.denx.de/u-boot/custodians...
Tom Rini [Fri, 13 Oct 2023 12:45:55 +0000 (08:45 -0400)]
Merge tag 'xilinx-for-v2024.01-rc1-v3' of https://source.denx.de/u-boot/custodians/u-boot-microblaze

Xilinx changes for v2024.01-rc1 v3

clk:
- remove additional compatible strings for Versal NET

net:
- zynq_gem: Fix clock calculation for MDC for higher frequencies

pinctrl:
- core: Extend pinmux status buffere size
- zynqmp driver: Show also tristate configuration

test:
- add test case for pxe get

Xilinx:
- describe SelectMAP boot mode

Zynq:
- Fix nand description in DT

ZynqMP:
- DTS sync patches with kernel and also W=1 related fixes
- Add support for KD240, zcu670, e-a2197 with x-prc cards, SC revB/C with i2c
  description for other SC based boards
- k24 psu_init cleanup

14 months agoMerge tag 'u-boot-nand-20231013' of https://source.denx.de/u-boot/custodians/u-boot...
Tom Rini [Fri, 13 Oct 2023 12:44:22 +0000 (08:44 -0400)]
Merge tag 'u-boot-nand-20231013' of https://source.denx.de/u-boot/custodians/u-boot-nand-flash

Pull request for u-boot-nand-20231013

The first 5 patches are from Mikhail Kshevetskiy, aligning the mtd spinand
core with kernel version 5.15.43, fixing a bug on Winbond, and adding
support for Winbond W25NO2KV.

The other 2 patches are from Patrick Delaunay and they fix a bug and mark
bad the MTD block on erase error.

14 months agousb: gadget: atmel: fix transfer of queued requests
Artur Rojek [Wed, 13 Sep 2023 15:00:58 +0000 (17:00 +0200)]
usb: gadget: atmel: fix transfer of queued requests

In the existing implementation, multiple requests queued up on an
endpoint are subject to getting evicted without transmission.

For both control and bulk endpoints, their respective logic found in
usba_control_irq()/usba_ep_irq() guarantees that TX FIFO is empty before
data is sent out, and that request_complete() gets called once the
transaction has been finished. At this point however, if any additional
requests are found on the endpoint queue, they will be processed by
submit_next_request(), which makes no checks against the above
conditions, trashing data on a busy FIFO and neglecting completion
handlers.

Fix the above issues by removing the calls to submit_next_request(),
and thus forcing the pending requests to be processed on the next pass
of the respective endpoint logic. While at it, remove a DBG message, as
that branch becomes part of regular flow.

This restores mass storage mode operation on Microchip ATSAMA5D27 SoC.

Signed-off-by: Artur Rojek <artur@conclusive.pl>
14 months agodfu: mtd: mark bad the MTD block on erase error
Patrick Delaunay [Mon, 5 Jun 2023 07:52:08 +0000 (09:52 +0200)]
dfu: mtd: mark bad the MTD block on erase error

In the MTD DFU backend, it is needed to mark the NAND block bad when the
erase failed with the -EIO error, as it is done in UBI and JFFS2 code.

This operation is not done in the MTD framework, but the bad block
tag (in BBM or in BBT) is required to avoid to write data on this block
in the next DFU_OP_WRITE loop in mtd_block_op(): the code skip the bad
blocks, tested by mtd_block_isbad().

Without this patch, when the NAND block become bad on DFU write operation
- low probability on new NAND - the DFU write operation will always failed
because the failing block is never marked bad.

This patch also adds a test to avoid to request an erase operation on a
block already marked bad; this test is not performed in MTD framework
in mtd_erase().

Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
14 months agodfu: mtd: fix the trace when limit is reached
Patrick Delaunay [Mon, 5 Jun 2023 07:52:07 +0000 (09:52 +0200)]
dfu: mtd: fix the trace when limit is reached

The offset variable = 'off' used in the error trace when limit is reach
on erase operation is incorect as 'erase_op.addr' is used in the loop.
This patch corrects the copy paste issue between the erase loop and
the write loop.

This patch also adds the 'remaining' information to allow to debug of
limit issues.

Fixes: 6015af28ee6d ("dfu: add backend for MTD device")
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
14 months agomtd: spinand: winbond: add Winbond W25N02KV flash support
Mikhail Kshevetskiy [Tue, 10 Jan 2023 11:58:42 +0000 (12:58 +0100)]
mtd: spinand: winbond: add Winbond W25N02KV flash support

Add support of Winbond W25N02KV flash

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20221010105110.446674-2-mikhail.kshevetskiy@iopsys.eu
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> (U-Boot port)
Link: https://lore.kernel.org/all/20230110115843.391630-5-frieder@fris.de
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
14 months agomtd: spinand: winbond: fix flash identification
Mikhail Kshevetskiy [Tue, 10 Jan 2023 11:58:41 +0000 (12:58 +0100)]
mtd: spinand: winbond: fix flash identification

Winbond uses 3 bytes to identify flash: vendor_id, dev_id_0, dev_id_1,
but current driver uses only first 2 bytes of it for devices
identification. As result Winbond W25N02KV flash (id_bytes: EF, AA, 22)
is identified as W25N01GV (id_bytes: EF, AA, 21).

Fix this by adding missed identification bytes.

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20221010105110.446674-1-mikhail.kshevetskiy@iopsys.eu
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> (U-Boot port)
Link: https://lore.kernel.org/all/20230110115843.391630-4-frieder@fris.de
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
14 months agomtd/spinand: sync supported devices with linux-5.15.43
Mikhail Kshevetskiy [Tue, 10 Jan 2023 11:58:40 +0000 (12:58 +0100)]
mtd/spinand: sync supported devices with linux-5.15.43

This adds more supported spinand devices from the Linux kernel
implementation.

This does not include the latest kernel implementation as this would
require a substantial amount of extra work due to the missing
ECC engine abstraction layer in U-Boot.

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> (commit message)
Link: https://lore.kernel.org/all/20230110115843.391630-3-frieder@fris.de
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
14 months agomtd/spinand: sync core spinand code with linux-5.10.118
Mikhail Kshevetskiy [Tue, 10 Jan 2023 11:58:39 +0000 (12:58 +0100)]
mtd/spinand: sync core spinand code with linux-5.10.118

This brings us closer to the current Linux kernel implementation of
the spinand core and makes backporting features and fixes easier.

This does not include the latest kernel implementation as this would
require a substantial amount of extra work due to the missing
ECC engine abstraction layer in U-Boot.

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> (add commit message)
Link: https://lore.kernel.org/all/20230110115843.391630-2-frieder@fris.de
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
14 months agomtd/spinand: rework detect procedure for different READ_ID operation
Mikhail Kshevetskiy [Tue, 10 Jan 2023 11:58:38 +0000 (12:58 +0100)]
mtd/spinand: rework detect procedure for different READ_ID operation

Currently there are 3 different variants of read_id implementation:
1. opcode only. Found in GD5FxGQ4xF.
2. opcode + 1 addr byte. Found in GD5GxGQ4xA/E
3. opcode + 1 dummy byte. Found in other currently supported chips.

Original implementation was for variant 1 and let detect function
of chips with variant 2 and 3 to ignore the first byte. This isn't
robust:

1. For chips of variant 2, if SPI master doesn't keep MOSI low
during read, chip will get a random id offset, and the entire id
buffer will shift by that offset, causing detect failure.

2. For chips of variant 1, if it happens to get a devid that equals
to manufacture id of variant 2 or 3 chips, it'll get incorrectly
detected.

This patch reworks detect procedure to address problems above. New
logic do detection for all variants separatedly, in 1-2-3 order.
Since all current detect methods do exactly the same id matching
procedure, unify them into core.c and remove detect method from
manufacture_ops.

This is a rework of Chuanhong Guo <gch981213@gmail.com> patch
submitted to linux kernel

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Link: https://lore.kernel.org/all/20230110115843.391630-1-frieder@fris.de
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
14 months agoMerge branch '2023-10-12-assorted-TI-platform-updates'
Tom Rini [Thu, 12 Oct 2023 21:02:51 +0000 (17:02 -0400)]
Merge branch '2023-10-12-assorted-TI-platform-updates'

- A few more updates for various TI platforms

14 months agoarm: mach-k3: j721s2_init: Enable memory with CONFIG_K3_J721E_DDRSS
Dominik Haller [Fri, 11 Aug 2023 10:04:44 +0000 (12:04 +0200)]
arm: mach-k3: j721s2_init: Enable memory with CONFIG_K3_J721E_DDRSS

Make that condition more generic by checking if the memory controller
driver is enabled instead of using the EVM's config.

Signed-off-by: Dominik Haller <d.haller@phytec.de>
14 months agoboard: ti: j721s2: MAINTAINERS: Update the MAINTAINERS File.
Manorit Chawdhry [Fri, 6 Oct 2023 04:46:01 +0000 (10:16 +0530)]
board: ti: j721s2: MAINTAINERS: Update the MAINTAINERS File.

Update the MAINTAINERS file and propose a new MAINTAINER for j721s2 due
to the previous MAINTAINER not being associated with TI.

Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
14 months agodocs: board: ti: Add j721s2_evm documentation
Manorit Chawdhry [Fri, 6 Oct 2023 04:46:00 +0000 (10:16 +0530)]
docs: board: ti: Add j721s2_evm documentation

Add the documentation for J721S2-EVM and SK-AM68

TRM for J721S2/AM68: https://www.ti.com/lit/pdf/spruj28
Product Page for J721S2: https://www.ti.com/tool/J721S2XSOMXEVM
Product Page for AM68: https://www.ti.com/tool/SK-AM68

Reviewed-by: Neha Malcom Francis <n-francis@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
14 months agoarm: dts: k3-am68: Sync from Linux tag v6.6-rc1
Manorit Chawdhry [Fri, 6 Oct 2023 04:45:59 +0000 (10:15 +0530)]
arm: dts: k3-am68: Sync from Linux tag v6.6-rc1

The following commit syncs the device tree from Linux tag
v6.6-rc1 to U-boot and fixes the following to be compatible with
the future syncs -

- Include k3-am68-sk-base-board.dts file

    Remove the duplicated pinmuxes from r5 and -u-boot.dtsi files and
    include k3-am68-sk-base-board.dts for Linux fixes to propagate
    to U-boot.

- Fixing the mcu_timer0

    Remove timer0 and use the mcu_timer0 defined in mcu-wakeup.dtsi

- Fixing secure proxy nodes

    Linux DT now have these nodes defined so remove them and rename to
    use the Linux DT ones.

- Remove cpsw node

    The compatible is now fixed and the node is not required in
    -u-boot specifically

- Remove aliases and chosen node

    Use these from Linux and don't override when not required.

- Remove /delete-property/ from sdhci nodes

    We have the necessary clock and dev data so remove these.

- Remove dummy_clocks and fs_loader0

    These weren't being used anywhere so remove it.

- Remove mcu_ringacc override

All these have been put in a single commit to not break the
bisectability.

Reviewed-by: Neha Malcom Francis <n-francis@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
14 months agoarm: dts: k3-j721s2: Sync from Linux tag v6.6-rc1
Manorit Chawdhry [Fri, 6 Oct 2023 04:45:58 +0000 (10:15 +0530)]
arm: dts: k3-j721s2: Sync from Linux tag v6.6-rc1

The following commit syncs the device tree from Linux tag
v6.6-rc1 to U-boot and fixes the following to be compatible with
the future syncs -

- Include k3-j721s2-common-proc-board.dts file

    Remove the duplicated pinmuxes from r5 and -u-boot.dtsi files and
    include k3-j721s2-common-proc-board.dts for Linux fixes to propagate
    to U-boot.

- Fixing the mcu_timer0

    Remove timer0 and use the mcu_timer0 defined in mcu-wakeup.dtsi

- Fixing secure proxy nodes

    Linux DT now have these nodes defined so remove them and rename to
    use the Linux DT ones.

- Remove cpsw node

    The compatible is now fixed and the node is not required in
    -u-boot specifically

- Remove aliases and chosen node

    Use these from Linux and don't override when not required.

- Remove /delete-property/ from sdhci nodes

    We have the necessary clock and dev data so remove these.

- Remove dummy_clocks and fs_loader0

    These weren't being used anywhere so remove it.

- Remove mcu_ringacc override

All these have been put in a single commit to not break the
bisectability.

Reviewed-by: Neha Malcom Francis <n-francis@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
14 months agoarm: mach-k3: j721s2: Add mcu_timer0 id to the dev list
Manorit Chawdhry [Fri, 6 Oct 2023 04:45:57 +0000 (10:15 +0530)]
arm: mach-k3: j721s2: Add mcu_timer0 id to the dev list

mcu_timer0 is used by u-boot as the tick-timer. Add it to the soc
devices lsit so it an be enabled via the k3 power controller.

Reviewed-by: Neha Malcom Francis <n-francis@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
14 months agoRevert "arm: dts: k3-j7*: ddr: Update to 0.10 version of DDR config tool"
Manorit Chawdhry [Fri, 6 Oct 2023 04:45:56 +0000 (10:15 +0530)]
Revert "arm: dts: k3-j7*: ddr: Update to 0.10 version of DDR config tool"

The update causes instability in am68-sk boards so revert the patch in
the meantime till fix is available.

This reverts commit f1edf4bb6aa19732574ac23ca90cb9a0ba395ec1.

Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
14 months agoconfigs: j721s2_evm_r5_defconfig: Increase malloc pool size in DRAM
Udit Kumar [Fri, 6 Oct 2023 04:45:55 +0000 (10:15 +0530)]
configs: j721s2_evm_r5_defconfig: Increase malloc pool size in DRAM

The malloc capacity in DRAM at R5 SPL is set to 1MB which isn't
sufficient to load the new tispl.bin to
enable loading of tispl.bin the size is increased by 256KB to 1.25MB.

Cc: Nikhil M Jain <n-jain1@ti.com>
Signed-off-by: Udit Kumar <u-kumar1@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
Reviewed-by: Nikhil M Jain <n-jain1@ti.com>
14 months agoarm: dts: j7200: dts sync with Linux 6.6-rc1
Reid Tonking [Thu, 5 Oct 2023 18:12:58 +0000 (13:12 -0500)]
arm: dts: j7200: dts sync with Linux 6.6-rc1

Sync j7200 dts with Linux 6.6-rc1

- k3-j7200-r5-common-proc-board.dts now inherits from
  k3-j7200-common-proc-board.dts instead of k3-j7200-som-p0.dtsi. This
  allows us to trim down the r5 file considerably by using existing
  properties

- remove pimux nodes from r5 file

- remove duplicate nodes & node properties from r5/u-boot files

- mcu_timer0 now used instead of timer1

  mcu_timer0 device id added to dev-data.c file in order to work

- remove cpsw node

  This node is no longer required since the compatible is now fixed

- remove dummy_clock_19_2_mhz

  This node wasn't being used anyhere, so it was removed

- remove dummy_clock_200mhz

  main_sdhci0 & main_sdhci1 no longer need dummy clock for eMMC/SD

- fix secure proxy node

  mcu_secproxy changed to used secure_prxy_mcu which is already
  defined in k3-j7200-mcu-wakeup.dtsi

- removed &mcu_ringacc property override since they're present in
  v6.6-rc1

Signed-off-by: Reid Tonking <reidt@ti.com>
Reviewed-by: Nishanth Menon <nm@ti.com>
14 months agoarm: mach-k3: j7200: Add mcu_timer0 id to the dev list
Reid Tonking [Thu, 5 Oct 2023 18:12:57 +0000 (13:12 -0500)]
arm: mach-k3: j7200: Add mcu_timer0 id to the dev list

mcu_timer0 is now used as the tick timer in u-boot, so this adds the
timer to the soc device list so it can be enabled via the k3 power
controller.

Reviewed-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Reid Tonking <reidt@ti.com>
14 months agoboard: ti: am64x: Switch to standard boot flow
Roger Quadros [Thu, 5 Oct 2023 13:06:42 +0000 (16:06 +0300)]
board: ti: am64x: Switch to standard boot flow

Switch to using bootstd. Note with this change, we will stop using
distro_bootcmd and instead depend entirely on bootflow method of
starting the system up.

Drop header files that are no longer needed in am64x_evm.h.
k3_dfu.h is available via k3_dfu.env in am64x.env.

Drop unused macro CFG_SYS_SDRAM_BASE1.

Signed-off-by: Roger Quadros <rogerq@kernel.org>
Reviewed-by: Nishanth Menon <nm@ti.com>
14 months agoboard: ti: am62x: am62x.env: Fix boot_targets
Roger Quadros [Thu, 5 Oct 2023 13:06:41 +0000 (16:06 +0300)]
board: ti: am62x: am62x.env: Fix boot_targets

ti_mmc is not a valid boot_target for standard boot flow so
remove it. Prefer mmc1 (sd-card) over mmc0 (emmc).

Signed-off-by: Roger Quadros <rogerq@kernel.org>
Reviewed-by: Nishanth Menon <nm@ti.com>
14 months agoclk: ti: clk-sci: Notify AVS driver based upon clock rate
Udit Kumar [Thu, 21 Sep 2023 17:03:43 +0000 (22:33 +0530)]
clk: ti: clk-sci: Notify AVS driver based upon clock rate

AVS driver needs to be notified before or after clock change,
depending upon new rate is greater or less than current clock rate.

Fixes: 1e0aa873bc7cd ("clk: clk-ti-sci: Notify AVS driver upon setting clock rate")
Cc: Keerthy <j-keerthy@ti.com>
Signed-off-by: Udit Kumar <u-kumar1@ti.com>
14 months agoclk: ti: clk-k3: Notify AVS driver upon setting clock rate
Udit Kumar [Thu, 21 Sep 2023 17:00:38 +0000 (22:30 +0530)]
clk: ti: clk-k3: Notify AVS driver upon setting clock rate

AVS is enabled at R5 SPL stage, on few platforms like J721E
and J7200 clk-k3 is used instead if clk-sci driver.

Add support in clk-k3 driver as well to notify AVS driver
on setting clock rate so that voltage is changed accordingly.

Cc: Keerthy <j-keerthy@ti.com>
Signed-off-by: Udit Kumar <u-kumar1@ti.com>
14 months agoMerge branch '2023-10-12-expo-add-support-for-edting-lines-of-text'
Tom Rini [Thu, 12 Oct 2023 12:15:31 +0000 (08:15 -0400)]
Merge branch '2023-10-12-expo-add-support-for-edting-lines-of-text'

To quote the author:
So far expo only supports menus. These are quite flexible for various
kinds of settings, but cannot deal with free-form input, such as a
serial number or a machine name.

This series adds support for a textline object, which is a single line
of text. It has a maximum length and its value is stored within the expo
structure.

U-Boot already has a command-line editor which provides most of the
features needed by expo. But the code runs in its own loop and only
returns when the line is finished. This is not suitable for expo, which
must handle a keypress at a time, returning to its caller after each
one.

In order to use the CLI code, some significant refactoring is included
here. This mostly involves moving the internal loop of the CLI to a
separate function and recording its state in a struct, just as was done
for single keypresses some time back. A minor addition is support for
Ctrl-W to delete a word, since strangely this is currently only present
in the simple version.

The video-console system provides most of the features needed by
testline, but a few things are missing. This series provides:

- primitive cursor support so the user can see where he is typing
- saving and restoring of the text-entry context, so that expo can allow
  the user to continue where he left off, including deleting previously
  entered characters correctly (for Truetype)
- obtaining the nominal width of a string of n characters, so that a
  suitable width can be chosen for the textline object

Note that no support is provided for clearing the cursor. This was
addressed in a previous series[1] which could perhaps be rebased. For
this implementation, the cursor is therefore not enabled for the normal
command line, only for expo.

Reading and writing textline objects is supported for FDT and
environment, but not for CMOS RAM, since it would likely use too much
RAM to store a string.

In terms of code size, the overall size increase is 180 bytes for
Thumb02 boards, 160 of whcih is the addition of Ctrl-W to delete a word.

[1] https://patchwork.ozlabs.org/project/uboot/list/?series=280178&state=*

14 months agoefi_loader: use well-known guid for auto-created boot option
Masahisa Kojima [Thu, 12 Oct 2023 05:31:59 +0000 (14:31 +0900)]
efi_loader: use well-known guid for auto-created boot option

The boot option automatically created by efibootmgr is identified
by the special guid appended in the optional data of boot option.
The same mechanism is implemented in the EDK II reference
implementation, it uses the different guid from the one currently
U-Boot uses.
The guid indicating auto-created boot option is not defined in the
UEFI specification, but some userspace tools such as 'efivar' package
are aware of the guid used in EDK II as auto-created boot option.

So let's use the same guid as EDK II reference implementation.

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
14 months agoefi_selftest: BitBlt test
Heinrich Schuchardt [Sun, 24 Sep 2023 20:30:59 +0000 (22:30 +0200)]
efi_selftest: BitBlt test

The BitBlt test leaves the serial console output in disarray.

* Call ClearScreen() where needed.
* Test CheckEvent() for EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey
  via adding navigation keys
* Correct timer comment

For testing on the sandbox:

    CONFIG_CMD_BOOTEFI_SELFTEST=y
    CONFIG_CONSOLE_TRUETYPE=n
    $ ./u-boot -T -l
    => setenv efi_selftest block image transfer
    => bootefi selftest

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
14 months agodoc: Migrate Renesas board docs to rst
Paul Barker [Mon, 9 Oct 2023 11:11:36 +0000 (12:11 +0100)]
doc: Migrate Renesas board docs to rst

Some of the information in README.rmobile is obsolete, references
defconfigs which no longer exist in u-boot or has broken links. The
information which is still relevant is moved into the reStructuredText
documentation under `doc/board/renesas`, and `doc/README.rmobile` is
dropped.

The list of boards in `doc/board/renesas` is converted into a table so
it's easier to see which defconfig to use. The list is expanded based on
reviewing the current u-boot code and the contents of the eLinux wiki
[1] [2].

[1]: https://elinux.org/R-Car
[2]: https://elinux.org/RZ-G

Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
14 months agodoc: Add a short intro video
Simon Glass [Sun, 8 Oct 2023 21:35:56 +0000 (15:35 -0600)]
doc: Add a short intro video

This video covers the basics in a short time, so add a link to it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Paul Barker <paul.barker.ct@bp.renesas.com>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
14 months agocyclic: doc: Update documentation for CONFIG_CYCLIC_MAX_CPU_TIME_US
Weizhao Ouyang [Sat, 7 Oct 2023 10:52:36 +0000 (10:52 +0000)]
cyclic: doc: Update documentation for CONFIG_CYCLIC_MAX_CPU_TIME_US

Cyclic now just print a warning once instead of disabling the cyclic
function when the cyclic function upon exceeding CPU time usage.

Fixes: ddc8d36a7455 ("cyclic: Don't disable cylic function upon exceeding CPU time")
Signed-off-by: Weizhao Ouyang <o451686892@gmail.com>
Rephrase the paragraph.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
14 months agosphinx: Bump urllib3 version
Tom Rini [Thu, 5 Oct 2023 16:27:38 +0000 (12:27 -0400)]
sphinx: Bump urllib3 version

While not a direct issue for us, urllib3 before 1.26.17 is vulnerable to
CVE-2023-43804 to bump our version up.

Reported-by: GitHub dependabot
Signed-off-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Use urllib3 2.0.6
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
14 months agoexpo: Update documentation to include textline
Simon Glass [Mon, 2 Oct 2023 01:13:40 +0000 (19:13 -0600)]
expo: Update documentation to include textline

Update the expo documentation to include mention of this new object
type.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Update tests to include textline
Simon Glass [Mon, 2 Oct 2023 01:13:39 +0000 (19:13 -0600)]
expo: Update tests to include textline

Provide test coverage for the new expo object type, including building
and reading/writing settings.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Support building an expo with a textline
Simon Glass [Mon, 2 Oct 2023 01:13:38 +0000 (19:13 -0600)]
expo: Support building an expo with a textline

Add textline to the list of objects which tthe expo builder can build.
This allows them to be provided in the description.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Plumb in textline to cedit
Simon Glass [Mon, 2 Oct 2023 01:13:37 +0000 (19:13 -0600)]
expo: Plumb in textline to cedit

Support textlines in the configuration editor.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Support handling any key in cedit
Simon Glass [Mon, 2 Oct 2023 01:13:36 +0000 (19:13 -0600)]
expo: Support handling any key in cedit

At present cedit only supports menu keys. For textline objects we need
to insert normal ASCII characters.

We also need to handle backspace, which is ASCII 9.

In fact, expo does not make use of all the menu keys, so partition
them accordingly and update the logic to support normal ASCII
characters, too.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agovideo: Mark truetype_measure() static
Simon Glass [Mon, 2 Oct 2023 01:13:35 +0000 (19:13 -0600)]
video: Mark truetype_measure() static

This function is not used outside this file, so mark it static.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Plumb in textlines to a scene
Simon Glass [Mon, 2 Oct 2023 01:13:34 +0000 (19:13 -0600)]
expo: Plumb in textlines to a scene

Provide an implementation for textlines in the scene code, so that they
are displayed correctly. Provide a way to have a border around the
textline, with the internal part being the same colour as the
background. This looks more natural.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Support opening a textline
Simon Glass [Mon, 2 Oct 2023 01:13:33 +0000 (19:13 -0600)]
expo: Support opening a textline

This object needs special handling when it is opened, to set up the CLI
and the vidconsole context. Add special support for this.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Add basic support for textline objects
Simon Glass [Mon, 2 Oct 2023 01:13:32 +0000 (19:13 -0600)]
expo: Add basic support for textline objects

A textline is a line of text which can be edited by the user. It has a
maximum length (in chracters) but otherwise there are no restrictions.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Add some scene fields needed for text entry
Simon Glass [Mon, 2 Oct 2023 01:13:31 +0000 (19:13 -0600)]
expo: Add some scene fields needed for text entry

Add the CLI state, a buffer to hold the old value of the text being
edited and a place to save vidconsole entry context. These will be use
by the textline object.

Set an upper limit on the maximum number of characters in a textline
object supported by expo, at least for now.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Allow rendering the background of any object
Simon Glass [Mon, 2 Oct 2023 01:13:30 +0000 (19:13 -0600)]
expo: Allow rendering the background of any object

So far only menus have a background. When other object types are
rendered, they may have a background too. Make this code more generic
so it will be usable by new object types.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Make calculation of an object bounding box generic
Simon Glass [Mon, 2 Oct 2023 01:13:29 +0000 (19:13 -0600)]
expo: Make calculation of an object bounding box generic

We want to support this for any object, not just menus. Move the code
around to allow this.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Add a function to write a property to a devicetree
Simon Glass [Mon, 2 Oct 2023 01:13:28 +0000 (19:13 -0600)]
expo: Add a function to write a property to a devicetree

When the devicetree is too small for the property being written, we need
to expand the devicetree and retry the write.

Put this logic into a function so it can be reused.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Allow highlighting other scene-object types
Simon Glass [Mon, 2 Oct 2023 01:13:27 +0000 (19:13 -0600)]
expo: Allow highlighting other scene-object types

So far only menus can be highlighted. With the coming addition of
text lines we need to be able to highlight other objects. Add a function
to determine whether an object can be highlighted.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Correct the logic for duplicate-ID detection
Simon Glass [Mon, 2 Oct 2023 01:13:26 +0000 (19:13 -0600)]
expo: Correct the logic for duplicate-ID detection

Update scene_txt_str() to account for the possibility that the passed-in
str_id may be 0

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Correct some swallowed errors in scene
Simon Glass [Mon, 2 Oct 2023 01:13:25 +0000 (19:13 -0600)]
expo: Correct some swallowed errors in scene

Return the reported error, rather than assuming it is -ENOMEM

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Use switch statements more for object types
Simon Glass [Mon, 2 Oct 2023 01:13:24 +0000 (19:13 -0600)]
expo: Use switch statements more for object types

In a lot of cases menus are the only objects which are have their own
behaviour in the cedit, e.g. to move between menus. With expo expanding
to support text, this is no-longer true.

Use a switch() statement so that we can simply insert a new 'case' for
the new object types.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agoexpo: Fix up comments for get_cur_menuitem_text() et al
Simon Glass [Mon, 2 Oct 2023 01:13:23 +0000 (19:13 -0600)]
expo: Fix up comments for get_cur_menuitem_text() et al

This internal function could use a comment. Add one.

Also tidy up a few other comments.

Signed-off-by: Simon Glass <sjg@chromium.org>
fixup: comments

14 months agoexpo: Add better error reporting
Simon Glass [Mon, 2 Oct 2023 01:13:22 +0000 (19:13 -0600)]
expo: Add better error reporting

When building an expo fails, show some information about which node
caused the problem. Use -ENOENT consistently when the ID is missing.
This makes it easier for the user to debug things.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agovideo: Support showing a cursor
Simon Glass [Mon, 2 Oct 2023 01:13:21 +0000 (19:13 -0600)]
video: Support showing a cursor

Add rudimentary support for displaying a cursor on a vidconsole. This
helps the user to see where text is being entered.

The implementation so far is very simple: the cursor is just a vertical
bar of fixed width and cannot be erased. To erase the cursor, the text
must be redrawn over it.

This is good enough for expo but will need enhancement to be useful for
the command-line console. For example, it could save and restore the
area behind the cursor.

For now, enable this only for expo, to reduce code size.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agovideo: Export vidconsole_entry_start()
Simon Glass [Mon, 2 Oct 2023 01:13:20 +0000 (19:13 -0600)]
video: Export vidconsole_entry_start()

At present this is called only when a newline is detected, since this
indicates the start of a line of text being entered.

Export this function so it can be used by expo, which may start a new
text line itself, without first writing out a newline.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agovideo: Allow saving and restoring text-entry state
Simon Glass [Mon, 2 Oct 2023 01:13:19 +0000 (19:13 -0600)]
video: Allow saving and restoring text-entry state

Text entry operates within a context which includes quite a bit of
information. For example, with Truetype fonts, each character in the
text string has a position stored, so that it is possible to
backspace to that character. This information is built up as strings
are drawn on the display.

For the command line, there is just a single context. It is created
when command-line entry starts and it is destroyed (or at least not
needed anymore) when the user presses <enter> to enter the command.

By contrast, expo needs to be able to switch in and out of a text-entry
context, since it is also displaying other objects in the scene.

Add a way to save and restore the entry context for a vidconsole. This
is only needed for the truetype vidconsole, so add a method for that,
storing the information in an abuf struct.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agovideo: Allow obtaining the nominal size of a string size
Simon Glass [Mon, 2 Oct 2023 01:13:18 +0000 (19:13 -0600)]
video: Allow obtaining the nominal size of a string size

At present there is a method for measuring text, but if the actual text
string is not known, it cannot be used.

For text editor we want to set the size of the entry box to cover the
expected text size. Add the concept of a 'norminal' size with a method
to calculate that for the vidconsole.

If the method is not implemented, fall back to using the font size,
which is sufficient for fixed-width fonts.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Add a function to set up a new cread
Simon Glass [Mon, 2 Oct 2023 01:13:17 +0000 (19:13 -0600)]
cli: Add a function to set up a new cread

Create a init function so that it is easy to use command-line reading.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Allow command completion to be disabled
Simon Glass [Mon, 2 Oct 2023 01:13:16 +0000 (19:13 -0600)]
cli: Allow command completion to be disabled

When inputting text outside the command line we don't want to use tab
for command completion. Add an option to control this.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Allow history to be disabled
Simon Glass [Mon, 2 Oct 2023 01:13:15 +0000 (19:13 -0600)]
cli: Allow history to be disabled

When inputting text outside the command line we don't want history to be
accessible. Add an option to control this.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Terminate the string in cread_line_process_ch()
Simon Glass [Mon, 2 Oct 2023 01:13:14 +0000 (19:13 -0600)]
cli: Terminate the string in cread_line_process_ch()

Rather than relying on the caller, terminate the string inside this
function. Do this each time we return, whether input is finished or
not. It is not needed when the input is aborted, since the string will
be discarded in that case.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Create a function to process characters
Simon Glass [Mon, 2 Oct 2023 01:13:13 +0000 (19:13 -0600)]
cli: Create a function to process characters

Move most of the inner loop from cread_line() into a new function. This
will allow using it from other code.

This involves adding a few more members to the state struct.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Unindent some code in cread_line()
Simon Glass [Mon, 2 Oct 2023 01:13:12 +0000 (19:13 -0600)]
cli: Unindent some code in cread_line()

Reduce the indentation level of this code so it is easier to review the
next patch, which moves it into a function.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Convert cread_line() to use a struct for the main vars
Simon Glass [Mon, 2 Oct 2023 01:13:11 +0000 (19:13 -0600)]
cli: Convert cread_line() to use a struct for the main vars

We want to reuse the editing code elsewhere. As a first step, move the
common variables into a struct. This will allow us to eventually put the
contents of the inner loop in a function, so it can be called from
elsewhere.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Use unsigned int instead of unsigned long
Simon Glass [Mon, 2 Oct 2023 01:13:10 +0000 (19:13 -0600)]
cli: Use unsigned int instead of unsigned long

The index values are not very large so it makes no sense to use a long
integer. Change these to uint instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Implement delete-word in cread_line()
Simon Glass [Mon, 2 Oct 2023 01:13:09 +0000 (19:13 -0600)]
cli: Implement delete-word in cread_line()

The Ctrl-W option is implemented in the cread_line_simple() but not in
the full version. This seems odd, so add an implementation.

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Drop #ifdefs for CONFIG_AUTO_COMPLETE in cli_readline
Simon Glass [Mon, 2 Oct 2023 01:13:08 +0000 (19:13 -0600)]
cli: Drop #ifdefs for CONFIG_AUTO_COMPLETE in cli_readline

Use a static inline and adjust the logic to avoid the need for #ifdefs in
cli_readline_into_buffer()

Signed-off-by: Simon Glass <sjg@chromium.org>
14 months agocli: Drop some #ifdefs in cli_readline
Simon Glass [Mon, 2 Oct 2023 01:13:07 +0000 (19:13 -0600)]
cli: Drop some #ifdefs in cli_readline

Add a few static inlines to avoid the need for #ifdefs in
cli_readline_into_buffer()

Signed-off-by: Simon Glass <sjg@chromium.org>