Lines Matching +full:hw +full:- +full:timeout +full:- +full:ms
1 /*-
5 * SPDX-License-Identifier: BSD-2-Clause
18 ctrlr->is_failed = true; in ufshci_ctrlr_fail()
21 ctrlr->task_mgmt_req_queue.qops.get_hw_queue( in ufshci_ctrlr_fail()
22 &ctrlr->task_mgmt_req_queue)); in ufshci_ctrlr_fail()
24 ctrlr->transfer_req_queue.qops.get_hw_queue( in ufshci_ctrlr_fail()
25 &ctrlr->transfer_req_queue)); in ufshci_ctrlr_fail()
35 * Re-enable request queues here because ufshci_ctrlr_reset_task() in ufshci_ctrlr_start()
76 if (!(ctrlr->quirks & UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE) && in ufshci_ctrlr_start()
104 * If the reset is due to a timeout, it is already attached to the SIM in ufshci_ctrlr_start()
118 int timeout = ticks + MSEC_2_TICKS(ctrlr->device_init_timeout_in_ms); in ufshci_ctrlr_disable_host_ctrlr() local
135 if (timeout - ticks < 0) { in ufshci_ctrlr_disable_host_ctrlr()
138 "within %d ms\n", in ufshci_ctrlr_disable_host_ctrlr()
139 ctrlr->device_init_timeout_in_ms); in ufshci_ctrlr_disable_host_ctrlr()
153 int timeout = ticks + MSEC_2_TICKS(ctrlr->device_init_timeout_in_ms); in ufshci_ctrlr_enable_host_ctrlr() local
175 if (timeout - ticks < 0) { in ufshci_ctrlr_enable_host_ctrlr()
178 "within %d ms\n", in ufshci_ctrlr_enable_host_ctrlr()
179 ctrlr->device_init_timeout_in_ms); in ufshci_ctrlr_enable_host_ctrlr()
283 ctrlr->device_init_timeout_in_ms = UFSHCI_DEVICE_INIT_TIMEOUT_MS; in ufshci_ctrlr_construct()
284 ctrlr->uic_cmd_timeout_in_ms = UFSHCI_UIC_CMD_TIMEOUT_MS; in ufshci_ctrlr_construct()
285 ctrlr->dev = dev; in ufshci_ctrlr_construct()
286 ctrlr->sc_unit = device_get_unit(dev); in ufshci_ctrlr_construct()
288 snprintf(ctrlr->sc_name, sizeof(ctrlr->sc_name), "%s", in ufshci_ctrlr_construct()
291 mtx_init(&ctrlr->sc_mtx, device_get_nameunit(dev), NULL, in ufshci_ctrlr_construct()
294 mtx_init(&ctrlr->uic_cmd_lock, "ufshci ctrlr uic cmd lock", NULL, in ufshci_ctrlr_construct()
298 ctrlr->major_version = UFSHCIV(UFSHCI_VER_REG_MJR, ver); in ufshci_ctrlr_construct()
299 ctrlr->minor_version = UFSHCIV(UFSHCI_VER_REG_MNR, ver); in ufshci_ctrlr_construct()
300 ufshci_printf(ctrlr, "UFSHCI Version: %d.%d\n", ctrlr->major_version, in ufshci_ctrlr_construct()
301 ctrlr->minor_version); in ufshci_ctrlr_construct()
304 ctrlr->cap = cap = ufshci_mmio_read_4(ctrlr, cap); in ufshci_ctrlr_construct()
305 ctrlr->is_single_db_supported = UFSHCIV(UFSHCI_CAP_REG_LSDBS, cap); in ufshci_ctrlr_construct()
307 * TODO: This driver does not yet support multi-queue. in ufshci_ctrlr_construct()
309 * multi-queue support is available. in ufshci_ctrlr_construct()
311 ctrlr->is_mcq_supported = false; in ufshci_ctrlr_construct()
312 if (!(ctrlr->is_single_db_supported == 0 || ctrlr->is_mcq_supported)) in ufshci_ctrlr_construct()
319 ctrlr->page_size = PAGE_SIZE; in ufshci_ctrlr_construct()
320 ctrlr->max_xfer_size = ctrlr->page_size * UFSHCI_MAX_PRDT_ENTRY_COUNT; in ufshci_ctrlr_construct()
323 TUNABLE_INT_FETCH("hw.ufshci.timeout_period", &timeout_period); in ufshci_ctrlr_construct()
326 ctrlr->timeout_period = timeout_period; in ufshci_ctrlr_construct()
329 TUNABLE_INT_FETCH("hw.ufshci.retry_count", &retry_count); in ufshci_ctrlr_construct()
330 ctrlr->retry_count = retry_count; in ufshci_ctrlr_construct()
332 ctrlr->enable_aborts = 1; in ufshci_ctrlr_construct()
333 if (ctrlr->quirks & UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK) in ufshci_ctrlr_construct()
334 ctrlr->enable_aborts = 0; in ufshci_ctrlr_construct()
336 TUNABLE_INT_FETCH("hw.ufshci.enable_aborts", in ufshci_ctrlr_construct()
337 &ctrlr->enable_aborts); in ufshci_ctrlr_construct()
347 /* Diable Auto-hibernate */ in ufshci_ctrlr_construct()
367 ctrlr->max_hw_pend_io = ctrlr->transfer_req_queue.num_entries - 1; in ufshci_ctrlr_construct()
370 ctrlr->taskqueue = taskqueue_create("ufshci_taskq", M_WAITOK, in ufshci_ctrlr_construct()
371 taskqueue_thread_enqueue, &ctrlr->taskqueue); in ufshci_ctrlr_construct()
372 taskqueue_start_threads(&ctrlr->taskqueue, 1, PI_DISK, "ufshci taskq"); in ufshci_ctrlr_construct()
374 TASK_INIT(&ctrlr->reset_task, 0, ufshci_ctrlr_reset_task, ctrlr); in ufshci_ctrlr_construct()
382 if (ctrlr->resource == NULL) in ufshci_ctrlr_destruct()
385 /* TODO: Flush In-flight IOs */ in ufshci_ctrlr_destruct()
391 if (ctrlr->tag) in ufshci_ctrlr_destruct()
392 bus_teardown_intr(ctrlr->dev, ctrlr->res, ctrlr->tag); in ufshci_ctrlr_destruct()
394 if (ctrlr->res) in ufshci_ctrlr_destruct()
395 bus_release_resource(ctrlr->dev, SYS_RES_IRQ, in ufshci_ctrlr_destruct()
396 rman_get_rid(ctrlr->res), ctrlr->res); in ufshci_ctrlr_destruct()
398 mtx_lock(&ctrlr->sc_mtx); in ufshci_ctrlr_destruct()
402 mtx_unlock(&ctrlr->sc_mtx); in ufshci_ctrlr_destruct()
404 bus_release_resource(dev, SYS_RES_MEMORY, ctrlr->resource_id, in ufshci_ctrlr_destruct()
405 ctrlr->resource); in ufshci_ctrlr_destruct()
407 KASSERT(!mtx_owned(&ctrlr->uic_cmd_lock), in ufshci_ctrlr_destruct()
409 mtx_destroy(&ctrlr->uic_cmd_lock); in ufshci_ctrlr_destruct()
411 KASSERT(!mtx_owned(&ctrlr->sc_mtx), in ufshci_ctrlr_destruct()
413 mtx_destroy(&ctrlr->sc_mtx); in ufshci_ctrlr_destruct()
421 taskqueue_enqueue(ctrlr->taskqueue, &ctrlr->reset_task); in ufshci_ctrlr_reset()
429 ufshci_req_queue_submit_request(&ctrlr->task_mgmt_req_queue, req, in ufshci_ctrlr_submit_task_mgmt_request()
437 return (ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req, in ufshci_ctrlr_submit_admin_request()
445 return (ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req, in ufshci_ctrlr_submit_io_request()
479 config_intrhook_disestablish(&ctrlr->config_hook); in ufshci_ctrlr_start_config_hook()
559 &ctrlr->task_mgmt_req_queue); in ufshci_ctrlr_poll()
565 &ctrlr->transfer_req_queue); in ufshci_ctrlr_poll()
576 * Poll the single-vector interrupt case: num_io_queues will be 1 and