]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mailbox/omap: move the OMAP mailbox framework to drivers
authorSuman Anna <s-anna@ti.com>
Tue, 12 Mar 2013 22:55:29 +0000 (17:55 -0500)
committerSuman Anna <s-anna@ti.com>
Tue, 11 Jun 2013 16:41:51 +0000 (11:41 -0500)
The mailbox hardware (in OMAP) uses a queued mailbox interrupt
mechanism that provides a communication channel between processors
through a set of registers and their associated interrupt signals
by sending and receiving messages.

The OMAP mailbox framework/driver code is moved to be under
drivers/mailbox, in preparation for adapting to a common mailbox
driver framework. This allows the build for OMAP mailbox to be
enabled (it was disabled during the multi-platform support).

As part of the migration from plat and mach code:
- Kconfig symbols have been renamed to build OMAP1 or OMAP2+ drivers.
- mailbox.h under plat-omap/plat/include has been split into a public
  and private header files. The public header has only the API related
  functions and types.
- The module name mailbox.ko from plat-omap is changed to
  omap-mailbox.ko
- The module name mailbox_mach.ko from mach-omapX is changed as
    mailbox_omap1.ko for OMAP1
    mailbox_omap2.ko for OMAP2+

Cc: Tony Lindgren <tony@atomide.com>
[gregkh@linuxfoundation.org: ack for staging part]
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Omar Ramirez Luna <omar.ramirez@copitl.com>
Signed-off-by: Suman Anna <s-anna@ti.com>
17 files changed:
arch/arm/configs/omap1_defconfig
arch/arm/mach-omap1/Makefile
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/devices.c
arch/arm/plat-omap/Kconfig
arch/arm/plat-omap/Makefile
drivers/mailbox/Kconfig
drivers/mailbox/Makefile
drivers/mailbox/mailbox-omap1.c [moved from arch/arm/mach-omap1/mailbox.c with 99% similarity]
drivers/mailbox/mailbox-omap2.c [moved from arch/arm/mach-omap2/mailbox.c with 98% similarity]
drivers/mailbox/omap-mailbox.c [moved from arch/arm/plat-omap/mailbox.c with 92% similarity]
drivers/mailbox/omap-mbox.h [moved from arch/arm/plat-omap/include/plat/mailbox.h with 55% similarity]
drivers/remoteproc/Kconfig
drivers/remoteproc/omap_remoteproc.c
drivers/staging/tidspbridge/Kconfig
drivers/staging/tidspbridge/include/dspbridge/host_os.h
include/linux/omap-mailbox.h [new file with mode: 0644]

index 9940f7b4e438c258d125cc6567ac1b7a9b2fc429..d74edbad18fc5f74223c46d70c60f74baf925f93 100644 (file)
@@ -26,7 +26,8 @@ CONFIG_ARCH_OMAP=y
 CONFIG_ARCH_OMAP1=y
 CONFIG_OMAP_RESET_CLOCKS=y
 # CONFIG_OMAP_MUX is not set
-CONFIG_OMAP_MBOX_FWK=y
+CONFIG_MAILBOX=y
+CONFIG_OMAP1_MBOX=y
 CONFIG_OMAP_32K_TIMER=y
 CONFIG_OMAP_DM_TIMER=y
 CONFIG_ARCH_OMAP730=y
index 222d58c0ae76951efa9651e064182cf138ed0dbd..3889b6cd211e704b325573468246b28a45cf299d 100644 (file)
@@ -19,10 +19,6 @@ obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o
 # Power Management
 obj-$(CONFIG_PM) += pm.o sleep.o
 
-# DSP
-obj-$(CONFIG_OMAP_MBOX_FWK)    += mailbox_mach.o
-mailbox_mach-objs              := mailbox.o
-
 i2c-omap-$(CONFIG_I2C_OMAP)            := i2c.o
 obj-y                                  += $(i2c-omap-m) $(i2c-omap-y)
 
