Skip to content

Commit

Permalink
crypto: atmel-ecc - add support for ACPI probing on non-AT91 platforms
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ard Biesheuvel authored and Herbert Xu committed May 30, 2019
1 parent 4befedc commit 3c756aa
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
1 change: 0 additions & 1 deletion drivers/crypto/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,6 @@ config CRYPTO_DEV_ATMEL_SHA

config CRYPTO_DEV_ATMEL_ECC
tristate "Support for Microchip / Atmel ECC hw accelerator"
depends on ARCH_AT91 || COMPILE_TEST
depends on I2C
select CRYPTO_ECDH
select CRC16
Expand Down
13 changes: 8 additions & 5 deletions drivers/crypto/atmel-ecc.c
Original file line number Diff line number Diff line change
Expand Up @@ -657,11 +657,14 @@ static int atmel_ecc_probe(struct i2c_client *client,
return -ENODEV;
}

ret = of_property_read_u32(client->adapter->dev.of_node,
"clock-frequency", &bus_clk_rate);
if (ret) {
dev_err(dev, "of: failed to read clock-frequency property\n");
return ret;
clk_rate = i2c_acpi_find_bus_speed(&client->adapter->dev);
if (!clk_rate) {
ret = device_property_read_u32(&client->adapter->dev,
"clock-frequency", &bus_clk_rate);
if (ret) {
dev_err(dev, "failed to read clock-frequency property\n");
return ret;
}
}

if (bus_clk_rate > 1000000L) {
Expand Down

0 comments on commit 3c756aa

Please sign in to comment.