Merge branch 'omap-for-v5.6/sdma' into omap-for-v5.6/ti-sysc-drop-pdata
authorTony Lindgren <tony@atomide.com>
Mon, 30 Dec 2019 18:17:51 +0000 (10:17 -0800)
committerTony Lindgren <tony@atomide.com>
Mon, 30 Dec 2019 18:17:51 +0000 (10:17 -0800)
26 files changed:
arch/arm/boot/dts/dra7-l4.dtsi
arch/arm/boot/dts/omap2.dtsi
arch/arm/boot/dts/omap2430.dtsi
arch/arm/boot/dts/omap3-n900.dts
arch/arm/boot/dts/omap3.dtsi
arch/arm/boot/dts/omap36xx.dtsi
arch/arm/boot/dts/omap4-l4.dtsi
arch/arm/boot/dts/omap5-l4.dtsi
arch/arm/mach-omap2/common.h
arch/arm/mach-omap2/dma.c
arch/arm/mach-omap2/omap_device.c
arch/arm/mach-omap2/omap_device.h
arch/arm/mach-omap2/omap_hwmod_2420_data.c
arch/arm/mach-omap2/omap_hwmod_2430_data.c
arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
arch/arm/mach-omap2/omap_hwmod_54xx_data.c
arch/arm/mach-omap2/omap_hwmod_7xx_data.c
arch/arm/mach-omap2/omap_hwmod_common_data.h
arch/arm/mach-omap2/pdata-quirks.c
arch/arm/mach-omap2/pm24xx.c
arch/arm/mach-omap2/pm34xx.c
arch/arm/plat-omap/dma.c
drivers/dma/ti/omap-dma.c
include/linux/omap-dma.h

index 13e77e9dc33cbd09a511ee67a688da82d9ccd1bb..c1740868042a54c42824092a0c141a168d22ae96 100644 (file)
 
                target-module@56000 {                   /* 0x4a056000, ap 9 02.0 */
                        compatible = "ti,sysc-omap2", "ti,sysc";
-                       ti,hwmods = "dma_system";
                        reg = <0x56000 0x4>,
                              <0x5602c 0x4>,
                              <0x56028 0x4>;
                        ranges = <0x0 0x56000 0x1000>;
 
                        sdma: dma-controller@0 {
-                               compatible = "ti,omap4430-sdma";
+                               compatible = "ti,omap4430-sdma", "ti,omap-sdma";
                                reg = <0x0 0x1000>;
                                interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
                                             <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
index 000bf16de6517df2ec0e3713429ca6efde32e285..0e453fec2e3a3b2d37a32f8669b81b2f62ac3be7 100644 (file)
@@ -8,6 +8,7 @@
  * kind, whether express or implied.
  */
 
+#include <dt-bindings/bus/ti-sysc.h>
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/pinctrl/omap.h>
                        reg = <0x480FE000 0x1000>;
                };
 
-               sdma: dma-controller@48056000 {
-                       compatible = "ti,omap2430-sdma", "ti,omap2420-sdma";
-                       ti,hwmods = "dma";
-                       reg = <0x48056000 0x1000>;
-                       interrupts = <12>,
-                                    <13>,
-                                    <14>,
-                                    <15>;
-                       #dma-cells = <1>;
-                       dma-channels = <32>;
-                       dma-requests = <64>;
+               target-module@48056000 {
+                       compatible = "ti,sysc-omap2", "ti,sysc";
+                       reg = <0x48056000 0x4>,
+                             <0x4805602c 0x4>,
+                             <0x48056028 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY |
+                                        SYSC_OMAP2_EMUFREE |
+                                        SYSC_OMAP2_SOFTRESET |
+                                        SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-midle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       clocks = <&core_l3_ck>;
+                       clock-names = "fck";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0x48056000 0x1000>;
+
+                       sdma: dma-controller@0 {
+                               compatible = "ti,omap2420-sdma", "ti,omap-sdma";
+                               reg = <0 0x1000>;
+                               interrupts = <12>,
+                                            <13>,
+                                            <14>,
+                                            <15>;
+                               #dma-cells = <1>;
+                               dma-channels = <32>;
+                               dma-requests = <64>;
+                       };
                };
 
                i2c1: i2c@48070000 {
index 7f57af2f10acb6f02d42fff742d8be754101a042..15ef7593be128d5b8158be478cacbadfaf4c7b99 100644 (file)
        };
 };
 
+&sdma {
+       compatible = "ti,omap2430-sdma", "ti,omap-sdma";
+};
+
 &i2c1 {
        compatible = "ti,omap2430-i2c";
 };
index a638e059135bc67d01695c8cd60266072d2f335e..c3c6d7d04a76c2416983b97c1f8f8c788ed3fcc0 100644 (file)
        regulator-always-on;
 };
 
