162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * arch/arm/mach-sa1100/include/mach/uncompress.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * (C) 1999 Nicolas Pitre <nico@fluxnic.net>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Reorganised to be machine independent.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "hardware.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define IOMEM(x)	(x)
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/*
1562306a36Sopenharmony_ci * The following code assumes the serial port has already been
1662306a36Sopenharmony_ci * initialized by the bootloader.  We search for the first enabled
1762306a36Sopenharmony_ci * port in the most probable order.  If you didn't setup a port in
1862306a36Sopenharmony_ci * your bootloader then nothing will appear (which might be desired).
1962306a36Sopenharmony_ci */
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define UART(x)		(*(volatile unsigned long *)(serial_port + (x)))
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistatic inline void putc(int c)
2462306a36Sopenharmony_ci{
2562306a36Sopenharmony_ci	unsigned long serial_port;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	do {
2862306a36Sopenharmony_ci		serial_port = _Ser3UTCR0;
2962306a36Sopenharmony_ci		if (UART(UTCR3) & UTCR3_TXE) break;
3062306a36Sopenharmony_ci		serial_port = _Ser1UTCR0;
3162306a36Sopenharmony_ci		if (UART(UTCR3) & UTCR3_TXE) break;
3262306a36Sopenharmony_ci		serial_port = _Ser2UTCR0;
3362306a36Sopenharmony_ci		if (UART(UTCR3) & UTCR3_TXE) break;
3462306a36Sopenharmony_ci		return;
3562306a36Sopenharmony_ci	} while (0);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	/* wait for space in the UART's transmitter */
3862306a36Sopenharmony_ci	while (!(UART(UTSR1) & UTSR1_TNF))
3962306a36Sopenharmony_ci		barrier();
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	/* send the character out. */
4262306a36Sopenharmony_ci	UART(UTDR) = c;
4362306a36Sopenharmony_ci}
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistatic inline void flush(void)
4662306a36Sopenharmony_ci{
4762306a36Sopenharmony_ci}
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci/*
5062306a36Sopenharmony_ci * Nothing to do for these
5162306a36Sopenharmony_ci */
5262306a36Sopenharmony_ci#define arch_decomp_setup()
53