Where do I find the load address definitions?

I am assuming the following which may be incorrect so please correct as necessary:

The load address of the SPL (MLO) is determined by the PPL/ROM code.

The SPL (MLO) must know the load address of U-Boot as it is not interactive.

U-Boot must be linked with the above address in mind.

U-Boot can load the DTB and the kernel anywhere it likes. The DTB address can be passed to the kernel (I believe through a register). The kernel itself must loaded at the address at which is was linked.

I’d like to understand where each of these are defined so I can intelligently configure U-Boot to do the right things (rather than simply copy a uEnv.txt and assume it is correct).

I’m using Yocto/Poky Pyro. Where do I find all these bits of information so I can tie everything together?

Thanks.

I am assuming the following which may be incorrect so please correct as
necessary:

The load address of the SPL (MLO) is determined by the PPL/ROM code.

The SPL (MLO) must know the load address of U-Boot as it is not interactive.

Correct, it does...

Somewhere in teh u-boot tree you'll find, these magic numbers:

sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k

U-Boot must be linked with the above address in mind.

U-Boot can load the DTB and the kernel anywhere it likes. The DTB address
can be passed to the kernel (I believe through a register). The kernel
itself must loaded at the address at which is was linked.

I'd like to understand where each of these are defined so I can
intelligently configure U-Boot to do the right things (rather than simply
copy a uEnv.txt and assume it is correct).

33 /*
34 * We setup defaults based on constraints from the Linux kernel, which should
35 * also be safe elsewhere. We have the default load at 32MB into DDR (for
36 * the kernel), FDT above 128MB (the maximum location for the end of the
37 * kernel), and the ramdisk 512KB above that (allowing for hopefully never
38 * seen large trees). We say all of this must be within the first 256MB
39 * as that will normally be within the kernel lowmem and thus visible via
40 * bootm_size and we only run on platforms with 256MB or more of memory.
41 */
42 #define DEFAULT_LINUX_BOOT_ENV \
43 "loadaddr=0x82000000\0" \
44 "kernel_addr_r=0x82000000\0" \
45 "fdtaddr=0x88000000\0" \
46 "fdt_addr_r=0x88000000\0" \
47 "rdaddr=0x88080000\0" \
48 "ramdisk_addr_r=0x88080000\0" \
49 "scriptaddr=0x80000000\0" \
50 "pxefile_addr_r=0x80100000\0" \
51 "bootm_size=0x10000000\0" \
52 "boot_fdt=try\0"

I'm using Yocto/Poky Pyro. Where do I find all these bits of information so
I can tie everything together?

aka, use ^ those variables.. Best of all, they are distro_boot
defaults, so it's transferable to different boards.

Regards,

Thanks Robert. This gives me a good starting point for the U-Boot defaults (and some source that I will bookmark for future reference).

So these are the defaults and if someone has a reason to move the kernel elsewhere then the typical thing is to simply override these variables in U-Boot at run time? Ultimately I think there is a make target to link the kernel using a particular load address. So it seems you change it there and then edit uEnv.txt and Bob’s your uncle.

Out of curiosity can you give me some insight as to how code propagates from the work being done at DENX to the meta-ti layer? Denys has informed me that he (they?) integrate meta-ti with Poky every other release. Or perhaps the Yocto layers like meta-ti, and ultimately meta-yocto-bsp, don’t have any need to make changes to U-Boot because TI specific items (as in your example above) are already upstream? So the bitbake recipes just git clone from DENX directly and build?

Thanks.