blob: c788af334c6ee15a443e3596fc1506e693e31097 [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001/*
Madhukar Pappireddy172523b2020-12-31 19:25:33 -06002 * Copyright (c) 2018-2021, Arm Limited. All rights reserved.
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef __MMIO_H__
8#define __MMIO_H__
9
10#include <stdint.h>
11
12static inline void mmio_write_8(uintptr_t addr, uint8_t value)
13{
14 *(volatile uint8_t*)addr = value;
15}
16
17static inline uint8_t mmio_read_8(uintptr_t addr)
18{
19 return *(volatile uint8_t*)addr;
20}
21
22static inline void mmio_write_32(uintptr_t addr, uint32_t value)
23{
24 *(volatile uint32_t*)addr = value;
25}
26
Madhukar Pappireddy172523b2020-12-31 19:25:33 -060027static inline void mmio_write32_offset(uintptr_t addr, uint32_t byte_off,
28 uint32_t data)
29{
30 mmio_write_32((uintptr_t)((uint8_t *)addr + byte_off), data);
31}
32
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020033static inline uint32_t mmio_read_32(uintptr_t addr)
34{
35 return *(volatile uint32_t*)addr;
36}
37
Madhukar Pappireddy172523b2020-12-31 19:25:33 -060038static inline uint32_t mmio_read32_offset(uintptr_t addr, uint32_t byte_off)
39{
40 return mmio_read_32((uintptr_t)((uint8_t *)addr + byte_off));
41}
42
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020043static inline void mmio_write_64(uintptr_t addr, uint64_t value)
44{
45 *(volatile uint64_t*)addr = value;
46}
47
Madhukar Pappireddy172523b2020-12-31 19:25:33 -060048static inline void mmio_write64_offset(uintptr_t addr, uint32_t byte_off,
49 uint64_t data)
50{
51 mmio_write_64((uintptr_t)((uint8_t *)addr + byte_off), data);
52}
53
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020054static inline uint64_t mmio_read_64(uintptr_t addr)
55{
56 return *(volatile uint64_t*)addr;
57}
58
59#endif /* __MMIO_H__ */