^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * arch/xtensa/kernel/platform.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Default platform functions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * This file is subject to the terms and conditions of the GNU General Public
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * License. See the file "COPYING" in the main directory of this archive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Copyright (C) 2005 Tensilica Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * Chris Zankel <chris@zankel.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/printk.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <asm/platform.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <asm/timex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define _F(r,f,a,b) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) r __platform_##f a b; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) r platform_##f a __attribute__((weak, alias("__platform_"#f)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * Default functions that are used if no platform specific function is defined.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * (Please, refer to include/asm-xtensa/platform.h for more information)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) _F(void, init, (bp_tag_t *first), { });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) _F(void, setup, (char** cmd), { });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) _F(void, restart, (void), { while(1); });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) _F(void, halt, (void), { while(1); });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) _F(void, power_off, (void), { while(1); });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) _F(void, idle, (void), { __asm__ __volatile__ ("waiti 0" ::: "memory"); });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) _F(void, heartbeat, (void), { });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #ifdef CONFIG_XTENSA_CALIBRATE_CCOUNT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) _F(void, calibrate_ccount, (void),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) pr_err("ERROR: Cannot calibrate cpu frequency! Assuming 10MHz.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) ccount_freq = 10 * 1000000UL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) });
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #endif