1f947153fSKrzysztof Kozlowski/* SPDX-License-Identifier: GPL-2.0 */ 2f947153fSKrzysztof Kozlowski/* 3a2e40710SArnd Bergmann * Copyright 2005, 2007 Simtec Electronics 4a2e40710SArnd Bergmann * http://armlinux.simtec.co.uk/ 5a2e40710SArnd Bergmann * Ben Dooks <ben@simtec.co.uk> 6a2e40710SArnd Bergmann */ 7a2e40710SArnd Bergmann 8be670dafSSachin Kamat#include <linux/serial_s3c.h> 9a2e40710SArnd Bergmann 10a2e40710SArnd Bergmann/* The S5PV210/S5PC110 implementations are as belows. */ 11a2e40710SArnd Bergmann 12a2e40710SArnd Bergmann .macro fifo_level_s5pv210 rd, rx 13a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UFSTAT] 144fdfa862SBen DooksARM_BE8(rev \rd, \rd) 15a2e40710SArnd Bergmann and \rd, \rd, #S5PV210_UFSTAT_TXMASK 16a2e40710SArnd Bergmann .endm 17a2e40710SArnd Bergmann 18a2e40710SArnd Bergmann .macro fifo_full_s5pv210 rd, rx 19a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UFSTAT] 204fdfa862SBen DooksARM_BE8(rev \rd, \rd) 21a2e40710SArnd Bergmann tst \rd, #S5PV210_UFSTAT_TXFULL 22a2e40710SArnd Bergmann .endm 23a2e40710SArnd Bergmann 24a2e40710SArnd Bergmann/* The S3C2440 implementations are used by default as they are the 25a2e40710SArnd Bergmann * most widely re-used */ 26a2e40710SArnd Bergmann 27a2e40710SArnd Bergmann .macro fifo_level_s3c2440 rd, rx 28a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UFSTAT] 294fdfa862SBen DooksARM_BE8(rev \rd, \rd) 30a2e40710SArnd Bergmann and \rd, \rd, #S3C2440_UFSTAT_TXMASK 31a2e40710SArnd Bergmann .endm 32a2e40710SArnd Bergmann 33a2e40710SArnd Bergmann#ifndef fifo_level 34a2e40710SArnd Bergmann#define fifo_level fifo_level_s3c2440 35a2e40710SArnd Bergmann#endif 36a2e40710SArnd Bergmann 37a2e40710SArnd Bergmann .macro fifo_full_s3c2440 rd, rx 38a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UFSTAT] 394fdfa862SBen DooksARM_BE8(rev \rd, \rd) 40a2e40710SArnd Bergmann tst \rd, #S3C2440_UFSTAT_TXFULL 41a2e40710SArnd Bergmann .endm 42a2e40710SArnd Bergmann 43a2e40710SArnd Bergmann#ifndef fifo_full 44a2e40710SArnd Bergmann#define fifo_full fifo_full_s3c2440 45a2e40710SArnd Bergmann#endif 46a2e40710SArnd Bergmann 47a2e40710SArnd Bergmann .macro senduart,rd,rx 48a2e40710SArnd Bergmann strb \rd, [\rx, # S3C2410_UTXH] 49a2e40710SArnd Bergmann .endm 50a2e40710SArnd Bergmann 51a2e40710SArnd Bergmann .macro busyuart, rd, rx 52a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UFCON] 534fdfa862SBen DooksARM_BE8(rev \rd, \rd) 54a2e40710SArnd Bergmann tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? 55a2e40710SArnd Bergmann beq 1001f @ 56a2e40710SArnd Bergmann @ FIFO enabled... 57a2e40710SArnd Bergmann1003: 58a2e40710SArnd Bergmann fifo_full \rd, \rx 59a2e40710SArnd Bergmann bne 1003b 60a2e40710SArnd Bergmann b 1002f 61a2e40710SArnd Bergmann 62a2e40710SArnd Bergmann1001: 63a2e40710SArnd Bergmann @ busy waiting for non fifo 64a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UTRSTAT] 654fdfa862SBen DooksARM_BE8(rev \rd, \rd) 66a2e40710SArnd Bergmann tst \rd, #S3C2410_UTRSTAT_TXFE 67a2e40710SArnd Bergmann beq 1001b 68a2e40710SArnd Bergmann 69a2e40710SArnd Bergmann1002: @ exit busyuart 70a2e40710SArnd Bergmann .endm 71a2e40710SArnd Bergmann 72*2c50a570SLinus Walleij .macro waituartcts,rd,rx 73*2c50a570SLinus Walleij .endm 74*2c50a570SLinus Walleij 75*2c50a570SLinus Walleij .macro waituarttxrdy,rd,rx 76a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UFCON] 774fdfa862SBen DooksARM_BE8(rev \rd, \rd) 78a2e40710SArnd Bergmann tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? 79a2e40710SArnd Bergmann beq 1001f @ 80a2e40710SArnd Bergmann @ FIFO enabled... 81a2e40710SArnd Bergmann1003: 82a2e40710SArnd Bergmann fifo_level \rd, \rx 83a2e40710SArnd Bergmann teq \rd, #0 84a2e40710SArnd Bergmann bne 1003b 85a2e40710SArnd Bergmann b 1002f 86a2e40710SArnd Bergmann1001: 87a2e40710SArnd Bergmann @ idle waiting for non fifo 88a2e40710SArnd Bergmann ldr \rd, [\rx, # S3C2410_UTRSTAT] 894fdfa862SBen DooksARM_BE8(rev \rd, \rd) 90a2e40710SArnd Bergmann tst \rd, #S3C2410_UTRSTAT_TXFE 91a2e40710SArnd Bergmann beq 1001b 92a2e40710SArnd Bergmann 93a2e40710SArnd Bergmann1002: @ exit busyuart 94a2e40710SArnd Bergmann .endm 95