aboutsummaryrefslogtreecommitdiff
path: root/lib/utils/timer/fdt_timer_clint.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils/timer/fdt_timer_clint.c')
-rw-r--r--lib/utils/timer/fdt_timer_clint.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/utils/timer/fdt_timer_clint.c b/lib/utils/timer/fdt_timer_clint.c
index 85779b7..fe66708 100644
--- a/lib/utils/timer/fdt_timer_clint.c
+++ b/lib/utils/timer/fdt_timer_clint.c
@@ -7,22 +7,33 @@
* Anup Patel <anup.patel@wdc.com>
*/
+#include <sbi/sbi_error.h>
#include <sbi_utils/fdt/fdt_helper.h>
#include <sbi_utils/timer/fdt_timer.h>
#include <sbi_utils/sys/clint.h>
-static struct clint_data clint_timer;
+#define CLINT_TIMER_MAX_NR 16
+
+static unsigned long clint_timer_count = 0;
+static struct clint_data clint_timer[CLINT_TIMER_MAX_NR];
static int timer_clint_cold_init(void *fdt, int nodeoff,
const struct fdt_match *match)
{
int rc;
+ struct clint_data *ct, *ctmaster = NULL;
+
+ if (CLINT_TIMER_MAX_NR <= clint_timer_count)
+ return SBI_ENOSPC;
+ ct = &clint_timer[clint_timer_count++];
+ if (1 < clint_timer_count)
+ ctmaster = &clint_timer[0];
- rc = fdt_parse_clint_node(fdt, nodeoff, TRUE, &clint_timer);
+ rc = fdt_parse_clint_node(fdt, nodeoff, TRUE, ct);
if (rc)
return rc;
- return clint_cold_timer_init(&clint_timer, NULL);
+ return clint_cold_timer_init(ct, ctmaster);
}
static const struct fdt_match timer_clint_match[] = {