crypto: ccp - Fix device IRQ counting by using platform_irq_count()

The ccp driver loops through the platform device resources array to get
the IRQ count for the device. With commit a1a2b7125e ("of/platform: Drop
static setup of IRQ resource from DT core"), the IRQ resources are no
longer stored in the platform device resource array. As a result, the IRQ
count is now always zero. This causes the driver to issue a second call to
platform_get_irq(), which fails if the IRQ count is really 1, causing the
loading of the driver to fail.

Replace looping through the resources array to count the number of IRQs
with a call to platform_irq_count().

Fixes: a1a2b7125e ("of/platform: Drop static setup of IRQ resource from DT core")
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Tom Lendacky 2022-06-13 14:16:27 -05:00 committed by Herbert Xu
parent abfed87e2a
commit 87d044096e
1 changed files with 2 additions and 10 deletions

View File

@ -85,17 +85,9 @@ static int sp_get_irqs(struct sp_device *sp)
struct sp_platform *sp_platform = sp->dev_specific; struct sp_platform *sp_platform = sp->dev_specific;
struct device *dev = sp->dev; struct device *dev = sp->dev;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
unsigned int i, count;
int ret; int ret;
for (i = 0, count = 0; i < pdev->num_resources; i++) { sp_platform->irq_count = platform_irq_count(pdev);
struct resource *res = &pdev->resource[i];
if (resource_type(res) == IORESOURCE_IRQ)
count++;
}
sp_platform->irq_count = count;
ret = platform_get_irq(pdev, 0); ret = platform_get_irq(pdev, 0);
if (ret < 0) { if (ret < 0) {
@ -104,7 +96,7 @@ static int sp_get_irqs(struct sp_device *sp)
} }
sp->psp_irq = ret; sp->psp_irq = ret;
if (count == 1) { if (sp_platform->irq_count == 1) {
sp->ccp_irq = ret; sp->ccp_irq = ret;
} else { } else {
ret = platform_get_irq(pdev, 1); ret = platform_get_irq(pdev, 1);