Skip to content

Commit

Permalink
bus: omap_l3_noc: make error reporting and handling common
Browse files Browse the repository at this point in the history
The logic between handling CUSTOM_ERROR and STANDARD_ERROR is just the
reporting style.

So make it generic, simplify and standardize the reporting with both
master and target information printed to log.

Handle the register address difference for master code for standard
error and custom error as well.

While at it, fix a minor indentation error.

Signed-off-by: Nishanth Menon <nm@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Tested-by: Darren Etheridge <detheridge@ti.com>
Tested-by: Sekhar Nori <nsekhar@ti.com>
  • Loading branch information
Nishanth Menon committed May 5, 2014
1 parent d4d8819 commit c98aa7a
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 28 deletions.
72 changes: 45 additions & 27 deletions drivers/bus/omap_l3_noc.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
struct l3_target_data *l3_targ_inst;
struct l3_flagmux_data *flag_mux;
struct l3_masters_data *master;
char *err_description;
char err_string[30] = { 0 };

/* Get the Type of interrupt */
inttype = irq == l3->app_irq ? L3_APPLICATION_ERROR : L3_DEBUG_ERROR;
Expand All @@ -78,6 +80,8 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)

/* Get the corresponding error and analyse */
if (err_reg) {
bool std_err = true;

/* Identify the source from control status register */
err_src = __ffs(err_reg);

Expand Down Expand Up @@ -123,47 +127,61 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
l3_targ_stderr = l3_targ_base + L3_TARG_STDERRLOG_MAIN;
l3_targ_slvofslsb = l3_targ_base +
L3_TARG_STDERRLOG_SLVOFSLSB;
l3_targ_mstaddr = l3_targ_base +
L3_TARG_STDERRLOG_MSTADDR;

std_err_main = readl_relaxed(l3_targ_stderr);

/* STDERRLOG_MSTADDR Stores the NTTP master address. */
masterid = (readl_relaxed(l3_targ_mstaddr) &
l3->mst_addr_mask) >>
__ffs(l3->mst_addr_mask);

switch (std_err_main & CUSTOM_ERROR) {
case STANDARD_ERROR:
WARN(true, "L3 standard error: TARGET:%s at address 0x%x\n",
target_name,
readl_relaxed(l3_targ_slvofslsb));
/* clear the std error log*/
clear = std_err_main | CLEAR_STDERR_LOG;
writel_relaxed(clear, l3_targ_stderr);
err_description = "Standard";
snprintf(err_string, sizeof(err_string),
": At Address: 0x%08X ",
readl_relaxed(l3_targ_slvofslsb));

l3_targ_mstaddr = l3_targ_base +
L3_TARG_STDERRLOG_MSTADDR;
break;

case CUSTOM_ERROR:
for (k = 0, master = l3->l3_masters;
k < l3->num_masters; k++, master++) {
if (masterid == master->id) {
master_name = master->name;
break;
}
}
WARN(true, "L3 custom error: MASTER:%s TARGET:%s\n",
master_name, target_name);
/* clear the std error log*/
clear = std_err_main | CLEAR_STDERR_LOG;
writel_relaxed(clear, l3_targ_stderr);
err_description = "Custom";

l3_targ_mstaddr = l3_targ_base +
L3_TARG_STDERRLOG_CINFO_MSTADDR;
break;

default:
std_err = false;
/* Nothing to be handled here as of now */
break;
}
/* Error found so break the for loop */
break;

if (!std_err)
break;

/* STDERRLOG_MSTADDR Stores the NTTP master address. */
masterid = (readl_relaxed(l3_targ_mstaddr) &
l3->mst_addr_mask) >>
__ffs(l3->mst_addr_mask);

for (k = 0, master = l3->l3_masters;
k < l3->num_masters; k++, master++) {
if (masterid == master->id) {
master_name = master->name;
break;
}
}

WARN(true,
"%s:L3 %s Error: MASTER %s TARGET %s%s\n",
dev_name(l3->dev),
err_description,
master_name, target_name,
err_string);
/* clear the std error log*/
clear = std_err_main | CLEAR_STDERR_LOG;
writel_relaxed(clear, l3_targ_stderr);

/* Error found so break the for loop */
break;
}
}
return IRQ_HANDLED;
Expand Down
3 changes: 2 additions & 1 deletion drivers/bus/omap_l3_noc.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@

/* L3 TARG register offsets */
#define L3_TARG_STDERRLOG_MAIN 0x48
#define L3_TARG_STDERRLOG_MSTADDR 0x50
#define L3_TARG_STDERRLOG_SLVOFSLSB 0x5c
#define L3_TARG_STDERRLOG_MSTADDR 0x68
#define L3_TARG_STDERRLOG_CINFO_MSTADDR 0x68
#define L3_FLAGMUX_REGERR0 0xc
#define L3_FLAGMUX_MASK0 0x8

Expand Down

0 comments on commit c98aa7a

Please sign in to comment.