]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: Fix for mailbox and dsp module (repost)
authorToshihiro Kobayashi <Toshihiro.Kobayashi@nokia.com>
Sat, 11 Nov 2006 00:10:36 +0000 (02:10 +0200)
committerTony Lindgren <tony@atomide.com>
Sat, 11 Nov 2006 00:10:36 +0000 (02:10 +0200)
Fix to build DSP Gateway as a module.

After this fix, modules regarding mailbox will be built as follows.

arch/arm/mach-omap[12]/mailbox.o -> mailbox_mach.ko
arch/arm/plat-omap/mailbox.o ->mailbox.ko

Signed-off-by: Toshihiro Kobayashi <toshihiro.kobayashi@nokia.com>
arch/arm/mach-omap1/Makefile
arch/arm/mach-omap1/devices.c
arch/arm/mach-omap1/mailbox.c
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/devices.c
arch/arm/mach-omap2/mailbox.c
arch/arm/plat-omap/dsp/dsp_common.c
arch/arm/plat-omap/dsp/dsp_core.c
arch/arm/plat-omap/dsp/dsp_mem.c
arch/arm/plat-omap/mailbox.c

index 9cb1f70563970fdef1766ad0909cb64cf5804749..60528f91b73c1b50145173c8e297a9fcb818f295 100644 (file)
@@ -11,7 +11,8 @@ obj-$(CONFIG_OMAP_MPU_TIMER)          += time.o
 obj-$(CONFIG_PM) += pm.o sleep.o
 
 # DSP
-obj-$(CONFIG_OMAP_DSP) += mailbox.o
+obj-$(CONFIG_OMAP_DSP) += mailbox_mach.o
+mailbox_mach-objs      := mailbox.o
 
 led-y := leds.o
 
index adae4f80d2fb2ca224f04e3bfd0fb5407552906b..497c8bb5e69b5b47853672a47c4b3b21eb49d451 100644 (file)
@@ -61,7 +61,7 @@ static void omap_init_rtc(void)
 static inline void omap_init_rtc(void) {}
 #endif
 
-#if defined(CONFIG_OMAP_DSP)
+#if defined(CONFIG_OMAP_DSP) || defined(CONFIG_OMAP_DSP_MODULE)
 
 #if defined(CONFIG_ARCH_OMAP15XX)
 #  define OMAP1_MBOX_SIZE      0x23
index ed59f968825269901082a3934c5d1bafa5d14608..877b8380cd45618dfd9fd02ecfcfb8591754cd0c 100644 (file)
@@ -141,6 +141,7 @@ struct omap_mbox mbox_dsp_info = {
        .ops  = &omap1_mbox_ops,
        .priv = &omap1_mbox_dsp_priv,
 };
