Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: atmel-ecc - add support for ACPI probing on non-AT91 platforms

The Atmel/Microchip EC508A is a I2C device that could be wired into
any platform, and is being used on the Linaro/96boards Secure96
mezzanine adapter. This means it could be found on any platform, even
on ones that use ACPI enumeration (via PRP0001 devices). So update the
code to enable this use case.

This involves tweaking the bus rate discovery code to take ACPI probing
into account, which records the maximum bus rate as a property of the
slave device. For the atmel-ecc code, this means that the effective bus
rate should never exceed the maximum rate, unless we are dealing with
buggy firmware. Nonetheless, let's just use the existing plumbing to
discover the bus rate and keep the existing logic intact.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Ard Biesheuvel and committed by
Herbert Xu
3c756aa3 4befedc0

+8 -6
-1
drivers/crypto/Kconfig
··· 521 521 522 522 config CRYPTO_DEV_ATMEL_ECC 523 523 tristate "Support for Microchip / Atmel ECC hw accelerator" 524 - depends on ARCH_AT91 || COMPILE_TEST 525 524 depends on I2C 526 525 select CRYPTO_ECDH 527 526 select CRC16
+8 -5
drivers/crypto/atmel-ecc.c
··· 657 657 return -ENODEV; 658 658 } 659 659 660 - ret = of_property_read_u32(client->adapter->dev.of_node, 661 - "clock-frequency", &bus_clk_rate); 662 - if (ret) { 663 - dev_err(dev, "of: failed to read clock-frequency property\n"); 664 - return ret; 660 + clk_rate = i2c_acpi_find_bus_speed(&client->adapter->dev); 661 + if (!clk_rate) { 662 + ret = device_property_read_u32(&client->adapter->dev, 663 + "clock-frequency", &bus_clk_rate); 664 + if (ret) { 665 + dev_err(dev, "failed to read clock-frequency property\n"); 666 + return ret; 667 + } 665 668 } 666 669 667 670 if (bus_clk_rate > 1000000L) {