Add cache maintenance for ARM64 loader and clean/inv cache in elf64_exec()

It is required to clean all of the EL2 cache before jumping
to the kernel. Otherwise when we drop from EL2 to EL1 kernel data that
was not cleaned from the D-cache will be lost.
Add EARLY_UART_PA/VA to ARM/ARM64 options

This options are supposed to be used as a replacement for hard-coded
values of EARLY_PRINTF UART addresses. It is assumed that UART's
PA and VA may differ.
Add support for EARLY_PRINTF to PL011 UART

Adds early_putc routine for the driver. Requires EARLY_PRINTF and
EARLY_UART_VA defined and set to a reasonable value.
Appropriate mapping VA->PA ought to be created during early init stage
as well.
Use EARLY_PRINTF in a more generic way on ARM64

From now when EARLY_PRINTF option is defined,
the PA->VA mapping is created in locore.S for a 1GB
block containing UART registers. The addresses are taken from
EARLY_UART_PA/VA options, therefore they have to be defined and
specified to a correct value.
PL011-specific early_putc routine has been removed from
machdep.c since there is a dedicated one in PL011 driver.
Temporary pass initial pagetables VA to pmap directly via variable.

This will help to drop the assumption that kernel is loaded
within 1GB of PA.
Add INVARIANTS to ARM64 DMAP_TO/TO_DMAP macros to catch out of range calls

KASSERTs will inform us when there was out of range PA or VA used
in DMAP_TO_PHYS() and PHYS_TO_DMAP().
Fix failure during initialization due to out of range DMAP allocations

Let the kernel direct map be as large as possible, which means
64GB 0x0 - 0xfffffffff. This fixes all issues related to calls
to DMAP for physical addresses beyond first 64 GB.
Introduce SOC_ARM_FM option for ARM64 Foundation Model

This temporary option will help to separate FM-specific hacks
in the generic code.
Make Foundation Model hack in uart_cpu_getdev() SOC_ARM_FM dependent

Avoid breaking other platforms that can acquire needed ranges from DTB.
Make efisimplefs debugs silent when not debugging
Fix typo in ARM GIC device_printf()
Stop using early_putc immediately after configuring console with cninit()

cninit_finish() can be called late at the end of MI configuration.
Till that time both early and system console coexist what may lead
to various issues.
Introduce simple identify_cpu() routine for ARM64

Add necessary cpufunction.
Detect and print:
	- implementer
	- part name
	- variant and revision
Set maximum range of physical address for EL1 mode.

Setup Intermediate Physical Address size bits in TCR_EL1 according to
PARange bits of ID_AA64MMFR0_EL1 register.