+/* First two dma channels are reserved on secure omap3 */
+&sdma {
+       dma-channel-mask = <0xfffffffc>;
+};
+
 &twl {
        twl_audio: audio {
                compatible = "ti,twl4030-audio";
index 5698a3e241aa0ae867784488833e045695412506..634ea16a711ec3d416f2feacd62d238360282609 100644 (file)
                        reg = <0x48200000 0x1000>;
                };
 
-               sdma: dma-controller@48056000 {
-                       compatible = "ti,omap3630-sdma", "ti,omap3430-sdma";
-                       reg = <0x48056000 0x1000>;
-                       interrupts = <12>,
-                                    <13>,
-                                    <14>,
-                                    <15>;
-                       #dma-cells = <1>;
-                       dma-channels = <32>;
-                       dma-requests = <96>;
-                       ti,hwmods = "dma";
+               target-module@48056000 {
+                       compatible = "ti,sysc-omap2", "ti,sysc";
+                       reg = <0x48056000 0x4>,
+                             <0x4805602c 0x4>,
+                             <0x48056028 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY |
+                                        SYSC_OMAP2_EMUFREE |
+                                        SYSC_OMAP2_SOFTRESET |
+                                        SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-midle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       /* Domains (V, P, C): core, core_pwrdm, core_l3_clkdm */
+                       clocks = <&core_l3_ick>;
+                       clock-names = "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0x48056000 0x1000>;
+
+                       sdma: dma-controller@0 {
+                               compatible = "ti,omap3430-sdma", "ti,omap-sdma";
+                               reg = <0x0 0x1000>;
+                               interrupts = <12>,
+                                            <13>,
+                                            <14>,
+                                            <15>;
+                               #dma-cells = <1>;
+                               dma-channels = <32>;
+                               dma-requests = <96>;
+                       };
                };
 
                gpio1: gpio@48310000 {
index c618cb257d00b3625bc6954c1deb1e39483ec503..71f3c8f1f9242626dca3ffb91f6bddb85d735c31 100644 (file)
        };
 };
 
+&sdma {
+       compatible = "ti,omap3630-sdma", "ti,omap-sdma";
+};
+
 /* OMAP3630 needs dss_96m_fck for VENC */
 &venc {
        clocks = <&dss_tv_fck>, <&dss_96m_fck>;
index 234c83d53ff719dc75ad5f5cd51da833e2fc4780..408f51cbfbb3bfc0c7d097ce6700258dbc831ddc 100644 (file)
 
                target-module@56000 {                   /* 0x4a056000, ap 7 0a.0 */
                        compatible = "ti,sysc-omap2", "ti,sysc";
-                       ti,hwmods = "dma_system";
                        reg = <0x56000 0x4>,
                              <0x5602c 0x4>,
                              <0x56028 0x4>;
                        ranges = <0x0 0x56000 0x1000>;
 
                        sdma: dma-controller@0 {
-                               compatible = "ti,omap4430-sdma";
+                               compatible = "ti,omap4430-sdma", "ti,omap-sdma";
                                reg = <0x0 0x1000>;
                                interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
                                             <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
index b9d1f9c8458820e443322f8937ab0cbe179c28d2..34410b7d77e2fd8f91a259d505af0578088f017a 100644 (file)
 
                target-module@56000 {                   /* 0x4a056000, ap 7 02.0 */
                        compatible = "ti,sysc-omap2", "ti,sysc";
-                       ti,hwmods = "dma_system";
                        reg = <0x56000 0x4>,
                              <0x5602c 0x4>,
                              <0x56028 0x4>;
                        ranges = <0x0 0x56000 0x1000>;
 
                        sdma: dma-controller@0 {
-                               compatible = "ti,omap4430-sdma";
+                               compatible = "ti,omap4430-sdma", "ti,omap-sdma";
                                reg = <0x0 0x1000>;
                                interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
                                             <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
index 223b37c4838934e033080f387ed324bdec8bbd37..480387a831e1c6d3477dbec9ce73680fa89885ce 100644 (file)
@@ -345,9 +345,12 @@ static inline int dra7xx_pciess_reset(struct omap_hwmod *oh)
 }
 #endif
 
+struct omap_system_dma_plat_info;
+
 void pdata_quirks_init(const struct of_device_id *);
 void omap_auxdata_legacy_init(struct device *dev);
 void omap_pcs_legacy_init(int irq, void (*rearm)(void));
+extern struct omap_system_dma_plat_info dma_plat_info;
 
 struct omap_sdrc_params;
 extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
index 0c105baa5e885c95efb096c833de55f8dded2559..8cc109cc242ad1af1ceb675704b15065c8e3432a 100644 (file)
 #include <linux/omap-dma.h>
 
 #include "soc.h"
-#include "omap_hwmod.h"
-#include "omap_device.h"
-
-static enum omap_reg_offsets dma_common_ch_end;
 
 static const struct omap_dma_reg reg_map[] = {
        [REVISION]      = { 0x0000, 0x00, OMAP_DMA_REG_32BIT },
@@ -81,42 +77,6 @@ static const struct omap_dma_reg reg_map[] = {
        [CCDN]          = { 0x00d8, 0x60, OMAP_DMA_REG_32BIT },
 };
 
-static void __iomem *dma_base;
-static inline void dma_write(u32 val, int reg, int lch)
-{
-       void __iomem *addr = dma_base;
-
-       addr += reg_map[reg].offset;
-       addr += reg_map[reg].stride * lch;
-
-       writel_relaxed(val, addr);
-}
-
-static inline u32 dma_read(int reg, int lch)
-{
-       void __iomem *addr = dma_base;
-
-       addr += reg_map[reg].offset;
-       addr += reg_map[reg].stride * lch;
-
-       return readl_relaxed(addr);
-}
-
-static void omap2_clear_dma(int lch)
-{
-       int i;
-
-       for (i = CSDP; i <= dma_common_ch_end; i += 1)
-               dma_write(0, i, lch);
-}
-
-static void omap2_show_dma_caps(void)
-{
-       u8 revision = dma_read(REVISION, 0) & 0xff;
-       printk(KERN_INFO "OMAP DMA hardware revision %d.%d\n",
-                               revision >> 4, revision & 0xf);
-}
-
 static unsigned configure_dma_errata(void)
 {
        unsigned errata = 0;
@@ -211,82 +171,35 @@ static const struct dma_slave_map omap24xx_sdma_dt_map[] = {
        { "musb-hdrc.1.auto", "dmareq5", SDMA_FILTER_PARAM(64) }, /* OMAP2420 only */
 };
 
-static struct omap_system_dma_plat_info dma_plat_info __initdata = {
-       .reg_map        = reg_map,
-       .channel_stride = 0x60,
-       .show_dma_caps  = omap2_show_dma_caps,
-       .clear_dma      = omap2_clear_dma,
-       .dma_write      = dma_write,
-       .dma_read       = dma_read,
+static struct omap_dma_dev_attr dma_attr = {
+       .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
+                   IS_CSSA_32 | IS_CDSA_32,
+       .lch_count = 32,
 };
 
-static struct platform_device_info omap_dma_dev_info __initdata = {
-       .name = "omap-dma-engine",
-       .id = -1,
-       .dma_mask = DMA_BIT_MASK(32),
+struct omap_system_dma_plat_info dma_plat_info = {
+       .reg_map        = reg_map,
+       .channel_stride = 0x60,
+       .dma_attr       = &dma_attr,
 };
 
 /* One time initializations */
-static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
+static int __init omap2_system_dma_init(void)
 {
-       struct platform_device                  *pdev;
-       struct omap_system_dma_plat_info        p;
-       struct omap_dma_dev_attr                *d;
-       struct resource                         *mem;
-       char                                    *name = "omap_dma_system";
-
-       p = dma_plat_info;
-       p.dma_attr = (struct omap_dma_dev_attr *)oh->dev_attr;
-       p.errata = configure_dma_errata();
+       dma_plat_info.errata = configure_dma_errata();
 
        if (soc_is_omap24xx()) {
                /* DMA slave map for drivers not yet converted to DT */
-               p.slave_map = omap24xx_sdma_dt_map;
-               p.slavecnt = ARRAY_SIZE(omap24xx_sdma_dt_map);
+               dma_plat_info.slave_map = omap24xx_sdma_dt_map;
+               dma_plat_info.slavecnt = ARRAY_SIZE(omap24xx_sdma_dt_map);
        }
 
-       pdev = omap_device_build(name, 0, oh, &p, sizeof(p));
-       if (IS_ERR(pdev)) {
-               pr_err("%s: Can't build omap_device for %s:%s.\n",
-                       __func__, name, oh->name);
-               return PTR_ERR(pdev);
-       }
-
-       omap_dma_dev_info.res = pdev->resource;
-       omap_dma_dev_info.num_res = pdev->num_resources;
+       if (!soc_is_omap242x())
+               dma_attr.dev_caps |= IS_RW_PRIORITY;
 
-       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!mem) {
-               dev_err(&pdev->dev, "%s: no mem resource\n", __func__);
-               return -EINVAL;
-       }
-
-       dma_base = ioremap(mem->start, resource_size(mem));
-       if (!dma_base) {
-               dev_err(&pdev->dev, "%s: ioremap fail\n", __func__);
-               return -ENOMEM;
-       }
-
-       d = oh->dev_attr;
-
-       if (cpu_is_omap34xx() && (omap_type() != OMAP2_DEVICE_TYPE_GP))
-               d->dev_caps |= HS_CHANNELS_RESERVED;
-
-       if (platform_get_irq_byname(pdev, "0") < 0)
-               d->dev_caps |= DMA_ENGINE_HANDLE_IRQ;
-
-       /* Check the capabilities register for descriptor loading feature */
-       if (dma_read(CAPS_0, 0) & DMA_HAS_DESCRIPTOR_CAPS)
-               dma_common_ch_end = CCDN;
-       else
-               dma_common_ch_end = CCFN;
+       if (soc_is_omap34xx() && (omap_type() != OMAP2_DEVICE_TYPE_GP))
+               dma_attr.dev_caps |= HS_CHANNELS_RESERVED;
 
        return 0;
 }
-
-static int __init omap2_system_dma_init(void)
-{
-       return omap_hwmod_for_each_by_class("dma",
-                       omap2_system_dma_init_dev, NULL);
-}
 omap_arch_initcall(omap2_system_dma_init);
index 1d55602b3f8f1d864c21b7f267f2a6d404043f2f..6b4548f3b57f08e26939099189b589d931da70c4 100644 (file)
@@ -373,176 +373,6 @@ void omap_device_delete(struct omap_device *od)
        kfree(od);
 }
 
-/**
- * omap_device_copy_resources - Add legacy IO and IRQ resources
- * @oh: interconnect target module
- * @pdev: platform device to copy resources to
- *
- * We still have legacy DMA and smartreflex needing resources.
- * Let's populate what they need until we can eventually just
- * remove this function. Note that there should be no need to
- * call this from omap_device_build_from_dt(), nor should there
- * be any need to call it for other devices.
- */
-static int
-omap_device_copy_resources(struct omap_hwmod *oh,
-                          struct platform_device *pdev)
-{
-       struct device_node *np, *child;
-       struct property *prop;
-       struct resource *res;
-       const char *name;
-       int error, irq = 0;
-
-       if (!oh || !oh->od || !oh->od->pdev)
-               return -EINVAL;
-
-       np = oh->od->pdev->dev.of_node;
-       if (!np) {
-               error = -ENODEV;
-               goto error;
-       }
-
-       res = kcalloc(2, sizeof(*res), GFP_KERNEL);
-       if (!res)
-               return -ENOMEM;
-
-       /* Do we have a dts range for the interconnect target module? */
-       error = omap_hwmod_parse_module_range(oh, np, res);
-
-       /* No ranges, rely on device reg entry */
-       if (error)
-               error = of_address_to_resource(np, 0, res);
-       if (error)
-               goto free;
-
-       /* SmartReflex needs first IO resource name to be "mpu" */
-       res[0].name = "mpu";
-
-       /*
-        * We may have a configured "ti,sysc" interconnect target with a
-        * dts child with the interrupt. If so use the first child's
-        * first interrupt for "ti-hwmods" legacy support.
-        */
-       of_property_for_each_string(np, "compatible", prop, name)
-               if (!strncmp("ti,sysc-", name, 8))
-                       break;
-
-       child = of_get_next_available_child(np, NULL);
-
-       if (name)
-               irq = irq_of_parse_and_map(child, 0);
-       if (!irq)
-               irq = irq_of_parse_and_map(np, 0);
-       if (!irq) {
-               error = -EINVAL;
-               goto free;
-       }
-
-       /* Legacy DMA code needs interrupt name to be "0" */
-       res[1].start = irq;
-       res[1].end = irq;
-       res[1].flags = IORESOURCE_IRQ;
-       res[1].name = "0";
-
-       error = platform_device_add_resources(pdev, res, 2);
-
-free:
-       kfree(res);
-
-error:
-       WARN(error, "%s: %s device %s failed: %i\n",
-            __func__, oh->name, dev_name(&pdev->dev),
-            error);
-
-       return error;
-}
-
-/**
- * omap_device_build - build and register an omap_device with one omap_hwmod
- * @pdev_name: name of the platform_device driver to use
- * @pdev_id: this platform_device's connection ID
- * @oh: ptr to the single omap_hwmod that backs this omap_device
- * @pdata: platform_data ptr to associate with the platform_device
- * @pdata_len: amount of memory pointed to by @pdata
- *
- * Convenience function for building and registering a single
- * omap_device record, which in turn builds and registers a
- * platform_device record.  See omap_device_build_ss() for more
- * information.  Returns ERR_PTR(-EINVAL) if @oh is NULL; otherwise,
- * passes along the return value of omap_device_build_ss().
- */
-struct platform_device __init *omap_device_build(const char *pdev_name,
-                                                int pdev_id,
-                                                struct omap_hwmod *oh,
-                                                void *pdata, int pdata_len)
-{
-       int ret = -ENOMEM;
-       struct platform_device *pdev;
-       struct omap_device *od;
-
-       if (!oh || !pdev_name)
-               return ERR_PTR(-EINVAL);
-
-       if (!pdata && pdata_len > 0)
-               return ERR_PTR(-EINVAL);
-
-       if (strncmp(oh->name, "smartreflex", 11) &&
-           strncmp(oh->name, "dma", 3)) {
-               pr_warn("%s need to update %s to probe with dt\na",
-                       __func__, pdev_name);
-               ret = -ENODEV;
-               goto odbs_exit;
-       }
-
-       pdev = platform_device_alloc(pdev_name, pdev_id);
-       if (!pdev) {
-               ret = -ENOMEM;
-               goto odbs_exit;
-       }
-
-       /* Set the dev_name early to allow dev_xxx in omap_device_alloc */
-       if (pdev->id != -1)
-               dev_set_name(&pdev->dev, "%s.%d", pdev->name,  pdev->id);
-       else
-               dev_set_name(&pdev->dev, "%s", pdev->name);
-
-       /*
-        * Must be called before omap_device_alloc() as oh->od
-        * only contains the currently registered omap_device
-        * and will get overwritten by omap_device_alloc().
-        */
-       ret = omap_device_copy_resources(oh, pdev);
-       if (ret)
-               goto odbs_exit1;
-
-       od = omap_device_alloc(pdev, &oh, 1);
-       if (IS_ERR(od)) {
-               ret = PTR_ERR(od);
-               goto odbs_exit1;
-       }
-
-       ret = platform_device_add_data(pdev, pdata, pdata_len);
-       if (ret)
-               goto odbs_exit2;
-
-       ret = omap_device_register(pdev);
-       if (ret)
-               goto odbs_exit2;
-
-       return pdev;
-
-odbs_exit2:
-       omap_device_delete(od);
-odbs_exit1:
-       platform_device_put(pdev);
-odbs_exit:
-
-       pr_err("omap_device: %s: build failed (%d)\n", pdev_name, ret);
-
-       return ERR_PTR(ret);
-}
-
 #ifdef CONFIG_PM
 static int _od_runtime_suspend(struct device *dev)
 {
index ced775e401cfec70811db7b6b6c73bfb3243cdf2..f77e76a7841ac0522ef566dea21f9fc9ab2a6c3b 100644 (file)
@@ -68,10 +68,6 @@ int omap_device_idle(struct platform_device *pdev);
 
 /* Core code interface */
 
-struct platform_device *omap_device_build(const char *pdev_name, int pdev_id,
-                                         struct omap_hwmod *oh, void *pdata,
-                                         int pdata_len);
-
 struct omap_device *omap_device_alloc(struct platform_device *pdev,
                                      struct omap_hwmod **ohs, int oh_cnt);
 void omap_device_delete(struct omap_device *od);
index d49df96b4052ae6693163ff8e7e2f5c6091c90c9..b14442cf617957d79a49938b8c601dcaf1d9fb6f 100644 (file)
@@ -11,7 +11,6 @@
  */
 
 #include <linux/platform_data/i2c-omap.h>
-#include <linux/omap-dma.h>
 
 #include "omap_hwmod.h"
 #include "l3_2xxx.h"
@@ -126,21 +125,6 @@ static struct omap_hwmod omap2420_i2c2_hwmod = {
        .flags          = HWMOD_16BIT_REG,
 };
 
-/* dma attributes */
-static struct omap_dma_dev_attr dma_dev_attr = {
-       .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
-                                               IS_CSSA_32 | IS_CDSA_32,
-       .lch_count = 32,
-};
-
-static struct omap_hwmod omap2420_dma_system_hwmod = {
-       .name           = "dma",
-       .class          = &omap2xxx_dma_hwmod_class,
-       .main_clk       = "core_l3_ck",
-       .dev_attr       = &dma_dev_attr,
-       .flags          = HWMOD_NO_IDLEST,
-};
-
 /* mailbox */
 static struct omap_hwmod omap2420_mailbox_hwmod = {
        .name           = "mailbox",
@@ -328,22 +312,6 @@ static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* dma_system -> L3 */
-static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
-       .master         = &omap2420_dma_system_hwmod,
-       .slave          = &omap2xxx_l3_main_hwmod,
-       .clk            = "core_l3_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_core -> dma_system */
-static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
-       .master         = &omap2xxx_l4_core_hwmod,
-       .slave          = &omap2420_dma_system_hwmod,
-       .clk            = "sdma_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l4_core -> mailbox */
 static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
        .master         = &omap2xxx_l4_core_hwmod,
@@ -435,8 +403,6 @@ static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {
        &omap2420_l4_wkup__gpio2,
        &omap2420_l4_wkup__gpio3,
        &omap2420_l4_wkup__gpio4,
-       &omap2420_dma_system__l3,
-       &omap2420_l4_core__dma_system,
        &omap2420_l4_core__mailbox,
        &omap2420_l4_core__mcbsp1,
        &omap2420_l4_core__mcbsp2,
index c51ef84ff64dc5b573672441ec9ecebc9b120fe4..41a37c74f9a684a0a602e52a6507ace9af6d0f95 100644 (file)
@@ -12,7 +12,6 @@
 
 #include <linux/platform_data/i2c-omap.h>
 #include <linux/platform_data/hsmmc-omap.h>
-#include <linux/omap-dma.h>
 
 #include "omap_hwmod.h"
 #include "l3_2xxx.h"
@@ -121,21 +120,6 @@ static struct omap_hwmod omap2430_gpio5_hwmod = {
        .class          = &omap2xxx_gpio_hwmod_class,
 };
 
-/* dma attributes */
-static struct omap_dma_dev_attr dma_dev_attr = {
-       .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
-                               IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
-       .lch_count = 32,
-};
-
-static struct omap_hwmod omap2430_dma_system_hwmod = {
-       .name           = "dma",
-       .class          = &omap2xxx_dma_hwmod_class,
-       .main_clk       = "core_l3_ck",
-       .dev_attr       = &dma_dev_attr,
-       .flags          = HWMOD_NO_IDLEST,
-};
-
 /* mailbox */
 static struct omap_hwmod omap2430_mailbox_hwmod = {
        .name           = "mailbox",
@@ -508,22 +492,6 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* dma_system -> L3 */
-static struct omap_hwmod_ocp_if omap2430_dma_system__l3 = {
-       .master         = &omap2430_dma_system_hwmod,
-       .slave          = &omap2xxx_l3_main_hwmod,
-       .clk            = "core_l3_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_core -> dma_system */
-static struct omap_hwmod_ocp_if omap2430_l4_core__dma_system = {
-       .master         = &omap2xxx_l4_core_hwmod,
-       .slave          = &omap2430_dma_system_hwmod,
-       .clk            = "sdma_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l4_core -> mailbox */
 static struct omap_hwmod_ocp_if omap2430_l4_core__mailbox = {
        .master         = &omap2xxx_l4_core_hwmod,
@@ -635,8 +603,6 @@ static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = {
        &omap2430_l4_wkup__gpio3,
        &omap2430_l4_wkup__gpio4,
        &omap2430_l4_core__gpio5,
-       &omap2430_dma_system__l3,
-       &omap2430_l4_core__dma_system,
        &omap2430_l4_core__mailbox,
        &omap2430_l4_core__mcbsp1,
        &omap2430_l4_core__mcbsp2,
index f767524d06b53ce17847f73981a9de3c8f0736f3..a445704d43d905a2cb130c7caeb4a05a3dd954b2 100644 (file)
@@ -7,7 +7,6 @@
  */
 
 #include <linux/types.h>
-#include <linux/omap-dma.h>
 
 #include "omap_hwmod.h"
 #include "omap_hwmod_common_data.h"
@@ -95,23 +94,6 @@ struct omap_hwmod_class omap2xxx_gpio_hwmod_class = {
        .sysc = &omap2xxx_gpio_sysc,
 };
 
-/* system dma */
-static struct omap_hwmod_class_sysconfig omap2xxx_dma_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x002c,
-       .syss_offs      = 0x0028,
-       .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
-                          SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
-                          SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-struct omap_hwmod_class omap2xxx_dma_hwmod_class = {
-       .name   = "dma",
-       .sysc   = &omap2xxx_dma_sysc,
-};
-
 /*
  * 'mailbox' class
  * mailbox module allowing communication between the on-chip processors
index f52438bdfc141dc83b00de3e4a37f3f560da5587..3c8d2b6e887af4461f882ca7aacb6ce699b446c9 100644 (file)
@@ -16,7 +16,6 @@
 #include <linux/power/smartreflex.h>
 #include <linux/platform_data/hsmmc-omap.h>
 
-#include <linux/omap-dma.h>
 #include "l3_3xxx.h"
 #include "l4_3xxx.h"
 
@@ -833,47 +832,6 @@ static struct omap_hwmod omap3xxx_gpio6_hwmod = {
        .class          = &omap3xxx_gpio_hwmod_class,
 };
 
-/* dma attributes */
-static struct omap_dma_dev_attr dma_dev_attr = {
-       .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
-                               IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
-       .lch_count = 32,
-};
-
-static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x002c,
-       .syss_offs      = 0x0028,
-       .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
-                          SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
-                          SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
-                          SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
-       .name = "dma",
-       .sysc = &omap3xxx_dma_sysc,
-};
-
-/* dma_system */
-static struct omap_hwmod omap3xxx_dma_system_hwmod = {
-       .name           = "dma",
-       .class          = &omap3xxx_dma_hwmod_class,
-       .main_clk       = "core_l3_ick",
-       .prcm = {
-               .omap2 = {
-                       .module_offs            = CORE_MOD,
-                       .idlest_reg_id          = 1,
-                       .idlest_idle_bit        = OMAP3430_ST_SDMA_SHIFT,
-               },
-       },
-       .dev_attr       = &dma_dev_attr,
-       .flags          = HWMOD_NO_IDLEST,
-};
-
 /*
  * 'mcbsp' class
  * multi channel buffered serial port controller
@@ -2233,23 +2191,6 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* dma_system -> L3 */
-static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
-       .master         = &omap3xxx_dma_system_hwmod,
-       .slave          = &omap3xxx_l3_main_hwmod,
-       .clk            = "core_l3_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> dma_system */
-static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
-       .master         = &omap3xxx_l4_core_hwmod,
-       .slave          = &omap3xxx_dma_system_hwmod,
-       .clk            = "core_l4_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-
 /* l4_core -> mcbsp1 */
 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
        .master         = &omap3xxx_l4_core_hwmod,
@@ -2628,8 +2569,6 @@ static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
        &omap3xxx_l4_per__gpio4,
        &omap3xxx_l4_per__gpio5,
        &omap3xxx_l4_per__gpio6,
-       &omap3xxx_dma_system__l3,
-       &omap3xxx_l4_core__dma_system,
        &omap3xxx_l4_core__mcbsp1,
        &omap3xxx_l4_per__mcbsp2,
        &omap3xxx_l4_per__mcbsp3,
index 3ef06da69499bfe4e1516a0042971d8fcacc0ecd..722c641895baa060b68012e378afe98a930a1495 100644 (file)
@@ -18,7 +18,6 @@
  */
 
 #include <linux/io.h>
-#include <linux/omap-dma.h>
 
 #include "omap_hwmod.h"
 #include "omap_hwmod_common_data.h"
@@ -30,9 +29,6 @@
 /* Base offset for all OMAP4 interrupts external to MPUSS */
 #define OMAP44XX_IRQ_GIC_START 32
 
-/* Base offset for all OMAP4 dma requests */
-#define OMAP44XX_DMA_REQ_START 1
-
 /*
  * IP blocks
  */
@@ -359,53 +355,6 @@ static struct omap_hwmod omap44xx_debugss_hwmod = {
        },
 };
 
-/*
- * 'dma' class
- * dma controller for data exchange between memory to memory (i.e. internal or
- * external memory) and gp peripherals to memory or memory to gp peripherals
- */
-
-static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x002c,
-       .syss_offs      = 0x0028,
-       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
-                          SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
-                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
-                          SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
-       .name   = "dma",
-       .sysc   = &omap44xx_dma_sysc,
-};
-
-/* dma dev_attr */
-static struct omap_dma_dev_attr dma_dev_attr = {
-       .dev_caps       = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
-                         IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
-       .lch_count      = 32,
-};
-
-/* dma_system */
-static struct omap_hwmod omap44xx_dma_system_hwmod = {
-       .name           = "dma_system",
-       .class          = &omap44xx_dma_hwmod_class,
-       .clkdm_name     = "l3_dma_clkdm",
-       .main_clk       = "l3_div_ck",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET,
-                       .context_offs = OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET,
-               },
-       },
-       .dev_attr       = &dma_dev_attr,
-};
-
-
 /*
  * 'dsp' class
  * dsp sub-system
@@ -1458,14 +1407,6 @@ static struct omap_hwmod_ocp_if omap44xx_debugss__l3_main_2 = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* dma_system -> l3_main_2 */
-static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
-       .master         = &omap44xx_dma_system_hwmod,
-       .slave          = &omap44xx_l3_main_2_hwmod,
-       .clk            = "l3_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* ipu -> l3_main_2 */
 static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
        .master         = &omap44xx_ipu_hwmod,
@@ -1658,14 +1599,6 @@ static struct omap_hwmod_ocp_if omap44xx_l3_instr__debugss = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_cfg -> dma_system */
-static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
-       .master         = &omap44xx_l4_cfg_hwmod,
-       .slave          = &omap44xx_dma_system_hwmod,
-       .clk            = "l4_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* dsp -> iva */
 static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
        .master         = &omap44xx_dsp_hwmod,
@@ -1966,7 +1899,6 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
        &omap44xx_l4_cfg__l3_main_1,
        &omap44xx_mpu__l3_main_1,
        &omap44xx_debugss__l3_main_2,
-       &omap44xx_dma_system__l3_main_2,
        &omap44xx_ipu__l3_main_2,
        &omap44xx_iss__l3_main_2,
        &omap44xx_iva__l3_main_2,
@@ -1991,7 +1923,6 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
        &omap44xx_l4_wkup__ctrl_module_wkup,
        &omap44xx_l4_wkup__ctrl_module_pad_wkup,
        &omap44xx_l3_instr__debugss,
-       &omap44xx_l4_cfg__dma_system,
        &omap44xx_dsp__iva,
        /* &omap44xx_dsp__sl2if, */
        &omap44xx_l4_cfg__dsp,
index d15454e1d744dc24261975e237260a7a6874fd59..ad398f6bc011b866fca2ba0f33b970f6539c34ad 100644 (file)
@@ -17,8 +17,6 @@
 #include <linux/io.h>
 #include <linux/power/smartreflex.h>
 
-#include <linux/omap-dma.h>
-
 #include "omap_hwmod.h"
 #include "omap_hwmod_common_data.h"
 #include "cm1_54xx.h"
 /* Base offset for all OMAP5 interrupts external to MPUSS */
 #define OMAP54XX_IRQ_GIC_START 32
 
-/* Base offset for all OMAP5 dma requests */
-#define OMAP54XX_DMA_REQ_START 1
-
-
 /*
  * IP blocks
  */
@@ -232,53 +226,6 @@ static struct omap_hwmod omap54xx_counter_32k_hwmod = {
        },
 };
 
-/*
- * 'dma' class
- * dma controller for data exchange between memory to memory (i.e. internal or
- * external memory) and gp peripherals to memory or memory to gp peripherals
- */
-
-static struct omap_hwmod_class_sysconfig omap54xx_dma_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x002c,
-       .syss_offs      = 0x0028,
-       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
-                          SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
-                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
-                          SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class omap54xx_dma_hwmod_class = {
-       .name   = "dma",
-       .sysc   = &omap54xx_dma_sysc,
-};
-
-/* dma dev_attr */
-static struct omap_dma_dev_attr dma_dev_attr = {
-       .dev_caps       = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
-                         IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
-       .lch_count      = 32,
-};
-
-/* dma_system */
-static struct omap_hwmod omap54xx_dma_system_hwmod = {
-       .name           = "dma_system",
-       .class          = &omap54xx_dma_hwmod_class,
-       .clkdm_name     = "dma_clkdm",
-       .main_clk       = "l3_iclk_div",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET,
-                       .context_offs = OMAP54XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET,
-               },
-       },
-       .dev_attr       = &dma_dev_attr,
-};
-
-
 /*
  * 'dss' class
  * display sub-system
@@ -961,14 +908,6 @@ static struct omap_hwmod_ocp_if omap54xx_l4_wkup__counter_32k = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_cfg -> dma_system */
-static struct omap_hwmod_ocp_if omap54xx_l4_cfg__dma_system = {
-       .master         = &omap54xx_l4_cfg_hwmod,
-       .slave          = &omap54xx_dma_system_hwmod,
-       .clk            = "l4_root_clk_div",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l3_main_2 -> dss */
 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss = {
        .master         = &omap54xx_l3_main_2_hwmod,
@@ -1091,7 +1030,6 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
        &omap54xx_l3_main_1__l4_wkup,
        &omap54xx_mpu__mpu_private,
        &omap54xx_l4_wkup__counter_32k,
-       &omap54xx_l4_cfg__dma_system,
        &omap54xx_l3_main_2__dss,
        &omap54xx_l3_main_2__dss_dispc,
        &omap54xx_l3_main_2__dss_dsi1_a,
index f58dfbe9862c21b3b1de2a6b26c530b1c13e95dd..acef3733db4c6b6c677db8456755e350d961c91b 100644 (file)
@@ -15,7 +15,6 @@
  */
 
 #include <linux/io.h>
-#include <linux/omap-dma.h>
 
 #include "omap_hwmod.h"
 #include "omap_hwmod_common_data.h"
 /* Base offset for all DRA7XX interrupts external to MPUSS */
 #define DRA7XX_IRQ_GIC_START   32
 
-/* Base offset for all DRA7XX dma requests */
-#define DRA7XX_DMA_REQ_START   1
-
-
 /*
  * IP blocks
  */
@@ -281,52 +276,6 @@ static struct omap_hwmod dra7xx_ctrl_module_wkup_hwmod = {
        },
 };
 
-/*
- * 'dma' class
- *
- */
-
-static struct omap_hwmod_class_sysconfig dra7xx_dma_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x002c,
-       .syss_offs      = 0x0028,
-       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
-                          SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
-                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
-                          SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
-                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class dra7xx_dma_hwmod_class = {
-       .name   = "dma",
-       .sysc   = &dra7xx_dma_sysc,
-};
-
-/* dma dev_attr */
-static struct omap_dma_dev_attr dma_dev_attr = {
-       .dev_caps       = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
-                         IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
-       .lch_count      = 32,
-};
-
-/* dma_system */
-static struct omap_hwmod dra7xx_dma_system_hwmod = {
-       .name           = "dma_system",
-       .class          = &dra7xx_dma_hwmod_class,
-       .clkdm_name     = "dma_clkdm",
-       .main_clk       = "l3_iclk_div",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = DRA7XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET,
-                       .context_offs = DRA7XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET,
-               },
-       },
-       .dev_attr       = &dma_dev_attr,
-};
-
 /*
  * 'tpcc' class
  *
@@ -1128,14 +1077,6 @@ static struct omap_hwmod_ocp_if dra7xx_l4_wkup__ctrl_module_wkup = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_cfg -> dma_system */
-static struct omap_hwmod_ocp_if dra7xx_l4_cfg__dma_system = {
-       .master         = &dra7xx_l4_cfg_hwmod,
-       .slave          = &dra7xx_dma_system_hwmod,
-       .clk            = "l3_iclk_div",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l3_main_1 -> tpcc */
 static struct omap_hwmod_ocp_if dra7xx_l3_main_1__tpcc = {
        .master         = &dra7xx_l3_main_1_hwmod,
@@ -1368,7 +1309,6 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {
        &dra7xx_l3_main_1__bb2d,
        &dra7xx_l4_wkup__counter_32k,
        &dra7xx_l4_wkup__ctrl_module_wkup,
-       &dra7xx_l4_cfg__dma_system,
        &dra7xx_l3_main_1__tpcc,
        &dra7xx_l3_main_1__tptc0,
        &dra7xx_l3_main_1__tptc1,
index ca56563e3fec4e198eb8c44a405d8d36e3344c27..c85cb8b5831cdbff5a8d241ac76ce84b83b7b13c 100644 (file)
@@ -98,7 +98,6 @@ extern struct omap_hwmod_class omap2_hdq1w_class;
 extern struct omap_hwmod_class omap2xxx_timer_hwmod_class;
 extern struct omap_hwmod_class omap2xxx_wd_timer_hwmod_class;
 extern struct omap_hwmod_class omap2xxx_gpio_hwmod_class;
-extern struct omap_hwmod_class omap2xxx_dma_hwmod_class;
 extern struct omap_hwmod_class omap2xxx_mailbox_hwmod_class;
 extern struct omap_hwmod_class omap2xxx_mcspi_class;
 
index e95c224ffc4d876d38f7b2ab5d07c2a1ed61ec59..922ee10a1630690cb1527c243b3e0f0f149c5002 100644 (file)
@@ -514,6 +514,7 @@ static struct of_dev_auxdata omap_auxdata_lookup[] = {
        /* Common auxdata */
        OF_DEV_AUXDATA("ti,sysc", 0, NULL, &ti_sysc_pdata),
        OF_DEV_AUXDATA("pinctrl-single", 0, NULL, &pcs_pdata),
+       OF_DEV_AUXDATA("ti,omap-sdma", 0, NULL, &dma_plat_info),
        { /* sentinel */ },
 };
 
index 1581b6a6a416c9ddd477376ab279f2956b017bd8..6953c47d8dc6816042999650ec0d53c7a792d4ee 100644 (file)
@@ -83,8 +83,6 @@ static int omap2_enter_full_retention(void)
        l = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0) | OMAP24XX_USBSTANDBYCTRL;
        omap_ctrl_writel(l, OMAP2_CONTROL_DEVCONF0);
 
-       cpu_cluster_pm_enter();
-
        /* One last check for pending IRQs to avoid extra latency due
         * to sleeping unnecessarily. */
        if (omap_irq_pending())
@@ -96,8 +94,6 @@ static int omap2_enter_full_retention(void)
                           OMAP_SDRC_REGADDR(SDRC_POWER));
 
 no_sleep:
-       cpu_cluster_pm_exit();
-
        clk_enable(osc_ck);
 
        /* clear CORE wake-up events */
@@ -162,25 +158,27 @@ static int omap2_can_sleep(void)
                return 0;
        if (__clk_is_enabled(osc_ck))
                return 0;
-       if (omap_dma_running())
-               return 0;
 
        return 1;
 }
 
 static void omap2_pm_idle(void)
 {
-       if (!omap2_can_sleep()) {
-               if (omap_irq_pending())
-                       return;
-               omap2_enter_mpu_retention();
-               return;
-       }
+       int error;
 
        if (omap_irq_pending())
                return;
 
+       error = cpu_cluster_pm_enter();
+       if (error || !omap2_can_sleep()) {
+               omap2_enter_mpu_retention();
+               goto out_cpu_cluster_pm;
+       }
+
        omap2_enter_full_retention();
+
+out_cpu_cluster_pm:
+       cpu_cluster_pm_exit();
 }
 
 static void __init prcm_setup_regs(void)
index 54254fc92c2ed93488b672116c27b4d0defe764f..e66e9948636cb37a0493d2cd3c91397642b19618 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
-#include <linux/omap-dma.h>
 #include <linux/omap-gpmc.h>
 
 #include <trace/events/power.h>
@@ -85,7 +84,6 @@ static void omap3_core_save_context(void)
        omap3_gpmc_save_context();
        /* Save the system control module context, padconf already save above*/
        omap3_control_save_context();
-       omap_dma_global_context_save();
 }
 
 static void omap3_core_restore_context(void)
@@ -96,7 +94,6 @@ static void omap3_core_restore_context(void)
        omap3_gpmc_restore_context();
        /* Restore the interrupt controller context */
        omap_intc_restore_context();
-       omap_dma_global_context_restore();
 }
 
 /*
@@ -547,9 +544,7 @@ int __init omap3_pm_init(void)
 
                local_irq_disable();
 
-               omap_dma_global_context_save();
                omap3_save_secure_ram_context();
-               omap_dma_global_context_restore();
 
                local_irq_enable();
        }
index 08c99413d02caac340f9855ebd162a59ac1126ed..7d859994ff9517631615f235b8b8fd5f8cb6d0e8 100644 (file)
@@ -65,18 +65,9 @@ enum { DMA_CHAIN_STARTED, DMA_CHAIN_NOTSTARTED };
 static struct omap_system_dma_plat_info *p;
 static struct omap_dma_dev_attr *d;
 static void omap_clear_dma(int lch);
-static int omap_dma_set_prio_lch(int lch, unsigned char read_prio,
-                                unsigned char write_prio);
 static int enable_1510_mode;
 static u32 errata;
 
-static struct omap_dma_global_context_registers {
-       u32 dma_irqenable_l0;
-       u32 dma_irqenable_l1;
-       u32 dma_ocp_sysconfig;
-       u32 dma_gcr;
-} omap_dma_global_context;
-
 struct dma_link_info {
        int *linked_dmach_q;
        int no_of_lchs_linked;
@@ -90,42 +81,6 @@ struct dma_link_info {
 
 };
 
-static struct dma_link_info *dma_linked_lch;
-
-#ifndef CONFIG_ARCH_OMAP1
-
-/* Chain handling macros */
-#define OMAP_DMA_CHAIN_QINIT(chain_id)                                 \
-       do {                                                            \
-               dma_linked_lch[chain_id].q_head =                       \
-               dma_linked_lch[chain_id].q_tail =                       \
-               dma_linked_lch[chain_id].q_count = 0;                   \
-       } while (0)
-#define OMAP_DMA_CHAIN_QFULL(chain_id)                                 \
-               (dma_linked_lch[chain_id].no_of_lchs_linked ==          \
-               dma_linked_lch[chain_id].q_count)
-#define OMAP_DMA_CHAIN_QLAST(chain_id)                                 \
-       do {                                                            \
-               ((dma_linked_lch[chain_id].no_of_lchs_linked-1) ==      \
-               dma_linked_lch[chain_id].q_count)                       \
-       } while (0)
-#define OMAP_DMA_CHAIN_QEMPTY(chain_id)                                        \
-               (0 == dma_linked_lch[chain_id].q_count)
-#define __OMAP_DMA_CHAIN_INCQ(end)                                     \
-       ((end) = ((end)+1) % dma_linked_lch[chain_id].no_of_lchs_linked)
-#define OMAP_DMA_CHAIN_INCQHEAD(chain_id)                              \
-       do {                                                            \
-               __OMAP_DMA_CHAIN_INCQ(dma_linked_lch[chain_id].q_head); \
-               dma_linked_lch[chain_id].q_count--;                     \
-       } while (0)
-
-#define OMAP_DMA_CHAIN_INCQTAIL(chain_id)                              \
-       do {                                                            \
-               __OMAP_DMA_CHAIN_INCQ(dma_linked_lch[chain_id].q_tail); \
-               dma_linked_lch[chain_id].q_count++; \
-       } while (0)
-#endif
-
 static int dma_lch_count;
 static int dma_chan_count;
 static int omap_dma_reserve_channels;
@@ -137,9 +92,6 @@ static inline void disable_lnk(int lch);
 static void omap_disable_channel_irq(int lch);
 static inline void omap_enable_channel_irq(int lch);
 
-#define REVISIT_24XX()         printk(KERN_ERR "FIXME: no %s on 24xx\n", \
-                                               __func__);
-
 #ifdef CONFIG_ARCH_OMAP15XX
 /* Returns 1 if the DMA module is in OMAP1510-compatible mode, 0 otherwise */
 static int omap_dma_in_1510_mode(void)
@@ -278,19 +230,6 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count,
 }
 EXPORT_SYMBOL(omap_set_dma_transfer_params);
 
-void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode)
-{
-       if (dma_omap2plus()) {
-               u32 csdp;
-
-               csdp = p->dma_read(CSDP, lch);
-               csdp &= ~(0x3 << 16);
-               csdp |= (mode << 16);
-               p->dma_write(csdp, CSDP, lch);
-       }
-}
-EXPORT_SYMBOL(omap_set_dma_write_mode);
-
 void omap_set_dma_channel_mode(int lch, enum omap_dma_channel_mode mode)
 {
        if (dma_omap1() && !dma_omap15xx()) {
@@ -332,25 +271,6 @@ void omap_set_dma_src_params(int lch, int src_port, int src_amode,
 }
 EXPORT_SYMBOL(omap_set_dma_src_params);
 
-void omap_set_dma_params(int lch, struct omap_dma_channel_params *params)
-{
-       omap_set_dma_transfer_params(lch, params->data_type,
-                                    params->elem_count, params->frame_count,
-                                    params->sync_mode, params->trigger,
-                                    params->src_or_dst_synch);
-       omap_set_dma_src_params(lch, params->src_port,
-                               params->src_amode, params->src_start,
-                               params->src_ei, params->src_fi);
-
-       omap_set_dma_dest_params(lch, params->dst_port,
-                                params->dst_amode, params->dst_start,
-                                params->dst_ei, params->dst_fi);
-       if (params->read_prio || params->write_prio)
-               omap_dma_set_prio_lch(lch, params->read_prio,
-                                     params->write_prio);
-}
-EXPORT_SYMBOL(omap_set_dma_params);
-
 void omap_set_dma_src_data_pack(int lch, int enable)
 {
        u32 l;
@@ -507,12 +427,6 @@ static inline void omap_disable_channel_irq(int lch)
                p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch);
 }
 
-void omap_enable_dma_irq(int lch, u16 bits)
-{
-       dma_chan[lch].enabled_irqs |= bits;
-}
-EXPORT_SYMBOL(omap_enable_dma_irq);
-
 void omap_disable_dma_irq(int lch, u16 bits)
 {
        dma_chan[lch].enabled_irqs &= ~bits;
@@ -532,12 +446,6 @@ static inline void enable_lnk(int lch)
        if (dma_chan[lch].next_lch != -1)
                l = dma_chan[lch].next_lch | (1 << 15);
 
-#ifndef CONFIG_ARCH_OMAP1
-       if (dma_omap2plus())
-               if (dma_chan[lch].next_linked_ch != -1)
-                       l = dma_chan[lch].next_linked_ch | (1 << 15);
-#endif
-
        p->dma_write(l, CLNK_CTRL, lch);
 }
 
@@ -564,42 +472,6 @@ static inline void disable_lnk(int lch)
        dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE;
 }
 
-static inline void omap2_enable_irq_lch(int lch)
-{
-       u32 val;
-       unsigned long flags;
-
-       if (dma_omap1())
-               return;
-
-       spin_lock_irqsave(&dma_chan_lock, flags);
-       /* clear IRQ STATUS */
-       p->dma_write(1 << lch, IRQSTATUS_L0, lch);
-       /* Enable interrupt */
-       val = p->dma_read(IRQENABLE_L0, lch);
-       val |= 1 << lch;
-       p->dma_write(val, IRQENABLE_L0, lch);
-       spin_unlock_irqrestore(&dma_chan_lock, flags);
-}
-
-static inline void omap2_disable_irq_lch(int lch)
-{
-       u32 val;
-       unsigned long flags;
-
-       if (dma_omap1())
-               return;
-
-       spin_lock_irqsave(&dma_chan_lock, flags);
-       /* Disable interrupt */
-       val = p->dma_read(IRQENABLE_L0, lch);
-       val &= ~(1 << lch);
-       p->dma_write(val, IRQENABLE_L0, lch);
-       /* clear IRQ STATUS */
-       p->dma_write(1 << lch, IRQSTATUS_L0, lch);
-       spin_unlock_irqrestore(&dma_chan_lock, flags);
-}
-
 int omap_request_dma(int dev_id, const char *dev_name,
                     void (*callback)(int lch, u16 ch_status, void *data),
                     void *data, int *dma_ch_out)
@@ -628,9 +500,6 @@ int omap_request_dma(int dev_id, const char *dev_name,
        if (p->clear_lch_regs)
                p->clear_lch_regs(free_ch);
 
-       if (dma_omap2plus())
-               omap_clear_dma(free_ch);
-
        spin_unlock_irqrestore(&dma_chan_lock, flags);
 
        chan->dev_name = dev_name;
@@ -638,20 +507,10 @@ int omap_request_dma(int dev_id, const char *dev_name,
        chan->data = data;
        chan->flags = 0;
 
-#ifndef CONFIG_ARCH_OMAP1
-       if (dma_omap2plus()) {
-               chan->chain_id = -1;
-               chan->next_linked_ch = -1;
-       }
-#endif
-
        chan->enabled_irqs = OMAP_DMA_DROP_IRQ | OMAP_DMA_BLOCK_IRQ;
 
        if (dma_omap1())
                chan->enabled_irqs |= OMAP1_DMA_TOUT_IRQ;
-       else if (dma_omap2plus())
-               chan->enabled_irqs |= OMAP2_DMA_MISALIGNED_ERR_IRQ |
-                       OMAP2_DMA_TRANS_ERR_IRQ;
 
        if (dma_omap16xx()) {
                /* If the sync device is set, configure it dynamically. */
@@ -668,11 +527,6 @@ int omap_request_dma(int dev_id, const char *dev_name,
                p->dma_write(dev_id, CCR, free_ch);
        }
 
-       if (dma_omap2plus()) {
-               omap_enable_channel_irq(free_ch);
-               omap2_enable_irq_lch(free_ch);
-       }
-
        *dma_ch_out = free_ch;
 
        return 0;
@@ -689,20 +543,12 @@ void omap_free_dma(int lch)
                return;
        }
 
-       /* Disable interrupt for logical channel */
-       if (dma_omap2plus())
-               omap2_disable_irq_lch(lch);
-
        /* Disable all DMA interrupts for the channel. */
        omap_disable_channel_irq(lch);
 
        /* Make sure the DMA transfer is stopped. */
        p->dma_write(0, CCR, lch);
 
-       /* Clear registers */
-       if (dma_omap2plus())
-               omap_clear_dma(lch);
-
        spin_lock_irqsave(&dma_chan_lock, flags);
        dma_chan[lch].dev_id = -1;
        dma_chan[lch].next_lch = -1;
@@ -711,71 +557,6 @@ void omap_free_dma(int lch)
 }
 EXPORT_SYMBOL(omap_free_dma);
 
-/**
- * @brief omap_dma_set_global_params : Set global priority settings for dma
- *
- * @param arb_rate
- * @param max_fifo_depth
- * @param tparams - Number of threads to reserve : DMA_THREAD_RESERVE_NORM
- *                                                DMA_THREAD_RESERVE_ONET
- *                                                DMA_THREAD_RESERVE_TWOT
- *                                                DMA_THREAD_RESERVE_THREET
- */
-void
-omap_dma_set_global_params(int arb_rate, int max_fifo_depth, int tparams)
-{
-       u32 reg;
-
-       if (dma_omap1()) {
-               printk(KERN_ERR "FIXME: no %s on 15xx/16xx\n", __func__);
-               return;
-       }
-
-       if (max_fifo_depth == 0)
-               max_fifo_depth = 1;
-       if (arb_rate == 0)
-               arb_rate = 1;
-
-       reg = 0xff & max_fifo_depth;
-       reg |= (0x3 & tparams) << 12;
-       reg |= (arb_rate & 0xff) << 16;
-
-       p->dma_write(reg, GCR, 0);
-}
-EXPORT_SYMBOL(omap_dma_set_global_params);
-
-/**
- * @brief omap_dma_set_prio_lch : Set channel wise priority settings
- *
- * @param lch
- * @param read_prio - Read priority
- * @param write_prio - Write priority
- * Both of the above can be set with one of the following values :
- *     DMA_CH_PRIO_HIGH/DMA_CH_PRIO_LOW
- */
-static int
-omap_dma_set_prio_lch(int lch, unsigned char read_prio,
-                     unsigned char write_prio)
-{
-       u32 l;
-
-       if (unlikely((lch < 0 || lch >= dma_lch_count))) {
-               printk(KERN_ERR "Invalid channel id\n");
-               return -EINVAL;
-       }
-       l = p->dma_read(CCR, lch);
-       l &= ~((1 << 6) | (1 << 26));
-       if (d->dev_caps & IS_RW_PRIORITY)
-               l |= ((read_prio & 0x1) << 6) | ((write_prio & 0x1) << 26);
-       else
-               l |= ((read_prio & 0x1) << 6);
-
-       p->dma_write(l, CCR, lch);
-
-       return 0;
-}
-
-
 /*
  * Clears any DMA state so the DMA engine is ready to restart with new buffers
  * through omap_start_dma(). Any buffers in flight are discarded.
@@ -926,29 +707,6 @@ EXPORT_SYMBOL(omap_stop_dma);
  * Allows changing the DMA callback function or data. This may be needed if
  * the driver shares a single DMA channel for multiple dma triggers.
  */
-int omap_set_dma_callback(int lch,
-                         void (*callback)(int lch, u16 ch_status, void *data),
-                         void *data)
-{
-       unsigned long flags;
-
-       if (lch < 0)
-               return -ENODEV;
-
-       spin_lock_irqsave(&dma_chan_lock, flags);
-       if (dma_chan[lch].dev_id == -1) {
-               printk(KERN_ERR "DMA callback for not set for free channel\n");
-               spin_unlock_irqrestore(&dma_chan_lock, flags);
-               return -EINVAL;
-       }
-       dma_chan[lch].callback = callback;
-       dma_chan[lch].data = data;
-       spin_unlock_irqrestore(&dma_chan_lock, flags);
-
-       return 0;
-}
-EXPORT_SYMBOL(omap_set_dma_callback);
-
 /*
  * Returns current physical source address for the given DMA channel.
  * If the channel is running the caller must disable interrupts prior calling
@@ -1048,34 +806,6 @@ int omap_dma_running(void)
        return 0;
 }
 
-/*
- * lch_queue DMA will start right after lch_head one is finished.
- * For this DMA link to start, you still need to start (see omap_start_dma)
- * the first one. That will fire up the entire queue.
- */
-void omap_dma_link_lch(int lch_head, int lch_queue)
-{
-       if (omap_dma_in_1510_mode()) {
-               if (lch_head == lch_queue) {
-                       p->dma_write(p->dma_read(CCR, lch_head) | (3 << 8),
-                                                               CCR, lch_head);
-                       return;
-               }
-               printk(KERN_ERR "DMA linking is not supported in 1510 mode\n");
-               BUG();
-               return;
-       }
-
-       if ((dma_chan[lch_head].dev_id == -1) ||
-           (dma_chan[lch_queue].dev_id == -1)) {
-               pr_err("omap_dma: trying to link non requested channels\n");
-               dump_stack();
-       }
-
-       dma_chan[lch_head].next_lch = lch_queue;
-}
-EXPORT_SYMBOL(omap_dma_link_lch);
-
 /*----------------------------------------------------------------------------*/
 
 #ifdef CONFIG_ARCH_OMAP1
@@ -1136,145 +866,6 @@ static irqreturn_t omap1_dma_irq_handler(int irq, void *dev_id)
 #define omap1_dma_irq_handler  NULL
 #endif
 
-#ifdef CONFIG_ARCH_OMAP2PLUS
-
-static int omap2_dma_handle_ch(int ch)
-{
-       u32 status = p->dma_read(CSR, ch);
-
-       if (!status) {
-               if (printk_ratelimit())
-                       pr_warn("Spurious DMA IRQ for lch %d\n", ch);
-               p->dma_write(1 << ch, IRQSTATUS_L0, ch);
-               return 0;
-       }
-       if (unlikely(dma_chan[ch].dev_id == -1)) {
-               if (printk_ratelimit())
-                       pr_warn("IRQ %04x for non-allocated DMA channel %d\n",
-                               status, ch);
-               return 0;
-       }
-       if (unlikely(status & OMAP_DMA_DROP_IRQ))
-               pr_info("DMA synchronization event drop occurred with device %d\n",
-                       dma_chan[ch].dev_id);
-       if (unlikely(status & OMAP2_DMA_TRANS_ERR_IRQ)) {
-               printk(KERN_INFO "DMA transaction error with device %d\n",
-                      dma_chan[ch].dev_id);
-               if (IS_DMA_ERRATA(DMA_ERRATA_i378)) {
-                       u32 ccr;
-
-                       ccr = p->dma_read(CCR, ch);
-                       ccr &= ~OMAP_DMA_CCR_EN;
-                       p->dma_write(ccr, CCR, ch);
-                       dma_chan[ch].flags &= ~OMAP_DMA_ACTIVE;
-               }
-       }
-       if (unlikely(status & OMAP2_DMA_SECURE_ERR_IRQ))
-               printk(KERN_INFO "DMA secure error with device %d\n",
-                      dma_chan[ch].dev_id);
-       if (unlikely(status & OMAP2_DMA_MISALIGNED_ERR_IRQ))
-               printk(KERN_INFO "DMA misaligned error with device %d\n",
-                      dma_chan[ch].dev_id);
-
-       p->dma_write(status, CSR, ch);
-       p->dma_write(1 << ch, IRQSTATUS_L0, ch);
-       /* read back the register to flush the write */
-       p->dma_read(IRQSTATUS_L0, ch);
-
-       /* If the ch is not chained then chain_id will be -1 */
-       if (dma_chan[ch].chain_id != -1) {
-               int chain_id = dma_chan[ch].chain_id;
-               dma_chan[ch].state = DMA_CH_NOTSTARTED;
-               if (p->dma_read(CLNK_CTRL, ch) & (1 << 15))
-                       dma_chan[dma_chan[ch].next_linked_ch].state =
-                                                       DMA_CH_STARTED;
-               if (dma_linked_lch[chain_id].chain_mode ==
-                                               OMAP_DMA_DYNAMIC_CHAIN)
-                       disable_lnk(ch);
-
-               if (!OMAP_DMA_CHAIN_QEMPTY(chain_id))
-                       OMAP_DMA_CHAIN_INCQHEAD(chain_id);
-
-               status = p->dma_read(CSR, ch);
-               p->dma_write(status, CSR, ch);
-       }
-
-       if (likely(dma_chan[ch].callback != NULL))
-               dma_chan[ch].callback(ch, status, dma_chan[ch].data);
-
-       return 0;
-}
-
-/* STATUS register count is from 1-32 while our is 0-31 */
-static irqreturn_t omap2_dma_irq_handler(int irq, void *dev_id)
-{
-       u32 val, enable_reg;
-       int i;
-
-       val = p->dma_read(IRQSTATUS_L0, 0);
-       if (val == 0) {
-               if (printk_ratelimit())
-                       printk(KERN_WARNING "Spurious DMA IRQ\n");
-               return IRQ_HANDLED;
-       }
-       enable_reg = p->dma_read(IRQENABLE_L0, 0);
-       val &= enable_reg; /* Dispatch only relevant interrupts */
-       for (i = 0; i < dma_lch_count && val != 0; i++) {
-               if (val & 1)
-                       omap2_dma_handle_ch(i);
-               val >>= 1;
-       }
-
-       return IRQ_HANDLED;
-}
-
-static struct irqaction omap24xx_dma_irq = {
-       .name = "DMA",
-       .handler = omap2_dma_irq_handler,
-};
-
-#else
-static struct irqaction omap24xx_dma_irq;
-#endif
-
-/*----------------------------------------------------------------------------*/
-
-/*
- * Note that we are currently using only IRQENABLE_L0 and L1.
- * As the DSP may be using IRQENABLE_L2 and L3, let's not
- * touch those for now.
- */
-void omap_dma_global_context_save(void)
-{
-       omap_dma_global_context.dma_irqenable_l0 =
-               p->dma_read(IRQENABLE_L0, 0);
-       omap_dma_global_context.dma_irqenable_l1 =
-               p->dma_read(IRQENABLE_L1, 0);
-       omap_dma_global_context.dma_ocp_sysconfig =
-               p->dma_read(OCP_SYSCONFIG, 0);
-       omap_dma_global_context.dma_gcr = p->dma_read(GCR, 0);
-}
-
-void omap_dma_global_context_restore(void)
-{
-       int ch;
-
-       p->dma_write(omap_dma_global_context.dma_gcr, GCR, 0);
-       p->dma_write(omap_dma_global_context.dma_ocp_sysconfig,
-               OCP_SYSCONFIG, 0);
-       p->dma_write(omap_dma_global_context.dma_irqenable_l0,
-               IRQENABLE_L0, 0);
-       p->dma_write(omap_dma_global_context.dma_irqenable_l1,
-               IRQENABLE_L1, 0);
-
-       if (IS_DMA_ERRATA(DMA_ROMCODE_BUG))
-               p->dma_write(0x3 , IRQSTATUS_L0, 0);
-
-       for (ch = 0; ch < dma_chan_count; ch++)
-               if (dma_chan[ch].dev_id != -1)
-                       omap_clear_dma(ch);
-}
-
 struct omap_system_dma_plat_info *omap_get_plat_info(void)
 {
        return p;
@@ -1286,7 +877,6 @@ static int omap_system_dma_probe(struct platform_device *pdev)
        int ch, ret = 0;
        int dma_irq;
        char irq_name[4];
-       int irq_rel;
 
        p = pdev->dev.platform_data;
        if (!p) {
@@ -1312,21 +902,9 @@ static int omap_system_dma_probe(struct platform_device *pdev)
        if (!dma_chan)
                return -ENOMEM;
 
-       if (dma_omap2plus()) {
-               dma_linked_lch = kcalloc(dma_lch_count,
-                                        sizeof(*dma_linked_lch),
-                                        GFP_KERNEL);
-               if (!dma_linked_lch) {
-                       ret = -ENOMEM;
-                       goto exit_dma_lch_fail;
-               }
-       }
-
        spin_lock_init(&dma_chan_lock);
        for (ch = 0; ch < dma_chan_count; ch++) {
                omap_clear_dma(ch);
-               if (dma_omap2plus())
-                       omap2_disable_irq_lch(ch);
 
                dma_chan[ch].dev_id = -1;
                dma_chan[ch].next_lch = -1;
@@ -1359,26 +937,6 @@ static int omap_system_dma_probe(struct platform_device *pdev)
                }
        }
 
-       if (d->dev_caps & IS_RW_PRIORITY)
-               omap_dma_set_global_params(DMA_DEFAULT_ARB_RATE,
-                               DMA_DEFAULT_FIFO_DEPTH, 0);
-
-       if (dma_omap2plus() && !(d->dev_caps & DMA_ENGINE_HANDLE_IRQ)) {
-               strcpy(irq_name, "0");
-               dma_irq = platform_get_irq_byname(pdev, irq_name);
-               if (dma_irq < 0) {
-                       dev_err(&pdev->dev, "failed: request IRQ %d", dma_irq);
-                       ret = dma_irq;
-                       goto exit_dma_lch_fail;
-               }
-               ret = setup_irq(dma_irq, &omap24xx_dma_irq);
-               if (ret) {
-                       dev_err(&pdev->dev, "set_up failed for IRQ %d for DMA (error %d)\n",
-                               dma_irq, ret);
-                       goto exit_dma_lch_fail;
-               }
-       }
-
        /* reserve dma channels 0 and 1 in high security devices on 34xx */
        if (d->dev_caps & HS_CHANNELS_RESERVED) {
                pr_info("Reserving DMA channels 0 and 1 for HS ROM code\n");
@@ -1389,34 +947,21 @@ static int omap_system_dma_probe(struct platform_device *pdev)
        return 0;
 
 exit_dma_irq_fail:
-       dev_err(&pdev->dev, "unable to request IRQ %d for DMA (error %d)\n",
-               dma_irq, ret);
-       for (irq_rel = 0; irq_rel < ch; irq_rel++) {
-               dma_irq = platform_get_irq(pdev, irq_rel);
-               free_irq(dma_irq, (void *)(irq_rel + 1));
-       }
-
-exit_dma_lch_fail:
        return ret;
 }
 
 static int omap_system_dma_remove(struct platform_device *pdev)
 {
-       int dma_irq;
+       int dma_irq, irq_rel = 0;
 
-       if (dma_omap2plus()) {
-               char irq_name[4];
-               strcpy(irq_name, "0");
-               dma_irq = platform_get_irq_byname(pdev, irq_name);
-               if (dma_irq >= 0)
-                       remove_irq(dma_irq, &omap24xx_dma_irq);
-       } else {
-               int irq_rel = 0;
-               for ( ; irq_rel < dma_chan_count; irq_rel++) {
-                       dma_irq = platform_get_irq(pdev, irq_rel);
-                       free_irq(dma_irq, (void *)(irq_rel + 1));
-               }
+       if (dma_omap2plus())
+               return 0;
+
+       for ( ; irq_rel < dma_chan_count; irq_rel++) {
+               dma_irq = platform_get_irq(pdev, irq_rel);
+               free_irq(dma_irq, (void *)(irq_rel + 1));
        }
+
        return 0;
 }
 
index 6b6ba238b81a756b8e2e8b5c41154283a94531af..fc8f7b2fc7b331d907e27d27deffa2e0dd45ba78 100644 (file)
@@ -2,6 +2,7 @@
 /*
  * OMAP DMAengine support
  */
+#include <linux/cpu_pm.h>
 #include <linux/delay.h>
 #include <linux/dmaengine.h>
 #include <linux/dma-mapping.h>
 #define OMAP_SDMA_REQUESTS     127
 #define OMAP_SDMA_CHANNELS     32
 
+struct omap_dma_config {
+       int lch_end;
+       unsigned int rw_priority:1;
+       unsigned int needs_busy_check:1;
+       unsigned int may_lose_context:1;
+       unsigned int needs_lch_clear:1;
+};
+
+struct omap_dma_context {
+       u32 irqenable_l0;
+       u32 irqenable_l1;
+       u32 ocp_sysconfig;
+       u32 gcr;
+};
+
 struct omap_dmadev {
        struct dma_device ddev;
        spinlock_t lock;
        void __iomem *base;
        const struct omap_dma_reg *reg_map;
        struct omap_system_dma_plat_info *plat;
+       const struct omap_dma_config *cfg;
+       struct notifier_block nb;
+       struct omap_dma_context context;
+       int lch_count;
+       DECLARE_BITMAP(lch_bitmap, OMAP_SDMA_CHANNELS);
+       struct mutex lch_lock;          /* for assigning logical channels */
        bool legacy;
        bool ll123_supported;
        struct dma_pool *desc_pool;
@@ -376,6 +398,19 @@ static unsigned omap_dma_get_csr(struct omap_chan *c)
        return val;
 }
 
+static void omap_dma_clear_lch(struct omap_dmadev *od, int lch)
+{
+       struct omap_chan *c;
+       int i;
+
+       c = od->lch_map[lch];
+       if (!c)
+               return;
+
+       for (i = CSDP; i <= od->cfg->lch_end; i++)
+               omap_dma_chan_write(c, i, 0);
+}
+
 static void omap_dma_assign(struct omap_dmadev *od, struct omap_chan *c,
        unsigned lch)
 {
@@ -633,6 +668,37 @@ static irqreturn_t omap_dma_irq(int irq, void *devid)
        return IRQ_HANDLED;
 }
 
+static int omap_dma_get_lch(struct omap_dmadev *od, int *lch)
+{
+       int channel;
+
+       mutex_lock(&od->lch_lock);
+       channel = find_first_zero_bit(od->lch_bitmap, od->lch_count);
+       if (channel >= od->lch_count)
+               goto out_busy;
+       set_bit(channel, od->lch_bitmap);
+       mutex_unlock(&od->lch_lock);
+
+       omap_dma_clear_lch(od, channel);
+       *lch = channel;
+
+       return 0;
+
+out_busy:
+       mutex_unlock(&od->lch_lock);
+       *lch = -EINVAL;
+
+       return -EBUSY;
+}
+
+static void omap_dma_put_lch(struct omap_dmadev *od, int lch)
+{
+       omap_dma_clear_lch(od, lch);
+       mutex_lock(&od->lch_lock);
+       clear_bit(lch, od->lch_bitmap);
+       mutex_unlock(&od->lch_lock);
+}
+
 static int omap_dma_alloc_chan_resources(struct dma_chan *chan)
 {
        struct omap_dmadev *od = to_omap_dma_dev(chan->device);
@@ -644,8 +710,7 @@ static int omap_dma_alloc_chan_resources(struct dma_chan *chan)
                ret = omap_request_dma(c->dma_sig, "DMA engine",
                                       omap_dma_callback, c, &c->dma_ch);
        } else {
-               ret = omap_request_dma(c->dma_sig, "DMA engine", NULL, NULL,
-                                      &c->dma_ch);
+               ret = omap_dma_get_lch(od, &c->dma_ch);
        }
 
        dev_dbg(dev, "allocating channel %u for %u\n", c->dma_ch, c->dma_sig);
@@ -702,7 +767,11 @@ static void omap_dma_free_chan_resources(struct dma_chan *chan)
        c->channel_base = NULL;
        od->lch_map[c->dma_ch] = NULL;
        vchan_free_chan_resources(&c->vc);
-       omap_free_dma(c->dma_ch);
+
+       if (od->legacy)
+               omap_free_dma(c->dma_ch);
+       else
+               omap_dma_put_lch(od, c->dma_ch);
 
        dev_dbg(od->ddev.dev, "freeing channel %u used for %u\n", c->dma_ch,
                c->dma_sig);
@@ -1453,16 +1522,128 @@ static void omap_dma_free(struct omap_dmadev *od)
        }
 }
 
+/* Currently only used for omap2. For omap1, also a check for lcd_dma is needed */
+static int omap_dma_busy_notifier(struct notifier_block *nb,
+                                 unsigned long cmd, void *v)
+{
+       struct omap_dmadev *od;
+       struct omap_chan *c;
+       int lch = -1;
+
+       od = container_of(nb, struct omap_dmadev, nb);
+
+       switch (cmd) {
+       case CPU_CLUSTER_PM_ENTER:
+               while (1) {
+                       lch = find_next_bit(od->lch_bitmap, od->lch_count,
+                                           lch + 1);
+                       if (lch >= od->lch_count)
+                               break;
+                       c = od->lch_map[lch];
+                       if (!c)
+                               continue;
+                       if (omap_dma_chan_read(c, CCR) & CCR_ENABLE)
+                               return NOTIFY_BAD;
+               }
+               break;
+       case CPU_CLUSTER_PM_ENTER_FAILED:
+       case CPU_CLUSTER_PM_EXIT:
+               break;
+       }
+
+       return NOTIFY_OK;
+}
+
+/*
+ * We are using IRQENABLE_L1, and legacy DMA code was using IRQENABLE_L0.
+ * As the DSP may be using IRQENABLE_L2 and L3, let's not touch those for
+ * now. Context save seems to be only currently needed on omap3.
+ */
+static void omap_dma_context_save(struct omap_dmadev *od)
+{
+       od->context.irqenable_l0 = omap_dma_glbl_read(od, IRQENABLE_L0);
+       od->context.irqenable_l1 = omap_dma_glbl_read(od, IRQENABLE_L1);
+       od->context.ocp_sysconfig = omap_dma_glbl_read(od, OCP_SYSCONFIG);
+       od->context.gcr = omap_dma_glbl_read(od, GCR);
+}
+
+static void omap_dma_context_restore(struct omap_dmadev *od)
+{
+       int i;
+
+       omap_dma_glbl_write(od, GCR, od->context.gcr);
+       omap_dma_glbl_write(od, OCP_SYSCONFIG, od->context.ocp_sysconfig);
+       omap_dma_glbl_write(od, IRQENABLE_L0, od->context.irqenable_l0);
+       omap_dma_glbl_write(od, IRQENABLE_L1, od->context.irqenable_l1);
+
+       /* Clear IRQSTATUS_L0 as legacy DMA code is no longer doing it */
+       if (od->plat->errata & DMA_ROMCODE_BUG)
+               omap_dma_glbl_write(od, IRQSTATUS_L0, 0);
+
+       /* Clear dma channels */
+       for (i = 0; i < od->lch_count; i++)
+               omap_dma_clear_lch(od, i);
+}
+
+/* Currently only used for omap3 */
+static int omap_dma_context_notifier(struct notifier_block *nb,
+                                    unsigned long cmd, void *v)
+{
+       struct omap_dmadev *od;
+
+       od = container_of(nb, struct omap_dmadev, nb);
+
+       switch (cmd) {
+       case CPU_CLUSTER_PM_ENTER:
+               omap_dma_context_save(od);
+               break;
+       case CPU_CLUSTER_PM_ENTER_FAILED:
+       case CPU_CLUSTER_PM_EXIT:
+               omap_dma_context_restore(od);
+               break;
+       }
+
+       return NOTIFY_OK;
+}
+
+static void omap_dma_init_gcr(struct omap_dmadev *od, int arb_rate,
+                             int max_fifo_depth, int tparams)
+{
+       u32 val;
+
+       /* Set only for omap2430 and later */
+       if (!od->cfg->rw_priority)
+               return;
+
+       if (max_fifo_depth == 0)
+               max_fifo_depth = 1;
+       if (arb_rate == 0)
+               arb_rate = 1;
+
+       val = 0xff & max_fifo_depth;
+       val |= (0x3 & tparams) << 12;
+       val |= (arb_rate & 0xff) << 16;
+
+       omap_dma_glbl_write(od, GCR, val);
+}
+
 #define OMAP_DMA_BUSWIDTHS     (BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
                                 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
                                 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES))
 
