162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* Copyright (c) 2010, 2014 The Linux Foundation. All rights reserved. 362306a36Sopenharmony_ci */ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <asm/barrier.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistatic inline u32 __dcc_getstatus(void) 862306a36Sopenharmony_ci{ 962306a36Sopenharmony_ci u32 __ret; 1062306a36Sopenharmony_ci asm volatile("mrc p14, 0, %0, c0, c1, 0 @ read comms ctrl reg" 1162306a36Sopenharmony_ci : "=r" (__ret) : : "cc"); 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci return __ret; 1462306a36Sopenharmony_ci} 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistatic inline char __dcc_getchar(void) 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci char __c; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci asm volatile("mrc p14, 0, %0, c0, c5, 0 @ read comms data reg" 2162306a36Sopenharmony_ci : "=r" (__c)); 2262306a36Sopenharmony_ci isb(); 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci return __c; 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistatic inline void __dcc_putchar(char c) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci asm volatile("mcr p14, 0, %0, c0, c5, 0 @ write a char" 3062306a36Sopenharmony_ci : /* no output register */ 3162306a36Sopenharmony_ci : "r" (c)); 3262306a36Sopenharmony_ci isb(); 3362306a36Sopenharmony_ci} 34