@@ -22,6 +22,7 @@
#include <plat/omap_hwmod.h>
#include <plat/cpu.h>
+#include <plat/iommu.h>
#include "omap_hwmod_common_data.h"
@@ -1103,6 +1104,106 @@ static struct omap_hwmod omap44xx_mailbox_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
};
+/* mmu */
+
+static struct omap_hwmod_class omap44xx_mmu_hwmod_class = {
+ .name = "mmu",
+};
+
+/* ducati mmu */
+
+static struct omap_hwmod omap44xx_ducati_mmu_hwmod;
+
+static struct omap_hwmod_addr_space omap44xx_ducati_mmu_addrs[] = {
+ {
+ .pa_start = OMAP4_MMU1_BASE,
+ .pa_end = OMAP4_MMU1_BASE + SZ_4K - 1,
+ .flags = ADDR_TYPE_RT,
+ },
+};
+
+/* l3_main_1 -> ducati mmu */
+static struct omap_hwmod_ocp_if omap44xx_l3_main_1__ducati_mmu = {
+ .master = &omap44xx_l3_main_1_hwmod,
+ .slave = &omap44xx_ducati_mmu_hwmod,
+ .addr = omap44xx_ducati_mmu_addrs,
+ .clk = "dpll_mpu_m2_ck",
+ .addr_cnt = ARRAY_SIZE(omap44xx_ducati_mmu_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* ducati mmu slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_ducati_mmu_slaves[] = {
+ &omap44xx_l3_main_1__ducati_mmu,
+};
+
+static struct omap_hwmod_irq_info omap44xx_ducati_mmu_irqs[] = {
+ { .name = "ducati", .irq = 100 + OMAP44XX_IRQ_GIC_START, },
+};
+
+static struct omap_mmu_dev_attr ducati_mmu_dev_attr = {
+ .nr_tlb_entries = 32,
+};
+
+static struct omap_hwmod omap44xx_ducati_mmu_hwmod = {
+ .name = "ducati",
+ .class = &omap44xx_mmu_hwmod_class,
+ .mpu_irqs = omap44xx_ducati_mmu_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_ducati_mmu_irqs),
+ .slaves = omap44xx_ducati_mmu_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_ducati_mmu_slaves),
+ .dev_attr = &ducati_mmu_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/* tesla mmu */
+
+static struct omap_hwmod omap44xx_tesla_mmu_hwmod;
+
+static struct omap_hwmod_addr_space omap44xx_tesla_mmu_addrs[] = {
+ {
+ .pa_start = OMAP4_MMU2_BASE,
+ .pa_end = OMAP4_MMU2_BASE + SZ_4K - 1,
+ .flags = ADDR_TYPE_RT,
+ },
+};
+
+/* l3_main_1 -> tesla mmu */
+static struct omap_hwmod_ocp_if omap44xx_l3_main_1__tesla_mmu = {
+ .master = &omap44xx_l3_main_1_hwmod,
+ .slave = &omap44xx_tesla_mmu_hwmod,
+ .addr = omap44xx_tesla_mmu_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_tesla_mmu_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* tesla mmu slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_tesla_mmu_slaves[] = {
+ &omap44xx_l3_main_1__tesla_mmu,
+};
+
+static struct omap_hwmod_irq_info omap44xx_tesla_mmu_irqs[] = {
+ { .name = "tesla", .irq = 28 + OMAP44XX_IRQ_GIC_START, },
+};
+
+static struct omap_mmu_dev_attr tesla_mmu_dev_attr = {
+ .nr_tlb_entries = 32,
+};
+
+static struct omap_hwmod omap44xx_tesla_mmu_hwmod = {
+ .name = "tesla",
+ .class = &omap44xx_mmu_hwmod_class,
+ .mpu_irqs = omap44xx_tesla_mmu_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_tesla_mmu_irqs),
+ .main_clk = "dsp_fck",
+ .slaves = omap44xx_tesla_mmu_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_tesla_mmu_slaves),
+ .dev_attr = &tesla_mmu_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+ .flags = HWMOD_NO_IDLEST,
+};
+
static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* dmm class */
&omap44xx_dmm_hwmod,
@@ -1140,6 +1241,10 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* mailbox */
&omap44xx_mailbox_hwmod,
+
+ /* mmu */
+ &omap44xx_ducati_mmu_hwmod,
+ &omap44xx_tesla_mmu_hwmod,
NULL,
};