blob: c2e0763abd601f81cbabb94eea8ea0efad7e99e6 [file] [log] [blame]
Sylvain Munautf5d7bf22020-09-14 10:23:50 +02001/*
2 * misc.c
3 *
4 * Copyright (C) 2019-2020 Sylvain Munaut <tnt@246tNt.com>
5 * SPDX-License-Identifier: GPL-3.0-or-later
6 */
7
8#include <stdbool.h>
9#include <stdint.h>
10
11#include "config.h"
12#include "misc.h"
13
14
15struct misc {
16 uint32_t warmboot;
17 uint32_t _rsvd0[3];;
18 struct {
Sylvain Munautf5d7bf22020-09-14 10:23:50 +020019 uint16_t rx;
Sylvain Munaut1ac458f2020-09-15 22:06:00 +020020 uint16_t _rsvd1;
Sylvain Munautf5d7bf22020-09-14 10:23:50 +020021 } e1_tick[2];
Sylvain Munaut1ac458f2020-09-15 22:06:00 +020022 struct {
23 uint32_t _rsvd2;
24 uint32_t now;
25 } time;
Sylvain Munautf5d7bf22020-09-14 10:23:50 +020026} __attribute__((packed,aligned(4)));
27
28static volatile struct misc * const misc_regs = (void*)(MISC_BASE);
29
30
31void
32e1_tick_read(uint16_t *ticks)
33{
Sylvain Munaut5e0217e2020-10-29 13:24:02 +010034 ticks[0] = misc_regs->e1_tick[0].rx;
35 ticks[1] = misc_regs->e1_tick[1].rx;
Sylvain Munautf5d7bf22020-09-14 10:23:50 +020036}
Sylvain Munaut46d6b412020-10-29 13:19:05 +010037
38
39void
40reboot(int fw)
41{
42 misc_regs->warmboot = (1 << 2) | (fw << 0);
43}