aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/kernel/pseudodbg.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin/kernel/pseudodbg.c')
-rw-r--r--arch/blackfin/kernel/pseudodbg.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/arch/blackfin/kernel/pseudodbg.c b/arch/blackfin/kernel/pseudodbg.c
index e57ce2f64bfe..db85bc94334e 100644
--- a/arch/blackfin/kernel/pseudodbg.c
+++ b/arch/blackfin/kernel/pseudodbg.c
@@ -158,7 +158,7 @@ bool execute_pseudodbg_assert(struct pt_regs *fp, unsigned int opcode)
158bool execute_pseudodbg(struct pt_regs *fp, unsigned int opcode) 158bool execute_pseudodbg(struct pt_regs *fp, unsigned int opcode)
159{ 159{
160 int grp, fn, reg; 160 int grp, fn, reg;
161 long value; 161 long value, value1;
162 162
163 if ((opcode & 0xFF000000) != PseudoDbg_opcode) 163 if ((opcode & 0xFF000000) != PseudoDbg_opcode)
164 return false; 164 return false;
@@ -168,11 +168,24 @@ bool execute_pseudodbg(struct pt_regs *fp, unsigned int opcode)
168 fn = ((opcode >> PseudoDbg_fn_bits) & PseudoDbg_fn_mask); 168 fn = ((opcode >> PseudoDbg_fn_bits) & PseudoDbg_fn_mask);
169 reg = ((opcode >> PseudoDbg_reg_bits) & PseudoDbg_reg_mask); 169 reg = ((opcode >> PseudoDbg_reg_bits) & PseudoDbg_reg_mask);
170 170
171 if (!fix_up_reg(fp, &value, grp, reg)) 171 if (fn == 3 && (reg == 0 || reg == 1)) {
172 return false; 172 if (!fix_up_reg(fp, &value, 4, 2 * reg))
173 return false;
174 if (!fix_up_reg(fp, &value1, 4, 2 * reg + 1))
175 return false;
173 176
174 pr_notice("DBG %s = %08lx\n", get_allreg_name(grp, reg), value); 177 pr_notice("DBG A%i = %02lx%08lx\n", reg, value & 0xFF, value1);
178 fp->pc += 2;
179 return true;
175 180
176 fp->pc += 2; 181 } else if (fn == 0) {
177 return true; 182 if (!fix_up_reg(fp, &value, grp, reg))
183 return false;
184
185 pr_notice("DBG %s = %08lx\n", get_allreg_name(grp, reg), value);
186 fp->pc += 2;
187 return true;
188 }
189
190 return false;
178} 191}