]> Git Repo - J-linux.git/blob - drivers/gpu/drm/xe/xe_map.h
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / drivers / gpu / drm / xe / xe_map.h
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2022 Intel Corporation
4  */
5
6 #ifndef _XE_MAP_H_
7 #define _XE_MAP_H_
8
9 #include <linux/iosys-map.h>
10
11 #include <xe_device.h>
12
13 /**
14  * DOC: Map layer
15  *
16  * All access to any memory shared with a device (both sysmem and vram) in the
17  * XE driver should go through this layer (xe_map). This layer is built on top
18  * of :ref:`driver-api/device-io:Generalizing Access to System and I/O Memory`
19  * and with extra hooks into the XE driver that allows adding asserts to memory
20  * accesses (e.g. for blocking runtime_pm D3Cold on Discrete Graphics).
21  */
22
23 static inline void xe_map_memcpy_to(struct xe_device *xe, struct iosys_map *dst,
24                                     size_t dst_offset, const void *src,
25                                     size_t len)
26 {
27         xe_device_assert_mem_access(xe);
28         iosys_map_memcpy_to(dst, dst_offset, src, len);
29 }
30
31 static inline void xe_map_memcpy_from(struct xe_device *xe, void *dst,
32                                       const struct iosys_map *src,
33                                       size_t src_offset, size_t len)
34 {
35         xe_device_assert_mem_access(xe);
36         iosys_map_memcpy_from(dst, src, src_offset, len);
37 }
38
39 static inline void xe_map_memset(struct xe_device *xe,
40                                  struct iosys_map *dst, size_t offset,
41                                  int value, size_t len)
42 {
43         xe_device_assert_mem_access(xe);
44         iosys_map_memset(dst, offset, value, len);
45 }
46
47 /* FIXME: We likely should kill these two functions sooner or later */
48 static inline u32 xe_map_read32(struct xe_device *xe, struct iosys_map *map)
49 {
50         xe_device_assert_mem_access(xe);
51
52         if (map->is_iomem)
53                 return readl(map->vaddr_iomem);
54         else
55                 return READ_ONCE(*(u32 *)map->vaddr);
56 }
57
58 static inline void xe_map_write32(struct xe_device *xe, struct iosys_map *map,
59                                   u32 val)
60 {
61         xe_device_assert_mem_access(xe);
62
63         if (map->is_iomem)
64                 writel(val, map->vaddr_iomem);
65         else
66                 *(u32 *)map->vaddr = val;
67 }
68
69 #define xe_map_rd(xe__, map__, offset__, type__) ({                     \
70         struct xe_device *__xe = xe__;                                  \
71         xe_device_assert_mem_access(__xe);                              \
72         iosys_map_rd(map__, offset__, type__);                          \
73 })
74
75 #define xe_map_wr(xe__, map__, offset__, type__, val__) ({              \
76         struct xe_device *__xe = xe__;                                  \
77         xe_device_assert_mem_access(__xe);                              \
78         iosys_map_wr(map__, offset__, type__, val__);                   \
79 })
80
81 #define xe_map_rd_field(xe__, map__, struct_offset__, struct_type__, field__) ({        \
82         struct xe_device *__xe = xe__;                                  \
83         xe_device_assert_mem_access(__xe);                              \
84         iosys_map_rd_field(map__, struct_offset__, struct_type__, field__);             \
85 })
86
87 #define xe_map_wr_field(xe__, map__, struct_offset__, struct_type__, field__, val__) ({ \
88         struct xe_device *__xe = xe__;                                  \
89         xe_device_assert_mem_access(__xe);                              \
90         iosys_map_wr_field(map__, struct_offset__, struct_type__, field__, val__);      \
91 })
92
93 #endif
This page took 0.030422 seconds and 4 git commands to generate.