Lines Matching +full:hw +full:- +full:timeout +full:- +full:ms

1 // SPDX-License-Identifier: MIT
28 * - PCODE hw metrics
29 * - PCODE for display operations
36 [PCODE_ILLEGAL_CMD] = {-ENXIO, "Illegal Command"}, in pcode_mailbox_status()
37 [PCODE_TIMEOUT] = {-ETIMEDOUT, "Timed out"}, in pcode_mailbox_status()
38 [PCODE_ILLEGAL_DATA] = {-EINVAL, "Illegal Data"}, in pcode_mailbox_status()
39 [PCODE_ILLEGAL_SUBCOMMAND] = {-ENXIO, "Illegal Subcommand"}, in pcode_mailbox_status()
40 [PCODE_LOCKED] = {-EBUSY, "PCODE Locked"}, in pcode_mailbox_status()
41 [PCODE_GT_RATIO_OUT_OF_RANGE] = {-EOVERFLOW, in pcode_mailbox_status()
43 [PCODE_REJECTED] = {-EACCES, "PCODE Rejected"}, in pcode_mailbox_status()
44 [PCODE_ERROR_MASK] = {-EPROTO, "Unknown"}, in pcode_mailbox_status()
47 err = xe_mmio_read32(&tile->mmio, PCODE_MAILBOX) & PCODE_ERROR_MASK; in pcode_mailbox_status()
49 drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s", err, in pcode_mailbox_status()
51 return err_decode[err].errno ?: -EPROTO; in pcode_mailbox_status()
61 struct xe_mmio *mmio = &tile->mmio; in __pcode_mailbox_rw()
64 if (tile_to_xe(tile)->info.skip_pcode) in __pcode_mailbox_rw()
68 return -EAGAIN; in __pcode_mailbox_rw()
92 if (tile_to_xe(tile)->info.skip_pcode) in pcode_mailbox_rw()
95 lockdep_assert_held(&tile->pcode.lock); in pcode_mailbox_rw()
100 int xe_pcode_write_timeout(struct xe_tile *tile, u32 mbox, u32 data, int timeout) in xe_pcode_write_timeout() argument
104 mutex_lock(&tile->pcode.lock); in xe_pcode_write_timeout()
105 err = pcode_mailbox_rw(tile, mbox, &data, NULL, timeout, false, false); in xe_pcode_write_timeout()
106 mutex_unlock(&tile->pcode.lock); in xe_pcode_write_timeout()
115 mutex_lock(&tile->pcode.lock); in xe_pcode_read()
117 mutex_unlock(&tile->pcode.lock); in xe_pcode_read()
147 return -ETIMEDOUT; in pcode_try_request()
151 * xe_pcode_request - send PCODE request until acknowledgment
157 * @timeout_base_ms: timeout for polling with preemption enabled
160 * reports an error or an overall timeout of @timeout_base_ms+50 ms expires.
163 * for @timeout_base_ms and if this times out for another 50 ms with
166 * Returns 0 on success, %-ETIMEDOUT in case of a timeout, <0 in case of some
177 mutex_lock(&tile->pcode.lock); in xe_pcode_request()
189 * requests. Increase the timeout from @timeout_base_ms to 50ms to in xe_pcode_request()
194 drm_err(&tile_to_xe(tile)->drm, in xe_pcode_request()
195 "PCODE timeout, retrying with preemption disabled\n"); in xe_pcode_request()
202 mutex_unlock(&tile->pcode.lock); in xe_pcode_request()
206 * xe_pcode_init_min_freq_table - Initialize PCODE's QOS frequency table
215 * 1-1 Ring vs GT frequency. Even though, without setting it, PCODE might
218 * It returns 0 on success, and -ERROR number on failure, -EINVAL if max
221 * - -ENXIO: "Illegal Command"
222 * - -ETIMEDOUT: "Timed out"
223 * - -EINVAL: "Illegal Data"
224 * - -ENXIO, "Illegal Subcommand"
225 * - -EBUSY: "PCODE Locked"
226 * - -EOVERFLOW, "GT ratio out of range"
227 * - -EACCES, "PCODE Rejected"
228 * - -EPROTO, "Unknown"
236 if (!tile_to_xe(tile)->info.has_llc) in xe_pcode_init_min_freq_table()
240 return -EINVAL; in xe_pcode_init_min_freq_table()
242 mutex_lock(&tile->pcode.lock); in xe_pcode_init_min_freq_table()
253 mutex_unlock(&tile->pcode.lock); in xe_pcode_init_min_freq_table()
258 * xe_pcode_ready - Ensure PCODE is initialized
268 * Returns 0 on success, and -error number on failure.
277 if (xe->info.skip_pcode) in xe_pcode_ready()
284 mutex_lock(&tile->pcode.lock); in xe_pcode_ready()
292 mutex_unlock(&tile->pcode.lock); in xe_pcode_ready()
295 drm_err(&xe->drm, in xe_pcode_ready()
310 drmm_mutex_init(&tile_to_xe(tile)->drm, &tile->pcode.lock); in xe_pcode_init()