forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/gpu/drm/via/via_drv.h
....@@ -24,8 +24,16 @@
2424 #ifndef _VIA_DRV_H_
2525 #define _VIA_DRV_H_
2626
27
-#include <drm/drm_mm.h>
27
+#include <linux/irqreturn.h>
28
+#include <linux/jiffies.h>
29
+#include <linux/sched.h>
30
+#include <linux/sched/signal.h>
31
+#include <linux/wait.h>
32
+
33
+#include <drm/drm_ioctl.h>
2834 #include <drm/drm_legacy.h>
35
+#include <drm/drm_mm.h>
36
+#include <drm/via_drm.h>
2937
3038 #define DRIVER_AUTHOR "Various"
3139
....@@ -113,12 +121,67 @@
113121 };
114122
115123 /* VIA MMIO register access */
116
-#define VIA_BASE ((dev_priv->mmio))
124
+static inline u32 via_read(struct drm_via_private *dev_priv, u32 reg)
125
+{
126
+ return readl((void __iomem *)(dev_priv->mmio->handle + reg));
127
+}
117128
118
-#define VIA_READ(reg) DRM_READ32(VIA_BASE, reg)
119
-#define VIA_WRITE(reg, val) DRM_WRITE32(VIA_BASE, reg, val)
120
-#define VIA_READ8(reg) DRM_READ8(VIA_BASE, reg)
121
-#define VIA_WRITE8(reg, val) DRM_WRITE8(VIA_BASE, reg, val)
129
+static inline void via_write(struct drm_via_private *dev_priv, u32 reg,
130
+ u32 val)
131
+{
132
+ writel(val, (void __iomem *)(dev_priv->mmio->handle + reg));
133
+}
134
+
135
+static inline void via_write8(struct drm_via_private *dev_priv, u32 reg,
136
+ u32 val)
137
+{
138
+ writeb(val, (void __iomem *)(dev_priv->mmio->handle + reg));
139
+}
140
+
141
+static inline void via_write8_mask(struct drm_via_private *dev_priv,
142
+ u32 reg, u32 mask, u32 val)
143
+{
144
+ u32 tmp;
145
+
146
+ tmp = readb((void __iomem *)(dev_priv->mmio->handle + reg));
147
+ tmp = (tmp & ~mask) | (val & mask);
148
+ writeb(tmp, (void __iomem *)(dev_priv->mmio->handle + reg));
149
+}
150
+
151
+/*
152
+ * Poll in a loop waiting for 'contidition' to be true.
153
+ * Note: A direct replacement with wait_event_interruptible_timeout()
154
+ * will not work unless driver is updated to emit wake_up()
155
+ * in relevant places that can impact the 'condition'
156
+ *
157
+ * Returns:
158
+ * ret keeps current value if 'condition' becomes true
159
+ * ret = -BUSY if timeout happens
160
+ * ret = -EINTR if a signal interrupted the waiting period
161
+ */
162
+#define VIA_WAIT_ON( ret, queue, timeout, condition ) \
163
+do { \
164
+ DECLARE_WAITQUEUE(entry, current); \
165
+ unsigned long end = jiffies + (timeout); \
166
+ add_wait_queue(&(queue), &entry); \
167
+ \
168
+ for (;;) { \
169
+ __set_current_state(TASK_INTERRUPTIBLE); \
170
+ if (condition) \
171
+ break; \
172
+ if (time_after_eq(jiffies, end)) { \
173
+ ret = -EBUSY; \
174
+ break; \
175
+ } \
176
+ schedule_timeout((HZ/100 > 1) ? HZ/100 : 1); \
177
+ if (signal_pending(current)) { \
178
+ ret = -EINTR; \
179
+ break; \
180
+ } \
181
+ } \
182
+ __set_current_state(TASK_RUNNING); \
183
+ remove_wait_queue(&(queue), &entry); \
184
+} while (0)
122185
123186 extern const struct drm_ioctl_desc via_ioctls[];
124187 extern int via_max_ioctl;