Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f37fbd36 authored by Andrew Lunn's avatar Andrew Lunn Committed by Jason Cooper
Browse files

Crypto: CESA: Add support for DT based instantiation.



Based on work by Michael Walle and Jason Cooper.

Added support for getting the interrupt number and address of SRAM
from DT.

Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Tested-by: default avatarSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: default avatarJason Cooper <jason@lakedaemon.net>

Conflicts:

	arch/arm/mach-kirkwood/board-dt.c
parent 2eecb477
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
Marvell Cryptographic Engines And Security Accelerator

Required properties:
- compatible : should be "marvell,orion-crypto"
- reg : base physical address of the engine and length of memory mapped
        region, followed by base physical address of sram and its memory
        length
- reg-names : "regs" , "sram";
- interrupts : interrupt number

Examples:

	crypto@30000 {
		compatible = "marvell,orion-crypto";
		reg = <0x30000 0x10000>,
		      <0x4000000 0x800>;
		reg-names = "regs" , "sram";
		interrupts = <22>;
		status = "okay";
	};
+11 −1
Original line number Diff line number Diff line
@@ -14,7 +14,8 @@

	ocp@f1000000 {
		compatible = "simple-bus";
		ranges = <0 0xf1000000 0x4000000>;
		ranges = <0x00000000 0xf1000000 0x4000000
		          0xf5000000 0xf5000000 0x0000400>;
		#address-cells = <1>;
		#size-cells = <1>;

@@ -105,5 +106,14 @@
			clock-frequency = <100000>;
			status = "disabled";
		};

		crypto@30000 {
			compatible = "marvell,orion-crypto";
			reg = <0x30000 0x10000>,
			      <0xf5000000 0x800>;
			reg-names = "regs", "sram";
			interrupts = <22>;
			status = "okay";
		};
	};
};
+1 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ struct of_dev_auxdata kirkwood_auxdata_lookup[] __initdata = {
	OF_DEV_AUXDATA("marvell,orion-wdt", 0xf1020300, "orion_wdt", NULL),
	OF_DEV_AUXDATA("marvell,orion-sata", 0xf1080000, "sata_mv.0", NULL),
	OF_DEV_AUXDATA("marvell,orion-nand", 0xf4000000, "orion_nand", NULL),
	OF_DEV_AUXDATA("marvell,orion-crypto", 0xf1030000, "mv_crypto", NULL),
	{},
};

@@ -60,7 +61,6 @@ static void __init kirkwood_dt_init(void)
	/* internal devices that every board has */
	kirkwood_xor0_init();
	kirkwood_xor1_init();
	kirkwood_crypto_init();

#ifdef CONFIG_KEXEC
	kexec_reinit = kirkwood_enable_pcie;
+15 −2
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@
#include <linux/clk.h>
#include <crypto/internal/hash.h>
#include <crypto/sha.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/of_irq.h>

#include "mv_cesa.h"

@@ -1062,6 +1065,9 @@ static int mv_probe(struct platform_device *pdev)
		goto err_unmap_reg;
	}

	if (pdev->dev.of_node)
		irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
	else
		irq = platform_get_irq(pdev, 0);
	if (irq < 0 || irq == NO_IRQ) {
		ret = irq;
@@ -1170,12 +1176,19 @@ static int mv_remove(struct platform_device *pdev)
	return 0;
}

static const struct of_device_id mv_cesa_of_match_table[] = {
	{ .compatible = "marvell,orion-crypto", },
	{}
};
MODULE_DEVICE_TABLE(of, mv_cesa_of_match_table);

static struct platform_driver marvell_crypto = {
	.probe		= mv_probe,
	.remove		= mv_remove,
	.remove		= __devexit_p(mv_remove),
	.driver		= {
		.owner	= THIS_MODULE,
		.name	= "mv_crypto",
		.of_match_table = of_match_ptr(mv_cesa_of_match_table),
	},
};
MODULE_ALIAS("platform:mv_crypto");