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