Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 1 | /* |
Dan Handley | e83b0ca | 2014-01-14 18:17:09 +0000 | [diff] [blame] | 2 | * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved. |
Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 3 | * |
dp-arm | fa3cf0b | 2017-05-03 09:38:09 +0100 | [diff] [blame] | 4 | * SPDX-License-Identifier: BSD-3-Clause |
Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 5 | */ |
| 6 | |
| 7 | #ifndef __MMIO_H__ |
| 8 | #define __MMIO_H__ |
| 9 | |
Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 10 | #include <stdint.h> |
| 11 | |
Andrew Thoelke | af9dd82 | 2014-06-24 14:18:35 +0100 | [diff] [blame] | 12 | static inline void mmio_write_8(uintptr_t addr, uint8_t value) |
| 13 | { |
| 14 | *(volatile uint8_t*)addr = value; |
| 15 | } |
Harry Liebel | afd1ec7 | 2014-04-01 19:19:22 +0100 | [diff] [blame] | 16 | |
Andrew Thoelke | af9dd82 | 2014-06-24 14:18:35 +0100 | [diff] [blame] | 17 | static inline uint8_t mmio_read_8(uintptr_t addr) |
| 18 | { |
| 19 | return *(volatile uint8_t*)addr; |
| 20 | } |
| 21 | |
developer | a310c4f | 2015-07-31 13:48:22 +0800 | [diff] [blame] | 22 | static inline void mmio_write_16(uintptr_t addr, uint16_t value) |
| 23 | { |
| 24 | *(volatile uint16_t*)addr = value; |
| 25 | } |
| 26 | |
| 27 | static inline uint16_t mmio_read_16(uintptr_t addr) |
| 28 | { |
| 29 | return *(volatile uint16_t*)addr; |
| 30 | } |
| 31 | |
Andrew Thoelke | af9dd82 | 2014-06-24 14:18:35 +0100 | [diff] [blame] | 32 | static inline void mmio_write_32(uintptr_t addr, uint32_t value) |
| 33 | { |
| 34 | *(volatile uint32_t*)addr = value; |
| 35 | } |
| 36 | |
| 37 | static inline uint32_t mmio_read_32(uintptr_t addr) |
| 38 | { |
| 39 | return *(volatile uint32_t*)addr; |
| 40 | } |
| 41 | |
| 42 | static inline void mmio_write_64(uintptr_t addr, uint64_t value) |
| 43 | { |
| 44 | *(volatile uint64_t*)addr = value; |
| 45 | } |
Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 46 | |
Andrew Thoelke | af9dd82 | 2014-06-24 14:18:35 +0100 | [diff] [blame] | 47 | static inline uint64_t mmio_read_64(uintptr_t addr) |
| 48 | { |
| 49 | return *(volatile uint64_t*)addr; |
| 50 | } |
Harry Liebel | eaec590 | 2013-12-12 13:00:29 +0000 | [diff] [blame] | 51 | |
developer | a310c4f | 2015-07-31 13:48:22 +0800 | [diff] [blame] | 52 | static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear) |
| 53 | { |
| 54 | mmio_write_32(addr, mmio_read_32(addr) & ~clear); |
| 55 | } |
| 56 | |
| 57 | static inline void mmio_setbits_32(uintptr_t addr, uint32_t set) |
| 58 | { |
| 59 | mmio_write_32(addr, mmio_read_32(addr) | set); |
| 60 | } |
| 61 | |
| 62 | static inline void mmio_clrsetbits_32(uintptr_t addr, |
| 63 | uint32_t clear, |
| 64 | uint32_t set) |
| 65 | { |
| 66 | mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set); |
| 67 | } |
| 68 | |
Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 69 | #endif /* __MMIO_H__ */ |