+/*
+ * No flags currently set for default configuration as omap1 is still
+ * using platform data.
+ */
+static const struct omap_dma_config default_cfg;
+
 static int omap_dma_probe(struct platform_device *pdev)
 {
+       const struct omap_dma_config *conf;
        struct omap_dmadev *od;
        struct resource *res;
        int rc, i, irq;
-       u32 lch_count;
+       u32 val;
 
        od = devm_kzalloc(&pdev->dev, sizeof(*od), GFP_KERNEL);
        if (!od)
@@ -1473,9 +1654,19 @@ static int omap_dma_probe(struct platform_device *pdev)
        if (IS_ERR(od->base))
                return PTR_ERR(od->base);
 
-       od->plat = omap_get_plat_info();
-       if (!od->plat)
-               return -EPROBE_DEFER;
+       conf = of_device_get_match_data(&pdev->dev);
+       if (conf) {
+               od->cfg = conf;
+               od->plat = dev_get_platdata(&pdev->dev);
+               if (!od->plat)
+                       dev_warn(&pdev->dev, "no sdma auxdata needed?\n");
+       } else {
+               od->cfg = &default_cfg;
+
+               od->plat = omap_get_plat_info();
+               if (!od->plat)
+                       return -EPROBE_DEFER;
+       }
 
        od->reg_map = od->plat->reg_map;
 
@@ -1507,6 +1698,7 @@ static int omap_dma_probe(struct platform_device *pdev)
        od->ddev.max_burst = SZ_16M - 1; /* CCEN: 24bit unsigned */
        od->ddev.dev = &pdev->dev;
        INIT_LIST_HEAD(&od->ddev.channels);
+       mutex_init(&od->lch_lock);
        spin_lock_init(&od->lock);
        spin_lock_init(&od->irq_lock);
 
@@ -1522,18 +1714,30 @@ static int omap_dma_probe(struct platform_device *pdev)
 
        /* Number of available logical channels */
        if (!pdev->dev.of_node) {
-               lch_count = od->plat->dma_attr->lch_count;
-               if (unlikely(!lch_count))
-                       lch_count = OMAP_SDMA_CHANNELS;
+               od->lch_count = od->plat->dma_attr->lch_count;
+               if (unlikely(!od->lch_count))
+                       od->lch_count = OMAP_SDMA_CHANNELS;
        } else if (of_property_read_u32(pdev->dev.of_node, "dma-channels",
-                                       &lch_count)) {
+                                       &od->lch_count)) {
                dev_info(&pdev->dev,
                         "Missing dma-channels property, using %u.\n",
                         OMAP_SDMA_CHANNELS);
-               lch_count = OMAP_SDMA_CHANNELS;
+               od->lch_count = OMAP_SDMA_CHANNELS;
+       }
+
+       /* Mask of allowed logical channels */
+       if (pdev->dev.of_node && !of_property_read_u32(pdev->dev.of_node,
+                                                      "dma-channel-mask",
+                                                      &val)) {
+               /* Tag channels not in mask as reserved */
+               val = ~val;
+               bitmap_from_arr32(od->lch_bitmap, &val, od->lch_count);
        }
