|  | /* | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | * | 
|  | * Copyright (c) 2021 ASPEED Technology Inc. | 
|  | */ | 
|  | #ifndef ZEPHYR_SOC_ARM_ASPEED_UTIL_H_ | 
|  | #define ZEPHYR_SOC_ARM_ASPEED_UTIL_H_ | 
|  | #include <zephyr/sys/util.h> | 
|  | #include <zephyr/devicetree.h> | 
|  | #include <zephyr/toolchain.h> | 
|  |  | 
|  | /* gcc.h doesn't define __section but checkpatch.pl will complain for this. so | 
|  | * temporarily add a macro here. | 
|  | */ | 
|  | #ifndef __section | 
|  | #define __section(x)    __attribute__((__section__(x))) | 
|  | #endif | 
|  |  | 
|  | /* to make checkpatch.pl happy */ | 
|  | #define ALIGNED16_SECTION(name)         (aligned(16), section(name)) | 
|  | #define __section_aligned16(name)       __attribute__(ALIGNED16_SECTION(name)) | 
|  |  | 
|  | /* non-cached (DMA) memory */ | 
|  | #if (CONFIG_SRAM_NC_SIZE > 0) | 
|  | #define NON_CACHED_BSS                  __section(".nocache.bss") | 
|  | #define NON_CACHED_BSS_ALIGN16          __section_aligned16(".nocache.bss") | 
|  | #else | 
|  | #define NON_CACHED_BSS | 
|  | #define NON_CACHED_BSS_ALIGN16          __aligned(16) | 
|  | #endif | 
|  |  | 
|  | #define reg_read_poll_timeout(map, reg, val, cond, sleep_ms, timeout_ms)	    \ | 
|  | ({									    \ | 
|  | uint32_t __timeout_tick = Z_TIMEOUT_MS(timeout_ms).ticks;	    \ | 
|  | uint32_t __start = sys_clock_tick_get_32();			    \ | 
|  | int __ret = 0;							    \ | 
|  | for (;;) {							    \ | 
|  | val.value = map->reg.value;				    \ | 
|  | if (cond) {						    \ | 
|  | break;						    \ | 
|  | }							    \ | 
|  | if ((sys_clock_tick_get_32() - __start) > __timeout_tick) { \ | 
|  | __ret = -ETIMEDOUT;				    \ | 
|  | break;						    \ | 
|  | }							    \ | 
|  | if (sleep_ms) {						    \ | 
|  | k_msleep(sleep_ms);				    \ | 
|  | }							    \ | 
|  | }								    \ | 
|  | __ret;								    \ | 
|  | }) | 
|  |  | 
|  | /* Common reset control device name for all ASPEED SOC family */ | 
|  | #define ASPEED_RST_CTRL_NAME DT_INST_RESETS_LABEL(0) | 
|  | #define	DEBUG_HALT()	{ volatile int halt = 1; while (halt) { __asm__ volatile("nop"); } } | 
|  | #endif |