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