+       if (od->plat->dma_attr->dev_caps & HS_CHANNELS_RESERVED)
+               bitmap_set(od->lch_bitmap, 0, 2);
 
-       od->lch_map = devm_kcalloc(&pdev->dev, lch_count, sizeof(*od->lch_map),
+       od->lch_map = devm_kcalloc(&pdev->dev, od->lch_count,
+                                  sizeof(*od->lch_map),
                                   GFP_KERNEL);
        if (!od->lch_map)
                return -ENOMEM;
@@ -1605,6 +1809,16 @@ static int omap_dma_probe(struct platform_device *pdev)
                }
        }
 
+       omap_dma_init_gcr(od, DMA_DEFAULT_ARB_RATE, DMA_DEFAULT_FIFO_DEPTH, 0);
+
+       if (od->cfg->needs_busy_check) {
+               od->nb.notifier_call = omap_dma_busy_notifier;
+               cpu_pm_register_notifier(&od->nb);
+       } else if (od->cfg->may_lose_context) {
+               od->nb.notifier_call = omap_dma_context_notifier;
+               cpu_pm_register_notifier(&od->nb);
+       }
+
        dev_info(&pdev->dev, "OMAP DMA engine driver%s\n",
                 od->ll123_supported ? " (LinkedList1/2/3 supported)" : "");
 
