Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *  Copyright (C) 2009 Sascha Hauer <s.hauer@pengutronix.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #include <asm/assembler.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * r8  = bit 0-15: tx offset, bit 16-31: tx buffer size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * r9  = bit 0-15: rx offset, bit 16-31: rx buffer size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define SSI_STX0	0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define SSI_SRX0	0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define SSI_SISR	0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define SSI_SIER	0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define SSI_SACNT	0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define SSI_SACNT_AC97EN	(1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define SSI_SIER_TFE0_EN	(1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define SSI_SISR_TFE0		(1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define SSI_SISR_RFF0		(1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define SSI_SIER_RFF0_EN	(1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 		.text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 		.global	imx_ssi_fiq_start
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 		.global	imx_ssi_fiq_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 		.global imx_ssi_fiq_base
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 		.global imx_ssi_fiq_rx_buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 		.global imx_ssi_fiq_tx_buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * imx_ssi_fiq_start is _intentionally_ not marked as a function symbol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  * using ENDPROC().  imx_ssi_fiq_start and imx_ssi_fiq_end are used to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * mark the function body so that it can be copied to the FIQ vector in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * the vectors page.  imx_ssi_fiq_start should only be called as the result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  * of an FIQ: calling it directly will not work.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) imx_ssi_fiq_start:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 		ldr r12, .L_imx_ssi_fiq_base
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 		/* TX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 		ldr r13, .L_imx_ssi_fiq_tx_buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 		/* shall we send? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 		ldr r11, [r12, #SSI_SIER]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 		tst r11, #SSI_SIER_TFE0_EN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		beq 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		/* TX FIFO empty? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		ldr r11, [r12, #SSI_SISR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 		tst r11, #SSI_SISR_TFE0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 		beq 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 		mov r10, #0x10000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 		sub r10, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 		and r10, r10, r8	/* r10: current buffer offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 		add r13, r13, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 		ldrh r11, [r13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 		strh r11, [r12, #SSI_STX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 		ldrh r11, [r13, #2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 		strh r11, [r12, #SSI_STX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 		ldrh r11, [r13, #4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 		strh r11, [r12, #SSI_STX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 		ldrh r11, [r13, #6]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 		strh r11, [r12, #SSI_STX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 		add r10, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 		lsr r11, r8, #16	/* r11: buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 		cmp r10, r11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 		lslgt r8, r11, #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 		addle r8, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 		/* RX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 		/* shall we receive? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 		ldr r11, [r12, #SSI_SIER]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 		tst r11, #SSI_SIER_RFF0_EN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 		beq 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 		/* RX FIFO full? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 		ldr r11, [r12, #SSI_SISR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 		tst r11, #SSI_SISR_RFF0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 		beq 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 		ldr r13, .L_imx_ssi_fiq_rx_buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		mov r10, #0x10000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 		sub r10, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 		and r10, r10, r9	/* r10: current buffer offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 		add r13, r13, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		ldr r11, [r12, #SSI_SACNT]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 		tst r11, #SSI_SACNT_AC97EN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 		ldr r11, [r12, #SSI_SRX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 		strh r11, [r13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 		ldr r11, [r12, #SSI_SRX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 		strh r11, [r13, #2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 		/* dummy read to skip slot 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 		ldrne r11, [r12, #SSI_SRX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 		ldr r11, [r12, #SSI_SRX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 		strh r11, [r13, #4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 		ldr r11, [r12, #SSI_SRX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 		strh r11, [r13, #6]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 		/* dummy read to skip slot 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 		ldrne r11, [r12, #SSI_SRX0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 		add r10, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 		lsr r11, r9, #16	/* r11: buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 		cmp r10, r11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 		lslgt r9, r11, #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 		addle r9, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 		@ return from FIQ
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 		subs	pc, lr, #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 		.align
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) .L_imx_ssi_fiq_base:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) imx_ssi_fiq_base:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 		.word 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) .L_imx_ssi_fiq_rx_buffer:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) imx_ssi_fiq_rx_buffer:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 		.word 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) .L_imx_ssi_fiq_tx_buffer:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) imx_ssi_fiq_tx_buffer:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 		.word 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) .L_imx_ssi_fiq_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) imx_ssi_fiq_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)