/* * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2022 Andes Technology Corporation * * Authors: * Yu Chien Peter Lin */ #include #include #include extern struct plmt_data plmt; static int fdt_plmt_cold_timer_init(const void *fdt, int nodeoff, const struct fdt_match *match) { int rc; unsigned long plmt_base; rc = fdt_parse_plmt_node(fdt, nodeoff, &plmt_base, &plmt.size, &plmt.hart_count); if (rc) return rc; plmt.time_val = (u64 *)plmt_base; plmt.time_cmp = (u64 *)(plmt_base + 0x8); rc = fdt_parse_timebase_frequency(fdt, &plmt.timer_freq); if (rc) return rc; rc = plmt_cold_timer_init(&plmt); if (rc) return rc; return 0; } static const struct fdt_match timer_plmt_match[] = { { .compatible = "andestech,plmt0" }, {}, }; const struct fdt_driver fdt_timer_plmt = { .match_table = timer_plmt_match, .init = fdt_plmt_cold_timer_init, };