1
0
mirror of https://git.yoctoproject.org/meta-ti synced 2026-07-16 22:38:04 +00:00
Files
meta-ti/recipes-kernel/linux/linux-am335x-psp-3.2/0009-ARM-AM33xx-hwmod-Convert-RNG-device-data-to-hwmod.patch
Franklin S. Cooper Jr 8a6d2d49dd linux-am335x: Update to latest 3.2 kernel release
* Update to the latest PSP release (version 04.06.00.10) of the 3.2 kernel.
* Rename recipe to match meta-ti kernel recipe naming convention.
* Use in tree defconfig instead of providing a separate defconfig. These
  defconfigs were the same anyway.
* Add additional crypto patches that were needed to fix suspend and resume
  issues.

Signed-off-by: Franklin S. Cooper Jr <fcooper@ti.com>
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
2013-04-22 16:23:31 -04:00

177 lines
4.8 KiB
Diff

From 45cc04d9de2820cba138d5782e7c568edf0078a0 Mon Sep 17 00:00:00 2001
From: "Mark A. Greer" <mgreer@animalcreek.com>
Date: Wed, 12 Dec 2012 16:17:12 -0700
Subject: [PATCH 09/10] ARM: AM33xx: hwmod: Convert RNG device data to hwmod
Convert the device data for the AM33xx RNG module
from explicit platform_data to hwmod.
Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
---
arch/arm/mach-omap2/devices.c | 18 +++++++++
arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 64 ++++++++++++++++++++++++++++++
arch/arm/plat-omap/devices.c | 22 ----------
3 files changed, 82 insertions(+), 22 deletions(-)
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index e4caa06..8e2f4a0 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -825,6 +825,23 @@ static void __init omap_init_aes(void)
static inline void omap_init_aes(void) { }
#endif
+#if IS_ENABLED(CONFIG_HW_RANDOM_OMAP4)
+static void __init omap_init_rng(void)
+{
+ struct omap_hwmod *oh;
+ struct platform_device *pdev;
+
+ oh = omap_hwmod_lookup("rng");
+ if (!oh)
+ return;
+
+ pdev = omap_device_build("omap4_rng", -1, oh, NULL, 0, NULL, 0, 0);
+ WARN(IS_ERR(pdev), "Can't build omap_device for omap-rng\n");
+}
+#else
+static inline void omap_init_rng(void) {}
+#endif
+
/*-------------------------------------------------------------------------*/
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
@@ -1475,6 +1492,7 @@ static int __init omap2_init_devices(void)
omap_init_sti();
omap_init_sham();
omap_init_aes();
+ omap_init_rng();
omap_init_vout();
am33xx_register_edma();
am33xx_init_pcm();
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
index 90e25d7..6c5ebc7 100644
--- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
@@ -94,6 +94,7 @@ static struct omap_hwmod am33xx_lcdc_hwmod;
static struct omap_hwmod am33xx_mailbox_hwmod;
static struct omap_hwmod am33xx_cpgmac0_hwmod;
static struct omap_hwmod am33xx_mdio_hwmod;
+static struct omap_hwmod am33xx_rng_hwmod;
/*
* ERRATA: (Yet to conform from IP team)
@@ -3541,6 +3542,67 @@ static struct omap_hwmod am33xx_pruss_hwmod = {
.rst_lines_cnt = ARRAY_SIZE(am33xx_pruss_resets),
};
+/* rng */
+static struct omap_hwmod_sysc_fields omap3_rng_sysc_fields = {
+ .sidle_shift = 3,
+ .autoidle_shift = 0,
+};
+
+static struct omap_hwmod_class_sysconfig am33xx_rng_sysc = {
+ .rev_offs = 0x1fe0,
+ .sysc_offs = 0x1fe4,
+ .rst_offs = 0x1ff0,
+ .sysc_flags = SYSC_HAS_AUTOIDLE,
+ .sysc_fields = &omap3_rng_sysc_fields,
+};
+
+static struct omap_hwmod_class am33xx_rng_hwmod_class = {
+ .name = "rng",
+ .sysc = &am33xx_rng_sysc,
+};
+
+static struct omap_hwmod_irq_info am33xx_rng_irqs[] = {
+ { .irq = 111 },
+ { .irq = -1 }
+};
+
+struct omap_hwmod_addr_space am33xx_rng_addr_space[] = {
+ {
+ .pa_start = 0x48310000,
+ .pa_end = 0x48310000 + SZ_8K - 1,
+ .flags = ADDR_TYPE_RT,
+ },
+ { }
+};
+
+struct omap_hwmod_ocp_if am33xx_l4per__rng = {
+ .master = &am33xx_l4per_hwmod,
+ .slave = &am33xx_rng_hwmod,
+ .clk = "rng_fck",
+ .addr = am33xx_rng_addr_space,
+ .user = OCP_USER_MPU,
+};
+
+static struct omap_hwmod_ocp_if *am33xx_rng_slaves[] = {
+ &am33xx_l4per__rng,
+};
+
+static struct omap_hwmod am33xx_rng_hwmod = {
+ .name = "rng",
+ .class = &am33xx_rng_hwmod_class,
+ .clkdm_name = "l4ls_clkdm",
+ .mpu_irqs = am33xx_rng_irqs,
+ .main_clk = "rng_fck",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_offs = AM33XX_CM_PER_RNG_CLKCTRL_OFFSET,
+ .modulemode = MODULEMODE_SWCTRL,
+ },
+ },
+ .slaves = am33xx_rng_slaves,
+ .slaves_cnt = ARRAY_SIZE(am33xx_rng_slaves),
+};
+
static __initdata struct omap_hwmod *am33xx_hwmods[] = {
/* l3 class */
&am33xx_l3_instr_hwmod,
@@ -3661,6 +3723,8 @@ static __initdata struct omap_hwmod *am33xx_hwmods[] = {
&am33xx_gfx_hwmod,
/* pruss */
&am33xx_pruss_hwmod,
+ /* rng */
+ &am33xx_rng_hwmod,
NULL,
};
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c
index 52720b4..52d7ad4 100644
--- a/arch/arm/plat-omap/devices.c
+++ b/arch/arm/plat-omap/devices.c
@@ -105,28 +105,6 @@ static void omap_init_rng(void)
{
(void) platform_device_register(&omap_rng_device);
}
-#elif defined(CONFIG_HW_RANDOM_OMAP4) || defined(CONFIG_HW_RANDOM_OMAP4_MODULE)
-
-static struct resource rng_resources[] = {
- {
- .start = AM33XX_RNG_BASE,
- .end = AM33XX_RNG_BASE + 0x1FFC,
- .flags = IORESOURCE_MEM,
- },
-};
-
-static struct platform_device omap4_rng_device = {
- .name = "omap4_rng",
- .id = -1,
- .num_resources = ARRAY_SIZE(rng_resources),
- .resource = rng_resources,
-};
-
-static void omap_init_rng(void)
-{
- (void) platform_device_register(&omap4_rng_device);
-}
-
#else
static inline void omap_init_rng(void) {}
#endif
--
1.7.12