+EXPORT_SYMBOL(mbox_dsp_info);
 
 static int __init omap1_mbox_probe(struct platform_device *pdev)
 {
index 841dba8321741cc16983a7253cbcdd5e1ad88508..626d9b8af2da7ac0a87bc29a2c1a766454dcf6cf 100644 (file)
@@ -12,7 +12,8 @@ obj-$(CONFIG_OMAP_MPU_TIMER)          += timer-gp.o
 obj-$(CONFIG_PM) += pm.o pm-domain.o sleep.o
 
 # DSP
-obj-$(CONFIG_OMAP_DSP) += mailbox.o
+obj-$(CONFIG_OMAP_DSP) += mailbox_mach.o
+mailbox_mach-objs      := mailbox.o
 
 # Specific board support
 obj-$(CONFIG_MACH_OMAP_GENERIC)                += board-generic.o
index 484bb9ea74d36d9050a95406e2050c336a004058..488f4a8e2eec027e7fa7eaf56e01eab759ce31f1 100644 (file)
@@ -66,7 +66,7 @@ static void omap_init_i2c(void) {}
 
 #endif
 
-#if defined(CONFIG_OMAP_DSP)
+#if defined(CONFIG_OMAP_DSP) || defined(CONFIG_OMAP_DSP_MODULE)
 #define OMAP2_MBOX_BASE                IO_ADDRESS(OMAP24XX_MAILBOX_BASE)
 
 static struct resource mbox_resources[] = {
index 835e340988c3dfc3b486df14fff48aaf7bd86430..e541e95d8dccce85c4a5a66d1ff545a0c242e24a 100644 (file)
@@ -209,11 +209,12 @@ static struct omap_mbox2_priv omap2_mbox_dsp_priv = {
        .newmsg_bit = MAILBOX_IRQ_NEWMSG(1),
 };
 
-static struct omap_mbox mbox_dsp_info = {
+struct omap_mbox mbox_dsp_info = {
        .name = "dsp",
        .ops = &omap2_mbox_ops,
        .priv = &omap2_mbox_dsp_priv,
 };
+EXPORT_SYMBOL(mbox_dsp_info);
 
 /* IVA */
 static struct omap_mbox2_priv omap2_mbox_iva_priv = {
index 087971ad8c02e4da9f46ae29374324f91f0e3dcf..44fa86aed815942ba7bc86d9cdb2aab05608a54f 100644 (file)
@@ -587,6 +587,7 @@ EXPORT_SYMBOL(api_ck_handle);
 EXPORT_SYMBOL(dsp_fck_handle);
 EXPORT_SYMBOL(dsp_ick_handle);
 #endif
+EXPORT_SYMBOL(omap_dsp);
 EXPORT_SYMBOL(dspmem_base);
 EXPORT_SYMBOL(dspmem_size);
 EXPORT_SYMBOL(daram_base);
index ceeb5e5c97c4cf006978418bae5ae2eeafb7cf6b..2da959b74cd5d3c4b17e7a23f41508595f578255 100644 (file)
@@ -406,7 +406,7 @@ int dsp_mbox_config(void *p)
 static int __init dsp_mbox_init(void)
 {
        omap_dsp->mbox = omap_mbox_get("dsp");
-       if (IS_ERR(omap_dsp->mbox)) {
+       if (omap_dsp->mbox == NULL) {
                printk(KERN_ERR "failed to get mailbox handler for DSP.\n");
                return -ENODEV;
        }
@@ -677,5 +677,9 @@ static void __exit omap_dsp_mod_exit(void)
        platform_driver_unregister(&dsp_driver);
 }
 
+/* module dependency: need mailbox module that have mbox_dsp_info */
+extern struct omap_mbox mbox_dsp_info;
+struct omap_mbox *mbox_dep = &mbox_dsp_info;
+
 module_init(omap_dsp_mod_init);
 module_exit(omap_dsp_mod_exit);
index b53cdc7e1babcc0a790460c757f81ea04103c7e7..ebf3c6b171b192b29f7b724aa707fa1b71fc466c 100644 (file)
@@ -1647,6 +1647,8 @@ static int dsp_mmu_itack(void)
         DSP_MMU_IRQ_TLBMISS)
 #endif
 
+static int is_mmu_init;
+
 static void dsp_mmu_init(void)
 {
        struct tlb_lock tlb_lock;
@@ -1682,13 +1684,17 @@ static void dsp_mmu_init(void)
        omap_dsp_release_mem();
        clk_disable(dsp_ck_handle);
 #endif
+
+       is_mmu_init = 1;
 }
 
 static void dsp_mmu_shutdown(void)
 {
-       exmap_flush();
-       exmap_clear_preserved_entries();
-       dsp_mmu_disable();
+       if (is_mmu_init) {
+               exmap_flush();
+               exmap_clear_preserved_entries();
+               dsp_mmu_disable();
+       }
 }
 
 #ifdef CONFIG_ARCH_OMAP1
index e7177cd62f3580b1efceb8bfd80930ec6a7a1d2e..1d3761fae0f92633bcec7499e94c34dd589c4d70 100644 (file)
@@ -345,3 +345,5 @@ static void __exit omap_mbox_class_exit(void)
 
 subsys_initcall(omap_mbox_class_init);
 module_exit(omap_mbox_class_exit);
+
+MODULE_LICENSE("GPL");