diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-06 11:16:33 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-06 11:16:33 -0400 |
| commit | 135c5504a600ff9b06e321694fbcac78a9530cd4 (patch) | |
| tree | 8d22ed739b0e85954010a964a9aeadf3c692c977 /include/linux | |
| parent | af6c5d5e01ad9f2c9ca38cccaae6b5d67ddd241f (diff) | |
| parent | 568cf2e6aa0c762f14d2d0d481a006f93c63ab7a (diff) | |
Merge tag 'drm-next-2018-06-06-1' of git://anongit.freedesktop.org/drm/drm
Pull drm updates from Dave Airlie:
"This starts to support NVIDIA volta hardware with nouveau, and adds
amdgpu support for the GPU in the Kabylake-G (the intel + radeon
single package chip), along with some initial Intel icelake enabling.
Summary:
New Drivers:
- v3d - driver for broadcom V3D V3.x+ hardware
- xen-front - XEN PV display frontend
core:
- handle zpos normalization in the core
- stop looking at legacy pointers in atomic paths
- improved scheduler documentation
- improved aspect ratio validation
- aspect ratio support for 64:27 and 256:135
- drop unused control node code.
i915:
- Icelake (ICL) enabling
- GuC/HuC refactoring
- PSR/PSR2 enabling and fixes
- DPLL management refactoring
- DP MST fixes
- NV12 enabling
- HDCP improvements
- GEM/Execlist/reset improvements
- GVT improvements
- stolen memory first 4k fix
amdgpu:
- Vega 20 support
- VEGAM support (Kabylake-G)
- preOS scanout buffer reservation
- power management gfxoff support for raven
- SR-IOV fixes
- Vega10 power profiles and clock voltage control
- scatter/gather display support on CZ/ST
amdkfd:
- GFX9 dGPU support
- userptr memory mapping
nouveau:
- major refactoring for Volta GV100 support
tda998x:
- HDMI i2c CEC support
etnaviv:
- removed unused logging code
- license text cleanups
- MMU handling improvements
- timeout fence fix for 50 days uptime
tegra:
- IOMMU support in gr2d/gr3d drivers
- zpos support
vc4:
- syncobj support
- CTM, plane alpha and async cursor support
analogix_dp:
- HPD and aux chan fixes
sun4i:
- MIPI DSI support
tilcdc:
- clock divider fixes for OMAP-l138 LCDK board
rcar-du:
- R8A77965 support
- dma-buf fences fixes
- hardware indexed crtc/du group handling
- generic zplane property support
atmel-hclcdc:
- generic zplane property support
mediatek:
- use generic video mode function
exynos:
- S5PV210 FIMD variant support
- IPP v2 framework
- more HW overlays support"
* tag 'drm-next-2018-06-06-1' of git://anongit.freedesktop.org/drm/drm: (1286 commits)
drm/amdgpu: fix 32-bit build warning
drm/exynos: fimc: signedness bug in fimc_setup_clocks()
drm/exynos: scaler: fix static checker warning
drm/amdgpu: Use dev_info() to report amdkfd is not supported for this ASIC
drm/amd/display: Remove use of division operator for long longs
drm/amdgpu: Update GFX info structure to match what vega20 used
drm/amdgpu/pp: remove duplicate assignment
drm/sched: add rcu_barrier after entity fini
drm/amdgpu: move VM BOs on LRU again
drm/amdgpu: consistenly use VM moved flag
drm/amdgpu: kmap PDs/PTs in amdgpu_vm_update_directories
drm/amdgpu: further optimize amdgpu_vm_handle_moved
drm/amdgpu: cleanup amdgpu_vm_validate_pt_bos v2
drm/amdgpu: rework VM state machine lock handling v2
drm/amdgpu: Add runtime VCN PG support
drm/amdgpu: Enable VCN static PG by default on RV
drm/amdgpu: Add VCN static PG support on RV
drm/amdgpu: Enable VCN CG by default on RV
drm/amdgpu: Add static CG control for VCN on RV
drm/exynos: Fix default value for zpos plane property
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/dma-fence.h | 236 | ||||
| -rw-r--r-- | include/linux/host1x.h | 24 | ||||
| -rw-r--r-- | include/linux/platform_data/tda9950.h | 16 |
3 files changed, 177 insertions, 99 deletions
diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index 4c008170fe65..eb9b05aa5aea 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h | |||
| @@ -94,11 +94,11 @@ typedef void (*dma_fence_func_t)(struct dma_fence *fence, | |||
| 94 | struct dma_fence_cb *cb); | 94 | struct dma_fence_cb *cb); |
| 95 | 95 | ||
| 96 | /** | 96 | /** |
| 97 | * struct dma_fence_cb - callback for dma_fence_add_callback | 97 | * struct dma_fence_cb - callback for dma_fence_add_callback() |
| 98 | * @node: used by dma_fence_add_callback to append this struct to fence::cb_list | 98 | * @node: used by dma_fence_add_callback() to append this struct to fence::cb_list |
| 99 | * @func: dma_fence_func_t to call | 99 | * @func: dma_fence_func_t to call |
| 100 | * | 100 | * |
| 101 | * This struct will be initialized by dma_fence_add_callback, additional | 101 | * This struct will be initialized by dma_fence_add_callback(), additional |
| 102 | * data can be passed along by embedding dma_fence_cb in another struct. | 102 | * data can be passed along by embedding dma_fence_cb in another struct. |
| 103 | */ | 103 | */ |
| 104 | struct dma_fence_cb { | 104 | struct dma_fence_cb { |
| @@ -108,75 +108,143 @@ struct dma_fence_cb { | |||
| 108 | 108 | ||
| 109 | /** | 109 | /** |
| 110 | * struct dma_fence_ops - operations implemented for fence | 110 | * struct dma_fence_ops - operations implemented for fence |
| 111 | * @get_driver_name: returns the driver name. | ||
| 112 | * @get_timeline_name: return the name of the context this fence belongs to. | ||
| 113 | * @enable_signaling: enable software signaling of fence. | ||
| 114 | * @signaled: [optional] peek whether the fence is signaled, can be null. | ||
| 115 | * @wait: custom wait implementation, or dma_fence_default_wait. | ||
| 116 | * @release: [optional] called on destruction of fence, can be null | ||
| 117 | * @fill_driver_data: [optional] callback to fill in free-form debug info | ||
| 118 | * Returns amount of bytes filled, or -errno. | ||
| 119 | * @fence_value_str: [optional] fills in the value of the fence as a string | ||
| 120 | * @timeline_value_str: [optional] fills in the current value of the timeline | ||
| 121 | * as a string | ||
| 122 | * | 111 | * |
| 123 | * Notes on enable_signaling: | ||
| 124 | * For fence implementations that have the capability for hw->hw | ||
| 125 | * signaling, they can implement this op to enable the necessary | ||
| 126 | * irqs, or insert commands into cmdstream, etc. This is called | ||
| 127 | * in the first wait() or add_callback() path to let the fence | ||
| 128 | * implementation know that there is another driver waiting on | ||
| 129 | * the signal (ie. hw->sw case). | ||
| 130 | * | ||
| 131 | * This function can be called from atomic context, but not | ||
| 132 | * from irq context, so normal spinlocks can be used. | ||
| 133 | * | ||
| 134 | * A return value of false indicates the fence already passed, | ||
| 135 | * or some failure occurred that made it impossible to enable | ||
| 136 | * signaling. True indicates successful enabling. | ||
| 137 | * | ||
| 138 | * fence->error may be set in enable_signaling, but only when false is | ||
| 139 | * returned. | ||
| 140 | * | ||
| 141 | * Calling dma_fence_signal before enable_signaling is called allows | ||
| 142 | * for a tiny race window in which enable_signaling is called during, | ||
| 143 | * before, or after dma_fence_signal. To fight this, it is recommended | ||
| 144 | * that before enable_signaling returns true an extra reference is | ||
| 145 | * taken on the fence, to be released when the fence is signaled. | ||
| 146 | * This will mean dma_fence_signal will still be called twice, but | ||
| 147 | * the second time will be a noop since it was already signaled. | ||
| 148 | * | ||
| 149 | * Notes on signaled: | ||
| 150 | * May set fence->error if returning true. | ||
| 151 | * | ||
| 152 | * Notes on wait: | ||
| 153 | * Must not be NULL, set to dma_fence_default_wait for default implementation. | ||
| 154 | * the dma_fence_default_wait implementation should work for any fence, as long | ||
| 155 | * as enable_signaling works correctly. | ||
| 156 | * | ||
| 157 | * Must return -ERESTARTSYS if the wait is intr = true and the wait was | ||
| 158 | * interrupted, and remaining jiffies if fence has signaled, or 0 if wait | ||
| 159 | * timed out. Can also return other error values on custom implementations, | ||
| 160 | * which should be treated as if the fence is signaled. For example a hardware | ||
| 161 | * lockup could be reported like that. | ||
| 162 | * | ||
| 163 | * Notes on release: | ||
| 164 | * Can be NULL, this function allows additional commands to run on | ||
| 165 | * destruction of the fence. Can be called from irq context. | ||
| 166 | * If pointer is set to NULL, kfree will get called instead. | ||
| 167 | */ | 112 | */ |
| 168 | |||
| 169 | struct dma_fence_ops { | 113 | struct dma_fence_ops { |
| 114 | /** | ||
| 115 | * @get_driver_name: | ||
| 116 | * | ||
| 117 | * Returns the driver name. This is a callback to allow drivers to | ||
| 118 | * compute the name at runtime, without having it to store permanently | ||
| 119 | * for each fence, or build a cache of some sort. | ||
| 120 | * | ||
| 121 | * This callback is mandatory. | ||
| 122 | */ | ||
| 170 | const char * (*get_driver_name)(struct dma_fence *fence); | 123 | const char * (*get_driver_name)(struct dma_fence *fence); |
| 124 | |||
| 125 | /** | ||
| 126 | * @get_timeline_name: | ||
| 127 | * | ||
| 128 | * Return the name of the context this fence belongs to. This is a | ||
| 129 | * callback to allow drivers to compute the name at runtime, without | ||
| 130 | * having it to store permanently for each fence, or build a cache of | ||
| 131 | * some sort. | ||
| 132 | * | ||
| 133 | * This callback is mandatory. | ||
| 134 | */ | ||
| 171 | const char * (*get_timeline_name)(struct dma_fence *fence); | 135 | const char * (*get_timeline_name)(struct dma_fence *fence); |
| 136 | |||
| 137 | /** | ||
| 138 | * @enable_signaling: | ||
| 139 | * | ||
| 140 | * Enable software signaling of fence. | ||
| 141 | * | ||
| 142 | * For fence implementations that have the capability for hw->hw | ||
| 143 | * signaling, they can implement this op to enable the necessary | ||
| 144 | * interrupts, or insert commands into cmdstream, etc, to avoid these | ||
| 145 | * costly operations for the common case where only hw->hw | ||
| 146 | * synchronization is required. This is called in the first | ||
| 147 | * dma_fence_wait() or dma_fence_add_callback() path to let the fence | ||
| 148 | * implementation know that there is another driver waiting on the | ||
| 149 | * signal (ie. hw->sw case). | ||
| 150 | * | ||
| 151 | * This function can be called from atomic context, but not | ||
| 152 | * from irq context, so normal spinlocks can be used. | ||
| 153 | * | ||
| 154 | * A return value of false indicates the fence already passed, | ||
| 155 | * or some failure occurred that made it impossible to enable | ||
| 156 | * signaling. True indicates successful enabling. | ||
| 157 | * | ||
| 158 | * &dma_fence.error may be set in enable_signaling, but only when false | ||
| 159 | * is returned. | ||
| 160 | * | ||
| 161 | * Since many implementations can call dma_fence_signal() even when before | ||
| 162 | * @enable_signaling has been called there's a race window, where the | ||
| 163 | * dma_fence_signal() might result in the final fence reference being | ||
| 164 | * released and its memory freed. To avoid this, implementations of this | ||
| 165 | * callback should grab their own reference using dma_fence_get(), to be | ||
| 166 | * released when the fence is signalled (through e.g. the interrupt | ||
| 167 | * handler). | ||
| 168 | * | ||
| 169 | * This callback is mandatory. | ||
| 170 | */ | ||
| 172 | bool (*enable_signaling)(struct dma_fence *fence); | 171 | bool (*enable_signaling)(struct dma_fence *fence); |
| 172 | |||
| 173 | /** | ||
| 174 | * @signaled: | ||
| 175 | * | ||
| 176 | * Peek whether the fence is signaled, as a fastpath optimization for | ||
| 177 | * e.g. dma_fence_wait() or dma_fence_add_callback(). Note that this | ||
| 178 | * callback does not need to make any guarantees beyond that a fence | ||
| 179 | * once indicates as signalled must always return true from this | ||
| 180 | * callback. This callback may return false even if the fence has | ||
| 181 | * completed already, in this case information hasn't propogated throug | ||
| 182 | * the system yet. See also dma_fence_is_signaled(). | ||
| 183 | * | ||
| 184 | * May set &dma_fence.error if returning true. | ||
| 185 | * | ||
| 186 | * This callback is optional. | ||
| 187 | */ | ||
| 173 | bool (*signaled)(struct dma_fence *fence); | 188 | bool (*signaled)(struct dma_fence *fence); |
| 189 | |||
| 190 | /** | ||
| 191 | * @wait: | ||
| 192 | * | ||
| 193 | * Custom wait implementation, or dma_fence_default_wait. | ||
| 194 | * | ||
| 195 | * Must not be NULL, set to dma_fence_default_wait for default implementation. | ||
| 196 | * the dma_fence_default_wait implementation should work for any fence, as long | ||
| 197 | * as enable_signaling works correctly. | ||
| 198 | * | ||
| 199 | * Must return -ERESTARTSYS if the wait is intr = true and the wait was | ||
| 200 | * interrupted, and remaining jiffies if fence has signaled, or 0 if wait | ||
| 201 | * timed out. Can also return other error values on custom implementations, | ||
| 202 | * which should be treated as if the fence is signaled. For example a hardware | ||
| 203 | * lockup could be reported like that. | ||
| 204 | * | ||
| 205 | * This callback is mandatory. | ||
| 206 | */ | ||
| 174 | signed long (*wait)(struct dma_fence *fence, | 207 | signed long (*wait)(struct dma_fence *fence, |
| 175 | bool intr, signed long timeout); | 208 | bool intr, signed long timeout); |
| 209 | |||
| 210 | /** | ||
| 211 | * @release: | ||
| 212 | * | ||
| 213 | * Called on destruction of fence to release additional resources. | ||
| 214 | * Can be called from irq context. This callback is optional. If it is | ||
| 215 | * NULL, then dma_fence_free() is instead called as the default | ||
| 216 | * implementation. | ||
| 217 | */ | ||
| 176 | void (*release)(struct dma_fence *fence); | 218 | void (*release)(struct dma_fence *fence); |
| 177 | 219 | ||
| 220 | /** | ||
| 221 | * @fill_driver_data: | ||
| 222 | * | ||
| 223 | * Callback to fill in free-form debug info. | ||
| 224 | * | ||
| 225 | * Returns amount of bytes filled, or negative error on failure. | ||
| 226 | * | ||
| 227 | * This callback is optional. | ||
| 228 | */ | ||
| 178 | int (*fill_driver_data)(struct dma_fence *fence, void *data, int size); | 229 | int (*fill_driver_data)(struct dma_fence *fence, void *data, int size); |
| 230 | |||
| 231 | /** | ||
| 232 | * @fence_value_str: | ||
| 233 | * | ||
| 234 | * Callback to fill in free-form debug info specific to this fence, like | ||
| 235 | * the sequence number. | ||
| 236 | * | ||
| 237 | * This callback is optional. | ||
| 238 | */ | ||
| 179 | void (*fence_value_str)(struct dma_fence *fence, char *str, int size); | 239 | void (*fence_value_str)(struct dma_fence *fence, char *str, int size); |
| 240 | |||
| 241 | /** | ||
| 242 | * @timeline_value_str: | ||
| 243 | * | ||
| 244 | * Fills in the current value of the timeline as a string, like the | ||
| 245 | * sequence number. This should match what @fill_driver_data prints for | ||
| 246 | * the most recently signalled fence (assuming no delayed signalling). | ||
| 247 | */ | ||
| 180 | void (*timeline_value_str)(struct dma_fence *fence, | 248 | void (*timeline_value_str)(struct dma_fence *fence, |
| 181 | char *str, int size); | 249 | char *str, int size); |
| 182 | }; | 250 | }; |
| @@ -189,7 +257,7 @@ void dma_fence_free(struct dma_fence *fence); | |||
| 189 | 257 | ||
| 190 | /** | 258 | /** |
| 191 | * dma_fence_put - decreases refcount of the fence | 259 | * dma_fence_put - decreases refcount of the fence |
| 192 | * @fence: [in] fence to reduce refcount of | 260 | * @fence: fence to reduce refcount of |
| 193 | */ | 261 | */ |
| 194 | static inline void dma_fence_put(struct dma_fence *fence) | 262 | static inline void dma_fence_put(struct dma_fence *fence) |
| 195 | { | 263 | { |
| @@ -199,7 +267,7 @@ static inline void dma_fence_put(struct dma_fence *fence) | |||
| 199 | 267 | ||
| 200 | /** | 268 | /** |
| 201 | * dma_fence_get - increases refcount of the fence | 269 | * dma_fence_get - increases refcount of the fence |
| 202 | * @fence: [in] fence to increase refcount of | 270 | * @fence: fence to increase refcount of |
| 203 | * | 271 | * |
| 204 | * Returns the same fence, with refcount increased by 1. | 272 | * Returns the same fence, with refcount increased by 1. |
| 205 | */ | 273 | */ |
| @@ -213,7 +281,7 @@ static inline struct dma_fence *dma_fence_get(struct dma_fence *fence) | |||
| 213 | /** | 281 | /** |
| 214 | * dma_fence_get_rcu - get a fence from a reservation_object_list with | 282 | * dma_fence_get_rcu - get a fence from a reservation_object_list with |
| 215 | * rcu read lock | 283 | * rcu read lock |
| 216 | * @fence: [in] fence to increase refcount of | 284 | * @fence: fence to increase refcount of |
| 217 | * | 285 | * |
| 218 | * Function returns NULL if no refcount could be obtained, or the fence. | 286 | * Function returns NULL if no refcount could be obtained, or the fence. |
| 219 | */ | 287 | */ |
| @@ -227,7 +295,7 @@ static inline struct dma_fence *dma_fence_get_rcu(struct dma_fence *fence) | |||
| 227 | 295 | ||
| 228 | /** | 296 | /** |
| 229 | * dma_fence_get_rcu_safe - acquire a reference to an RCU tracked fence | 297 | * dma_fence_get_rcu_safe - acquire a reference to an RCU tracked fence |
| 230 | * @fencep: [in] pointer to fence to increase refcount of | 298 | * @fencep: pointer to fence to increase refcount of |
| 231 | * | 299 | * |
| 232 | * Function returns NULL if no refcount could be obtained, or the fence. | 300 | * Function returns NULL if no refcount could be obtained, or the fence. |
| 233 | * This function handles acquiring a reference to a fence that may be | 301 | * This function handles acquiring a reference to a fence that may be |
| @@ -289,14 +357,16 @@ void dma_fence_enable_sw_signaling(struct dma_fence *fence); | |||
| 289 | /** | 357 | /** |
| 290 | * dma_fence_is_signaled_locked - Return an indication if the fence | 358 | * dma_fence_is_signaled_locked - Return an indication if the fence |
| 291 | * is signaled yet. | 359 | * is signaled yet. |
| 292 | * @fence: [in] the fence to check | 360 | * @fence: the fence to check |
| 293 | * | 361 | * |
| 294 | * Returns true if the fence was already signaled, false if not. Since this | 362 | * Returns true if the fence was already signaled, false if not. Since this |
| 295 | * function doesn't enable signaling, it is not guaranteed to ever return | 363 | * function doesn't enable signaling, it is not guaranteed to ever return |
| 296 | * true if dma_fence_add_callback, dma_fence_wait or | 364 | * true if dma_fence_add_callback(), dma_fence_wait() or |
| 297 | * dma_fence_enable_sw_signaling haven't been called before. | 365 | * dma_fence_enable_sw_signaling() haven't been called before. |
| 298 | * | 366 | * |
| 299 | * This function requires fence->lock to be held. | 367 | * This function requires &dma_fence.lock to be held. |
| 368 | * | ||
| 369 | * See also dma_fence_is_signaled(). | ||
| 300 | */ | 370 | */ |
| 301 | static inline bool | 371 | static inline bool |
| 302 | dma_fence_is_signaled_locked(struct dma_fence *fence) | 372 | dma_fence_is_signaled_locked(struct dma_fence *fence) |
| @@ -314,17 +384,19 @@ dma_fence_is_signaled_locked(struct dma_fence *fence) | |||
| 314 | 384 | ||
| 315 | /** | 385 | /** |
| 316 | * dma_fence_is_signaled - Return an indication if the fence is signaled yet. | 386 | * dma_fence_is_signaled - Return an indication if the fence is signaled yet. |
| 317 | * @fence: [in] the fence to check | 387 | * @fence: the fence to check |
| 318 | * | 388 | * |
| 319 | * Returns true if the fence was already signaled, false if not. Since this | 389 | * Returns true if the fence was already signaled, false if not. Since this |
| 320 | * function doesn't enable signaling, it is not guaranteed to ever return | 390 | * function doesn't enable signaling, it is not guaranteed to ever return |
| 321 | * true if dma_fence_add_callback, dma_fence_wait or | 391 | * true if dma_fence_add_callback(), dma_fence_wait() or |
| 322 | * dma_fence_enable_sw_signaling haven't been called before. | 392 | * dma_fence_enable_sw_signaling() haven't been called before. |
| 323 | * | 393 | * |
| 324 | * It's recommended for seqno fences to call dma_fence_signal when the | 394 | * It's recommended for seqno fences to call dma_fence_signal when the |
| 325 | * operation is complete, it makes it possible to prevent issues from | 395 | * operation is complete, it makes it possible to prevent issues from |
| 326 | * wraparound between time of issue and time of use by checking the return | 396 | * wraparound between time of issue and time of use by checking the return |
| 327 | * value of this function before calling hardware-specific wait instructions. | 397 | * value of this function before calling hardware-specific wait instructions. |
| 398 | * | ||
| 399 | * See also dma_fence_is_signaled_locked(). | ||
| 328 | */ | 400 | */ |
| 329 | static inline bool | 401 | static inline bool |
| 330 | dma_fence_is_signaled(struct dma_fence *fence) | 402 | dma_fence_is_signaled(struct dma_fence *fence) |
| @@ -342,8 +414,8 @@ dma_fence_is_signaled(struct dma_fence *fence) | |||
| 342 | 414 | ||
| 343 | /** | 415 | /** |
| 344 | * __dma_fence_is_later - return if f1 is chronologically later than f2 | 416 | * __dma_fence_is_later - return if f1 is chronologically later than f2 |
| 345 | * @f1: [in] the first fence's seqno | 417 | * @f1: the first fence's seqno |
| 346 | * @f2: [in] the second fence's seqno from the same context | 418 | * @f2: the second fence's seqno from the same context |
| 347 | * | 419 | * |
| 348 | * Returns true if f1 is chronologically later than f2. Both fences must be | 420 | * Returns true if f1 is chronologically later than f2. Both fences must be |
| 349 | * from the same context, since a seqno is not common across contexts. | 421 | * from the same context, since a seqno is not common across contexts. |
| @@ -355,8 +427,8 @@ static inline bool __dma_fence_is_later(u32 f1, u32 f2) | |||
| 355 | 427 | ||
| 356 | /** | 428 | /** |
| 357 | * dma_fence_is_later - return if f1 is chronologically later than f2 | 429 | * dma_fence_is_later - return if f1 is chronologically later than f2 |
| 358 | * @f1: [in] the first fence from the same context | 430 | * @f1: the first fence from the same context |
| 359 | * @f2: [in] the second fence from the same context | 431 | * @f2: the second fence from the same context |
| 360 | * | 432 | * |
| 361 | * Returns true if f1 is chronologically later than f2. Both fences must be | 433 | * Returns true if f1 is chronologically later than f2. Both fences must be |
| 362 | * from the same context, since a seqno is not re-used across contexts. | 434 | * from the same context, since a seqno is not re-used across contexts. |
| @@ -372,8 +444,8 @@ static inline bool dma_fence_is_later(struct dma_fence *f1, | |||
| 372 | 444 | ||
| 373 | /** | 445 | /** |
| 374 | * dma_fence_later - return the chronologically later fence | 446 | * dma_fence_later - return the chronologically later fence |
| 375 | * @f1: [in] the first fence from the same context | 447 | * @f1: the first fence from the same context |
| 376 | * @f2: [in] the second fence from the same context | 448 | * @f2: the second fence from the same context |
| 377 | * | 449 | * |
| 378 | * Returns NULL if both fences are signaled, otherwise the fence that would be | 450 | * Returns NULL if both fences are signaled, otherwise the fence that would be |
| 379 | * signaled last. Both fences must be from the same context, since a seqno is | 451 | * signaled last. Both fences must be from the same context, since a seqno is |
| @@ -398,7 +470,7 @@ static inline struct dma_fence *dma_fence_later(struct dma_fence *f1, | |||
| 398 | 470 | ||
| 399 | /** | 471 | /** |
| 400 | * dma_fence_get_status_locked - returns the status upon completion | 472 | * dma_fence_get_status_locked - returns the status upon completion |
| 401 | * @fence: [in] the dma_fence to query | 473 | * @fence: the dma_fence to query |
| 402 | * | 474 | * |
| 403 | * Drivers can supply an optional error status condition before they signal | 475 | * Drivers can supply an optional error status condition before they signal |
| 404 | * the fence (to indicate whether the fence was completed due to an error | 476 | * the fence (to indicate whether the fence was completed due to an error |
| @@ -422,8 +494,8 @@ int dma_fence_get_status(struct dma_fence *fence); | |||
| 422 | 494 | ||
| 423 | /** | 495 | /** |
| 424 | * dma_fence_set_error - flag an error condition on the fence | 496 | * dma_fence_set_error - flag an error condition on the fence |
| 425 | * @fence: [in] the dma_fence | 497 | * @fence: the dma_fence |
| 426 | * @error: [in] the error to store | 498 | * @error: the error to store |
| 427 | * | 499 | * |
| 428 | * Drivers can supply an optional error status condition before they signal | 500 | * Drivers can supply an optional error status condition before they signal |
| 429 | * the fence, to indicate that the fence was completed due to an error | 501 | * the fence, to indicate that the fence was completed due to an error |
| @@ -449,8 +521,8 @@ signed long dma_fence_wait_any_timeout(struct dma_fence **fences, | |||
| 449 | 521 | ||
| 450 | /** | 522 | /** |
| 451 | * dma_fence_wait - sleep until the fence gets signaled | 523 | * dma_fence_wait - sleep until the fence gets signaled |
| 452 | * @fence: [in] the fence to wait on | 524 | * @fence: the fence to wait on |
| 453 | * @intr: [in] if true, do an interruptible wait | 525 | * @intr: if true, do an interruptible wait |
| 454 | * | 526 | * |
| 455 | * This function will return -ERESTARTSYS if interrupted by a signal, | 527 | * This function will return -ERESTARTSYS if interrupted by a signal, |
| 456 | * or 0 if the fence was signaled. Other error values may be | 528 | * or 0 if the fence was signaled. Other error values may be |
| @@ -459,6 +531,8 @@ signed long dma_fence_wait_any_timeout(struct dma_fence **fences, | |||
| 459 | * Performs a synchronous wait on this fence. It is assumed the caller | 531 | * Performs a synchronous wait on this fence. It is assumed the caller |
| 460 | * directly or indirectly holds a reference to the fence, otherwise the | 532 | * directly or indirectly holds a reference to the fence, otherwise the |
| 461 | * fence might be freed before return, resulting in undefined behavior. | 533 | * fence might be freed before return, resulting in undefined behavior. |
| 534 | * | ||
| 535 | * See also dma_fence_wait_timeout() and dma_fence_wait_any_timeout(). | ||
| 462 | */ | 536 | */ |
| 463 | static inline signed long dma_fence_wait(struct dma_fence *fence, bool intr) | 537 | static inline signed long dma_fence_wait(struct dma_fence *fence, bool intr) |
| 464 | { | 538 | { |
diff --git a/include/linux/host1x.h b/include/linux/host1x.h index ddf7f9ca86cc..89110d896d72 100644 --- a/include/linux/host1x.h +++ b/include/linux/host1x.h | |||
| @@ -192,13 +192,6 @@ struct host1x_reloc { | |||
| 192 | unsigned long shift; | 192 | unsigned long shift; |
| 193 | }; | 193 | }; |
| 194 | 194 | ||
| 195 | struct host1x_waitchk { | ||
| 196 | struct host1x_bo *bo; | ||
| 197 | u32 offset; | ||
| 198 | u32 syncpt_id; | ||
| 199 | u32 thresh; | ||
| 200 | }; | ||
| 201 | |||
| 202 | struct host1x_job { | 195 | struct host1x_job { |
| 203 | /* When refcount goes to zero, job can be freed */ | 196 | /* When refcount goes to zero, job can be freed */ |
| 204 | struct kref ref; | 197 | struct kref ref; |
| @@ -209,19 +202,15 @@ struct host1x_job { | |||
| 209 | /* Channel where job is submitted to */ | 202 | /* Channel where job is submitted to */ |
| 210 | struct host1x_channel *channel; | 203 | struct host1x_channel *channel; |
| 211 | 204 | ||
| 212 | u32 client; | 205 | /* client where the job originated */ |
| 206 | struct host1x_client *client; | ||
| 213 | 207 | ||
| 214 | /* Gathers and their memory */ | 208 | /* Gathers and their memory */ |
| 215 | struct host1x_job_gather *gathers; | 209 | struct host1x_job_gather *gathers; |
| 216 | unsigned int num_gathers; | 210 | unsigned int num_gathers; |
| 217 | 211 | ||
| 218 | /* Wait checks to be processed at submit time */ | ||
| 219 | struct host1x_waitchk *waitchk; | ||
| 220 | unsigned int num_waitchk; | ||
| 221 | u32 waitchk_mask; | ||
| 222 | |||
| 223 | /* Array of handles to be pinned & unpinned */ | 212 | /* Array of handles to be pinned & unpinned */ |
| 224 | struct host1x_reloc *relocarray; | 213 | struct host1x_reloc *relocs; |
| 225 | unsigned int num_relocs; | 214 | unsigned int num_relocs; |
| 226 | struct host1x_job_unpin_data *unpins; | 215 | struct host1x_job_unpin_data *unpins; |
| 227 | unsigned int num_unpins; | 216 | unsigned int num_unpins; |
| @@ -261,10 +250,9 @@ struct host1x_job { | |||
| 261 | }; | 250 | }; |
| 262 | 251 | ||
| 263 | struct host1x_job *host1x_job_alloc(struct host1x_channel *ch, | 252 | struct host1x_job *host1x_job_alloc(struct host1x_channel *ch, |
| 264 | u32 num_cmdbufs, u32 num_relocs, | 253 | u32 num_cmdbufs, u32 num_relocs); |
| 265 | u32 num_waitchks); | 254 | void host1x_job_add_gather(struct host1x_job *job, struct host1x_bo *bo, |
| 266 | void host1x_job_add_gather(struct host1x_job *job, struct host1x_bo *mem_id, | 255 | unsigned int words, unsigned int offset); |
| 267 | u32 words, u32 offset); | ||
| 268 | struct host1x_job *host1x_job_get(struct host1x_job *job); | 256 | struct host1x_job *host1x_job_get(struct host1x_job *job); |
| 269 | void host1x_job_put(struct host1x_job *job); | 257 | void host1x_job_put(struct host1x_job *job); |
| 270 | int host1x_job_pin(struct host1x_job *job, struct device *dev); | 258 | int host1x_job_pin(struct host1x_job *job, struct device *dev); |
diff --git a/include/linux/platform_data/tda9950.h b/include/linux/platform_data/tda9950.h new file mode 100644 index 000000000000..c65efd461102 --- /dev/null +++ b/include/linux/platform_data/tda9950.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | #ifndef LINUX_PLATFORM_DATA_TDA9950_H | ||
| 2 | #define LINUX_PLATFORM_DATA_TDA9950_H | ||
| 3 | |||
| 4 | struct device; | ||
| 5 | |||
| 6 | struct tda9950_glue { | ||
| 7 | struct device *parent; | ||
| 8 | unsigned long irq_flags; | ||
| 9 | void *data; | ||
| 10 | int (*init)(void *); | ||
| 11 | void (*exit)(void *); | ||
| 12 | int (*open)(void *); | ||
| 13 | void (*release)(void *); | ||
| 14 | }; | ||
| 15 | |||
| 16 | #endif | ||
