u-boot/doc
Simon Glass 0b2fa98aa5 linker_lists: Fix alignment issue
The linker script uses alphabetic sorting to group the different linker
lists together. Each group has its own struct and potentially its own
alignment. But when the linker packs the structs together it cannot ensure
that a linker list starts on the expected alignment boundary.

For example, if the first list has a struct size of 8 and we place 3 of
them in the image, that means that the next struct will start at offset
0x18 from the start of the linker_list section. If the next struct has
a size of 16 then it will start at an 8-byte aligned offset, but not a
16-byte aligned offset.

With sandbox on x86_64, a reference to a linker list item using
ll_entry_get() can force alignment of that particular linker_list item,
if it is in the same file as the linker_list item is declared.

Consider this example, where struct driver is 0x80 bytes:

	ll_entry_declare(struct driver, fred, driver)

...

	void *p = ll_entry_get(struct driver, fred, driver)

If these two lines of code are in the same file, then the entry is forced
to be aligned at the 'struct driver' alignment, which is 16 bytes. If the
second line of code is in a different file, then no action is taken, since
the compiler cannot update the alignment of the linker_list item.

In the first case, an 8-byte 'fill' region is added:

 .u_boot_list_2_driver_2_testbus_drv
                0x0000000000270018       0x80 test/built-in.o
                0x0000000000270018                _u_boot_list_2_driver_2_testbus_drv
 .u_boot_list_2_driver_2_testfdt1_drv
                0x0000000000270098       0x80 test/built-in.o
                0x0000000000270098                _u_boot_list_2_driver_2_testfdt1_drv
 *fill*         0x0000000000270118        0x8
 .u_boot_list_2_driver_2_testfdt_drv
                0x0000000000270120       0x80 test/built-in.o
                0x0000000000270120                _u_boot_list_2_driver_2_testfdt_drv
 .u_boot_list_2_driver_2_testprobe_drv
                0x00000000002701a0       0x80 test/built-in.o
                0x00000000002701a0                _u_boot_list_2_driver_2_testprobe_drv

With this, the linker_list no-longer works since items after testfdt1_drv
are not at the expected address.

Ideally we would have a way to tell gcc not to align structs in this way.
It is not clear how we could do this, and in any case it would require us
to adjust every struct used by the linker_list feature.

One possible fix is to force each separate linker_list to start on the
largest possible boundary that can be required by the compiler. However
that does not seem to work on x86_64, which uses 16-byte alignment in this
case but needs 32-byte alignment.

So add a Kconfig option to handle this. Set the default value to 4 so
as to avoid changing platforms that don't need it.

Update the ll_entry_start() accordingly.

