Exemplo n.º 1
0
static int arm11_dpm_prepare(struct arm_dpm *dpm)
{
	struct arm11_common *arm11 = dpm_to_arm11(dpm);

	arm11 = container_of(dpm->arm, struct arm11_common, arm);

	return arm11_run_instr_data_prepare(dpm_to_arm11(dpm));
}
Exemplo n.º 2
0
static int arm11_bpwp_disable(struct arm_dpm *dpm, unsigned index)
{
	struct arm11_common *arm11 = dpm_to_arm11(dpm);
	struct arm11_sc7_action *action;

	action = arm11->bpwp_actions + arm11->bpwp_n;

	action[0].write = true;
	action[0].value = 0;

	switch (index) {
	case 0 ... 15:
		action[0].address = ARM11_SC7_BCR0 + index;
		break;
	case 16 ... 32:
		index -= 16;
		action[0].address = ARM11_SC7_WCR0 + index;
		break;
	default:
		return ERROR_FAIL;
	}

	arm11->bpwp_n += 1;

	return ERROR_OK;
}
Exemplo n.º 3
0
/* Because arm11_sc7_run() takes a vector of actions, we batch breakpoint
 * and watchpoint operations instead of running them right away.  Since we
 * pre-allocated our vector, we don't need to worry about space.
 */
static int arm11_bpwp_enable(struct arm_dpm *dpm, unsigned index,
		uint32_t addr, uint32_t control)
{
	struct arm11_common *arm11 = dpm_to_arm11(dpm);
	struct arm11_sc7_action *action;

	action = arm11->bpwp_actions + arm11->bpwp_n;

	/* Invariant:  this bp/wp is disabled.
	 * It also happens that the core is halted here, but for
	 * DPM-based cores we don't actually care about that.
	 */

	action[0].write = action[1].write = true;

	action[0].value = addr;
	action[1].value = control;

	switch (index) {
	case 0 ... 15:
		action[0].address = ARM11_SC7_BVR0 + index;
		action[1].address = ARM11_SC7_BCR0 + index;
		break;
	case 16 ... 32:
		index -= 16;
		action[0].address = ARM11_SC7_WVR0 + index;
		action[1].address = ARM11_SC7_WCR0 + index;
		break;
	default:
		return ERROR_FAIL;
	}

	arm11->bpwp_n += 2;

	return ERROR_OK;
}
Exemplo n.º 4
0
static int arm11_dpm_instr_read_data_r0(struct arm_dpm *dpm,
		uint32_t opcode, uint32_t *data)
{
	return arm11_run_instr_data_from_core_via_r0(dpm_to_arm11(dpm),
			opcode, data);
}
Exemplo n.º 5
0
static int arm11_dpm_instr_write_data_r0(struct arm_dpm *dpm,
		uint32_t opcode, uint32_t data)
{
	return arm11_run_instr_data_to_core_via_r0(dpm_to_arm11(dpm),
			opcode, data);
}
Exemplo n.º 6
0
static int arm11_dpm_instr_write_data_dcc(struct arm_dpm *dpm,
		uint32_t opcode, uint32_t data)
{
	return arm11_run_instr_data_to_core(dpm_to_arm11(dpm),
			opcode, &data, 1);
}
Exemplo n.º 7
0
static int arm11_dpm_finish(struct arm_dpm *dpm)
{
	return arm11_run_instr_data_finish(dpm_to_arm11(dpm));
}
Exemplo n.º 8
0
static int arm11_dpm_prepare(struct arm_dpm *dpm)
{
	return arm11_run_instr_data_prepare(dpm_to_arm11(dpm));
}