18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#include <linux/linkage.h> 38c2ecf20Sopenharmony_ci#include <asm/assembler.h> 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#ifndef CONFIG_DEBUG_SEMIHOSTING 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include CONFIG_DEBUG_LL_INCLUDE 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciENTRY(putc) 108c2ecf20Sopenharmony_ci addruart r1, r2, r3 118c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_UART_FLOW_CONTROL 128c2ecf20Sopenharmony_ci waituartcts r3, r1 138c2ecf20Sopenharmony_ci#endif 148c2ecf20Sopenharmony_ci waituarttxrdy r3, r1 158c2ecf20Sopenharmony_ci senduart r0, r1 168c2ecf20Sopenharmony_ci busyuart r3, r1 178c2ecf20Sopenharmony_ci mov pc, lr 188c2ecf20Sopenharmony_ciENDPROC(putc) 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#else 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ciENTRY(putc) 238c2ecf20Sopenharmony_ci adr r1, 1f 248c2ecf20Sopenharmony_ci ldmia r1, {r2, r3} 258c2ecf20Sopenharmony_ci add r2, r2, r1 268c2ecf20Sopenharmony_ci ldr r1, [r2, r3] 278c2ecf20Sopenharmony_ci strb r0, [r1] 288c2ecf20Sopenharmony_ci mov r0, #0x03 @ SYS_WRITEC 298c2ecf20Sopenharmony_ci ARM( svc #0x123456 ) 308c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_V7M 318c2ecf20Sopenharmony_ci THUMB( bkpt #0xab ) 328c2ecf20Sopenharmony_ci#else 338c2ecf20Sopenharmony_ci THUMB( svc #0xab ) 348c2ecf20Sopenharmony_ci#endif 358c2ecf20Sopenharmony_ci mov pc, lr 368c2ecf20Sopenharmony_ci .align 2 378c2ecf20Sopenharmony_ci1: .word _GLOBAL_OFFSET_TABLE_ - . 388c2ecf20Sopenharmony_ci .word semi_writec_buf(GOT) 398c2ecf20Sopenharmony_ciENDPROC(putc) 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci .bss 428c2ecf20Sopenharmony_ci .global semi_writec_buf 438c2ecf20Sopenharmony_ci .type semi_writec_buf, %object 448c2ecf20Sopenharmony_cisemi_writec_buf: 458c2ecf20Sopenharmony_ci .space 4 468c2ecf20Sopenharmony_ci .size semi_writec_buf, 4 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci#endif 49