Lines Matching +full:poll +full:- +full:timeout +full:- +full:ms
1 // SPDX-License-Identifier: MIT
10 #include <linux/error-injection.h>
29 * - PCODE hw metrics
30 * - PCODE for display operations
37 [PCODE_ILLEGAL_CMD] = {-ENXIO, "Illegal Command"}, in pcode_mailbox_status()
38 [PCODE_TIMEOUT] = {-ETIMEDOUT, "Timed out"}, in pcode_mailbox_status()
39 [PCODE_ILLEGAL_DATA] = {-EINVAL, "Illegal Data"}, in pcode_mailbox_status()
40 [PCODE_ILLEGAL_SUBCOMMAND] = {-ENXIO, "Illegal Subcommand"}, in pcode_mailbox_status()
41 [PCODE_LOCKED] = {-EBUSY, "PCODE Locked"}, in pcode_mailbox_status()
42 [PCODE_GT_RATIO_OUT_OF_RANGE] = {-EOVERFLOW, in pcode_mailbox_status()
44 [PCODE_REJECTED] = {-EACCES, "PCODE Rejected"}, in pcode_mailbox_status()
45 [PCODE_ERROR_MASK] = {-EPROTO, "Unknown"}, in pcode_mailbox_status()
48 err = xe_mmio_read32(&tile->mmio, PCODE_MAILBOX) & PCODE_ERROR_MASK; in pcode_mailbox_status()
50 drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s", err, in pcode_mailbox_status()
52 return err_decode[err].errno ?: -EPROTO; in pcode_mailbox_status()
62 struct xe_mmio *mmio = &tile->mmio; in __pcode_mailbox_rw()
65 if (tile_to_xe(tile)->info.skip_pcode) in __pcode_mailbox_rw()
69 return -EAGAIN; in __pcode_mailbox_rw()
93 if (tile_to_xe(tile)->info.skip_pcode) in pcode_mailbox_rw()
96 lockdep_assert_held(&tile->pcode.lock); in pcode_mailbox_rw()
101 int xe_pcode_write_timeout(struct xe_tile *tile, u32 mbox, u32 data, int timeout) in xe_pcode_write_timeout() argument
105 mutex_lock(&tile->pcode.lock); in xe_pcode_write_timeout()
106 err = pcode_mailbox_rw(tile, mbox, &data, NULL, timeout, false, false); in xe_pcode_write_timeout()
107 mutex_unlock(&tile->pcode.lock); in xe_pcode_write_timeout()
112 int xe_pcode_write64_timeout(struct xe_tile *tile, u32 mbox, u32 data0, u32 data1, int timeout) in xe_pcode_write64_timeout() argument
116 mutex_lock(&tile->pcode.lock); in xe_pcode_write64_timeout()
117 err = pcode_mailbox_rw(tile, mbox, &data0, &data1, timeout, false, false); in xe_pcode_write64_timeout()
118 mutex_unlock(&tile->pcode.lock); in xe_pcode_write64_timeout()
127 mutex_lock(&tile->pcode.lock); in xe_pcode_read()
129 mutex_unlock(&tile->pcode.lock); in xe_pcode_read()
159 return -ETIMEDOUT; in pcode_try_request()
163 * xe_pcode_request - send PCODE request until acknowledgment
169 * @timeout_base_ms: timeout for polling with preemption enabled
172 * reports an error or an overall timeout of @timeout_base_ms+50 ms expires.
175 * for @timeout_base_ms and if this times out for another 50 ms with
178 * Returns 0 on success, %-ETIMEDOUT in case of a timeout, <0 in case of some
189 mutex_lock(&tile->pcode.lock); in xe_pcode_request()
200 * the poll with preemption disabled to maximize the number of in xe_pcode_request()
201 * requests. Increase the timeout from @timeout_base_ms to 50ms to in xe_pcode_request()
206 drm_err(&tile_to_xe(tile)->drm, in xe_pcode_request()
207 "PCODE timeout, retrying with preemption disabled\n"); in xe_pcode_request()
214 mutex_unlock(&tile->pcode.lock); in xe_pcode_request()
218 * xe_pcode_init_min_freq_table - Initialize PCODE's QOS frequency table
227 * 1-1 Ring vs GT frequency. Even though, without setting it, PCODE might
230 * It returns 0 on success, and -ERROR number on failure, -EINVAL if max
233 * - -ENXIO: "Illegal Command"
234 * - -ETIMEDOUT: "Timed out"
235 * - -EINVAL: "Illegal Data"
236 * - -ENXIO, "Illegal Subcommand"
237 * - -EBUSY: "PCODE Locked"
238 * - -EOVERFLOW, "GT ratio out of range"
239 * - -EACCES, "PCODE Rejected"
240 * - -EPROTO, "Unknown"
248 if (!tile_to_xe(tile)->info.has_llc) in xe_pcode_init_min_freq_table()
252 return -EINVAL; in xe_pcode_init_min_freq_table()
254 mutex_lock(&tile->pcode.lock); in xe_pcode_init_min_freq_table()
265 mutex_unlock(&tile->pcode.lock); in xe_pcode_init_min_freq_table()
270 * xe_pcode_ready - Ensure PCODE is initialized
280 * Returns 0 on success, and -error number on failure.
289 if (xe->info.skip_pcode) in xe_pcode_ready()
296 mutex_lock(&tile->pcode.lock); in xe_pcode_ready()
304 mutex_unlock(&tile->pcode.lock); in xe_pcode_ready()
307 drm_err(&xe->drm, in xe_pcode_ready()
322 drmm_mutex_init(&tile_to_xe(tile)->drm, &tile->pcode.lock); in xe_pcode_init()