162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include <linux/linkage.h> 362306a36Sopenharmony_ci#include <asm/assembler.h> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#ifndef CONFIG_DEBUG_SEMIHOSTING 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include CONFIG_DEBUG_LL_INCLUDE 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciENTRY(putc) 1062306a36Sopenharmony_ci addruart r1, r2, r3 1162306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_UART_FLOW_CONTROL 1262306a36Sopenharmony_ci waituartcts r3, r1 1362306a36Sopenharmony_ci#endif 1462306a36Sopenharmony_ci waituarttxrdy r3, r1 1562306a36Sopenharmony_ci senduart r0, r1 1662306a36Sopenharmony_ci busyuart r3, r1 1762306a36Sopenharmony_ci mov pc, lr 1862306a36Sopenharmony_ciENDPROC(putc) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#else 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciENTRY(putc) 2362306a36Sopenharmony_ci adr r1, 1f 2462306a36Sopenharmony_ci ldmia r1, {r2, r3} 2562306a36Sopenharmony_ci add r2, r2, r1 2662306a36Sopenharmony_ci ldr r1, [r2, r3] 2762306a36Sopenharmony_ci strb r0, [r1] 2862306a36Sopenharmony_ci mov r0, #0x03 @ SYS_WRITEC 2962306a36Sopenharmony_ci ARM( svc #0x123456 ) 3062306a36Sopenharmony_ci#ifdef CONFIG_CPU_V7M 3162306a36Sopenharmony_ci THUMB( bkpt #0xab ) 3262306a36Sopenharmony_ci#else 3362306a36Sopenharmony_ci THUMB( svc #0xab ) 3462306a36Sopenharmony_ci#endif 3562306a36Sopenharmony_ci mov pc, lr 3662306a36Sopenharmony_ci .align 2 3762306a36Sopenharmony_ci1: .word _GLOBAL_OFFSET_TABLE_ - . 3862306a36Sopenharmony_ci .word semi_writec_buf(GOT) 3962306a36Sopenharmony_ciENDPROC(putc) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci .bss 4262306a36Sopenharmony_ci .global semi_writec_buf 4362306a36Sopenharmony_ci .type semi_writec_buf, %object 4462306a36Sopenharmony_cisemi_writec_buf: 4562306a36Sopenharmony_ci .space 4 4662306a36Sopenharmony_ci .size semi_writec_buf, 4 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#endif 49