index 55a9d677768328d552cec82e6229402a5696a8b2..f2d19af051ebf4733d3f54162921829f15c8c567 100644 (file)
@@ -203,9 +203,6 @@ obj-$(CONFIG_ARCH_OMAP4)            += omap_hwmod_44xx_data.o
 obj-$(CONFIG_OMAP3_EMU)                        += emu.o
 obj-$(CONFIG_HW_PERF_EVENTS)           += pmu.o
 
-obj-$(CONFIG_OMAP_MBOX_FWK)            += mailbox_mach.o
-mailbox_mach-objs                      := mailbox.o
-
 iommu-$(CONFIG_OMAP_IOMMU)             := omap-iommu.o
 obj-y                                  += $(iommu-m) $(iommu-y)
 
index 4c97a86115e6a383297e67bd29a3b7d968184258..73762accd128bf63f35f3d51535d02ff50ab373d 100644 (file)
@@ -328,7 +328,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
        return 0;
 }
 
-#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
+#if defined(CONFIG_OMAP2PLUS_MBOX) || defined(CONFIG_OMAP2PLUS_MBOX_MODULE)
 static inline void __init omap_init_mbox(void)
 {
        struct omap_hwmod *oh;
@@ -352,7 +352,7 @@ static inline void __init omap_init_mbox(void)
 }
 #else
 static inline void omap_init_mbox(void) { }
-#endif /* CONFIG_OMAP_MBOX_FWK */
+#endif /* CONFIG_OMAP2PLUS_MBOX */
 
 static inline void omap_init_sti(void) {}
 
index ce66eb9be481f118159c6c2305079795a933f1df..f82bae2171eb1c32ab206e4aff550334d641e468 100644 (file)
@@ -86,22 +86,6 @@ config OMAP_MUX_WARNINGS
          to change the pin multiplexing setup.  When there are no warnings
          printed, it's safe to deselect OMAP_MUX for your product.
 
-config OMAP_MBOX_FWK
-       tristate "Mailbox framework support"
-       depends on ARCH_OMAP && !ARCH_MULTIPLATFORM
-       help
-         Say Y here if you want to use OMAP Mailbox framework support for
-         DSP, IVA1.0 and IVA2 in OMAP1/2/3.
-
-config OMAP_MBOX_KFIFO_SIZE
-       int "Mailbox kfifo default buffer size (bytes)"
-       depends on OMAP_MBOX_FWK
-       default 256
-       help
-         Specify the default size of mailbox's kfifo buffers (bytes).
-         This can also be changed at runtime (via the mbox_kfifo_size
-         module parameter).
-
 config OMAP_IOMMU_IVA2
        bool
 
index 31199417b56a790a6e0633e5b9f823e659c335d1..0b01b68fd033072c818de997bd07536feb2ca64b 100644 (file)
@@ -17,6 +17,3 @@ obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
 i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
 obj-y += $(i2c-omap-m) $(i2c-omap-y)
 
-# OMAP mailbox framework
-obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
-
index 9545c9f03809bd88378135dc9c668b8214b1a891..c8b5c13bcd05e5e526f99ed590a06d04605ee21e 100644 (file)
@@ -16,4 +16,38 @@ config PL320_MBOX
          Management Engine, primarily for cpufreq. Say Y here if you want
          to use the PL320 IPCM support.
 
