aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2014-04-16 16:47:28 -0400
committerNishanth Menon <nm@ti.com>2014-05-05 15:34:09 -0400
commit7f9de02d603c439890c4c94631a326c73e2b5b4c (patch)
tree5b25fc0501b25a98cd7d81d6ad02db1f6ae6df79
parent2100b595b756db29a0b71de49c3bf73ae76c679b (diff)
bus: omap_l3_noc: add information about the type of operation
Today we get error such as L3 Custom Error: MASTER MPU TARGET L4PER2 But since the actual instruction triggerring the error Vs the point at which we report error may not be aligned, it makes sense to try and provide additional information - example the type of operation that was attempted to being performed can help narrow the debug down further. This helps provide log such as: L3 Custom Error: MASTER MPU TARGET L4PER2 (Read) 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>
-rw-r--r--drivers/bus/omap_l3_noc.c9
-rw-r--r--drivers/bus/omap_l3_noc.h13
2 files changed, 21 insertions, 1 deletions
diff --git a/drivers/bus/omap_l3_noc.c b/drivers/bus/omap_l3_noc.c
index 00e4fed4a39b..9d021d002bec 100644
--- a/drivers/bus/omap_l3_noc.c
+++ b/drivers/bus/omap_l3_noc.c
@@ -60,8 +60,10 @@ static int l3_handle_target(struct omap_l3 *l3, void __iomem *base,
60{ 60{
61 int k; 61 int k;
62 u32 std_err_main, clear, masterid; 62 u32 std_err_main, clear, masterid;
63 u8 op_code;
63 void __iomem *l3_targ_base; 64 void __iomem *l3_targ_base;
64 void __iomem *l3_targ_stderr, *l3_targ_slvofslsb, *l3_targ_mstaddr; 65 void __iomem *l3_targ_stderr, *l3_targ_slvofslsb, *l3_targ_mstaddr;
66 void __iomem *l3_targ_hdr;
65 struct l3_target_data *l3_targ_inst; 67 struct l3_target_data *l3_targ_inst;
66 struct l3_masters_data *master; 68 struct l3_masters_data *master;
67 char *target_name, *master_name = "UN IDENTIFIED"; 69 char *target_name, *master_name = "UN IDENTIFIED";
@@ -96,6 +98,7 @@ static int l3_handle_target(struct omap_l3 *l3, void __iomem *base,
96 readl_relaxed(l3_targ_slvofslsb)); 98 readl_relaxed(l3_targ_slvofslsb));
97 99
98 l3_targ_mstaddr = l3_targ_base + L3_TARG_STDERRLOG_MSTADDR; 100 l3_targ_mstaddr = l3_targ_base + L3_TARG_STDERRLOG_MSTADDR;
101 l3_targ_hdr = l3_targ_base + L3_TARG_STDERRLOG_HDR;
99 break; 102 break;
100 103
101 case CUSTOM_ERROR: 104 case CUSTOM_ERROR:
@@ -103,6 +106,7 @@ static int l3_handle_target(struct omap_l3 *l3, void __iomem *base,
103 106
104 l3_targ_mstaddr = l3_targ_base + 107 l3_targ_mstaddr = l3_targ_base +
105 L3_TARG_STDERRLOG_CINFO_MSTADDR; 108 L3_TARG_STDERRLOG_CINFO_MSTADDR;
109 l3_targ_hdr = l3_targ_base + L3_TARG_STDERRLOG_CINFO_OPCODE;
106 break; 110 break;
107 111
108 default: 112 default:
@@ -122,11 +126,14 @@ static int l3_handle_target(struct omap_l3 *l3, void __iomem *base,
122 } 126 }
123 } 127 }
124 128
129 op_code = readl_relaxed(l3_targ_hdr) & 0x7;
130
125 WARN(true, 131 WARN(true,
126 "%s:L3 %s Error: MASTER %s TARGET %s%s\n", 132 "%s:L3 %s Error: MASTER %s TARGET %s (%s)%s\n",
127 dev_name(l3->dev), 133 dev_name(l3->dev),
128 err_description, 134 err_description,
129 master_name, target_name, 135 master_name, target_name,
136 l3_transaction_type[op_code],
130 err_string); 137 err_string);
131 138
132 /* clear the std error log*/ 139 /* clear the std error log*/
diff --git a/drivers/bus/omap_l3_noc.h b/drivers/bus/omap_l3_noc.h
index 4e18307470f6..6670fd98ce7c 100644
--- a/drivers/bus/omap_l3_noc.h
+++ b/drivers/bus/omap_l3_noc.h
@@ -29,14 +29,27 @@
29 29
30/* L3 TARG register offsets */ 30/* L3 TARG register offsets */
31#define L3_TARG_STDERRLOG_MAIN 0x48 31#define L3_TARG_STDERRLOG_MAIN 0x48
32#define L3_TARG_STDERRLOG_HDR 0x4c
32#define L3_TARG_STDERRLOG_MSTADDR 0x50 33#define L3_TARG_STDERRLOG_MSTADDR 0x50
33#define L3_TARG_STDERRLOG_SLVOFSLSB 0x5c 34#define L3_TARG_STDERRLOG_SLVOFSLSB 0x5c
34#define L3_TARG_STDERRLOG_CINFO_MSTADDR 0x68 35#define L3_TARG_STDERRLOG_CINFO_MSTADDR 0x68
36#define L3_TARG_STDERRLOG_CINFO_OPCODE 0x6c
35#define L3_FLAGMUX_REGERR0 0xc 37#define L3_FLAGMUX_REGERR0 0xc
36#define L3_FLAGMUX_MASK0 0x8 38#define L3_FLAGMUX_MASK0 0x8
37 39
38#define L3_TARGET_NOT_SUPPORTED NULL 40#define L3_TARGET_NOT_SUPPORTED NULL
39 41
42static const char * const l3_transaction_type[] = {
43 /* 0 0 0 */ "Idle",
44 /* 0 0 1 */ "Write",
45 /* 0 1 0 */ "Read",
46 /* 0 1 1 */ "ReadEx",
47 /* 1 0 0 */ "Read Link",
48 /* 1 0 1 */ "Write Non-Posted",
49 /* 1 1 0 */ "Write Conditional",
50 /* 1 1 1 */ "Write Broadcast",
51};
52
40/** 53/**
41 * struct l3_masters_data - L3 Master information 54 * struct l3_masters_data - L3 Master information
42 * @id: ID of the L3 Master 55 * @id: ID of the L3 Master