提交 9ed82c68 编写于 作者: M Max Filippov

xtensa: implement ndelay

Proper ndelay implementation allows for faster IO rate with drivers that
use ndelay to access their device registers, as otherwise ndelay is
emulated with udelay.
Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
上级 58f60c22
......@@ -29,8 +29,10 @@ static inline void __delay(unsigned long loops)
/* Undefined function to get compile-time error */
void __bad_udelay(void);
void __bad_ndelay(void);
#define __MAX_UDELAY 30000
#define __MAX_NDELAY 30000
static inline void __udelay(unsigned long usecs)
{
......@@ -50,4 +52,24 @@ static inline void udelay(unsigned long usec)
__udelay(usec);
}
static inline void __ndelay(unsigned long nsec)
{
/*
* Inner shift makes sure multiplication doesn't overflow
* for legitimate nsec values
*/
unsigned long cycles = (nsec * (ccount_freq >> 15)) >> 15;
__delay(cycles);
}
#define ndelay(n) ndelay(n)
static inline void ndelay(unsigned long nsec)
{
if (__builtin_constant_p(nsec) && nsec >= __MAX_NDELAY)
__bad_ndelay();
else
__ndelay(nsec);
}
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
新手
引导
客服 返回
顶部