18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * LoongArch-specific debug support for pre-boot environment
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * NOTE: putc() is board specific, if your board have a 16550 compatible uart,
68c2ecf20Sopenharmony_ci * please select SYS_SUPPORTS_ZBOOT_UART16550 for your machine. othewise, you
78c2ecf20Sopenharmony_ci * need to implement your own putc().
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci#include <linux/compiler.h>
108c2ecf20Sopenharmony_ci#include <linux/types.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_civoid __weak putc(char c)
138c2ecf20Sopenharmony_ci{
148c2ecf20Sopenharmony_ci}
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_civoid puts(const char *s)
178c2ecf20Sopenharmony_ci{
188c2ecf20Sopenharmony_ci	char c;
198c2ecf20Sopenharmony_ci	while ((c = *s++) != '\0') {
208c2ecf20Sopenharmony_ci		putc(c);
218c2ecf20Sopenharmony_ci		if (c == '\n')
228c2ecf20Sopenharmony_ci			putc('\r');
238c2ecf20Sopenharmony_ci	}
248c2ecf20Sopenharmony_ci}
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_civoid puthex(unsigned long long val)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	unsigned char buf[10];
308c2ecf20Sopenharmony_ci	int i;
318c2ecf20Sopenharmony_ci	for (i = 7; i >= 0; i--) {
328c2ecf20Sopenharmony_ci		buf[i] = "0123456789ABCDEF"[val & 0x0F];
338c2ecf20Sopenharmony_ci		val >>= 4;
348c2ecf20Sopenharmony_ci	}
358c2ecf20Sopenharmony_ci	buf[8] = '\0';
368c2ecf20Sopenharmony_ci	puts(buf);
378c2ecf20Sopenharmony_ci}
38