ast/io: Fix a number of issues with SuperIO access

The code to access AST registers via the iLPC->AHB bridge was very
fragile and relied on the SIO to be kept unlocked with the right
device selected.

This got broken when adding the new UART configuration among other
things.

Rework this to create a pair of get/put() helpers to use to access
a given SIO device, which take care of doing the appropriate device
selection when needed and also take/release the SIO spinlock.

This fixes Flash/NVRAM setup which got broken along the way and also
makes the fixup for the VUART interrupts actually work.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
core: Make secondary spin and locks use cpu_relax()

This makes secondaries spinning waiting for a job and spinlocks
use cpu_relax() which speeds up the primary thread and thus speeds
up the boot process a bit. Also prettify a bit cpu_relax() implementation

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>