Esempio n. 1
0
static int start(void)
{
	int err;

	if (tegra_profiler_try_lock()) {
		pr_err("Error: tegra_profiler lock\n");
		return -EBUSY;
	}

	if (!atomic_cmpxchg(&ctx.started, 0, 1)) {
		if (ctx.pmu) {
			err = ctx.pmu->enable();
			if (err) {
				pr_err("error: pmu enable\n");
				goto errout;
			}
		}

		if (ctx.pl310) {
			err = ctx.pl310->enable();
			if (err) {
				pr_err("error: pl310 enable\n");
				goto errout;
			}
		}

		ctx.comm->reset();

		err = quadd_power_clk_start();
		if (err < 0) {
			pr_err("error: power_clk start\n");
			goto errout;
		}

		err = quadd_hrt_start();
		if (err) {
			pr_err("error: hrt start\n");
			goto errout;
		}
	}

	return 0;

errout:
	atomic_set(&ctx.started, 0);
	tegra_profiler_unlock();
	return err;
}
Esempio n. 2
0
static int start(void)
{
	int err;

	if (!atomic_cmpxchg(&ctx.started, 0, 1)) {
		if (ctx.pmu) {
			err = ctx.pmu->enable();
			if (err) {
				pr_err("error: pmu enable\n");
				return err;
			}
		}

		if (ctx.pl310) {
			err = ctx.pl310->enable();
			if (err) {
				pr_err("error: pl310 enable\n");
				return err;
			}
		}

		quadd_mmap_reset();
		ctx.comm->reset();

		err = quadd_power_clk_start();
		if (err < 0) {
			pr_err("error: power_clk start\n");
			return err;
		}

		err = quadd_hrt_start();
		if (err) {
			pr_err("error: hrt start\n");
			return err;
		}
	}

	return 0;
}