From 4c58956a5eead014bb86fac2023e335bddf08142 Mon Sep 17 00:00:00 2001 From: Lin Jinhan Date: Wed, 1 Dec 2021 10:29:16 +0800 Subject: [PATCH] crypto: rockchip: add DMA32 addressing range limits Crypto only supports DMA32 address addressing and behaves abnormally on more than 4G DDR. Signed-off-by: Lin Jinhan Change-Id: I5b6b5c9eb5f00698d25e47a778f358380f4121eb --- drivers/crypto/rockchip/rk_crypto_core.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/rockchip/rk_crypto_core.c b/drivers/crypto/rockchip/rk_crypto_core.c index 8a59317edebb..959a5e77980b 100644 --- a/drivers/crypto/rockchip/rk_crypto_core.c +++ b/drivers/crypto/rockchip/rk_crypto_core.c @@ -694,6 +694,7 @@ static int rk_crypto_probe(struct platform_device *pdev) rk_dev->clks_num = devm_clk_bulk_get_all(dev, &rk_dev->clk_bulks); if (rk_dev->clks_num < 0) { + err = rk_dev->clks_num; dev_err(dev, "failed to get clks property\n"); goto err_crypto; } @@ -709,12 +710,17 @@ static int rk_crypto_probe(struct platform_device *pdev) err = devm_request_irq(dev, rk_dev->irq, rk_crypto_irq_handle, IRQF_SHARED, "rk-crypto", pdev); - if (err) { dev_err(dev, "irq request failed.\n"); goto err_crypto; } + err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32)); + if (err) { + dev_err(dev, "crypto: No suitable DMA available.\n"); + goto err_crypto; + } + rk_dev->dev = dev; rk_dev->hw_info = @@ -730,7 +736,8 @@ static int rk_crypto_probe(struct platform_device *pdev) goto err_crypto; } - rk_dev->addr_vir = (void *)__get_free_pages(GFP_KERNEL, RK_BUFFER_ORDER); + rk_dev->addr_vir = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA32, + RK_BUFFER_ORDER); if (!rk_dev->addr_vir) { err = -ENOMEM; dev_err(dev, "__get_free_page failed.\n");