Make PL011 UART to wait on putc only when TX FIFO is full

Instead of waiting for empty TX FIFO it is more reasonable to
block on full FIFO. As soon as FIFO slot is free the character
can be transmitted.
In case of TX FIFO disabled, TXFF bit indicates that transmit
register is not empty.

Obtained from:   Semihalf
Reviewed by:     andrew, emaste
Sponsored by:    The FreeBSD Foundation
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.
Don't forget to clean BSS in ARM64 locore
Allow for using static (embedded) DTB in ARM64 kernel

When there is no DTB passed by the loader, try to use
the built-in one that might be present when FDT_DTB_STATIC
option is used.
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.
Fix minor typo in address space length in ARM64 locore

The value should be 39 bits when TnSZ is 25.
Load full DTB address in ARM64 loader instead of just offset

This alignes DTB loading with other architectures as well as
simplifies DTB address processing in machdep.c
Fix ARM64 pmap.c compilation when INVARIANTS are enabled

Some minor improvements to make KASSERTs work and more
specific about errors.
Add missing pmap_page_is_mapped() used in KASSERTs in
swap_pager.c, vm_object.c, vm_page.c, vm_pageout.c and vnode_pager.c
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 typo in address space size description by the way.
Fix failure in ARM64 pmap_bootstrap() when kernel is not loaded within 1GB

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.
Increase kernel addresses to DMAP_MIN_ADDRESS.
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.
Enable other fsops for ARM64 loader

DOSFS will be useful to boot from USB stick, etc.
Make efisimplefs debugs silent when not debugging
Fix typo in ARM GIC device_printf()
Make uart_bus_fdt a decendant of ofwbus

This will allow to attach UART drivers lying directly on root node
instead of simple-bus compatible bus only.

Obtained from:   Semihalf
Sponsored by:    The FreeBSD Foundation
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.