summaryrefslogtreecommitdiff
path: root/drivers/bus/omap_l3_noc.c
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2014-04-14 18:57:50 +0400
committerNishanth Menon <nm@ti.com>2014-05-05 23:33:40 +0400
commit97708c08c9955306742872ff7f2e47faec864ee7 (patch)
treec5dcf17ecfeeee0472ab7ddfe082fdf6bd43d020 /drivers/bus/omap_l3_noc.c
parent0659452dd2b2602058b80cfdcc673e98f2a67184 (diff)
downloadlinux-97708c08c9955306742872ff7f2e47faec864ee7.tar.xz
bus: omap_l3_noc: convert flagmux information into a structure
This allows us to encompass target information and flag mux offset that points to the target information into a singular structure. This saves us the need to look up two different arrays indexed by module ID for information. This allows us to reduce the static target information allocation to just the ones that are documented. 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>
Diffstat (limited to 'drivers/bus/omap_l3_noc.c')
-rw-r--r--drivers/bus/omap_l3_noc.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/bus/omap_l3_noc.c b/drivers/bus/omap_l3_noc.c
index 7e0a988ad579..9524452ee12c 100644
--- a/drivers/bus/omap_l3_noc.c
+++ b/drivers/bus/omap_l3_noc.c
@@ -60,6 +60,7 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
void __iomem *l3_targ_stderr, *l3_targ_slvofslsb, *l3_targ_mstaddr;
char *target_name, *master_name = "UN IDENTIFIED";
struct l3_target_data *l3_targ_inst;
+ struct l3_flagmux_data *flag_mux;
struct l3_masters_data *master;
/* Get the Type of interrupt */
@@ -71,7 +72,8 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
* to determine the source
*/
base = l3->l3_base[i];
- err_reg = readl_relaxed(base + l3->l3_flagmux[i] +
+ flag_mux = l3->l3_flagmux[i];
+ err_reg = readl_relaxed(base + flag_mux->offset +
L3_FLAGMUX_REGERR0 + (inttype << 3));
/* Get the corresponding error and analyse */
@@ -82,9 +84,13 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
/* We DONOT expect err_src to go out of bounds */
BUG_ON(err_src > MAX_CLKDM_TARGETS);
- l3_targ_inst = &l3->l3_targ[i][err_src];
- target_name = l3_targ_inst->name;
- l3_targ_base = base + l3_targ_inst->offset;
+ if (err_src < flag_mux->num_targ_data) {
+ l3_targ_inst = &flag_mux->l3_targ[err_src];
+ target_name = l3_targ_inst->name;
+ l3_targ_base = base + l3_targ_inst->offset;
+ } else {
+ target_name = L3_TARGET_NOT_SUPPORTED;
+ }
/*
* If we do not know of a register offset to decode
@@ -104,7 +110,7 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
inttype ? "debug" : "application",
err_src, i, "(unclearable)");
- mask_reg = base + l3->l3_flagmux[i] +
+ mask_reg = base + flag_mux->offset +
L3_FLAGMUX_MASK0 + (inttype << 3);
mask_val = readl_relaxed(mask_reg);
mask_val &= ~(1 << err_src);