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