summaryrefslogtreecommitdiff
path: root/FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1_FreedomStudio/freedom-metal/src/drivers/sifive_fe310-g000_prci.c
blob: 4b402a27ad0ec3df62aedcf63022af1aa05452a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* Copyright 2018 SiFive, Inc */
/* SPDX-License-Identifier: Apache-2.0 */

#include <metal/machine/platform.h>

#ifdef METAL_SIFIVE_FE310_G000_PRCI

#include <metal/drivers/sifive_fe310-g000_prci.h>
#include <metal/machine.h>

long __metal_driver_sifive_fe310_g000_prci_get_reg(const struct __metal_driver_sifive_fe310_g000_prci *prci, long offset) {
    unsigned long base = __metal_driver_sifive_fe310_g000_prci_base();
    return __METAL_ACCESS_ONCE((__metal_io_u32 *)(base + offset));
}

long __metal_driver_sifive_fe310_g000_prci_set_reg(const struct __metal_driver_sifive_fe310_g000_prci *prci, long offset, long value) {
    unsigned long base = __metal_driver_sifive_fe310_g000_prci_base();
    return __METAL_ACCESS_ONCE((__metal_io_u32 *)(base + offset)) = value;
}

__METAL_DEFINE_VTABLE(__metal_driver_vtable_sifive_fe310_g000_prci) = {
    .get_reg = __metal_driver_sifive_fe310_g000_prci_get_reg,
    .set_reg = __metal_driver_sifive_fe310_g000_prci_set_reg,
};

#endif /* METAL_SIFIVE_FE310_G000_PRCI */