+config OMAP_MBOX
+       tristate
+       help
+         This option is selected by any OMAP architecture specific mailbox
+         driver such as CONFIG_OMAP1_MBOX or CONFIG_OMAP2PLUS_MBOX. This
+         enables the common OMAP mailbox framework code.
+
+config OMAP1_MBOX
+       tristate "OMAP1 Mailbox framework support"
+       depends on ARCH_OMAP1
+       select OMAP_MBOX
+       help
+         Mailbox implementation for OMAP chips with hardware for
+         interprocessor communication involving DSP in OMAP1. Say Y here
+         if you want to use OMAP1 Mailbox framework support.
+
+config OMAP2PLUS_MBOX
+       tristate "OMAP2+ Mailbox framework support"
+       depends on ARCH_OMAP2PLUS
+       select OMAP_MBOX
+       help
+         Mailbox implementation for OMAP family chips with hardware for
+         interprocessor communication involving DSP, IVA1.0 and IVA2 in
+         OMAP2/3; or IPU, IVA HD and DSP in OMAP4/5. Say Y here if you
+         want to use OMAP2+ Mailbox framework support.
+
+config OMAP_MBOX_KFIFO_SIZE
+       int "Mailbox kfifo default buffer size (bytes)"
+       depends on OMAP2PLUS_MBOX || OMAP1_MBOX
+       default 256
+       help
+         Specify the default size of mailbox's kfifo buffers (bytes).
+         This can also be changed at runtime (via the mbox_kfifo_size
+         module parameter).
 endif
index 543ad6a795054b1015117f7bea877631b6d18463..e0facb34084a440343b18eec1f91228322aead09 100644 (file)
@@ -1 +1,7 @@
 obj-$(CONFIG_PL320_MBOX)       += pl320-ipc.o
+
+obj-$(CONFIG_OMAP_MBOX)                += omap-mailbox.o
+obj-$(CONFIG_OMAP1_MBOX)       += mailbox_omap1.o
+mailbox_omap1-objs             := mailbox-omap1.o
+obj-$(CONFIG_OMAP2PLUS_MBOX)   += mailbox_omap2.o
+mailbox_omap2-objs             := mailbox-omap2.o
similarity index 99%
rename from arch/arm/mach-omap1/mailbox.c
rename to drivers/mailbox/mailbox-omap1.c
index 7246a5258292893c6e882e3668f92f4a5c6e4f1d..9001b7633f107f4c0f29c61d56e999a5aebec81c 100644 (file)
@@ -13,7 +13,8 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
-#include <plat/mailbox.h>
+
+#include "omap-mbox.h"
 
 #define MAILBOX_ARM2DSP1               0x00
 #define MAILBOX_ARM2DSP1b              0x04
similarity index 98%
rename from arch/arm/mach-omap2/mailbox.c
rename to drivers/mailbox/mailbox-omap2.c
index de21198d54ff51c08ff9621f8e9450dd793f50fd..eba380d7b17f18653818bdeedaa9f56386460af1 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/pm_runtime.h>
 #include <linux/platform_data/mailbox-omap.h>
 
-#include <plat/mailbox.h>
+#include "omap-mbox.h"
 
 #define MAILBOX_REVISION               0x000
 #define MAILBOX_MESSAGE(m)             (0x040 + 4 * (m))
@@ -331,9 +331,9 @@ static int omap2_mbox_remove(struct platform_device *pdev)
 }
 
 static struct platform_driver omap2_mbox_driver = {
-       .probe = omap2_mbox_probe,
-       .remove = omap2_mbox_remove,
-       .driver = {
+       .probe  = omap2_mbox_probe,
+       .remove = omap2_mbox_remove,
+       .driver = {
                .name = "omap-mailbox",
        },
 };
similarity index 92%
rename from arch/arm/plat-omap/mailbox.c
rename to drivers/mailbox/omap-mailbox.c
index f65eaf00fce63d5f7457523a2e92dfa9dbdf746a..d79a646b9042cde5786e87ded1b9d51a2093feb1 100644 (file)
@@ -31,7 +31,7 @@
 #include <linux/notifier.h>
 #include <linux/module.h>
 
-#include <plat/mailbox.h>
+#include "omap-mbox.h"
 
 static struct omap_mbox **mboxes;
 
@@ -116,6 +116,40 @@ out:
 }
 EXPORT_SYMBOL(omap_mbox_msg_send);
 
