mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-14 02:14:35 +00:00
crypto4xx: integrate ppc4xx-rng into crypto4xx
This patch integrates the ppc4xx-rng driver into the existing crypto4xx. This is because the true random number generator is controlled and part of the security core. Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
e81f3340bb
commit
5343e674f3
10 changed files with 184 additions and 163 deletions
|
@ -268,19 +268,6 @@ config HW_RANDOM_NOMADIK
|
||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
config HW_RANDOM_PPC4XX
|
|
||||||
tristate "PowerPC 4xx generic true random number generator support"
|
|
||||||
depends on PPC && 4xx
|
|
||||||
default HW_RANDOM
|
|
||||||
---help---
|
|
||||||
This driver provides the kernel-side support for the TRNG hardware
|
|
||||||
found in the security function of some PowerPC 4xx SoCs.
|
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the
|
|
||||||
module will be called ppc4xx-rng.
|
|
||||||
|
|
||||||
If unsure, say N.
|
|
||||||
|
|
||||||
config HW_RANDOM_PSERIES
|
config HW_RANDOM_PSERIES
|
||||||
tristate "pSeries HW Random Number Generator support"
|
tristate "pSeries HW Random Number Generator support"
|
||||||
depends on PPC64 && IBMVIO
|
depends on PPC64 && IBMVIO
|
||||||
|
|
|
@ -22,7 +22,6 @@ obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o
|
obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o
|
||||||
obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o
|
obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o
|
obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_PPC4XX) += ppc4xx-rng.o
|
|
||||||
obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o
|
obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o
|
obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o
|
obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o
|
||||||
|
|
|
@ -1,147 +0,0 @@
|
||||||
/*
|
|
||||||
* Generic PowerPC 44x RNG driver
|
|
||||||
*
|
|
||||||
* Copyright 2011 IBM Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation; version 2 of the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/hw_random.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include <linux/of_address.h>
|
|
||||||
#include <linux/of_platform.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#define PPC4XX_TRNG_DEV_CTRL 0x60080
|
|
||||||
|
|
||||||
#define PPC4XX_TRNGE 0x00020000
|
|
||||||
#define PPC4XX_TRNG_CTRL 0x0008
|
|
||||||
#define PPC4XX_TRNG_CTRL_DALM 0x20
|
|
||||||
#define PPC4XX_TRNG_STAT 0x0004
|
|
||||||
#define PPC4XX_TRNG_STAT_B 0x1
|
|
||||||
#define PPC4XX_TRNG_DATA 0x0000
|
|
||||||
|
|
||||||
#define MODULE_NAME "ppc4xx_rng"
|
|
||||||
|
|
||||||
static int ppc4xx_rng_data_present(struct hwrng *rng, int wait)
|
|
||||||
{
|
|
||||||
void __iomem *rng_regs = (void __iomem *) rng->priv;
|
|
||||||
int busy, i, present = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < 20; i++) {
|
|
||||||
busy = (in_le32(rng_regs + PPC4XX_TRNG_STAT) & PPC4XX_TRNG_STAT_B);
|
|
||||||
if (!busy || !wait) {
|
|
||||||
present = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
udelay(10);
|
|
||||||
}
|
|
||||||
return present;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ppc4xx_rng_data_read(struct hwrng *rng, u32 *data)
|
|
||||||
{
|
|
||||||
void __iomem *rng_regs = (void __iomem *) rng->priv;
|
|
||||||
*data = in_le32(rng_regs + PPC4XX_TRNG_DATA);
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ppc4xx_rng_enable(int enable)
|
|
||||||
{
|
|
||||||
struct device_node *ctrl;
|
|
||||||
void __iomem *ctrl_reg;
|
|
||||||
int err = 0;
|
|
||||||
u32 val;
|
|
||||||
|
|
||||||
/* Find the main crypto device node and map it to turn the TRNG on */
|
|
||||||
ctrl = of_find_compatible_node(NULL, NULL, "amcc,ppc4xx-crypto");
|
|
||||||
if (!ctrl)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
ctrl_reg = of_iomap(ctrl, 0);
|
|
||||||
if (!ctrl_reg) {
|
|
||||||
err = -ENODEV;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
val = in_le32(ctrl_reg + PPC4XX_TRNG_DEV_CTRL);
|
|
||||||
|
|
||||||
if (enable)
|
|
||||||
val |= PPC4XX_TRNGE;
|
|
||||||
else
|
|
||||||
val = val & ~PPC4XX_TRNGE;
|
|
||||||
|
|
||||||
out_le32(ctrl_reg + PPC4XX_TRNG_DEV_CTRL, val);
|
|
||||||
iounmap(ctrl_reg);
|
|
||||||
|
|
||||||
out:
|
|
||||||
of_node_put(ctrl);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct hwrng ppc4xx_rng = {
|
|
||||||
.name = MODULE_NAME,
|
|
||||||
.data_present = ppc4xx_rng_data_present,
|
|
||||||
.data_read = ppc4xx_rng_data_read,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int ppc4xx_rng_probe(struct platform_device *dev)
|
|
||||||
{
|
|
||||||
void __iomem *rng_regs;
|
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
rng_regs = of_iomap(dev->dev.of_node, 0);
|
|
||||||
if (!rng_regs)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
err = ppc4xx_rng_enable(1);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
out_le32(rng_regs + PPC4XX_TRNG_CTRL, PPC4XX_TRNG_CTRL_DALM);
|
|
||||||
ppc4xx_rng.priv = (unsigned long) rng_regs;
|
|
||||||
|
|
||||||
err = hwrng_register(&ppc4xx_rng);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ppc4xx_rng_remove(struct platform_device *dev)
|
|
||||||
{
|
|
||||||
void __iomem *rng_regs = (void __iomem *) ppc4xx_rng.priv;
|
|
||||||
|
|
||||||
hwrng_unregister(&ppc4xx_rng);
|
|
||||||
ppc4xx_rng_enable(0);
|
|
||||||
iounmap(rng_regs);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct of_device_id ppc4xx_rng_match[] = {
|
|
||||||
{ .compatible = "ppc4xx-rng", },
|
|
||||||
{ .compatible = "amcc,ppc460ex-rng", },
|
|
||||||
{ .compatible = "amcc,ppc440epx-rng", },
|
|
||||||
{},
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(of, ppc4xx_rng_match);
|
|
||||||
|
|
||||||
static struct platform_driver ppc4xx_rng_driver = {
|
|
||||||
.driver = {
|
|
||||||
.name = MODULE_NAME,
|
|
||||||
.of_match_table = ppc4xx_rng_match,
|
|
||||||
},
|
|
||||||
.probe = ppc4xx_rng_probe,
|
|
||||||
.remove = ppc4xx_rng_remove,
|
|
||||||
};
|
|
||||||
|
|
||||||
module_platform_driver(ppc4xx_rng_driver);
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Josh Boyer <jwboyer@linux.vnet.ibm.com>");
|
|
||||||
MODULE_DESCRIPTION("HW RNG driver for PPC 4xx processors");
|
|
|
@ -279,6 +279,14 @@ config CRYPTO_DEV_PPC4XX
|
||||||
help
|
help
|
||||||
This option allows you to have support for AMCC crypto acceleration.
|
This option allows you to have support for AMCC crypto acceleration.
|
||||||
|
|
||||||
|
config HW_RANDOM_PPC4XX
|
||||||
|
bool "PowerPC 4xx generic true random number generator support"
|
||||||
|
depends on CRYPTO_DEV_PPC4XX && HW_RANDOM
|
||||||
|
default y
|
||||||
|
---help---
|
||||||
|
This option provides the kernel-side support for the TRNG hardware
|
||||||
|
found in the security function of some PowerPC 4xx SoCs.
|
||||||
|
|
||||||
config CRYPTO_DEV_OMAP_SHAM
|
config CRYPTO_DEV_OMAP_SHAM
|
||||||
tristate "Support for OMAP MD5/SHA1/SHA2 hw accelerator"
|
tristate "Support for OMAP MD5/SHA1/SHA2 hw accelerator"
|
||||||
depends on ARCH_OMAP2PLUS
|
depends on ARCH_OMAP2PLUS
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += crypto4xx.o
|
obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += crypto4xx.o
|
||||||
crypto4xx-y := crypto4xx_core.o crypto4xx_alg.o crypto4xx_sa.o
|
crypto4xx-y := crypto4xx_core.o crypto4xx_alg.o crypto4xx_sa.o
|
||||||
|
crypto4xx-$(CONFIG_HW_RANDOM_PPC4XX) += crypto4xx_trng.o
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "crypto4xx_reg_def.h"
|
#include "crypto4xx_reg_def.h"
|
||||||
#include "crypto4xx_core.h"
|
#include "crypto4xx_core.h"
|
||||||
#include "crypto4xx_sa.h"
|
#include "crypto4xx_sa.h"
|
||||||
|
#include "crypto4xx_trng.h"
|
||||||
|
|
||||||
#define PPC4XX_SEC_VERSION_STR "0.5"
|
#define PPC4XX_SEC_VERSION_STR "0.5"
|
||||||
|
|
||||||
|
@ -1225,6 +1226,7 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_start_dev;
|
goto err_start_dev;
|
||||||
|
|
||||||
|
ppc4xx_trng_probe(core_dev);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_start_dev:
|
err_start_dev:
|
||||||
|
@ -1252,6 +1254,8 @@ static int crypto4xx_remove(struct platform_device *ofdev)
|
||||||
struct device *dev = &ofdev->dev;
|
struct device *dev = &ofdev->dev;
|
||||||
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
|
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
ppc4xx_trng_remove(core_dev);
|
||||||
|
|
||||||
free_irq(core_dev->irq, dev);
|
free_irq(core_dev->irq, dev);
|
||||||
irq_dispose_mapping(core_dev->irq);
|
irq_dispose_mapping(core_dev->irq);
|
||||||
|
|
||||||
|
@ -1272,7 +1276,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match);
|
||||||
|
|
||||||
static struct platform_driver crypto4xx_driver = {
|
static struct platform_driver crypto4xx_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "crypto4xx",
|
.name = MODULE_NAME,
|
||||||
.of_match_table = crypto4xx_match,
|
.of_match_table = crypto4xx_match,
|
||||||
},
|
},
|
||||||
.probe = crypto4xx_probe,
|
.probe = crypto4xx_probe,
|
||||||
|
@ -1284,4 +1288,3 @@ module_platform_driver(crypto4xx_driver);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
|
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
|
||||||
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
|
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
#include <crypto/internal/hash.h>
|
#include <crypto/internal/hash.h>
|
||||||
|
|
||||||
|
#define MODULE_NAME "crypto4xx"
|
||||||
|
|
||||||
#define PPC460SX_SDR0_SRST 0x201
|
#define PPC460SX_SDR0_SRST 0x201
|
||||||
#define PPC405EX_SDR0_SRST 0x200
|
#define PPC405EX_SDR0_SRST 0x200
|
||||||
#define PPC460EX_SDR0_SRST 0x201
|
#define PPC460EX_SDR0_SRST 0x201
|
||||||
|
@ -72,6 +74,7 @@ struct crypto4xx_device {
|
||||||
char *name;
|
char *name;
|
||||||
u64 ce_phy_address;
|
u64 ce_phy_address;
|
||||||
void __iomem *ce_base;
|
void __iomem *ce_base;
|
||||||
|
void __iomem *trng_base;
|
||||||
|
|
||||||
void *pdr; /* base address of packet
|
void *pdr; /* base address of packet
|
||||||
descriptor ring */
|
descriptor ring */
|
||||||
|
@ -106,6 +109,7 @@ struct crypto4xx_core_device {
|
||||||
struct device *device;
|
struct device *device;
|
||||||
struct platform_device *ofdev;
|
struct platform_device *ofdev;
|
||||||
struct crypto4xx_device *dev;
|
struct crypto4xx_device *dev;
|
||||||
|
struct hwrng *trng;
|
||||||
u32 int_status;
|
u32 int_status;
|
||||||
u32 irq;
|
u32 irq;
|
||||||
struct tasklet_struct tasklet;
|
struct tasklet_struct tasklet;
|
||||||
|
|
|
@ -125,6 +125,7 @@
|
||||||
#define PPC4XX_INTERRUPT_CLR 0x3ffff
|
#define PPC4XX_INTERRUPT_CLR 0x3ffff
|
||||||
#define PPC4XX_PRNG_CTRL_AUTO_EN 0x3
|
#define PPC4XX_PRNG_CTRL_AUTO_EN 0x3
|
||||||
#define PPC4XX_DC_3DES_EN 1
|
#define PPC4XX_DC_3DES_EN 1
|
||||||
|
#define PPC4XX_TRNG_EN 0x00020000
|
||||||
#define PPC4XX_INT_DESCR_CNT 4
|
#define PPC4XX_INT_DESCR_CNT 4
|
||||||
#define PPC4XX_INT_TIMEOUT_CNT 0
|
#define PPC4XX_INT_TIMEOUT_CNT 0
|
||||||
#define PPC4XX_INT_CFG 1
|
#define PPC4XX_INT_CFG 1
|
||||||
|
|
131
drivers/crypto/amcc/crypto4xx_trng.c
Normal file
131
drivers/crypto/amcc/crypto4xx_trng.c
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
* Generic PowerPC 44x RNG driver
|
||||||
|
*
|
||||||
|
* Copyright 2011 IBM Corporation
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; version 2 of the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/hw_random.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/of_address.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
#include "crypto4xx_core.h"
|
||||||
|
#include "crypto4xx_trng.h"
|
||||||
|
#include "crypto4xx_reg_def.h"
|
||||||
|
|
||||||
|
#define PPC4XX_TRNG_CTRL 0x0008
|
||||||
|
#define PPC4XX_TRNG_CTRL_DALM 0x20
|
||||||
|
#define PPC4XX_TRNG_STAT 0x0004
|
||||||
|
#define PPC4XX_TRNG_STAT_B 0x1
|
||||||
|
#define PPC4XX_TRNG_DATA 0x0000
|
||||||
|
|
||||||
|
static int ppc4xx_trng_data_present(struct hwrng *rng, int wait)
|
||||||
|
{
|
||||||
|
struct crypto4xx_device *dev = (void *)rng->priv;
|
||||||
|
int busy, i, present = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
busy = (in_le32(dev->trng_base + PPC4XX_TRNG_STAT) &
|
||||||
|
PPC4XX_TRNG_STAT_B);
|
||||||
|
if (!busy || !wait) {
|
||||||
|
present = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
udelay(10);
|
||||||
|
}
|
||||||
|
return present;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ppc4xx_trng_data_read(struct hwrng *rng, u32 *data)
|
||||||
|
{
|
||||||
|
struct crypto4xx_device *dev = (void *)rng->priv;
|
||||||
|
*data = in_le32(dev->trng_base + PPC4XX_TRNG_DATA);
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ppc4xx_trng_enable(struct crypto4xx_device *dev, bool enable)
|
||||||
|
{
|
||||||
|
u32 device_ctrl;
|
||||||
|
|
||||||
|
device_ctrl = readl(dev->ce_base + CRYPTO4XX_DEVICE_CTRL);
|
||||||
|
if (enable)
|
||||||
|
device_ctrl |= PPC4XX_TRNG_EN;
|
||||||
|
else
|
||||||
|
device_ctrl &= ~PPC4XX_TRNG_EN;
|
||||||
|
writel(device_ctrl, dev->ce_base + CRYPTO4XX_DEVICE_CTRL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id ppc4xx_trng_match[] = {
|
||||||
|
{ .compatible = "ppc4xx-rng", },
|
||||||
|
{ .compatible = "amcc,ppc460ex-rng", },
|
||||||
|
{ .compatible = "amcc,ppc440epx-rng", },
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
void ppc4xx_trng_probe(struct crypto4xx_core_device *core_dev)
|
||||||
|
{
|
||||||
|
struct crypto4xx_device *dev = core_dev->dev;
|
||||||
|
struct device_node *trng = NULL;
|
||||||
|
struct hwrng *rng = NULL;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
/* Find the TRNG device node and map it */
|
||||||
|
trng = of_find_matching_node(NULL, ppc4xx_trng_match);
|
||||||
|
if (!trng || !of_device_is_available(trng))
|
||||||
|
return;
|
||||||
|
|
||||||
|
dev->trng_base = of_iomap(trng, 0);
|
||||||
|
of_node_put(trng);
|
||||||
|
if (!dev->trng_base)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
rng = kzalloc(sizeof(*rng), GFP_KERNEL);
|
||||||
|
if (!rng)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
rng->name = MODULE_NAME;
|
||||||
|
rng->data_present = ppc4xx_trng_data_present;
|
||||||
|
rng->data_read = ppc4xx_trng_data_read;
|
||||||
|
rng->priv = (unsigned long) dev;
|
||||||
|
core_dev->trng = rng;
|
||||||
|
ppc4xx_trng_enable(dev, true);
|
||||||
|
out_le32(dev->trng_base + PPC4XX_TRNG_CTRL, PPC4XX_TRNG_CTRL_DALM);
|
||||||
|
err = devm_hwrng_register(core_dev->device, core_dev->trng);
|
||||||
|
if (err) {
|
||||||
|
ppc4xx_trng_enable(dev, false);
|
||||||
|
dev_err(core_dev->device, "failed to register hwrng (%d).\n",
|
||||||
|
err);
|
||||||
|
goto err_out;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
err_out:
|
||||||
|
of_node_put(trng);
|
||||||
|
iounmap(dev->trng_base);
|
||||||
|
kfree(rng);
|
||||||
|
dev->trng_base = NULL;
|
||||||
|
core_dev->trng = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ppc4xx_trng_remove(struct crypto4xx_core_device *core_dev)
|
||||||
|
{
|
||||||
|
if (core_dev && core_dev->trng) {
|
||||||
|
struct crypto4xx_device *dev = core_dev->dev;
|
||||||
|
|
||||||
|
devm_hwrng_unregister(core_dev->device, core_dev->trng);
|
||||||
|
ppc4xx_trng_enable(dev, false);
|
||||||
|
iounmap(dev->trng_base);
|
||||||
|
kfree(core_dev->trng);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MODULE_ALIAS("ppc4xx_rng");
|
34
drivers/crypto/amcc/crypto4xx_trng.h
Normal file
34
drivers/crypto/amcc/crypto4xx_trng.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/**
|
||||||
|
* AMCC SoC PPC4xx Crypto Driver
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 Applied Micro Circuits Corporation.
|
||||||
|
* All rights reserved. James Hsiao <jhsiao@amcc.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* This file defines the security context
|
||||||
|
* associate format.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CRYPTO4XX_TRNG_H__
|
||||||
|
#define __CRYPTO4XX_TRNG_H__
|
||||||
|
|
||||||
|
#ifdef CONFIG_HW_RANDOM_PPC4XX
|
||||||
|
void ppc4xx_trng_probe(struct crypto4xx_core_device *core_dev);
|
||||||
|
void ppc4xx_trng_remove(struct crypto4xx_core_device *core_dev);
|
||||||
|
#else
|
||||||
|
static inline void ppc4xx_trng_probe(
|
||||||
|
struct crypto4xx_device *dev __maybe_unused) { }
|
||||||
|
static inline void ppc4xx_trng_remove(
|
||||||
|
struct crypto4xx_device *dev __maybe_unused) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Reference in a new issue