@@ -1616,6 +1830,9 @@ static int omap_dma_remove(struct platform_device *pdev)
        struct omap_dmadev *od = platform_get_drvdata(pdev);
        int irq;
 
+       if (od->cfg->may_lose_context)
+               cpu_pm_unregister_notifier(&od->nb);
+
        if (pdev->dev.of_node)
                of_dma_controller_free(pdev->dev.of_node);
 
@@ -1637,12 +1854,45 @@ static int omap_dma_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct omap_dma_config omap2420_data = {
+       .lch_end = CCFN,
+       .rw_priority = true,
+       .needs_lch_clear = true,
+       .needs_busy_check = true,
+};
+
+static const struct omap_dma_config omap2430_data = {
+       .lch_end = CCFN,
+       .rw_priority = true,
+       .needs_lch_clear = true,
+};
+
+static const struct omap_dma_config omap3430_data = {
+       .lch_end = CCFN,
+       .rw_priority = true,
+       .needs_lch_clear = true,
+       .may_lose_context = true,
+};
+
+static const struct omap_dma_config omap3630_data = {
+       .lch_end = CCDN,
+       .rw_priority = true,
+       .needs_lch_clear = true,
+       .may_lose_context = true,
+};
+
+static const struct omap_dma_config omap4_data = {
+       .lch_end = CCDN,
+       .rw_priority = true,
+       .needs_lch_clear = true,
+};
+
 static const struct of_device_id omap_dma_match[] = {
-       { .compatible = "ti,omap2420-sdma", },
-       { .compatible = "ti,omap2430-sdma", },
-       { .compatible = "ti,omap3430-sdma", },
-       { .compatible = "ti,omap3630-sdma", },
-       { .compatible = "ti,omap4430-sdma", },
+       { .compatible = "ti,omap2420-sdma", .data = &omap2420_data, },
+       { .compatible = "ti,omap2430-sdma", .data = &omap2430_data, },
+       { .compatible = "ti,omap3430-sdma", .data = &omap3430_data, },
+       { .compatible = "ti,omap3630-sdma", .data = &omap3630_data, },
+       { .compatible = "ti,omap4430-sdma", .data = &omap4_data, },
        {},
 };
 MODULE_DEVICE_TABLE(of, omap_dma_match);
