staging: ti dspbridge: add _BACKTRACE config
authorFelipe Contreras <felipe.contreras@gmail.com>
Sun, 4 Jul 2010 13:36:26 +0000 (16:36 +0300)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 8 Jul 2010 20:34:54 +0000 (13:34 -0700)
We only want this code when testing.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
12 files changed:
drivers/staging/tidspbridge/Kconfig
drivers/staging/tidspbridge/core/io_sm.c
drivers/staging/tidspbridge/core/ue_deh.c
drivers/staging/tidspbridge/gen/gh.c
drivers/staging/tidspbridge/include/dspbridge/dbll.h
drivers/staging/tidspbridge/include/dspbridge/gh.h
drivers/staging/tidspbridge/include/dspbridge/io_sm.h
drivers/staging/tidspbridge/include/dspbridge/nldr.h
drivers/staging/tidspbridge/include/dspbridge/node.h
drivers/staging/tidspbridge/pmgr/dbll.c
drivers/staging/tidspbridge/rmgr/nldr.c
drivers/staging/tidspbridge/rmgr/node.c

index 4d63b66d8e269eca6840c61f024701fa1b6323b2..93de4f2e8bf89defcd6e83e00c2cbe1cd93b8dd4 100644 (file)
@@ -81,3 +81,10 @@ config TIDSPBRIDGE_NTFY_PWRERR
          Enable notifications to registered clients on the event of power errror
          trying to suspend bridge driver. Say Y, to signal this event as a fatal
          error, this will require a bridge restart to recover.
+
+config TIDSPBRIDGE_BACKTRACE
+       bool "Dump backtraces on fatal errors"
+       depends on TIDSPBRIDGE
+       help
+         Enable useful information to backtrace fatal errors. Say Y if you
+         want to dump information for testing purposes.
index 8909c416b7ee18a7d01a7fcc35bc085b40000477..15039688ba93df416f8cf0cceecbc11186a65e0c 100644 (file)
@@ -114,7 +114,7 @@ struct io_mgr {
        struct mgr_processorextinfo ext_proc_info;
        struct cmm_object *hcmm_mgr;    /* Shared Mem Mngr */
        struct work_struct io_workq;    /* workqueue */
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
        u32 ul_trace_buffer_begin;      /* Trace message start address */
        u32 ul_trace_buffer_end;        /* Trace message end address */
        u32 ul_trace_buffer_current;    /* Trace message current address */
@@ -210,7 +210,7 @@ int bridge_io_create(OUT struct io_mgr **phIOMgr,
        }
 
        /* Initialize chnl_mgr object */
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
        pio_mgr->pmsg = NULL;
 #endif
        pio_mgr->hchnl_mgr = hchnl_mgr;
@@ -265,7 +265,7 @@ int bridge_io_destroy(struct io_mgr *hio_mgr)
                /* Free IO DPC object */
                tasklet_kill(&hio_mgr->dpc_tasklet);
 
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
                kfree(hio_mgr->pmsg);
 #endif
                dsp_wdt_exit();
@@ -407,7 +407,7 @@ int bridge_io_on_loaded(struct io_mgr *hio_mgr)
                status = -EFAULT;
        }
        if (DSP_SUCCEEDED(status)) {
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
                status =
                    cod_get_sym_value(cod_man, DSP_TRACESEC_END, &shm0_end);
 #else
@@ -752,7 +752,7 @@ int bridge_io_on_loaded(struct io_mgr *hio_mgr)
                hmsg_mgr->max_msgs);
        memset((void *)hio_mgr->shared_mem, 0, sizeof(struct shm));
 
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
        /* Get the start address of trace buffer */
        status = cod_get_sym_value(cod_man, SYS_PUTCBEG,
                                   &hio_mgr->ul_trace_buffer_begin);
