summaryrefslogtreecommitdiff
path: root/doc/develop
AgeCommit message (Collapse)Author
6 daysMerge branch 'next'Tom Rini
6 daysPrepare v2026.07v2026.07Tom Rini
Signed-off-by: Tom Rini <[email protected]>
6 daystest: Stop running the patman testsSimon Glass
The patman tests no longer exist in the tree, so drop them from the test/run script (used by 'make tcheck' and friends) and from the tools-testing example in the documentation. Signed-off-by: Simon Glass <[email protected]>
6 daysdoc: Remove the patman documentationSimon Glass
The full patman manual now lives with the standalone patch-manager package, making the 1000-line copy in the tree redundant. Remove the in-tree manual, its README and the doc/develop/patman.rst toctree page. The sending-patches guide already introduces patman, so point it at the patch-manager package instead of the now-dead ':doc:' cross-reference and, with the manual gone, add a couple of lines on how the tool works. Point the SPI howto at that guide too, rather than repeating the install details. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Tom Rini <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]>
6 daysdoc: Move the b4 guide into sending_patchesSimon Glass
The b4 contributor guide sits in the coding-style document, which is an odd place for it. Move it into sending_patches.rst, next to the patman note, so both patch-sending tools are described together. The b4_contrib label moves with it, so the reference from process.rst still resolves. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> Reviewed-by: Tom Rini <[email protected]>
9 daystreewide: change email links from mailman to patch.msgid.link with message-idNeil Armstrong
In preparation of the migration of the mailman mailing-list currently hosted on the denx.de infrastructure, migrate the links in the code, comments and documentation to https://patch.msgid.link to be future proof and always link to the expected content data and uses the message-id in the URL which will help find the appropriate e-mail in the future. Signed-off-by: Neil Armstrong <[email protected]> Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Tom Rini <[email protected]>
2026-06-24doc: Add a warning about using RELOC_ADDR_TOPIlias Apalodimas
Since devices that can't DMA above 4GiB will misbehave with this option enabled add a warning on the documentation. Reviewed-by: Simon Glass <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]> Tested-by: Christophe Leroy (CS GROUP) <[email protected]>
2026-06-22Merge tag 'v2026.07-rc5' into nextTom Rini
Prepare v2026.07-rc5
2026-06-22Prepare v2026.07-rc5v2026.07-rc5Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-06-11Merge patch series "allow control DTB to double as "FIT image""Tom Rini
Rasmus Villemoes <[email protected]> says: The commit message for patch 1 explains what it is I'd like to be able to do, but here's some more background: For a long time, we've embedded the boot script in the U-Boot binary by building a bootscript.itb, and using a .dtsi like / { config { bootscript = /incbin/("/path/to/bootscript.itb"); }; }; which in turn is mentioned in CONFIG_DEVICE_TREE_INCLUDES, that bootscript.itb FIT image has been embedded in U-Boot's control dtb. Running that was then a matter of doing fdt addr ${fdtcontroladdr} && fdt get addr bsaddr /config bootscript && source ${bsaddr} There are a couple of advantage of having the bootscript (and other script logic) embedded in the U-Boot binary. First, there's no need to figure out some separate partition to store the script in, and making sure that gets updated whenever the bootloader itself does. Second, one doesn't need to worry about verifying the script; whatever steps one needs to take to implement secure boot for U-Boot itself will by necessity also cover the control dtb (if nothing else then because that's where the public key for the kernel verification lives). And third, the boot script is automatically updated together with U-Boot itself; and if U-Boot is stored in an eMMC boot partition, that update is guaranteed to be atomic. Now with the stricter requirements of libfdt starting from v2026.04, the above command no longer worked, or only half the time, because the embedded FIT image may not land on an 8-byte aligned address. So that line had to be changed a little (line breaks added) fdt addr ${fdtcontroladdr} && fdt get addr bsaddr /config bootscript && fdt get size bssize /config bootscript && cp.b ${bsaddr} ${loadaddr} ${bssize} && source ${loadaddr} which is getting quite unwieldy. Then it struck me that one could perhaps simplify all of this quite a lot: Cut out the intermediate bootscript.itb, just create a .dtsi which directly puts a /images node inside the control dtb / { images { default = "bootscript"; bootscript { description = "Boot script"; data = /incbin/("/path/to/bootscript.sh"); type = "script"; compression = "none"; }; }; }; and treat the control dtb itself as a FIT image; so the command to put in $bootcmd becomes simply source ${fdtcontroladdr}:bootscript and embedding other pieces of callable scripts is quite trivial. And that almost works out-of-the-box, except for the fit_check_format() sanity check. Introduce a CONFIG_ knob that allows one to opt out of those sanity checks, for the special case of the address being checked being identical to gd->fdt_blob. Link: https://lore.kernel.org/r/[email protected]
2026-06-11doc: develop: add section on embedding scripts inside control DTBRasmus Villemoes
Add a section that explains how one can embed scripts in the control DTB and run them from the U-Boot shell, the advantages of doing that compared to using a separately built FIT image, and the configuration knob that must be turned on to allow this to work. Reviewed-by: Simon Glass <[email protected]> Signed-off-by: Rasmus Villemoes <[email protected]>
2026-06-08Merge tag 'v2026.07-rc4' into nextTom Rini
Prepare v2026.07-rc4
2026-06-08Prepare v2026.07-rc4v2026.07-rc4Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-05-25Merge patch series "env: migrate static flags list to Kconfig"Tom Rini
This series from James Hilliard <[email protected]> converts the static flags list for the environment to be configured via Kconfig and updates the documentation. Link: https://lore.kernel.org/r/[email protected]
2026-05-25env: migrate static flags list to KconfigJames Hilliard
Environment callbacks can already be configured from Kconfig with CONFIG_ENV_CALLBACK_LIST_STATIC, but static environment flags still require board headers to define CFG_ENV_FLAGS_LIST_STATIC. Add CONFIG_ENV_FLAGS_LIST_STATIC and use it as the only board-provided static environment flags list. Convert the remaining default-config users from CFG_ENV_FLAGS_LIST_STATIC to defconfig settings and drop the legacy header macro from ENV_FLAGS_LIST_STATIC. Move the environment flags format documentation out of README and into the developer environment documentation. Include the format in the Kconfig help as well. This lets boards configure writeable-list policy and type validation from defconfig without adding a config header solely for env flags. This preserves the behavior of default configs. Header-only cases that were inactive in upstream defconfigs are not converted into defconfig entries: iot2050 can add its list when enabling ENV_WRITEABLE_LIST, and smegw01 can add mmcdev:dw support if the unlocked SYS_BOOT_LOCKED=n configuration is needed. Signed-off-by: James Hilliard <[email protected]> Reviewed-by: Tom Rini <[email protected]> Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Alexander Sverdlin <[email protected]> Reviewed-by: Walter Schweizer <[email protected]>
2026-05-25Prepare v2026.07-rc3v2026.07-rc3Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-05-11Prepare v2026.07-rc2v2026.07-rc2Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-05-01doc: bootstd: specify CONFIG_BOOTSTD_DEFAULTS provides network features when ↵Quentin Schulz
NET=y In the past, we only had one network stack which was called NET. The network features were enabled for the legacy (and then only) networking stack since commit 22353fa6b585 ("bootstd: Add some default filesystems and commands"). Then instead on relying on NET legacy stack for enabling networking features, the dependencies were (mostly) changed to depend on CMD_NET in commit a0c739c184ca ("boot: Create a common BOOT_DEFAULTS for distro and bootstd"). Then a new stack (lwIP) appeared, then CMD_NET was made available with this new stack in commit 98ad145db61a ("net: lwip: add DHCP support and dhcp commmand") making the networking features possible to enable and finally commit f1e978fd54d9 ("boot: Update tests around network symbols in BOOT_DEFAULTS_CMDS") made it explicit that we need *a* network stack to enable some networking features. Align the bootstd documentation with what's actually implemented as Kconfig dependencies. Note that BOOTSTD_DEFAULTS selects BOOT_DEFAULTS which selects BOOT_DEFAULTS_CMDS which then selects network features. The CMDLINE symbol needs to be enabled as well for BOOT_DEFAULTS to select BOOT_DEFAULTS_CMDS, but I don't think we need to go that far into explaining what's required to enable some commands. Reported-by: Simon Glass <[email protected]> Closes: https://lore.kernel.org/u-boot/CAFLszTgZC1FGy8965pHiG-u=FhrguftRv41ghQ_Qb_RRXx6tyg@mail.gmail.com/ Signed-off-by: Quentin Schulz <[email protected]>
2026-05-01doc: .clang-format descriptionHeinrich Schuchardt
We cannot use .clang-format without modification. For instance U-Boot has some for each macros that Linux does not have. Adjust the description. Reviewed-by: Mattijs Korpershoek <[email protected]> Reviewed-by: Quentin Schulz <[email protected]> Signed-off-by: Heinrich Schuchardt <[email protected]>
2026-04-27Prepare v2026.07-rc1v2026.07-rc1Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-04-27Merge patch series "net: migrate NO_NET out of the networking stack choice"Tom Rini
Quentin Schulz <[email protected]> says: This migrates the net options away from the main Kconfig to net/Kconfig, rename the current NET option to NET_LEGACY to really highlight what it is and hopefully encourage more people to use lwIP, add a new NET menuconfig (but keep NO_NET as an alias to NET=n for now) which then allows us to replace all the "if legacy_stack || lwip_stack" checks with "if net_support" which is easier to read and maintain. The only doubt I have is wrt SYS_RX_ETH_BUFFER which seems to be needed for now even when no network is configured? Likely due to include/net-common.h with PKTBUFSRX? No change in behavior is intended. Only change in defconfig including other defconfigs where NO_NET=y or NET is not set, in which case NO_NET is not set or NET=y should be set in the top defconfig. Similar change required for config fragments. See commit log in patch adding NET menuconfig for details. This was tested based on 70fd0c3bb7c2 ("x86: there is no CONFIG_UBOOT_ROMSIZE_KB_12288"), from within the GitLab CI container trini/u-boot-gitlab-ci-runner:noble-20251013-23Jan2026 and set up similarly as in "build all platforms in a single job" GitLab CI job. #!/usr/bin/env bash set -o pipefail set -eux ARGS="-BvelPEWM --reproducible-builds --step 0" ./tools/buildman/buildman -o ${O} --force-build $ARGS -CE $* ./tools/buildman/buildman -o ${O} $ARGS -Ssd $* O=../build/u-boot/ ../u-boot.sh -b master^..b4/net-kconfig |& tee ../log.txt I can't really decipher the log.txt, but there's no line starting with + which would be an error according to tools/buildman/builder.py help text. Additionally, because I started the script with set -e set and because buildman has an exit code != 0 when it fails to build a board, and I have the summary printed (which is the second buildman call), I believe it means all builds passed. The summary is the following: aarch64: (for 537/537 boards) all +0.0 rodata +0.0 uniphier_v8 : all +1 rodata +1 u-boot: add: 0/0, grow: 1/0 bytes: 1/0 (1) function old new delta data_gz 10640 10641 +1 arm: (for 733/733 boards) all -0.0 rodata -0.0 uniphier_v7 : all -1 rodata -1 u-boot: add: 0/0, grow: 0/-1 bytes: 0/-1 (-1) function old new delta data_gz 11919 11918 -1 opos6uldev : all -3 rodata -3 u-boot: add: 0/0, grow: 0/-1 bytes: 0/-3 (-3) function old new delta data_gz 18778 18775 -3 uniphier_ld4_sld8: all -3 rodata -3 u-boot: add: 0/0, grow: 0/-1 bytes: 0/-3 (-3) function old new delta data_gz 11276 11273 -3 stemmy : all -20 rodata -20 u-boot: add: 0/0, grow: 0/-1 bytes: 0/-20 (-20) function old new delta data_gz 15783 15763 -20 As far as I could tell this data_gz is an automatically generated array when CONFIG_CMD_CONFIG is enabled. It is the compressed .config stored in binary form. Because I'm changing the name of symbols, replacing a menu with a menuconfig, additional text makes it to .config and the "# Networking" section in .config disappears. Here is the diff for the 5 defconfigs listed above, generated with: for f in build/*-m; do diff --unified=0 $f/.config $(dirname $f)/$(basename -a -s '-m' $f)/.config done (-m is the build directory for master, and without the suffix, it's the top commit of this series) """ --- build/opos6uldev-m/.config 2026-04-20 10:53:49.804528526 +0200 +++ build/opos6uldev/.config 2026-04-20 11:03:37.430242767 +0200 @@ -970,4 +969,0 @@ - -# -# Networking -# @@ -975,0 +972 @@ +CONFIG_NET_LEGACY=y --- build/stemmy-m/.config 2026-04-20 11:01:33.653698123 +0200 +++ build/stemmy/.config 2026-04-20 11:04:53.452577311 +0200 @@ -733,4 +732,0 @@ - -# -# Networking -# @@ -738,2 +733,0 @@ -# CONFIG_NET is not set -# CONFIG_NET_LWIP is not set --- build/uniphier_ld4_sld8-m/.config 2026-04-20 11:00:41.605469071 +0200 +++ build/uniphier_ld4_sld8/.config 2026-04-20 11:04:22.226439899 +0200 @@ -997,4 +996,0 @@ - -# -# Networking -# @@ -1002,0 +999 @@ +CONFIG_NET_LEGACY=y --- build/uniphier_v7-m/.config 2026-04-20 10:53:04.019307319 +0200 +++ build/uniphier_v7/.config 2026-04-20 11:03:01.688085486 +0200 @@ -1004,4 +1003,0 @@ - -# -# Networking -# @@ -1009,0 +1006 @@ +CONFIG_NET_LEGACY=y --- build/uniphier_v8-m/.config 2026-04-20 10:43:05.614441175 +0200 +++ build/uniphier_v8/.config 2026-04-20 10:41:03.214852130 +0200 @@ -875,4 +874,0 @@ - -# -# Networking -# @@ -880,0 +877 @@ +CONFIG_NET_LEGACY=y """ This is fine: - Networking menu doesn't exist anymore so "#\n# Networking\n#\n" won't be in .config anymore. - opos6uldev, uniphier_ld4_sld8, uniphier_v7 and uniphier_v8 all have (old) CONFIG_NET enabled, (new) CONFIG_NET will still be set but CONFIG_NET_LEGACY also needs to be defined now to reflect the stack choice (even if default), - stemmy has CONFIG_NO_NET set, which means CONFIG_NET and CONFIG_NET_LWIP are not reachable anymore hence why they don't need to be part of .config, GitLab CI was run on this series (well, not exactly, but it's only changes to the git logs that were made): https://source.denx.de/u-boot/contributors/qschulz/u-boot/-/pipelines/29849 It passes. Link: https://lore.kernel.org/r/[email protected]
2026-04-27rename NET to NET_LEGACYQuentin Schulz
Highlight that NET really is the legacy networking stack by renaming the option to NET_LEGACY. This requires us to add an SPL_NET_LEGACY alias to SPL_NET as otherwise CONFIG_IS_ENABLED(NET_LEGACY) will not work for SPL. The "depends on !NET_LWIP" for SPL_NET clearly highlights that it is using the legacy networking app so this seems fine to do. This also has the benefit of removing potential confusion on NET being a specific networking stack instead of "any" network stack. Signed-off-by: Quentin Schulz <[email protected]> Acked-by: Ilias Apalodimas <[email protected]> Reviewed-by: Peter Robinson <[email protected]> Reviewed-by: Tom Rini <[email protected]>
2026-04-22Merge patch series "test: Refactor FIT test for clarity and extensibility"Tom Rini
Simon Glass <[email protected]> says: This series reworks the FIT test (test_fit.py) to make it easier to maintain and extend. It fixes the buildconfigspec so the test actually runs on sandbox, avoids unnecessary U-Boot restarts, renames the main test for easier selection, adds a missing-kernel check, fixes Python warnings, converts the test to use a class, splits into separate test functions, and adds Sphinx documentation. Link: https://lore.kernel.org/r/[email protected]
2026-04-22test: Add documentation for the FIT testSimon Glass
Add a Sphinx automodule page for test_fit.py so it appears in the pytest documentation alongside the other test modules. The index already uses a glob pattern, so this is picked up automatically. Signed-off-by: Simon Glass <[email protected]>
2026-04-17binman: Remove pre-generated entries.rst and bintools.rstSimon Glass
These files are now auto-generated by the binman_docs Sphinx extension during the doc build, so the committed copies and their symlinks in doc/develop/package/ are no longer needed. Update binman.rst to reference the Sphinx extension instead of the manual generation commands. Signed-off-by: Simon Glass <[email protected]> Rebased to apply file deletions cleanly. Signed-off-by: Heinrich Schuchardt <[email protected]>
2026-04-07doc: release cycle: fix 2026.04 stats linkDavid Lechner
Fix the link to the 2026.04 stats page. It was likely copied from the 2026.01 line below and not updated. Signed-off-by: David Lechner <[email protected]> Reviewed-by: Tom Rini <[email protected]>
2026-04-06Merge branch 'next'Tom Rini
2026-04-06Prepare v2026.04v2026.04Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-03-27treewide: fix uImage.FIT document pathsDaniel Golle
Commit 488445cefa1 ("doc: Move FIT into its own directory") moved the documentation in doc/uImage.FIT to doc/usage/fit, subsequently all documents and example sources have been converted to reStructuredText. Fix (almost) all of the remaining occurrences of the old path and filenames across the tree. The exception is doc/uImage.FIT/command_syntax_extensions.txt which apparently has been removed entirely, or at least I was unable to locate where that document is now. Signed-off-by: Daniel Golle <[email protected]>
2026-03-26tools: Add support for fwumdata toolKory Maincent
Add a new fwumdata tool to allows users to read, display, and modify FWU (Firmware Update) metadata from Linux userspace. It provides functionality similar to fw_printenv/fw_setenv but for FWU metadata. Users can view metadata, change active/previous bank indices, modify bank states, and set image acceptance flags. Configuration is done via fwumdata.config file. Signed-off-by: Kory Maincent <[email protected]> Tested-by: Dario Binacchi <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]>
2026-03-23Prepare v2026.04-rc5v2026.04-rc5Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-03-18binman: doc: Update binman_tests.rst for subdirectory layoutSimon Glass
Update the guidance for adding new tests to describe the subdirectory structure instead of the numbering scheme. Signed-off-by: Simon Glass <[email protected]>
2026-03-18binman: test: Move remaining test files to test/entry/Simon Glass
Move the remaining 60 or so test files into an entry/ subdirectory. These cover general entry types and features: entry args, fill, text, env, compress, replace, template, collection, ELF, overlap, listing, sections, symlink, TEE OS, and other miscellaneous entries. Drop the numeric prefixes and update all references. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-03-18binman: test: Move vendor-specific test files to test/vendor/Simon Glass
Move about 20 test files for vendor-specific platform support (TI, NXP i.MX, Renesas R-Car, Rockchip, PowerPC MPC85xx) into a vendor/ subdirectory. Drop the numeric prefixes and update all references. Signed-off-by: Simon Glass <[email protected]>
2026-03-18binman: test: Move ChromeOS test files to test/cros/Simon Glass
Move about 10 test files for ChromeOS entries (GBB, vblock, FMAP) into a cros/ subdirectory. Drop the numeric prefixes and update all references. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-03-18binman: test: Move pack/layout test files to test/pack/Simon Glass
Move about 50 test files related to basic layout, packing, alignment, sections, and image structure into a pack/ subdirectory. Drop the numeric prefixes from the filenames and update all references in ftest.py, entry_test.py, and binman_tests.rst Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-03-09Prepare v2026.04-rc4v2026.04-rc4Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-02-23Prepare v2026.04-rc3v2026.04-rc3Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-02-09Prepare v2026.04-rc2v2026.04-rc2Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-02-06doc: develop/process: Clarify name usage in the Signed-off-by lineTom Rini
Long ago we took the Linux Kernel documentation about adding a Signed-off-by line and adjusted it slightly for how we organized things. In 2003 Linus clarified the intent and then re-worded what the name portion of the Signed-off-by line can be. Mirror that change here. Link: https://git.kernel.org/torvalds/c/d4563201f33a Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: process: Document using b4 and patchwork for custodiansTom Rini
- We already have good custodian documentation for patchwork, add a reference and then link to it here. - Add a reference to the existing b4 documentation, and reference it here. - Note and link to patchwork integration, am/shazam and ty features of b4 as these are the most likely useful portions. Be specific about keeping the default ${summary} as that includes important information. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: sending_patches: Update link to patchworkTom Rini
Make use of an anonymous reference for the external link here, per rST best practices. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: codingstyle: Update b4 external linkTom Rini
Rather than pointing at the source code for b4, point the the official documentation. Also, use an anonymous reference for the link, per rST best practices. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: process: Make "Work flow of a Custodian" a subsectionTom Rini
Make the "Work flow of a Custodian" section be a subsection of the Custodians section. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]> Reviewed-by: Michael Trimarchi <[email protected]>
2026-01-28doc: develop: process: Move Custodians sectionTom Rini
Move the "Custodians" section to be after the "Review Process, Git Tags" section, in preparation for more re-organization. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: process: Explain when/how Custodians may edit patchesTom Rini
As seen with commit d503633a3676 ("Revert "doc: board: starfive: update jh7110 common description""), it has not always been clear what is and isn't allowed by custodians, and what the expectations are. To prevent further unintentional conflicts, document the limited cases where custodians are allowed to modify patches directly, and how to do that. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: process: Rework the custodian feedback sectionTom Rini
Now that we have two items here, rework this slightly to be using bullet points, and so easier to expand on. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-28doc: develop: process: Move the existing block about patch applicationTom Rini
We have a long block about the expectations and feedback about a patch applying, or not, as part of the Custodian workflow. Move this to the Custodians section from the Workflow of a custodian section. Signed-off-by: Tom Rini <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2026-01-26Prepare v2026.04-rc1v2026.04-rc1Tom Rini
Signed-off-by: Tom Rini <[email protected]>
2026-01-19Update links to doc/develop/falcon.rstJ. Neuschäfer
README.falcon was converted to ReST/HTML in 2023. Signed-off-by: J. Neuschäfer <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>