]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
platform:tegra:nvadsp: API for creating shared memory
authorAjay Nandakumar <anandakumarm@nvidia.com>
Thu, 15 May 2014 18:45:59 +0000 (00:15 +0530)
committerNitin Kumbhar <nkumbhar@nvidia.com>
Wed, 4 Jun 2014 06:27:12 +0000 (23:27 -0700)
API for creating a memory which can be used by both ADSP and CPU.

Also fix typos.

Bug 200002602

Change-Id: Ia43bbf623a33ac07a76d339016b7b62445a1cadf
Signed-off-by: Ajay Nandakumar <anandakumarm@nvidia.com>
Reviewed-on: http://git-master/r/410481
Reviewed-by: Sri Krishna Chowdary <schowdary@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Nitin Kumbhar <nkumbhar@nvidia.com>
drivers/platform/tegra/nvadsp/os.c
include/linux/tegra_nvadsp.h

index f8830b53908e1d0ffc34956768e6afd5c27103c1..c18c338b358b157dbc01d84d6abb22cd2f4b076a 100644 (file)
@@ -114,6 +114,32 @@ void *adsp_da_to_va_mappings(u64 da, int len)
        return ptr;
 }
 
+void *nvadsp_alloc_coherent(size_t size, dma_addr_t *da, gfp_t flags)
+{
+       struct device *dev = &priv.pdev->dev;
+       void *va;
+       va = dma_alloc_coherent(dev, size, da, flags);
+       if (!va) {
+               dev_err(dev,
+                       "unable to allocate the memory for size %u\n",
+                                                       (u32)size);
+               goto end;
+       }
+
+       WARN(*da != (*da & UINT_MAX),
+                       "bus addr %llx beyond %x\n", *da, UINT_MAX);
+end:
+       return va;
+}
+EXPORT_SYMBOL(nvadsp_alloc_coherent);
+
+void nvadsp_free_coherent(size_t size, void *va, dma_addr_t da)
+{
+       struct device *dev = &priv.pdev->dev;
+       dma_free_coherent(dev, size, va, da);
+}
+EXPORT_SYMBOL(nvadsp_free_coherent);
+
 struct elf32_shdr *
 nvadsp_get_section(const struct firmware *fw, char *sec_name)
 {
@@ -229,7 +255,7 @@ int nvadsp_os_elf_load(const struct firmware *fw)
        return ret;
 }
 
-static int allocate_memeory_for_adsp_os(void)
+static int allocate_memory_for_adsp_os(void)
 {
        struct platform_device *pdev = priv.pdev;
        struct device *dev = &pdev->dev;
@@ -286,7 +312,7 @@ int nvadsp_os_load(void)
                goto end;
        }
 
-       ret = allocate_memeory_for_adsp_os();
+       ret = allocate_memory_for_adsp_os();
        if (ret < 0) {
                dev_info(dev,
                        "unable to allocate memory for adsp os\n");
index e830b9837f360293f5bc1a70a10aae8ce8c8a838..6dfd6cd81b4b6c8ef19be87f6063fcf0cea36ff2 100644 (file)
@@ -196,5 +196,7 @@ void nvadsp_app_exit(nvadsp_app_info_t *);
 void nvadsp_app_unload(nvadsp_app_info_t *);
 int nvadsp_app_start(char *name, void *arg);
 int nvadsp_app_stop(char *name);
+void *nvadsp_alloc_coherent(size_t size, dma_addr_t *da, gfp_t flags);
+void nvadsp_free_coherent(size_t size, void *va, dma_addr_t da);
 
 #endif /* __LINUX_TEGRA_NVADSP_H */