@@ -949,7 +949,7 @@ void io_dpc(IN OUT unsigned long pRefData)
                    (pio_mgr->intr_val < DEH_LIMIT)) {
                        /* Notify DSP/BIOS exception */
                        if (hdeh_mgr) {
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
                                print_dsp_debug_trace(pio_mgr);
 #endif
                                bridge_deh_notify(hdeh_mgr, DSP_SYSERROR,
@@ -1810,7 +1810,12 @@ int bridge_io_get_proc_load(IN struct io_mgr *hio_mgr,
        return 0;
 }
 
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+void io_sm_init(void)
+{
+       /* Do nothing */
+}
+
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
 void print_dsp_debug_trace(struct io_mgr *hio_mgr)
 {
        u32 ul_new_message_length = 0, ul_gpp_cur_pointer;
@@ -1871,6 +1876,7 @@ void print_dsp_debug_trace(struct io_mgr *hio_mgr)
 }
 #endif
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /*
  *  ======== print_dsp_trace_buffer ========
  *      Prints the trace buffer returned from the DSP (if DBG_Trace is enabled).
@@ -2045,10 +2051,6 @@ func_end:
        return status;
 }
 
-void io_sm_init(void)
-{
-       /* Do nothing */
-}
 /**
  * dump_dsp_stack() - This function dumps the data on the DSP stack.
  * @bridge_context:    Bridge driver's device context pointer.
@@ -2407,4 +2409,4 @@ void dump_dl_modules(struct bridge_dev_context *bridge_context)
 func_end:
        kfree(module_struct);
 }
-
+#endif
index 2bdf92e7657f63214cced46a5e3bad18124d5386..3430418190da8fa62ad31c09843362b2c40edda1 100644 (file)
@@ -166,6 +166,7 @@ int bridge_deh_register_notify(struct deh_mgr *deh, u32 event_mask,
                return ntfy_unregister(deh->ntfy_obj, hnotification);
 }
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 static void mmu_fault_print_stack(struct bridge_dev_context *dev_context)
 {
        struct cfg_hostres *resources;
@@ -205,6 +206,7 @@ static void mmu_fault_print_stack(struct bridge_dev_context *dev_context)
        hw_mmu_disable(resources->dw_dmmu_base);
        free_page((unsigned long)dummy_va_addr);
 }
+#endif
 
 static inline const char *event_to_string(int event)
 {
@@ -232,15 +234,19 @@ void bridge_deh_notify(struct deh_mgr *deh, int event, int info)
        case DSP_SYSERROR:
                dev_err(bridge, "%s: %s, info=0x%x", __func__,
                                str, info);
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
                dump_dl_modules(dev_context);
                dump_dsp_stack(dev_context);
+#endif
                break;
        case DSP_MMUFAULT:
                dev_err(bridge, "%s: %s, addr=0x%x", __func__,
                                str, fault_addr);
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
                print_dsp_trace_buffer(dev_context);
                dump_dl_modules(dev_context);
                mmu_fault_print_stack(dev_context);
+#endif
                break;
        default:
                dev_err(bridge, "%s: %s", __func__, str);
index d1e7b38f7fb6bcce8858614605def1809747af37..44fad88e69c5a1df70c36fc88fdba7fd7ac2c69d 100644 (file)
@@ -188,6 +188,7 @@ static void myfree(void *ptr, s32 size)
        gs_free(ptr);
 }
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /**
  * gh_iterate() - This function goes through all the elements in the hash table
  *             looking for the dsp symbols.
@@ -211,3 +212,4 @@ void gh_iterate(struct gh_t_hash_tab *hash_tab,
                        }
                }
 }
+#endif
index 54c6219a09cdbdce459bab32aaefcc21e06bd4a3..0d03714f092b039c243dcf20c66638a256e5b031 100644 (file)
@@ -53,7 +53,9 @@ extern void dbll_set_attrs(struct dbll_tar_obj *target,
 extern void dbll_unload(struct dbll_library_obj *lib, struct dbll_attrs *attrs);
 extern int dbll_unload_sect(struct dbll_library_obj *lib,
                                   char *sectName, struct dbll_attrs *attrs);
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 bool dbll_find_dsp_symbol(struct dbll_library_obj *zl_lib, u32 address,
                u32 offset_range, u32 *sym_addr_output, char *name_output);
+#endif
 
 #endif /* DBLL_ */
index 55c04893f6ff54a722391d29ef84d00a5c07c2af..9de291d1f56644d6abce9a95607f676d3bb3b0c4 100644 (file)
@@ -27,6 +27,8 @@ extern void gh_exit(void);
 extern void *gh_find(struct gh_t_hash_tab *hash_tab, void *key);
 extern void gh_init(void);
 extern void *gh_insert(struct gh_t_hash_tab *hash_tab, void *key, void *value);
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 void gh_iterate(struct gh_t_hash_tab *hash_tab,
        void (*callback)(void *, void *), void *user_data);
+#endif
 #endif /* GH_ */
index 6e67f10da90ae7c41c3a29024fea32e9a19a6e47..0befe9091b5016fba173b08d711e8f77fcd6d1d1 100644 (file)
@@ -291,6 +291,7 @@ extern void io_intr_dsp2(IN struct io_mgr *pio_mgr, IN u16 mb_val);
 
 extern void io_sm_init(void);
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /*
  *  ========print_dsp_trace_buffer ========
  *      Print DSP tracebuffer.
@@ -302,7 +303,8 @@ int dump_dsp_stack(struct bridge_dev_context *bridge_context);
 
 void dump_dl_modules(struct bridge_dev_context *bridge_context);
 
-#ifdef CONFIG_TIDSPBRIDGE_DEBUG
+#endif
+#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG)
 void print_dsp_debug_trace(struct io_mgr *hio_mgr);
 #endif
 
index 073aa9f8e7d6b1f3320cc94160cd51dd23048608..b1dbccdd381c36a086da162122cfb374b4ed3d23 100644 (file)
@@ -49,7 +49,9 @@ extern int nldr_load(struct nldr_nodeobject *nldr_node_obj,
                            enum nldr_phase phase);
 extern int nldr_unload(struct nldr_nodeobject *nldr_node_obj,
                              enum nldr_phase phase);
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 int nldr_find_addr(struct nldr_nodeobject *nldr_node, u32 sym_addr,
        u32 offset_range, void *offset_output, char *sym_name);
+#endif
 
 #endif /* NLDR_ */
index 7587213b2c43a186f25fe8337ccb748d3c498d07..e9d8439861cceb00c55156ae6207db81ad14126d 100644 (file)
@@ -558,6 +558,7 @@ extern int node_get_uuid_props(void *hprocessor,
                                      OUT struct dsp_ndbprops
                                      *node_props);
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /**
  * node_find_addr() - Find the closest symbol to the given address.
  *
@@ -575,5 +576,6 @@ int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr,
                                char *sym_name);
 
 enum node_state node_get_state(void *hnode);
+#endif
 
 #endif /* NODE_ */
index 3619d53b1d89833369e0c725bfab7fd7e7ffcf65..3636aa30733e0b44333e8c105b41259ec7c452b1 100644 (file)
@@ -1500,6 +1500,7 @@ static void release(struct dynamic_loader_initialize *this)
 {
 }
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /**
  *  find_symbol_context - Basic symbol context structure
  * @address:           Symbol Adress
@@ -1583,3 +1584,4 @@ bool dbll_find_dsp_symbol(struct dbll_library_obj *zl_lib, u32 address,
 
        return status;
 }
+#endif
index d0138af4e246b67987a4a2b655f4e89170442a41..53fd371e916a3c8941d1d95489223c72ceb3cb07 100644 (file)
@@ -1919,6 +1919,7 @@ static u32 find_gcf(u32 a, u32 b)
        return b;
 }
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /**
  * nldr_find_addr() - Find the closest symbol to the given address based on
  *             dynamic node object.
@@ -1997,3 +1998,4 @@ int nldr_find_addr(struct nldr_nodeobject *nldr_node, u32 sym_addr,
 
        return status;
 }
+#endif
index 329fe5eec6cc6970a3e975c7f53ad68cc4ba9077..1870b80fbe64aac77b567154d53e87332bba6936 100644 (file)
@@ -3200,6 +3200,7 @@ static u32 mem_write(void *priv_ref, u32 ulDspAddr, void *pbuf,
        return ul_num_bytes;
 }
 
+#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE
 /*
  *  ======== node_find_addr ========
  */
@@ -3229,4 +3230,4 @@ int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr,
 
        return status;
 }
-
+#endif