blob: 3242a7cc550c9edf9d38456563d8ce90ff9e024a [file] [log] [blame]
Achin Gupta4f6ad662013-10-25 09:08:21 +01001/*
Dan Handleye83b0ca2014-01-14 18:17:09 +00002 * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
Achin Gupta4f6ad662013-10-25 09:08:21 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Achin Gupta4f6ad662013-10-25 09:08:21 +01005 */
6
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +00007#ifndef MMIO_H
8#define MMIO_H
Achin Gupta4f6ad662013-10-25 09:08:21 +01009
Achin Gupta4f6ad662013-10-25 09:08:21 +010010#include <stdint.h>
11
Andrew Thoelkeaf9dd822014-06-24 14:18:35 +010012static inline void mmio_write_8(uintptr_t addr, uint8_t value)
13{
14 *(volatile uint8_t*)addr = value;
15}
Harry Liebelafd1ec72014-04-01 19:19:22 +010016
Andrew Thoelkeaf9dd822014-06-24 14:18:35 +010017static inline uint8_t mmio_read_8(uintptr_t addr)
18{
19 return *(volatile uint8_t*)addr;
20}
21
developera310c4f2015-07-31 13:48:22 +080022static inline void mmio_write_16(uintptr_t addr, uint16_t value)
23{
24 *(volatile uint16_t*)addr = value;
25}
26
27static inline uint16_t mmio_read_16(uintptr_t addr)
28{
29 return *(volatile uint16_t*)addr;
30}
31
Konstantin Porotchkinff5e1e82018-10-07 17:42:56 +030032static inline void mmio_clrsetbits_16(uintptr_t addr,
33 uint16_t clear,
34 uint16_t set)
35{
36 mmio_write_16(addr, (mmio_read_16(addr) & ~clear) | set);
37}
38
Andrew Thoelkeaf9dd822014-06-24 14:18:35 +010039static inline void mmio_write_32(uintptr_t addr, uint32_t value)
40{
41 *(volatile uint32_t*)addr = value;
42}
43
44static inline uint32_t mmio_read_32(uintptr_t addr)
45{
46 return *(volatile uint32_t*)addr;
47}
48
49static inline void mmio_write_64(uintptr_t addr, uint64_t value)
50{
51 *(volatile uint64_t*)addr = value;
52}
Achin Gupta4f6ad662013-10-25 09:08:21 +010053
Andrew Thoelkeaf9dd822014-06-24 14:18:35 +010054static inline uint64_t mmio_read_64(uintptr_t addr)
55{
56 return *(volatile uint64_t*)addr;
57}
Harry Liebeleaec5902013-12-12 13:00:29 +000058
developera310c4f2015-07-31 13:48:22 +080059static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)
60{
61 mmio_write_32(addr, mmio_read_32(addr) & ~clear);
62}
63
64static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)
65{
66 mmio_write_32(addr, mmio_read_32(addr) | set);
67}
68
69static inline void mmio_clrsetbits_32(uintptr_t addr,
70 uint32_t clear,
71 uint32_t set)
72{
73 mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set);
74}
75
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +000076#endif /* MMIO_H */