You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
mmc: mediatek: Move cqhci init behind ungate clock
commite8a1ff6592upstream. We must enable clock before cqhci init, because crypto needs read information from CQHCI registers, otherwise, it will hang in MediaTek mmc host controller. Signed-off-by: Wenbin Mei <wenbin.mei@mediatek.com> Fixes:88bd652b3c("mmc: mediatek: command queue support") Cc: stable@vger.kernel.org Acked-by: Chaotian Jing <chaotian.jing@mediatek.com> Link: https://lore.kernel.org/r/20211028022049.22129-1-wenbin.mei@mediatek.com Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
44c2bc2a6b
commit
12a46f72f4
@@ -2503,6 +2503,25 @@ static int msdc_drv_probe(struct platform_device *pdev)
|
||||
host->dma_mask = DMA_BIT_MASK(32);
|
||||
mmc_dev(mmc)->dma_mask = &host->dma_mask;
|
||||
|
||||
host->timeout_clks = 3 * 1048576;
|
||||
host->dma.gpd = dma_alloc_coherent(&pdev->dev,
|
||||
2 * sizeof(struct mt_gpdma_desc),
|
||||
&host->dma.gpd_addr, GFP_KERNEL);
|
||||
host->dma.bd = dma_alloc_coherent(&pdev->dev,
|
||||
MAX_BD_NUM * sizeof(struct mt_bdma_desc),
|
||||
&host->dma.bd_addr, GFP_KERNEL);
|
||||
if (!host->dma.gpd || !host->dma.bd) {
|
||||
ret = -ENOMEM;
|
||||
goto release_mem;
|
||||
}
|
||||
msdc_init_gpd_bd(host, &host->dma);
|
||||
INIT_DELAYED_WORK(&host->req_timeout, msdc_request_timeout);
|
||||
spin_lock_init(&host->lock);
|
||||
|
||||
platform_set_drvdata(pdev, mmc);
|
||||
msdc_ungate_clock(host);
|
||||
msdc_init_hw(host);
|
||||
|
||||
if (mmc->caps2 & MMC_CAP2_CQE) {
|
||||
host->cq_host = devm_kzalloc(mmc->parent,
|
||||
sizeof(*host->cq_host),
|
||||
@@ -2523,25 +2542,6 @@ static int msdc_drv_probe(struct platform_device *pdev)
|
||||
mmc->max_seg_size = 64 * 1024;
|
||||
}
|
||||
|
||||
host->timeout_clks = 3 * 1048576;
|
||||
host->dma.gpd = dma_alloc_coherent(&pdev->dev,
|
||||
2 * sizeof(struct mt_gpdma_desc),
|
||||
&host->dma.gpd_addr, GFP_KERNEL);
|
||||
host->dma.bd = dma_alloc_coherent(&pdev->dev,
|
||||
MAX_BD_NUM * sizeof(struct mt_bdma_desc),
|
||||
&host->dma.bd_addr, GFP_KERNEL);
|
||||
if (!host->dma.gpd || !host->dma.bd) {
|
||||
ret = -ENOMEM;
|
||||
goto release_mem;
|
||||
}
|
||||
msdc_init_gpd_bd(host, &host->dma);
|
||||
INIT_DELAYED_WORK(&host->req_timeout, msdc_request_timeout);
|
||||
spin_lock_init(&host->lock);
|
||||
|
||||
platform_set_drvdata(pdev, mmc);
|
||||
msdc_ungate_clock(host);
|
||||
msdc_init_hw(host);
|
||||
|
||||
ret = devm_request_irq(&pdev->dev, host->irq, msdc_irq,
|
||||
IRQF_TRIGGER_NONE, pdev->name, host);
|
||||
if (ret)
|
||||
|
||||
Reference in New Issue
Block a user