Lines Matching +full:max +full:- +full:rx +full:- +full:timeout +full:- +full:ms

1 /*-
5 * SPDX-License-Identifier: BSD-2-Clause
209 int timeout = ticks + MSEC_2_TICKS(ctrlr->device_init_timeout_in_ms); in ufshci_dev_init() local
227 if (timeout - ticks < 0) { in ufshci_dev_init()
230 "within %d ms\n", in ufshci_dev_init()
232 ctrlr->device_init_timeout_in_ms); in ufshci_dev_init()
262 index, selector, ctrlr->ref_clk); in ufshci_dev_init_reference_clock()
277 * - 7~15 = Above 2.0, 6 = 2.0, 5 = 1.8, 4 = 1.61, 3 = 1.6, 2 = 1.41, in ufshci_dev_init_unipro()
281 &ctrlr->unipro_version)) in ufshci_dev_init_unipro()
284 &ctrlr->ufs_dev.unipro_version)) in ufshci_dev_init_unipro()
289 * - 1=1us, 2=4us, 3=8us, 4=16us, 5=32us, 6=100us in ufshci_dev_init_unipro()
299 * wake-up peer M-RX in ufshci_dev_init_unipro()
308 if (ctrlr->quirks & UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE) { in ufshci_dev_init_unipro()
310 * Intel Lake-field UFSHCI has a quirk. We need to add 200us to in ufshci_dev_init_unipro()
330 * TX/RX PWRMode: in ufshci_dev_init_uic_power_mode()
331 * - TX[3:0], RX[7:4] in ufshci_dev_init_uic_power_mode()
332 * - Fast Mode = 1, Slow Mode = 2, FastAuto Mode = 4, SlowAuto Mode = 5 in ufshci_dev_init_uic_power_mode()
338 /* Update lanes with available TX/RX lanes */ in ufshci_dev_init_uic_power_mode()
340 &ctrlr->max_tx_lanes)) in ufshci_dev_init_uic_power_mode()
343 &ctrlr->max_rx_lanes)) in ufshci_dev_init_uic_power_mode()
346 /* Get max HS-GEAR value */ in ufshci_dev_init_uic_power_mode()
348 &ctrlr->max_rx_hs_gear)) in ufshci_dev_init_uic_power_mode()
351 /* Set the data lane to max */ in ufshci_dev_init_uic_power_mode()
352 ctrlr->tx_lanes = ctrlr->max_tx_lanes; in ufshci_dev_init_uic_power_mode()
353 ctrlr->rx_lanes = ctrlr->max_rx_lanes; in ufshci_dev_init_uic_power_mode()
355 ctrlr->tx_lanes)) in ufshci_dev_init_uic_power_mode()
358 ctrlr->rx_lanes)) in ufshci_dev_init_uic_power_mode()
361 if (ctrlr->quirks & UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY) { in ufshci_dev_init_uic_power_mode()
375 /* Set HS-GEAR to max gear */ in ufshci_dev_init_uic_power_mode()
376 ctrlr->hs_gear = ctrlr->max_rx_hs_gear; in ufshci_dev_init_uic_power_mode()
377 if (ufshci_uic_send_dme_set(ctrlr, PA_TxGear, ctrlr->hs_gear)) in ufshci_dev_init_uic_power_mode()
379 if (ufshci_uic_send_dme_set(ctrlr, PA_RxGear, ctrlr->hs_gear)) in ufshci_dev_init_uic_power_mode()
384 * - HS-MODE = ON / LS-MODE = OFF in ufshci_dev_init_uic_power_mode()
395 /* Set Timeout values */ in ufshci_dev_init_uic_power_mode()
425 /* Set TX/RX PWRMode */ in ufshci_dev_init_uic_power_mode()
439 if (ctrlr->quirks & UFSHCI_QUIRK_WAIT_AFTER_POWER_MODE_CHANGE) { in ufshci_dev_init_uic_power_mode()
441 * Intel Lake-field UFSHCI has a quirk. in ufshci_dev_init_uic_power_mode()
466 struct ufshci_device *device = &ctrlr->ufs_dev; in ufshci_dev_get_descriptor()
469 * qTotalRawDeviceCapacity use big-endian byte ordering. in ufshci_dev_get_descriptor()
475 error = ufshci_dev_read_device_descriptor(ctrlr, &device->dev_desc); in ufshci_dev_get_descriptor()
479 ver = be16toh(device->dev_desc.wSpecVersion); in ufshci_dev_get_descriptor()
484 device->dev_desc.bNumberLU); in ufshci_dev_get_descriptor()
486 error = ufshci_dev_read_geometry_descriptor(ctrlr, &device->geo_desc); in ufshci_dev_get_descriptor()
490 if (device->geo_desc.bMaxNumberLU == 0) { in ufshci_dev_get_descriptor()
491 device->max_lun_count = 8; in ufshci_dev_get_descriptor()
492 } else if (device->geo_desc.bMaxNumberLU == 1) { in ufshci_dev_get_descriptor()
493 device->max_lun_count = 32; in ufshci_dev_get_descriptor()
497 device->geo_desc.bMaxNumberLU); in ufshci_dev_get_descriptor()
500 ctrlr->max_lun_count = device->max_lun_count; in ufshci_dev_get_descriptor()
503 be64toh(device->geo_desc.qTotalRawDeviceCapacity) * in ufshci_dev_get_descriptor()
512 struct ufshci_device *dev = &ctrlr->ufs_dev; in ufshci_dev_enable_write_booster()
521 dev->is_wb_enabled = true; in ufshci_dev_enable_write_booster()
539 dev->is_wb_flush_enabled = true; in ufshci_dev_enable_write_booster()
547 struct ufshci_device *dev = &ctrlr->ufs_dev; in ufshci_dev_disable_write_booster()
557 dev->is_wb_flush_enabled = false; in ufshci_dev_disable_write_booster()
574 dev->is_wb_enabled = false; in ufshci_dev_disable_write_booster()
583 struct ufshci_device *dev = &ctrlr->ufs_dev; in ufshci_dev_is_write_booster_buffer_life_time_left()
588 if (dev->wb_buffer_type == UFSHCI_DESC_WB_BUF_TYPE_LU_DEDICATED) in ufshci_dev_is_write_booster_buffer_life_time_left()
589 buffer_lun = dev->wb_dedicated_lu; in ufshci_dev_is_write_booster_buffer_life_time_left()
611 struct ufshci_device *dev = &ctrlr->ufs_dev; in ufshci_dev_need_write_booster_buffer_flush()
619 if (!dev->is_wb_enabled) in ufshci_dev_need_write_booster_buffer_flush()
630 if (dev->wb_buffer_type == UFSHCI_DESC_WB_BUF_TYPE_LU_DEDICATED) in ufshci_dev_need_write_booster_buffer_flush()
631 buffer_lun = dev->wb_dedicated_lu; in ufshci_dev_need_write_booster_buffer_flush()
641 switch (dev->wb_user_space_config_option) { in ufshci_dev_need_write_booster_buffer_flush()
662 dev->write_booster_flush_threshold); in ufshci_dev_need_write_booster_buffer_flush()
681 struct ufshci_device *dev = &ctrlr->ufs_dev; in ufshci_dev_config_write_booster()
691 dev->dev_desc.dExtendedUfsFeaturesSupport); in ufshci_dev_config_write_booster()
702 dev->wb_buffer_type = dev->dev_desc.bWriteBoosterBufferType; in ufshci_dev_config_write_booster()
703 dev->wb_user_space_config_option = in ufshci_dev_config_write_booster()
704 dev->dev_desc.bWriteBoosterBufferPreserveUserSpaceEn; in ufshci_dev_config_write_booster()
708 * With LU-dedicated (00h), the WriteBooster buffer is assigned in ufshci_dev_config_write_booster()
709 * exclusively to one chosen LU (not one-per-LU), whereas Shared (01h) in ufshci_dev_config_write_booster()
710 * uses a single device-wide buffer shared by multiple LUs. in ufshci_dev_config_write_booster()
712 if (dev->wb_buffer_type == UFSHCI_DESC_WB_BUF_TYPE_SINGLE_SHARED) { in ufshci_dev_config_write_booster()
714 dev->dev_desc.dNumSharedWriteBoosterBufferAllocUnits); in ufshci_dev_config_write_booster()
718 } else if (dev->wb_buffer_type == in ufshci_dev_config_write_booster()
721 for (lun = 0; lun < ctrlr->max_lun_count; lun++) { in ufshci_dev_config_write_booster()
730 dev->wb_dedicated_lu = lun; in ufshci_dev_config_write_booster()
737 dev->wb_buffer_type); in ufshci_dev_config_write_booster()
746 dev->wb_buffer_size_mb = alloc_units * in ufshci_dev_config_write_booster()
747 dev->geo_desc.bAllocationUnitSize * in ufshci_dev_config_write_booster()
748 (be32toh(dev->geo_desc.dSegmentSize)) / in ufshci_dev_config_write_booster()
752 dev->write_booster_flush_threshold = UFSHCI_ATTR_WB_AVAILABLE_40; in ufshci_dev_config_write_booster()