* [PATCH 3/5] DSPBRIDGE: Remove DSP resources from registry
@ 2010-04-17 3:33 Ramos Falcon, Ernesto
2010-04-27 23:58 ` Omar Ramirez Luna
0 siblings, 1 reply; 2+ messages in thread
From: Ramos Falcon, Ernesto @ 2010-04-17 3:33 UTC (permalink / raw)
To: linux-omap@vger.kernel.org
Cc: Ameya Palande, Doyu Hiroshi (Nokia-D/Helsinki),
Contreras Felipe (Nokia-D/Helsinki)
>From 10010c14048a946190356cc682089d35b1bf7f48 Mon Sep 17 00:00:00 2001
From: Ernesto Ramos <ernesto@ti.com>
Date: Fri, 16 Apr 2010 21:40:57 -0500
Subject: [PATCH 3/5] DSPBRIDGE: Remove DSP resources from registry
Remove DSP resources from registry.
Signed-off-by: Ernesto Ramos <ernesto@ti.com>
---
arch/arm/plat-omap/include/dspbridge/dbdefs.h | 7 ----
arch/arm/plat-omap/include/dspbridge/drv.h | 7 ++++
drivers/dsp/bridge/rmgr/drv.c | 8 ++--
drivers/dsp/bridge/rmgr/drv_interface.c | 43 ++++++++++++-------------
drivers/dsp/bridge/rmgr/proc.c | 10 +++++-
drivers/dsp/bridge/services/cfg.c | 27 ++++++---------
drivers/dsp/bridge/wmd/tiomap3430.c | 20 +++++-------
7 files changed, 60 insertions(+), 62 deletions(-)
diff --git a/arch/arm/plat-omap/include/dspbridge/dbdefs.h b/arch/arm/plat-omap/include/dspbridge/dbdefs.h
index 9dcfbfb..150ad05 100644
--- a/arch/arm/plat-omap/include/dspbridge/dbdefs.h
+++ b/arch/arm/plat-omap/include/dspbridge/dbdefs.h
@@ -543,11 +543,4 @@ bit 15 - Output (writeable) buffer
/* Max registry path length. Also the max registry value length. */
#define MAXREGPATHLENGTH 255
-/* MiniDriver related definitions */
-#define DEFEXEC "DefaultExecutable" /* Default executable */
-#define AUTOSTART "AutoStart" /* Statically load flag */
-#define CURRENTCONFIG "CurrentConfig" /* Current resources */
-#define SHMSIZE "SHMSize" /* Size of shm reservd on MPU */
-#define TCWORDSWAP "TCWordSwap" /* Traffic Controller WordSwp */
-
#endif /* DBDEFS_ */
diff --git a/arch/arm/plat-omap/include/dspbridge/drv.h b/arch/arm/plat-omap/include/dspbridge/drv.h
index 588aa8e..210ca68 100644
--- a/arch/arm/plat-omap/include/dspbridge/drv.h
+++ b/arch/arm/plat-omap/include/dspbridge/drv.h
@@ -123,6 +123,13 @@ enum gpp_proc_res_state {
PROC_RES_FREED
};
+/* Bridge Data */
+struct drv_data {
+ char *base_img;
+ s32 shm_size;
+ int tc_wordswapon;
+};
+
/* Process Context */
struct process_context {
/* Process State */
diff --git a/drivers/dsp/bridge/rmgr/drv.c b/drivers/dsp/bridge/rmgr/drv.c
index e9bb9a8..21b6098 100644
--- a/drivers/dsp/bridge/rmgr/drv.c
+++ b/drivers/dsp/bridge/rmgr/drv.c
@@ -764,6 +764,7 @@ dsp_status drv_request_bridge_res_dsp(void **phost_resources)
u32 dw_buff_size;
u32 dma_addr;
u32 shm_size;
+ struct drv_data *drv_datap = dev_get_drvdata(bridge);
dw_buff_size = sizeof(struct cfg_hostres);
@@ -806,10 +807,9 @@ dsp_status drv_request_bridge_res_dsp(void **phost_resources)
dev_dbg(bridge, "dw_wd_timer_dsp_base %p\n",
host_res->dw_wd_timer_dsp_base);
dev_dbg(bridge, "dw_dmmu_base %p\n", host_res->dw_dmmu_base);
- dw_buff_size = sizeof(shm_size);
- status =
- reg_get_value(SHMSIZE, (u8 *) &shm_size, &dw_buff_size);
- if (DSP_SUCCEEDED(status)) {
+
+ shm_size = drv_datap->shm_size;
+ if (shm_size >= 0x10000) {
/* Allocate Physically contiguous,
* non-cacheable memory */
host_res->dw_mem_base[1] =
diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c
index 06b3803..d9dcd14 100644
--- a/drivers/dsp/bridge/rmgr/drv_interface.c
+++ b/drivers/dsp/bridge/rmgr/drv_interface.c
@@ -247,10 +247,10 @@ static struct notifier_block iva_clk_notifier = {
static int __devinit omap34_xx_bridge_probe(struct platform_device *pdev)
{
int status;
- u32 init_status;
- u32 temp;
+ u32 init_status = DSP_SOK;
dev_t dev = 0;
int result;
+ struct drv_data *drv_datap = NULL;
#ifdef CONFIG_BRIDGE_DVFS
int i = 0;
#endif
@@ -300,21 +300,23 @@ static int __devinit omap34_xx_bridge_probe(struct platform_device *pdev)
/* Autostart flag. This should be set to true if the DSP image should
* be loaded and run during bridge module initialization */
-
- if (base_img) {
- temp = true;
- reg_set_value(AUTOSTART, (u8 *) &temp, sizeof(temp));
- reg_set_value(DEFEXEC, (u8 *) base_img, strlen(base_img) + 1);
+ drv_datap = mem_calloc(sizeof(struct drv_data), MEM_PAGED);
+ if (drv_datap) {
+ drv_datap->shm_size = shm_size;
+ drv_datap->tc_wordswapon = tc_wordswapon;
+ if (base_img) {
+ drv_datap->base_img = kmalloc(strlen(base_img) + 1,
+ GFP_KERNEL);
+ if (drv_datap->base_img)
+ strncpy(drv_datap->base_img, base_img,
+ strlen(base_img) + 1);
+ else
+ status = DSP_EMEMORY;
+ }
} else {
- temp = false;
- reg_set_value(AUTOSTART, (u8 *) &temp, sizeof(temp));
- reg_set_value(DEFEXEC, (u8 *) "\0", (u32) 2);
+ init_status = DSP_EMEMORY;
}
-
- if (shm_size >= 0x10000) { /* 64 KB */
- init_status = reg_set_value(SHMSIZE, (u8 *) &shm_size,
- sizeof(shm_size));
- } else {
+ if (shm_size < 0x10000) { /* 64 KB */
init_status = DSP_EINVALIDARG;
status = -1;
pr_err("%s: shm size must be at least 64 KB\n", __func__);
@@ -333,15 +335,11 @@ static int __devinit omap34_xx_bridge_probe(struct platform_device *pdev)
phys_mempool_base);
if ((phys_mempool_base > 0x0) && (phys_mempool_size > 0x0))
mem_ext_phys_pool_init(phys_mempool_base, phys_mempool_size);
- if (tc_wordswapon) {
+ if (tc_wordswapon)
dev_dbg(bridge, "%s: TC Word Swap is enabled\n", __func__);
- reg_set_value(TCWORDSWAP, (u8 *) &tc_wordswapon,
- sizeof(tc_wordswapon));
- } else {
+ else
dev_dbg(bridge, "%s: TC Word Swap is disabled\n", __func__);
- reg_set_value(TCWORDSWAP, (u8 *) &tc_wordswapon,
- sizeof(tc_wordswapon));
- }
+
if (DSP_SUCCEEDED(init_status)) {
#ifdef CONFIG_BRIDGE_DVFS
for (i = 0; i < 6; i++)
@@ -356,6 +354,7 @@ static int __devinit omap34_xx_bridge_probe(struct platform_device *pdev)
pr_err("%s: clk_notifier_register failed for iva2_ck\n",
__func__);
#endif
+ dev_set_drvdata(bridge, drv_datap);
driver_context = dsp_init(&init_status);
if (DSP_FAILED(init_status)) {
status = -1;
diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
index 1f7dd09..c821be4 100644
--- a/drivers/dsp/bridge/rmgr/proc.c
+++ b/drivers/dsp/bridge/rmgr/proc.c
@@ -824,6 +824,7 @@ dsp_status proc_load(void *hprocessor, IN CONST s32 argc_index,
u32 dw_ext_end;
u32 proc_id;
int brd_state;
+ struct drv_data *drv_datap = dev_get_drvdata(bridge);
#ifdef OPT_LOAD_TIME_INSTRUMENTATION
struct timeval tv1;
@@ -1034,8 +1035,15 @@ dsp_status proc_load(void *hprocessor, IN CONST s32 argc_index,
if (DSP_SUCCEEDED((*p_proc_object->intf_fxns->pfn_brd_status)
(p_proc_object->hwmd_context, &brd_state))) {
pr_info("%s: Processor Loaded %s\n", __func__, pargv0);
- reg_set_value(DEFEXEC, (u8 *)pargv0,
+
+ kfree(drv_datap->base_img);
+ drv_datap->base_img = kmalloc(strlen(pargv0) + 1,
+ GFP_KERNEL);
+ if (drv_datap->base_img)
+ strncpy(drv_datap->base_img, pargv0,
strlen(pargv0) + 1);
+ else
+ status = DSP_EMEMORY;
DBC_ASSERT(brd_state == BRD_LOADED);
}
}
diff --git a/drivers/dsp/bridge/services/cfg.c b/drivers/dsp/bridge/services/cfg.c
index f0d0dba..8f9f84c 100644
--- a/drivers/dsp/bridge/services/cfg.c
+++ b/drivers/dsp/bridge/services/cfg.c
@@ -29,6 +29,7 @@
/* ----------------------------------- This */
#include <dspbridge/cfg.h>
+#include <dspbridge/drv.h>
struct drv_ext {
struct list_head link;
@@ -55,18 +56,15 @@ dsp_status cfg_get_auto_start(struct cfg_devnode *dev_node_obj,
{
dsp_status status = DSP_SOK;
u32 dw_buf_size;
+ struct drv_data *drv_datap = dev_get_drvdata(bridge);
dw_buf_size = sizeof(*pdwAutoStart);
if (!dev_node_obj)
status = CFG_E_INVALIDHDEVNODE;
- if (!pdwAutoStart)
+ if (!pdwAutoStart || !drv_datap)
status = CFG_E_INVALIDPOINTER;
- if (DSP_SUCCEEDED(status)) {
- status = reg_get_value(AUTOSTART, (u8 *) pdwAutoStart,
- &dw_buf_size);
- if (DSP_FAILED(status))
- status = CFG_E_RESOURCENOTAVAIL;
- }
+ if (DSP_SUCCEEDED(status))
+ *pdwAutoStart = drv_datap->base_img ? 1 : 0;
DBC_ENSURE((status == DSP_SOK &&
(*pdwAutoStart == 0 || *pdwAutoStart == 1))
@@ -117,22 +115,19 @@ dsp_status cfg_get_exec_file(struct cfg_devnode *dev_node_obj, u32 ul_buf_size,
OUT char *pstrExecFile)
{
dsp_status status = DSP_SOK;
- u32 exec_size = ul_buf_size;
+ struct drv_data *drv_datap = dev_get_drvdata(bridge);
if (!dev_node_obj)
status = CFG_E_INVALIDHDEVNODE;
- else if (!pstrExecFile)
+ else if (!pstrExecFile || !drv_datap)
status = CFG_E_INVALIDPOINTER;
- if (DSP_SUCCEEDED(status)) {
- status =
- reg_get_value(DEFEXEC, (u8 *) pstrExecFile, &exec_size);
- if (DSP_FAILED(status))
- status = CFG_E_RESOURCENOTAVAIL;
- else if (exec_size > ul_buf_size)
+ if (strlen(drv_datap->base_img) > ul_buf_size)
status = DSP_ESIZE;
- }
+ if (DSP_SUCCEEDED(status) && drv_datap->base_img)
+ strcpy(pstrExecFile, drv_datap->base_img);
+
if (DSP_FAILED(status))
pr_err("%s: Failed, status 0x%x\n", __func__, status);
DBC_ENSURE(((status == DSP_SOK) &&
diff --git a/drivers/dsp/bridge/wmd/tiomap3430.c b/drivers/dsp/bridge/wmd/tiomap3430.c
index 609cd5b..87830ec 100644
--- a/drivers/dsp/bridge/wmd/tiomap3430.c
+++ b/drivers/dsp/bridge/wmd/tiomap3430.c
@@ -929,12 +929,11 @@ static dsp_status bridge_dev_create(OUT struct wmd_dev_context **ppDevContext,
dsp_status status = DSP_SOK;
struct wmd_dev_context *dev_context = NULL;
s32 entry_ndx;
- s32 tc_word_swap;
- u32 tc_word_swap_size = sizeof(tc_word_swap);
struct pg_table_attrs *pt_attrs;
u32 pg_tbl_pa;
u32 pg_tbl_va;
u32 align_size;
+ struct drv_data *drv_datap = dev_get_drvdata(bridge);
/* Allocate and initialize a data structure to contain the mini driver
* state, which becomes the context for later calls into this WMD. */
@@ -1054,11 +1053,7 @@ static dsp_status bridge_dev_create(OUT struct wmd_dev_context **ppDevContext,
if (DSP_SUCCEEDED(status)) {
spin_lock_init(&pt_attrs->pg_lock);
/* Set the Endianism Register *//* Need to set this */
- /* Retrieve the TC u16 SWAP Option */
- status = reg_get_value(TCWORDSWAP, (u8 *) &tc_word_swap,
- &tc_word_swap_size);
- /* Save the value */
- dev_context->tc_word_swap_on = tc_word_swap;
+ dev_context->tc_word_swap_on = drv_datap->tc_wordswapon;
}
if (DSP_SUCCEEDED(status)) {
/* 24xx-Linux MMU address is obtained from the host
@@ -1162,8 +1157,8 @@ static dsp_status bridge_dev_destroy(struct wmd_dev_context *hDevContext)
struct wmd_dev_context *dev_context = (struct wmd_dev_context *)
hDevContext;
struct cfg_hostres *host_res;
- u32 dw_buff_size;
u32 shm_size;
+ struct drv_data *drv_datap = dev_get_drvdata(bridge);
/* It should never happen */
if (!hDevContext)
@@ -1191,10 +1186,8 @@ static dsp_status bridge_dev_destroy(struct wmd_dev_context *hDevContext)
if (dev_context->resources) {
host_res = dev_context->resources;
- dw_buff_size = sizeof(shm_size);
- status = reg_get_value(SHMSIZE, (u8 *) &shm_size,
- &dw_buff_size);
- if (DSP_SUCCEEDED(status)) {
+ shm_size = drv_datap->shm_size;
+ if (shm_size >= 0x10000) {
if ((host_res->dw_mem_base[1]) &&
(host_res->dw_mem_phys[1])) {
mem_free_phys_mem((void *)
@@ -1251,6 +1244,9 @@ static dsp_status bridge_dev_destroy(struct wmd_dev_context *hDevContext)
}
/* Free the driver's device context: */
+ kfree(drv_datap->base_img);
+ kfree(drv_datap);
+ dev_set_drvdata(bridge, NULL);
kfree((void *)hDevContext);
return status;
}
--
1.5.4.5
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH 3/5] DSPBRIDGE: Remove DSP resources from registry
2010-04-17 3:33 [PATCH 3/5] DSPBRIDGE: Remove DSP resources from registry Ramos Falcon, Ernesto
@ 2010-04-27 23:58 ` Omar Ramirez Luna
0 siblings, 0 replies; 2+ messages in thread
From: Omar Ramirez Luna @ 2010-04-27 23:58 UTC (permalink / raw)
To: Ramos Falcon, Ernesto
Cc: linux-omap@vger.kernel.org, Ameya Palande,
Doyu Hiroshi (Nokia-D/Helsinki),
Contreras Felipe (Nokia-D/Helsinki)
On 4/16/2010 10:33 PM, Ramos Falcon, Ernesto wrote:
> From 10010c14048a946190356cc682089d35b1bf7f48 Mon Sep 17 00:00:00 2001
> From: Ernesto Ramos<ernesto@ti.com>
> Date: Fri, 16 Apr 2010 21:40:57 -0500
> Subject: [PATCH 3/5] DSPBRIDGE: Remove DSP resources from registry
>
> Remove DSP resources from registry.
>
> Signed-off-by: Ernesto Ramos<ernesto@ti.com>
> ---
Rebased and pushed. fixed description as it is same as patch 1.
- omar
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-04-27 23:58 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-17 3:33 [PATCH 3/5] DSPBRIDGE: Remove DSP resources from registry Ramos Falcon, Ernesto
2010-04-27 23:58 ` Omar Ramirez Luna
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.