Lines Matching defs:host

90 static void octeon_mmc_acquire_bus(struct cvm_mmc_host *host)
92 if (!host->has_ciu3) {
98 down(&host->mmc_serializer);
102 static void octeon_mmc_release_bus(struct cvm_mmc_host *host)
104 if (!host->has_ciu3)
107 up(&host->mmc_serializer);
110 static void octeon_mmc_int_enable(struct cvm_mmc_host *host, u64 val)
112 writeq(val, host->base + MIO_EMM_INT(host));
113 if (!host->has_ciu3)
114 writeq(val, host->base + MIO_EMM_INT_EN(host));
117 static void octeon_mmc_set_shared_power(struct cvm_mmc_host *host, int dir)
120 if (!atomic_dec_return(&host->shared_power_users))
121 gpiod_set_value_cansleep(host->global_pwr_gpiod, 0);
123 if (atomic_inc_return(&host->shared_power_users) == 1)
124 gpiod_set_value_cansleep(host->global_pwr_gpiod, 1);
127 static void octeon_mmc_dmar_fixup(struct cvm_mmc_host *host,
137 host->n_minus_one = addr + (data->blksz * data->blocks) - 1024;
138 l2c_lock_mem_region(host->n_minus_one, 512);
141 static void octeon_mmc_dmar_fixup_done(struct cvm_mmc_host *host)
143 if (!host->n_minus_one)
145 l2c_unlock_mem_region(host->n_minus_one, 512);
146 host->n_minus_one = 0;
152 struct cvm_mmc_host *host;
158 host = devm_kzalloc(&pdev->dev, sizeof(*host), GFP_KERNEL);
159 if (!host)
162 spin_lock_init(&host->irq_handler_lock);
163 sema_init(&host->mmc_serializer, 1);
165 host->dev = &pdev->dev;
166 host->acquire_bus = octeon_mmc_acquire_bus;
167 host->release_bus = octeon_mmc_release_bus;
168 host->int_enable = octeon_mmc_int_enable;
169 host->set_shared_power = octeon_mmc_set_shared_power;
172 host->dmar_fixup = octeon_mmc_dmar_fixup;
173 host->dmar_fixup_done = octeon_mmc_dmar_fixup_done;
176 host->sys_freq = octeon_get_io_clock_rate();
179 host->big_dma_addr = true;
180 host->need_irq_handler_lock = true;
181 host->has_ciu3 = true;
182 host->use_sg = true;
196 host->big_dma_addr = false;
197 host->need_irq_handler_lock = false;
198 host->has_ciu3 = false;
207 host->last_slot = -1;
212 host->base = base;
213 host->reg_off = 0;
218 host->dma_base = base;
224 host->reg_off_dma = -0x20;
234 val = readq(host->base + MIO_EMM_INT(host));
235 writeq(val, host->base + MIO_EMM_INT(host));
237 if (host->has_ciu3) {
242 0, cvm_mmc_irq_names[i], host);
252 host);
260 host->global_pwr_gpiod = devm_gpiod_get_optional(&pdev->dev,
263 if (IS_ERR(host->global_pwr_gpiod)) {
265 return PTR_ERR(host->global_pwr_gpiod);
268 platform_set_drvdata(pdev, host);
272 host->slot_pdev[i] =
274 if (!host->slot_pdev[i]) {
278 ret = cvm_mmc_of_slot_probe(&host->slot_pdev[i]->dev, host);
281 octeon_mmc_set_shared_power(host, 0);
291 if (host->slot[i])
292 cvm_mmc_of_slot_remove(host->slot[i]);
293 if (host->slot_pdev[i])
294 of_platform_device_destroy(&host->slot_pdev[i]->dev, NULL);
301 struct cvm_mmc_host *host = platform_get_drvdata(pdev);
306 if (host->slot[i])
307 cvm_mmc_of_slot_remove(host->slot[i]);
309 dma_cfg = readq(host->dma_base + MIO_EMM_DMA_CFG(host));
311 writeq(dma_cfg, host->dma_base + MIO_EMM_DMA_CFG(host));
313 octeon_mmc_set_shared_power(host, 0);