Signed-off-by: Simon Glass <sjg@chromium.org>
2020-12-18 20:32:21 -07:00
..
android fastboot: Support defining raw partitions without a partition table 2020-09-01 14:47:43 +02:00
api linker_lists: Fix alignment issue 2020-12-18 20:32:21 -07:00
arch smbios: Add documentation and devicetree binding 2020-11-06 10:18:20 +08:00
board doc: qemu-riscv: describe attaching a disk image 2020-11-17 15:09:22 +08:00
build doc/build/gcc.rst: add missing apt-get *install* 2020-09-22 11:05:32 -04:00
chromium nyan-big: add padding to its file 2019-02-20 09:01:44 -07:00
develop doc: Update logging documentation 2020-10-30 11:00:13 -04:00
device-tree-bindings phy: stm32: usbphyc: manage optional vbus regulator on phy_power_on/off 2020-11-25 12:02:58 +01:00
driver-model dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
imx dm: treewide: Rename auto_alloc_size members to be shorter 2020-12-13 08:00:25 -07:00
media doc: Remove duplicated documentation directory 2019-06-20 10:57:08 -04:00
mvebu doc: cmd: bubt: drop duplicated text 2018-06-12 18:44:00 -04:00
sphinx doc: Sphinx.override_domain() deprecated 2020-10-14 11:16:34 -04:00
sphinx-static doc: Remove duplicated documentation directory 2019-06-20 10:57:08 -04:00
SPI sandbox: update documents regarding spi_sf 2020-05-29 20:55:45 -06:00
SPL doc: SPL: Add README for secure boot support 2016-07-21 11:11:29 -07:00
uefi efi_loader: use ':' as separator for setenv -i 2020-08-24 16:37:53 +02:00
uImage.FIT spl: Use standard FIT entries 2020-10-27 08:13:32 +01:00
.gitignore doc: Add .gitignore for the Sphinx build output directory 2019-07-24 14:15:37 -04:00
bounces patman: add support for omitting bouncing addresses 2017-09-11 21:43:58 -06:00
conf.py doc: specify that xelatex is used as Latex engine 2020-04-27 14:55:29 -04:00
feature-removal-schedule.txt treewide: mem: Move mtest related defines to Kconfig 2020-05-08 12:02:56 -04:00
git-mailrc MAINTAINERS, git-mailrc: Update sunxi maintainers 2020-10-29 09:57:13 -04:00
I2C_Edge_Conditions
index.rst cmd: Add command to display or save Linux PStore dumps 2020-10-14 11:16:19 -04:00
kwboot.1 Fix spelling of "transferred". 2016-03-22 12:16:16 -04:00
Makefile doc/Makefile: turn warnings into errors 2020-02-25 09:06:40 -05:00
mkimage.1 mkimage: Allow updating the FIT timestamp 2020-07-25 14:46:57 -06:00
pstore.rst cmd: Fixup DT to pass PStore Ramoops parameters 2020-10-14 11:16:34 -04:00
README.440-DDR-performance Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
README.AMCC-eval-boards-cleanup
README.arm-caches doc: ARM: Use the right function name 2015-01-14 11:37:39 -05:00
README.arm-relocation treewide: convert bd_t to struct bd_info manually 2020-07-17 10:46:44 -04:00
README.armada-secureboot arm: mvebu: Implement secure boot 2017-02-01 09:04:18 +01:00
README.asn1 doc: add README for asn1 compiler and decoder 2019-12-06 16:44:20 -05:00
README.atmel_mci treewide: convert bd_t to struct bd_info manually 2020-07-17 10:46:44 -04:00
README.atmel_pmecc ARM: at91: Convert SPL_GENERATE_ATMEL_PMECC_HEADER to Kconfig 2019-01-21 08:36:11 -05:00
README.autoboot autoboot: Rename CONFIG_MENUKEY to CONFIG_AUTOBOOT_MENUKEY 2019-08-02 11:19:14 -04:00
README.bcm7xxx board: arm: Add support for Broadcom BCM7445 2018-07-10 16:55:57 -04:00
README.bcmns3 doc: add README doc for bcmns3 platform 2020-07-29 10:37:11 -04:00
README.bedbug
README.bitbangMII
README.bloblist bloblist: Zero records when adding 2020-02-05 19:33:46 -07:00
README.bootcount bootcount_ext: Add flag to enable/disable bootcount 2020-04-24 10:10:00 -04:00
README.bootmenu Nokia RX-51: Update my email address 2020-05-11 10:16:49 +05:30
README.boston boston: Introduce support for the MIPS Boston development board 2016-09-21 16:24:36 +02:00
README.bus_vcxk SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.cfi doc/README.cfi: Update code snippet, and add example. 2017-01-02 11:14:01 -05:00
README.chromium cros: Add information about booting Chrome OS on x86 2020-09-25 11:27:11 +08:00
README.chromium-chainload cros: Expand the Chromium OS documentation 2019-04-11 20:10:05 -06:00
README.commands dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
README.commands.itest
README.commands.spl Fix various typos, scattered over the code. 2016-05-05 21:39:26 -04:00
README.console treewide: convert bd_t to struct bd_info manually 2020-07-17 10:46:44 -04:00
README.davinci README: davinci: Clarify when SPL is used and the target devices. 2020-07-13 20:58:34 +05:30
README.davinci.nand_spl
README.dfu doc: dfu: fix typo in README.dfu 2020-10-22 11:26:14 -04:00
README.dfutftp cmd: drop fitupd command 2020-07-16 12:37:01 +02:00
README.displaying-bmps lcd: implement a callback for splashimage 2013-03-11 11:06:09 -04:00
README.distro image: Add compressed Image parsing support in booti. 2020-04-17 12:32:36 -04:00
README.dns
README.enetaddr net: Always build the string_to_enetaddr() helper 2019-12-09 09:47:41 -06:00
README.esbc_validate SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.ext4 fs: Migrate ext4 to Kconfig 2018-01-22 16:43:30 -05:00
README.falcon doc: Update parallel NOR flash related information in README.falcon 2019-07-19 20:14:50 +02:00
README.fdt-control doc: fix references to driver-model 2020-04-17 12:32:36 -04:00
README.fdt-overlays doc: overlays: Tweak documentation regarding overlays 2017-09-15 05:27:49 -06:00
README.fec_mxc driver/net/fec: support fixed speed connection 2016-07-12 17:58:48 +02:00
README.fsl-clk doc: restore doc/README.fsl-clk 2017-06-29 21:30:16 -04:00
README.fsl-ddr driver/ddr/fsl: Add address parity support for DDR4 UDIMM/discrete 2016-03-21 12:42:13 -07:00
README.fsl-dpaa armv8/ls1043a: Add Fman support 2015-10-29 10:34:01 -07:00
README.fsl-esdhc Move eSDHC adapter card identification to board files 2020-07-27 14:16:28 +05:30
README.fsl-hwconfig
README.fsl-trustzone-components armv8: LS2080A: Rename LS2085A to reflect LS2080A 2015-11-30 08:53:04 -08:00
README.fsl_iim Add fsl_iim driver 2013-04-28 11:07:41 +02:00
README.fuse Add fuse API and commands 2013-04-28 11:07:40 +02:00
README.generic-board treewide: convert bd_t to struct bd_info manually 2020-07-17 10:46:44 -04:00
README.generic_usb_ohci doc: Fix outdated ohci board hook documentation 2019-04-02 12:52:54 +02:00
README.gpio dt-bindings: gpio: alignment with kernel v5.3 2020-04-16 23:06:54 -04:00
README.gpt doc: arch: sandbox: Replace all the instances of README.sandbox 2019-07-29 09:32:09 -04:00
README.Heterogeneous-SoCs powerpc/mpc85xx: Add DSP side awareness for Freescale Heterogeneous SoCs 2015-03-04 10:15:29 -08:00
README.hwconfig Cosmetic: Fix a number of typos, no functional changes. 2013-09-20 10:30:54 -04:00
README.i2c i2c: Add a mux for GPIO-based I2C bus arbitration 2015-08-05 21:06:10 -06:00
README.iomux SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.JFFS2 fs: Kconfig: Add a separate option for FS_JFFS2 2017-05-22 12:45:31 -04:00
README.JFFS2_NAND README: Drop unused JFFS2 options 2016-10-06 20:40:26 -04:00
README.kconfig treewide: fix "followings" to "following" 2016-08-26 17:04:58 -04:00
README.kwbimage doc: fix documentation of out-of-tree build 2014-11-07 16:27:07 -05:00
README.LED powerpc, 8xx: remove support for 8xx 2017-06-12 08:37:55 -04:00
README.link-local net: cosmetic: Fix checkpatch.pl failures in net.c 2015-04-18 11:11:35 -06:00
README.lynxkdi
README.m54418twr m68k: Drop unreferenced CONFIG_* defines 2018-01-19 15:49:32 -05:00
README.malta Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
README.marvell arm64: dts: a3720: add support for espressobin with populated emmc 2020-10-14 07:56:17 +02:00
README.mediatek doc: README.mediatek: Add a simple README for MediaTek 2018-11-28 23:04:54 -05:00
README.memory-test Feature Removal: disable "mtest" command by default 2013-03-11 15:26:59 -04:00
README.menu autoboot: Rename CONFIG_MENU_SHOW to include AUTOBOOT 2019-08-02 11:19:14 -04:00
README.mpc74xx
README.mpc83xx.ddrecc
README.mpc83xxads README: Drop CONFIG_MPC8349ADS 2016-10-06 20:40:51 -04:00
README.mpc85xx freescale/powerpc: Rename the config CONFIG_SECURE_BOOT name 2019-11-08 16:32:08 +05:30
README.mpc85xx-sd-spi-boot powerpc: P2010: Drop configuration for P2010 2016-11-23 23:42:10 -08:00
README.mpc85xx-spin-table Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
README.mpc85xxcds Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
README.multi-dtb-fit doc: multi-dtb-fit: Remove double underscores 2020-07-17 10:47:19 -04:00
README.mxc_ocotp arm: vf610: Add Vybrid VF610 to mxc_ocotp document 2013-06-03 10:56:54 +02:00
README.nand mtd: move NAND files into a raw/ subdirectory 2018-09-20 20:10:49 +05:30
README.nand-boot-ppc440
README.ne2000 Drop PCMCIA 2019-08-11 19:27:41 -04:00
README.NetConsole net: Make the netconsole buffer size configurable 2012-09-24 13:55:43 -05:00
README.nokia_rx51 Nokia RX-51: Add link for u-boot-gen-combined script to README file 2020-06-13 23:12:17 +05:30
README.nvme SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.odroid odroid: Update README.odroid for support of Odroid HC1 2018-12-21 16:04:50 +09:00
README.OFT
README.omap-ulpi-viewport
README.omap3 logicpd: Drop omap3 zoom1 2020-07-09 20:58:05 +05:30
README.pblimage powerpc/tool/pbl: fix pbl image compiling process 2013-10-16 16:13:13 -07:00
README.pcap doc: pcap: add pcap cmd documentation 2019-09-04 11:37:19 -05:00
README.plan9 cmd_bootm: Add command line arguments to Plan 9 2013-06-26 10:25:22 -04:00
README.POST treewide: convert bd_t to struct bd_info manually 2020-07-17 10:46:44 -04:00
README.power-framework doc:power:pmic: Add doc entry for PMIC(v2) framework 2014-04-18 10:42:30 -04:00
README.pxe cmd: pxe: add support for FIT config selection 2018-10-08 14:45:02 -04:00
README.ramboot-ppc85xx powerpc: mpc85xx: Convert CONFIG_SYS_CCSRBAR_DEFAULT to Kconfig option 2016-12-02 08:52:34 -08:00
README.rmobile ARM: rmobile: Add R8A77965 M3NULCB support 2019-04-09 18:19:10 +02:00
README.rockchip doc: rockchip: Remove list of supported boards 2020-05-29 18:06:26 +08:00
README.rockusb usb: rockchip: implement K_FW_LBA_ERASE_10 command 2018-08-08 22:22:07 +02:00
README.s5p4418 arm: add (default) config for nanopi2 board 2020-07-29 08:43:40 -04:00
README.s5pc1xx
README.sata Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
README.sched
README.scrapyard scrapyard: Delete this file and script 2019-09-19 12:54:29 -04:00
README.semihosting SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.serial_multi powerpc, 5xxx, 512x: remove support for mpc5xxx and mpc512x 2017-06-16 10:14:55 -04:00
README.sha1 Drop references to MAKEALL in the documentation 2016-07-31 19:37:08 -06:00
README.silent Convert CONFIG_SYS_DEVICE_NULLDEV to Kconfig 2020-08-23 13:43:10 -04:00
README.SNTP
README.socfpga arm: socfpga: arria10: Add qts-filter for Arria10 socfpga 2020-10-09 17:53:14 +08:00
README.spear SPEAr: Add configuration options for spear3xx and spear6xx boards 2012-07-07 14:07:40 +02:00
README.SPL doc: spl: update reference to driver-model/README.txt 2020-04-17 12:32:36 -04:00
README.splashprepare splash: Use splashfile instead of location->name 2019-05-20 11:55:42 +02:00
README.srio-pcie-boot-corenet powerpc/doc: Update the README.srio-pcie-boot-corenet 2013-06-20 17:08:47 -05:00
README.standalone command: Remove the cmd_tbl_t typedef 2020-05-18 18:36:55 -04:00
README.t1040-l2switch drivers: net: vsc9953: Add LAG support 2016-01-28 12:22:19 -06:00
README.tee Documentation: tee uclass and op-tee driver 2018-10-07 10:47:38 -04:00
README.ti-secure doc: Update info on using K3 secure devices 2019-04-26 17:51:51 -04:00
README.TPL cosmetic: Fix spelling and whitespace errors 2019-12-03 08:43:23 -05:00
README.trace sandbox: Drop the deprecated 'sb' command 2018-11-26 08:25:35 -05:00
README.ubi ubi: Add "skipcheck" command to set/clear this bit in the UBI volume hdr 2019-10-16 05:42:36 +02:00
README.ubispl spl: Lightweight UBI and UBI fastmap support 2016-07-22 09:53:00 -04:00
README.ublimage
README.udp net: add a generic udp protocol 2020-09-30 16:55:03 -04:00
README.unaligned-memory-access.txt doc: Fix comparison operator 2014-10-27 11:04:00 -04:00
README.uniphier ARM: uniphier: enable distro boot 2018-07-25 08:47:53 +09:00
README.update cmd: drop fitupd command 2020-07-16 12:37:01 +02:00
README.usb SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.vf610 arm: vf610: Add Vybrid VF610 CPU support 2013-06-03 10:56:53 +02:00
README.video video: Add information about using TrueType fonts 2018-12-28 12:26:58 +01:00
README.virtio doc: Document virtio support 2018-11-14 09:16:28 -08:00
README.VLAN
README.VSC3316-3308 board/freescale/common: VSC3316/VSC3308 initialization code 2012-10-22 14:31:21 -05:00
README.vxworks bootm: vxworks: Support Linux compatible standard DTB for ARM and PPC 2019-12-03 08:43:23 -05:00
README.watchdog arm: at91: wdt: Convert watchdog driver to dm/dt 2018-11-16 13:34:34 -05:00
README.zfs Coding Style cleanup: replace leading SPACEs by TABs 2013-10-14 16:06:54 -04:00

This patch series adds support for ZFS listing and load to u-boot.

To Enable zfs ls and load commands, modify the board specific config file with
#define CONFIG_CMD_ZFS

Steps to test:

1. After applying the patch, zfs specific commands can be seen
   in the boot loader prompt using
	UBOOT #help

	zfsload- load binary file from a ZFS file system
	zfsls  - list files in a directory (default /)

2. To list the files in zfs pool, device or partition, execute
	zfsls <interface> <dev[:part]> [POOL/@/dir/file]
	For example:
	UBOOT #zfsls mmc 0:5 /rpool/@/usr/bin/

3. To read and load a file from an ZFS formatted partition to RAM, execute
	zfsload <interface> <dev[:part]> [addr] [filename] [bytes]
	For example:
	UBOOT #zfsload mmc 2:2 0x30007fc0 /rpool/@/boot/uImage

References :
	-- ZFS GRUB sources from Solaris GRUB-0.97
	-- GRUB Bazaar repository

Jorgen Lundman <lundman at lundman.net> 2012.