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

Commit 555b2b5d authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'at91-ab-4.10-drivers' of...

Merge tag 'at91-ab-4.10-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux into next/drivers

Drivers for 4.10:

 - few fixes for the memory drivers
 - minimal security module driver
 - support for the Secure SRAM

* tag 'at91-ab-4.10-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux

:
  misc: sram: add Atmel securam support
  misc: sram: document new compatible
  ARM: at91: add secumod register definitions
  Documentation: dt: atmel-at91: Document secumod bindings
  memory: atmel-sdramc: use builtin_platform_driver to simplify the code
  memory: atmel-ebi: fix return value check in at91_ebi_dev_disable()

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents e87c077f 2ae2e288
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -225,3 +225,19 @@ required properties:
		compatible = "atmel,sama5d3-sfr", "syscon";
		reg = <0xf0038000 0x60>;
	};

Security Module (SECUMOD)

The Security Module macrocell provides all necessary secure functions to avoid
voltage, temperature, frequency and mechanical attacks on the chip. It also
embeds secure memories that can be scrambled

required properties:
- compatible: Should be "atmel,<chip>-secumod", "syscon".
  <chip> can be "sama5d2".
- reg: Should contain registers location and length

	secumod@fc040000 {
		compatible = "atmel,sama5d2-secumod", "syscon";
		reg = <0xfc040000 0x100>;
	};
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ Simple IO memory regions to be managed by the genalloc API.

Required properties:

- compatible : mmio-sram
- compatible : mmio-sram or atmel,sama5d2-securam

- reg : SRAM iomem address range

+1 −1
Original line number Diff line number Diff line
@@ -657,7 +657,7 @@ static int at91_ebi_dev_disable(struct at91_ebi *ebi, struct device_node *np)
		return -ENOMEM;

	newprop->value = devm_kstrdup(dev, "disabled", GFP_KERNEL);
	if (!newprop->name)
	if (!newprop->value)
		return -ENOMEM;

	newprop->length = sizeof("disabled");
+1 −5
Original line number Diff line number Diff line
@@ -85,8 +85,4 @@ static struct platform_driver atmel_ramc_driver = {
	},
};

static int __init atmel_ramc_init(void)
{
	return platform_driver_register(&atmel_ramc_driver);
}
device_initcall(atmel_ramc_init);
builtin_platform_driver(atmel_ramc_driver);
+35 −7
Original line number Diff line number Diff line
@@ -19,12 +19,17 @@
 */

#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/genalloc.h>
#include <linux/io.h>
#include <linux/list_sort.h>
#include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <linux/mfd/syscon.h>
#include <soc/at91/atmel-secumod.h>

#define SRAM_GRANULARITY	32

@@ -334,12 +339,35 @@ static int sram_reserve_regions(struct sram_dev *sram, struct resource *res)
	return ret;
}

static int atmel_securam_wait(void)
{
	struct regmap *regmap;
	u32 val;

	regmap = syscon_regmap_lookup_by_compatible("atmel,sama5d2-secumod");
	if (IS_ERR(regmap))
		return -ENODEV;

	return regmap_read_poll_timeout(regmap, AT91_SECUMOD_RAMRDY, val,
					val & AT91_SECUMOD_RAMRDY_READY,
					10000, 500000);
}

#ifdef CONFIG_OF
static const struct of_device_id sram_dt_ids[] = {
	{ .compatible = "mmio-sram" },
	{ .compatible = "atmel,sama5d2-securam", .data = atmel_securam_wait },
	{}
};
#endif

static int sram_probe(struct platform_device *pdev)
{
	struct sram_dev *sram;
	struct resource *res;
	size_t size;
	int ret;
	int (*init_func)(void);

	sram = devm_kzalloc(&pdev->dev, sizeof(*sram), GFP_KERNEL);
	if (!sram)
@@ -384,6 +412,13 @@ static int sram_probe(struct platform_device *pdev)

	platform_set_drvdata(pdev, sram);

	init_func = of_device_get_match_data(&pdev->dev);
	if (init_func) {
		ret = init_func();
		if (ret)
			return ret;
	}

	dev_dbg(sram->dev, "SRAM pool: %zu KiB @ 0x%p\n",
		gen_pool_size(sram->pool) / 1024, sram->virt_base);

@@ -405,13 +440,6 @@ static int sram_remove(struct platform_device *pdev)
	return 0;
}

#ifdef CONFIG_OF
static const struct of_device_id sram_dt_ids[] = {
	{ .compatible = "mmio-sram" },
	{}
};
#endif

static struct platform_driver sram_driver = {
	.driver = {
		.name = "sram",
Loading