+void omap_mbox_save_ctx(struct omap_mbox *mbox)
+{
+       if (!mbox->ops->save_ctx) {
+               dev_err(mbox->dev, "%s:\tno save\n", __func__);
+               return;
+       }
+
+       mbox->ops->save_ctx(mbox);
+}
+EXPORT_SYMBOL(omap_mbox_save_ctx);
+
+void omap_mbox_restore_ctx(struct omap_mbox *mbox)
+{
+       if (!mbox->ops->restore_ctx) {
+               dev_err(mbox->dev, "%s:\tno restore\n", __func__);
+               return;
+       }
+
+       mbox->ops->restore_ctx(mbox);
+}
+EXPORT_SYMBOL(omap_mbox_restore_ctx);
+
+void omap_mbox_enable_irq(struct omap_mbox *mbox, omap_mbox_irq_t irq)
+{
+       mbox->ops->enable_irq(mbox, irq);
+}
+EXPORT_SYMBOL(omap_mbox_enable_irq);
+
+void omap_mbox_disable_irq(struct omap_mbox *mbox, omap_mbox_irq_t irq)
+{
+       mbox->ops->disable_irq(mbox, irq);
+}
+EXPORT_SYMBOL(omap_mbox_disable_irq);
+
 static void mbox_tx_tasklet(unsigned long tx_data)
 {
        struct omap_mbox *mbox = (struct omap_mbox *)tx_data;
similarity index 55%
rename from arch/arm/plat-omap/include/plat/mailbox.h
rename to drivers/mailbox/omap-mbox.h
index e98f7e234686207ae0b738e50ab10e5856edae26..6cd38fc685994b025c74689e324481bcf7b2b6b1 100644 (file)
@@ -1,20 +1,20 @@
-/* mailbox.h */
+/*
+ * omap-mbox.h: OMAP mailbox internal definitions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
 
-#ifndef MAILBOX_H
-#define MAILBOX_H
+#ifndef OMAP_MBOX_H
+#define OMAP_MBOX_H
 
-#include <linux/spinlock.h>
-#include <linux/workqueue.h>
-#include <linux/interrupt.h>
 #include <linux/device.h>
+#include <linux/interrupt.h>
 #include <linux/kfifo.h>
-
-typedef u32 mbox_msg_t;
-struct omap_mbox;
-
-typedef int __bitwise omap_mbox_irq_t;
-#define IRQ_TX ((__force omap_mbox_irq_t) 1)
-#define IRQ_RX ((__force omap_mbox_irq_t) 2)
+#include <linux/spinlock.h>
+#include <linux/workqueue.h>
+#include <linux/omap-mailbox.h>
 
 typedef int __bitwise omap_mbox_type_t;
 #define OMAP_MBOX_TYPE1 ((__force omap_mbox_type_t) 1)
@@ -58,48 +58,10 @@ struct omap_mbox {
        struct device           *dev;
        void                    *priv;
        int                     use_count;
-       struct blocking_notifier_head   notifier;
+       struct blocking_notifier_head   notifier;
 };
 
-int omap_mbox_msg_send(struct omap_mbox *, mbox_msg_t msg);
-void omap_mbox_init_seq(struct omap_mbox *);
-
-struct omap_mbox *omap_mbox_get(const char *, struct notifier_block *nb);
-void omap_mbox_put(struct omap_mbox *mbox, struct notifier_block *nb);
-
 int omap_mbox_register(struct device *parent, struct omap_mbox **);
 int omap_mbox_unregister(void);
 
-static inline void omap_mbox_save_ctx(struct omap_mbox *mbox)
-{
-       if (!mbox->ops->save_ctx) {
-               dev_err(mbox->dev, "%s:\tno save\n", __func__);
-               return;
-       }
-
-       mbox->ops->save_ctx(mbox);
-}
-
-static inline void omap_mbox_restore_ctx(struct omap_mbox *mbox)
-{
-       if (!mbox->ops->restore_ctx) {
-               dev_err(mbox->dev, "%s:\tno restore\n", __func__);
-               return;
-       }
-
-       mbox->ops->restore_ctx(mbox);
-}
-
-static inline void omap_mbox_enable_irq(struct omap_mbox *mbox,
-                                       omap_mbox_irq_t irq)
-{
-       mbox->ops->enable_irq(mbox, irq);
-}
-
-static inline void omap_mbox_disable_irq(struct omap_mbox *mbox,
-                                        omap_mbox_irq_t irq)
-{
-       mbox->ops->disable_irq(mbox, irq);
-}
-
-#endif /* MAILBOX_H */
+#endif /* OMAP_MBOX_H */
index d4d377c40ec96585126f474238040d47c9e79c2e..ce1743d0b6793ab1e7fcd85352b6918cce27773a 100644 (file)
@@ -14,8 +14,9 @@ config OMAP_REMOTEPROC
        depends on HAS_DMA
        depends on ARCH_OMAP4 || SOC_OMAP5
        depends on OMAP_IOMMU
-       depends on OMAP_MBOX_FWK
        select REMOTEPROC
+       select MAILBOX
+       select OMAP2PLUS_MBOX
        select RPMSG
        help
          Say y here to support OMAP's remote processors (dual M3
index 0e396c155b3ba60d0d202af60f9aa34f84afd5bf..51689721ea7a1c20d17ea6a7e104ee97025e52ce 100644 (file)
@@ -27,8 +27,8 @@
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 #include <linux/remoteproc.h>
+#include <linux/omap-mailbox.h>
 
-#include <plat/mailbox.h>
 #include <linux/platform_data/remoteproc-omap.h>
 
 #include "omap_remoteproc.h"
index 60848f198b4844229acd41073043c18cf1dbde8a..165b918b8171b6380c4d8653d576a0bc085ecb99 100644 (file)
@@ -5,7 +5,8 @@
 menuconfig TIDSPBRIDGE
        tristate "DSP Bridge driver"
        depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM
-       select OMAP_MBOX_FWK
+       select MAILBOX
+       select OMAP2PLUS_MBOX
        help
          DSP/BIOS Bridge is designed for platforms that contain a GPP and
          one or more attached DSPs.  The GPP is considered the master or
index 7f3a1db316199ac4618d3e57a6162b27ed305282..d1441db469fc796fdb45558c8ddea632e056c785 100644 (file)
@@ -41,7 +41,7 @@
 #include <linux/ioport.h>
 #include <linux/platform_device.h>
 #include <linux/clk.h>
-#include <plat/mailbox.h>
+#include <linux/omap-mailbox.h>
 #include <linux/pagemap.h>
 #include <asm/cacheflush.h>
 #include <linux/dma-mapping.h>
diff --git a/include/linux/omap-mailbox.h b/include/linux/omap-mailbox.h
new file mode 100644 (file)
index 0000000..f8322d9
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * omap-mailbox: interprocessor communication module for OMAP
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef OMAP_MAILBOX_H
+#define OMAP_MAILBOX_H
+
+typedef u32 mbox_msg_t;
+struct omap_mbox;
+
+typedef int __bitwise omap_mbox_irq_t;
+#define IRQ_TX ((__force omap_mbox_irq_t) 1)
+#define IRQ_RX ((__force omap_mbox_irq_t) 2)
+
+int omap_mbox_msg_send(struct omap_mbox *, mbox_msg_t msg);
+
+struct omap_mbox *omap_mbox_get(const char *, struct notifier_block *nb);
+void omap_mbox_put(struct omap_mbox *mbox, struct notifier_block *nb);
+
+void omap_mbox_save_ctx(struct omap_mbox *mbox);
+void omap_mbox_restore_ctx(struct omap_mbox *mbox);
+void omap_mbox_enable_irq(struct omap_mbox *mbox, omap_mbox_irq_t irq);
+void omap_mbox_disable_irq(struct omap_mbox *mbox, omap_mbox_irq_t irq);
+
+#endif /* OMAP_MAILBOX_H */