index ba3cfbb5231204c1d7f4cdc7288b3375a782eb8a..5c5c93ad6b500bfcfb165d9ebe3307e9bdde5689 100644 (file)
 #define IS_WORD_16                     BIT(0xd)
 #define ENABLE_16XX_MODE               BIT(0xe)
 #define HS_CHANNELS_RESERVED           BIT(0xf)
-#define DMA_ENGINE_HANDLE_IRQ          BIT(0x10)
 
 /* Defines for DMA Capabilities */
 #define DMA_HAS_TRANSPARENT_CAPS       (0x1 << 18)
@@ -239,9 +238,6 @@ struct omap_dma_lch {
        void (*callback)(int lch, u16 ch_status, void *data);
        void *data;
        long flags;
-       /* required for Dynamic chaining */
-       int prev_linked_ch;
-       int next_linked_ch;
        int state;
        int chain_id;
        int status;
@@ -303,7 +299,6 @@ extern void omap_set_dma_priority(int lch, int dst_port, int priority);
 extern int omap_request_dma(int dev_id, const char *dev_name,
                        void (*callback)(int lch, u16 ch_status, void *data),
                        void *data, int *dma_ch);
-extern void omap_enable_dma_irq(int ch, u16 irq_bits);
 extern void omap_disable_dma_irq(int ch, u16 irq_bits);
 extern void omap_free_dma(int ch);
 extern void omap_start_dma(int lch);
@@ -312,7 +307,6 @@ extern void omap_set_dma_transfer_params(int lch, int data_type,
                                         int elem_count, int frame_count,
                                         int sync_mode,
                                         int dma_trigger, int src_or_dst_synch);
-extern void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode);
 extern void omap_set_dma_channel_mode(int lch, enum omap_dma_channel_mode mode);
 
 extern void omap_set_dma_src_params(int lch, int src_port, int src_amode,
@@ -329,22 +323,10 @@ extern void omap_set_dma_dest_data_pack(int lch, int enable);
 extern void omap_set_dma_dest_burst_mode(int lch,
                                         enum omap_dma_burst_mode burst_mode);
 
-extern void omap_set_dma_params(int lch,
-                               struct omap_dma_channel_params *params);
-
-extern void omap_dma_link_lch(int lch_head, int lch_queue);
-
-extern int omap_set_dma_callback(int lch,
-                       void (*callback)(int lch, u16 ch_status, void *data),
-                       void *data);
 extern dma_addr_t omap_get_dma_src_pos(int lch);
 extern dma_addr_t omap_get_dma_dst_pos(int lch);
 extern int omap_get_dma_active_status(int lch);
 extern int omap_dma_running(void);
-extern void omap_dma_set_global_params(int arb_rate, int max_fifo_depth,
-                                      int tparams);
-void omap_dma_global_context_save(void);
-void omap_dma_global_context_restore(void);
 
 #if defined(CONFIG_ARCH_OMAP1) && IS_ENABLED(CONFIG_FB_OMAP)
 #include <mach/lcd_dma.h>