meta_boot: implement direct kernel boot (without LDR)

Implement direct kernel boot which sets up MMU and TBI structures
directly from QEMU rather than by using an LDR binary.

The MetaBootInfo structure has some additional fields: ram size, ram
physical address, and a callback function for setting up SoC hardware in
the event of a direct boot. Also an extra flag has been added for
whether to set up HTP page tables.

The main_cpu_reset callback in meta_boot.c now handles the kernel
without LDR case (while preserving current behaviour when an LDR is
provided with a kernel). It starts by calling back into SoC hardware
code to allow it to set up SoC hardware that would ordinarily be done by
the bootloader (clock / DDR registers etc). It then sets up the
traditional MMU table layout for Linux with functions in
meta_boot_mmu.c, with a local heap at 0x40000000 covering most of RAM, a
small global heap at 0xc0000000, using unmapped page tables at the end
of RAM. It uses HTP style page tables if possible which only use around
12KB, rather than around 270KB for ATP style.

It then sets up a basic TBI structure (zero initialised) and a TBI
segment list describing the segments that have been set up, both in the
global heap.

Finally it loads the kernel elf, copies the command line after it, and
sets up the PC and argument registers to enter directly into the kernel.

Comet implements the SoC callback to set the XTAL1 frequency to exactly
24MHz, and the Meta timer divider to exactly 24, so that the timer
frequency that QEMU provides matches that which software calculates.

Signed-off-by: James Hogan <james.hogan@imgtec.com>