Currently udelay relies on working EXT interrupts handler, which is not the case during early startup. In such cases udelay_simple() has to be used instead. To avoid mistakes of calling udelay too early, which could happen from the common code as well - make udelay work for the early code by introducing static branch and redirecting all udelay calls to udelay_simple until EXT interrupts handler is fully initialized and async stack is allocated. Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
27 lines
747 B
C
27 lines
747 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* S390 version
|
|
* Copyright IBM Corp. 1999
|
|
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
|
|
*
|
|
* Derived from "include/asm-i386/delay.h"
|
|
* Copyright (C) 1993 Linus Torvalds
|
|
*
|
|
* Delay routines calling functions in arch/s390/lib/delay.c
|
|
*/
|
|
|
|
#ifndef _S390_DELAY_H
|
|
#define _S390_DELAY_H
|
|
|
|
void udelay_enable(void);
|
|
void __ndelay(unsigned long long nsecs);
|
|
void __udelay(unsigned long long usecs);
|
|
void udelay_simple(unsigned long long usecs);
|
|
void __delay(unsigned long loops);
|
|
|
|
#define ndelay(n) __ndelay((unsigned long long) (n))
|
|
#define udelay(n) __udelay((unsigned long long) (n))
|
|
#define mdelay(n) __udelay((unsigned long long) (n) * 1000)
|
|
|
|
#endif /* defined(_S390_DELAY_H) */
|