Lines Matching refs:slot
114 struct dw_mci_slot *slot = s->private; in dw_mci_req_show() local
121 spin_lock_bh(&slot->host->lock); in dw_mci_req_show()
122 mrq = slot->mrq; in dw_mci_req_show()
147 spin_unlock_bh(&slot->host->lock); in dw_mci_req_show()
190 static void dw_mci_init_debugfs(struct dw_mci_slot *slot) in dw_mci_init_debugfs() argument
192 struct mmc_host *mmc = slot->mmc; in dw_mci_init_debugfs()
193 struct dw_mci *host = slot->host; in dw_mci_init_debugfs()
206 node = debugfs_create_file("req", S_IRUSR, root, slot, in dw_mci_init_debugfs()
232 static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg);
237 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_prepare_command() local
238 struct dw_mci *host = slot->host; in dw_mci_prepare_command()
239 const struct dw_mci_drv_data *drv_data = slot->host->drv_data; in dw_mci_prepare_command()
261 WARN_ON(slot->host->state != STATE_SENDING_CMD); in dw_mci_prepare_command()
262 slot->host->state = STATE_SENDING_CMD11; in dw_mci_prepare_command()
276 clk_en_a &= ~(SDMMC_CLKEN_LOW_PWR << slot->id); in dw_mci_prepare_command()
278 mci_send_cmd(slot, SDMMC_CMD_UPD_CLK | in dw_mci_prepare_command()
302 drv_data->prepare_command(slot->host, &cmdr); in dw_mci_prepare_command()
713 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_pre_req() local
716 if (!slot->host->use_dma || !data) in dw_mci_pre_req()
724 if (dw_mci_pre_dma_transfer(slot->host, mrq->data, 1) < 0) in dw_mci_pre_req()
732 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_post_req() local
735 if (!slot->host->use_dma || !data) in dw_mci_post_req()
739 dma_unmap_sg(slot->host->dev, in dw_mci_post_req()
935 static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) in mci_send_cmd() argument
937 struct dw_mci *host = slot->host; in mci_send_cmd()
951 dev_err(&slot->mmc->class_dev, in mci_send_cmd()
956 static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) in dw_mci_setup_bus() argument
958 struct dw_mci *host = slot->host; in dw_mci_setup_bus()
959 unsigned int clock = slot->clock; in dw_mci_setup_bus()
970 mci_send_cmd(slot, sdmmc_cmd_bits, 0); in dw_mci_setup_bus()
982 if ((clock << div) != slot->__clk_old || force_clkinit) in dw_mci_setup_bus()
983 dev_info(&slot->mmc->class_dev, in dw_mci_setup_bus()
985 slot->id, host->bus_hz, clock, in dw_mci_setup_bus()
994 mci_send_cmd(slot, sdmmc_cmd_bits, 0); in dw_mci_setup_bus()
1000 mci_send_cmd(slot, sdmmc_cmd_bits, 0); in dw_mci_setup_bus()
1003 clk_en_a = SDMMC_CLKEN_ENABLE << slot->id; in dw_mci_setup_bus()
1004 if (!test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags)) in dw_mci_setup_bus()
1005 clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id; in dw_mci_setup_bus()
1009 mci_send_cmd(slot, sdmmc_cmd_bits, 0); in dw_mci_setup_bus()
1012 slot->__clk_old = clock << div; in dw_mci_setup_bus()
1018 mci_writel(host, CTYPE, (slot->ctype << slot->id)); in dw_mci_setup_bus()
1022 struct dw_mci_slot *slot, in __dw_mci_start_request() argument
1029 mrq = slot->mrq; in __dw_mci_start_request()
1031 host->cur_slot = slot; in __dw_mci_start_request()
1047 cmdflags = dw_mci_prepare_command(slot->mmc, cmd); in __dw_mci_start_request()
1050 if (test_and_clear_bit(DW_MMC_CARD_NEED_INIT, &slot->flags)) in __dw_mci_start_request()
1081 host->stop_cmdr = dw_mci_prepare_command(slot->mmc, mrq->stop); in __dw_mci_start_request()
1087 struct dw_mci_slot *slot) in dw_mci_start_request() argument
1089 struct mmc_request *mrq = slot->mrq; in dw_mci_start_request()
1093 __dw_mci_start_request(host, slot, cmd); in dw_mci_start_request()
1097 static void dw_mci_queue_request(struct dw_mci *host, struct dw_mci_slot *slot, in dw_mci_queue_request() argument
1100 dev_vdbg(&slot->mmc->class_dev, "queue request: state=%d\n", in dw_mci_queue_request()
1103 slot->mrq = mrq; in dw_mci_queue_request()
1106 dev_warn(&slot->mmc->class_dev, in dw_mci_queue_request()
1118 dw_mci_start_request(host, slot); in dw_mci_queue_request()
1120 list_add_tail(&slot->queue_node, &host->queue); in dw_mci_queue_request()
1126 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_request() local
1127 struct dw_mci *host = slot->host; in dw_mci_request()
1129 WARN_ON(slot->mrq); in dw_mci_request()
1138 if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) { in dw_mci_request()
1145 dw_mci_queue_request(host, slot, mrq); in dw_mci_request()
1152 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_set_ios() local
1153 const struct dw_mci_drv_data *drv_data = slot->host->drv_data; in dw_mci_set_ios()
1159 slot->ctype = SDMMC_CTYPE_4BIT; in dw_mci_set_ios()
1162 slot->ctype = SDMMC_CTYPE_8BIT; in dw_mci_set_ios()
1166 slot->ctype = SDMMC_CTYPE_1BIT; in dw_mci_set_ios()
1169 regs = mci_readl(slot->host, UHS_REG); in dw_mci_set_ios()
1174 regs |= ((0x1 << slot->id) << 16); in dw_mci_set_ios()
1176 regs &= ~((0x1 << slot->id) << 16); in dw_mci_set_ios()
1178 mci_writel(slot->host, UHS_REG, regs); in dw_mci_set_ios()
1179 slot->host->timing = ios->timing; in dw_mci_set_ios()
1185 slot->clock = ios->clock; in dw_mci_set_ios()
1188 drv_data->set_ios(slot->host, ios); in dw_mci_set_ios()
1196 dev_err(slot->host->dev, in dw_mci_set_ios()
1202 set_bit(DW_MMC_CARD_NEED_INIT, &slot->flags); in dw_mci_set_ios()
1203 regs = mci_readl(slot->host, PWREN); in dw_mci_set_ios()
1204 regs |= (1 << slot->id); in dw_mci_set_ios()
1205 mci_writel(slot->host, PWREN, regs); in dw_mci_set_ios()
1208 if (!slot->host->vqmmc_enabled) { in dw_mci_set_ios()
1212 dev_err(slot->host->dev, in dw_mci_set_ios()
1215 slot->host->vqmmc_enabled = true; in dw_mci_set_ios()
1219 slot->host->vqmmc_enabled = true; in dw_mci_set_ios()
1223 dw_mci_ctrl_reset(slot->host, in dw_mci_set_ios()
1228 dw_mci_setup_bus(slot, false); in dw_mci_set_ios()
1233 dw_mci_setup_bus(slot, false); in dw_mci_set_ios()
1238 if (!IS_ERR(mmc->supply.vqmmc) && slot->host->vqmmc_enabled) in dw_mci_set_ios()
1240 slot->host->vqmmc_enabled = false; in dw_mci_set_ios()
1242 regs = mci_readl(slot->host, PWREN); in dw_mci_set_ios()
1243 regs &= ~(1 << slot->id); in dw_mci_set_ios()
1244 mci_writel(slot->host, PWREN, regs); in dw_mci_set_ios()
1250 if (slot->host->state == STATE_WAITING_CMD11_DONE && ios->clock != 0) in dw_mci_set_ios()
1251 slot->host->state = STATE_IDLE; in dw_mci_set_ios()
1256 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_card_busy() local
1263 status = mci_readl(slot->host, STATUS); in dw_mci_card_busy()
1270 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_switch_voltage() local
1271 struct dw_mci *host = slot->host; in dw_mci_switch_voltage()
1273 u32 v18 = SDMMC_UHS_18V << slot->id; in dw_mci_switch_voltage()
1310 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_get_ro() local
1314 if ((slot->quirks & DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT) || in dw_mci_get_ro()
1315 (slot->host->quirks & DW_MCI_QUIRK_NO_WRITE_PROTECT)) in dw_mci_get_ro()
1321 mci_readl(slot->host, WRTPRT) & (1 << slot->id) ? 1 : 0; in dw_mci_get_ro()
1332 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_get_cd() local
1333 struct dw_mci_board *brd = slot->host->pdata; in dw_mci_get_cd()
1334 struct dw_mci *host = slot->host; in dw_mci_get_cd()
1344 present = (mci_readl(slot->host, CDETECT) & (1 << slot->id)) in dw_mci_get_cd()
1349 set_bit(DW_MMC_CARD_PRESENT, &slot->flags); in dw_mci_get_cd()
1352 clear_bit(DW_MMC_CARD_PRESENT, &slot->flags); in dw_mci_get_cd()
1362 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_init_card() local
1363 struct dw_mci *host = slot->host; in dw_mci_init_card()
1371 const u32 clken_low_pwr = SDMMC_CLKEN_LOW_PWR << slot->id; in dw_mci_init_card()
1379 set_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags); in dw_mci_init_card()
1382 clear_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags); in dw_mci_init_card()
1388 mci_send_cmd(slot, SDMMC_CMD_UPD_CLK | in dw_mci_init_card()
1396 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_enable_sdio_irq() local
1397 struct dw_mci *host = slot->host; in dw_mci_enable_sdio_irq()
1406 int_mask |= SDMMC_INT_SDIO(slot->sdio_id); in dw_mci_enable_sdio_irq()
1408 int_mask &= ~SDMMC_INT_SDIO(slot->sdio_id); in dw_mci_enable_sdio_irq()
1416 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_execute_tuning() local
1417 struct dw_mci *host = slot->host; in dw_mci_execute_tuning()
1422 err = drv_data->execute_tuning(slot); in dw_mci_execute_tuning()
1428 struct dw_mci_slot *slot = mmc_priv(mmc); in dw_mci_prepare_hs400_tuning() local
1429 struct dw_mci *host = slot->host; in dw_mci_prepare_hs400_tuning()
1457 struct dw_mci_slot *slot; in dw_mci_request_end() local
1465 slot = list_entry(host->queue.next, in dw_mci_request_end()
1467 list_del(&slot->queue_node); in dw_mci_request_end()
1469 mmc_hostname(slot->mmc)); in dw_mci_request_end()
1471 dw_mci_start_request(host, slot); in dw_mci_request_end()
2174 struct dw_mci_slot *slot = host->slot[i]; in dw_mci_handle_cd() local
2176 if (!slot) in dw_mci_handle_cd()
2179 if (slot->mmc->ops->card_event) in dw_mci_handle_cd()
2180 slot->mmc->ops->card_event(slot->mmc); in dw_mci_handle_cd()
2181 mmc_detect_change(slot->mmc, in dw_mci_handle_cd()
2277 struct dw_mci_slot *slot = host->slot[i]; in dw_mci_interrupt() local
2279 if (!slot) in dw_mci_interrupt()
2282 if (pending & SDMMC_INT_SDIO(slot->sdio_id)) { in dw_mci_interrupt()
2284 SDMMC_INT_SDIO(slot->sdio_id)); in dw_mci_interrupt()
2285 mmc_signal_sdio_irq(slot->mmc); in dw_mci_interrupt()
2317 static struct device_node *dw_mci_of_find_slot_node(struct device *dev, u8 slot) in dw_mci_of_find_slot_node() argument
2330 if (be32_to_cpup(addr) == slot) in dw_mci_of_find_slot_node()
2346 static int dw_mci_of_get_slot_quirks(struct device *dev, u8 slot) in dw_mci_of_get_slot_quirks() argument
2348 struct device_node *np = dw_mci_of_find_slot_node(dev, slot); in dw_mci_of_get_slot_quirks()
2363 static int dw_mci_of_get_slot_quirks(struct device *dev, u8 slot) in dw_mci_of_get_slot_quirks() argument
2372 struct dw_mci_slot *slot; in dw_mci_init_slot() local
2381 slot = mmc_priv(mmc); in dw_mci_init_slot()
2382 slot->id = id; in dw_mci_init_slot()
2383 slot->sdio_id = host->sdio_id0 + id; in dw_mci_init_slot()
2384 slot->mmc = mmc; in dw_mci_init_slot()
2385 slot->host = host; in dw_mci_init_slot()
2386 host->slot[id] = slot; in dw_mci_init_slot()
2388 slot->quirks = dw_mci_of_get_slot_quirks(host->dev, slot->id); in dw_mci_init_slot()
2455 set_bit(DW_MMC_CARD_PRESENT, &slot->flags); in dw_mci_init_slot()
2457 clear_bit(DW_MMC_CARD_PRESENT, &slot->flags); in dw_mci_init_slot()
2464 dw_mci_init_debugfs(slot); in dw_mci_init_slot()
2474 static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id) in dw_mci_cleanup_slot() argument
2477 mmc_remove_host(slot->mmc); in dw_mci_cleanup_slot()
2478 slot->host->slot[id] = NULL; in dw_mci_cleanup_slot()
2479 mmc_free_host(slot->mmc); in dw_mci_cleanup_slot()
2727 struct dw_mci_slot *slot = host->slot[i]; in dw_mci_enable_cd() local
2729 if (IS_ERR_VALUE(mmc_gpio_get_cd(slot->mmc))) in dw_mci_enable_cd()
2982 if (host->slot[i]) in dw_mci_remove()
2983 dw_mci_cleanup_slot(host->slot[i], i); in dw_mci_remove()
3042 struct dw_mci_slot *slot = host->slot[i]; in dw_mci_resume() local
3043 if (!slot) in dw_mci_resume()
3045 if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { in dw_mci_resume()
3046 dw_mci_set_ios(slot->mmc, &slot->mmc->ios); in dw_mci_resume()
3047 dw_mci_setup_bus(slot, true); in dw_mci_resume()