Esempio n. 1
0
static int show_channels(struct device *dev, void *data)
{
	struct nvhost_channel *ch;
	struct nvhost_device *nvdev = to_nvhost_device(dev);
	struct output *o = data;
	struct nvhost_master *m;

	if (nvdev == NULL)
		return 0;

	m = nvhost_get_host(nvdev);
	ch = nvdev->channel;
	if (ch) {
		mutex_lock(&ch->reflock);
		if (ch->refcount) {
			mutex_lock(&ch->cdma.lock);
			nvhost_get_chip_ops()->debug.show_channel_fifo(m, ch, o, nvdev->index);
			nvhost_get_chip_ops()->debug.show_channel_cdma(m, ch, o, nvdev->index);
			mutex_unlock(&ch->cdma.lock);
		}
		mutex_unlock(&ch->reflock);
	}

	return 0;
}
Esempio n. 2
0
static void show_syncpts(struct nvhost_master *m, struct output *o)
{
	int i;
	BUG_ON(!nvhost_get_chip_ops()->syncpt.name);
	nvhost_debug_output(o, "---- syncpts ----\n");
	for (i = 0; i < nvhost_syncpt_nb_pts(&m->syncpt); i++) {
		u32 max = nvhost_syncpt_read_max(&m->syncpt, i);
		u32 min = nvhost_syncpt_update_min(&m->syncpt, i);
		if (!min && !max)
			continue;
		nvhost_debug_output(o, "id %d (%s) min %d max %d\n",
				i, nvhost_get_chip_ops()->syncpt.name(&m->syncpt, i),
				min, max);
	}

	for (i = 0; i < nvhost_syncpt_nb_pts(&m->syncpt); i++) {
		u32 base_val;
		base_val = nvhost_syncpt_read_wait_base(&m->syncpt, i);
		if (base_val)
			nvhost_debug_output(o, "waitbase id %d val %d\n",
					i, base_val);
	}

	nvhost_debug_output(o, "\n");
}
Esempio n. 3
0
static int show_channels(struct platform_device *pdev, void *data)
{
	struct nvhost_channel *ch;
	struct output *o = data;
	struct nvhost_master *m;
	struct nvhost_device_data *pdata;

	if (pdev == NULL)
		return 0;

	pdata = platform_get_drvdata(pdev);
	m = nvhost_get_host(pdev);
	ch = pdata->channel;
	if (ch) {
		int locked = mutex_trylock(&ch->reflock);
		if (ch->refcount) {
			mutex_lock(&ch->cdma.lock);
			nvhost_get_chip_ops()->debug.show_channel_fifo(
				m, ch, o, pdata->index);
			nvhost_get_chip_ops()->debug.show_channel_cdma(
				m, ch, o, pdata->index);
			mutex_unlock(&ch->cdma.lock);
		}
		if (locked)
			mutex_unlock(&ch->reflock);
	}

	return 0;
}
Esempio n. 4
0
void nvhost_debug_init(struct nvhost_master *master)
{
	struct nvhost_device_data *pdata;
	struct dentry *de = debugfs_create_dir("tegra_host", NULL);

	if (!de)
		return;

	pdata = platform_get_drvdata(master->dev);

	/* Store the created entry */
	pdata->debugfs = de;

	debugfs_create_file("status", S_IRUGO, de,
			master, &nvhost_debug_fops);
	debugfs_create_file("status_all", S_IRUGO, de,
			master, &nvhost_debug_all_fops);

	debugfs_create_u32("null_kickoff_pid", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_null_kickoff_pid);
	debugfs_create_u32("trace_cmdbuf", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_trace_cmdbuf);

	if (nvhost_get_chip_ops()->debug.debug_init)
		nvhost_get_chip_ops()->debug.debug_init(de);

	debugfs_create_u32("force_timeout_pid", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_pid);
	debugfs_create_u32("force_timeout_val", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_val);
	debugfs_create_u32("force_timeout_channel", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_channel);
	debugfs_create_u32("force_timeout_dump", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_dump);
	nvhost_debug_force_timeout_dump = 0;

	debugfs_create_file("3d_actmon_k", S_IRUGO, de,
			master, &actmon_k_fops);
	debugfs_create_file("3d_actmon_sample_period", S_IRUGO, de,
			master, &actmon_sample_period_fops);
	debugfs_create_file("3d_actmon_sample_period_norm", S_IRUGO, de,
			master, &actmon_sample_period_norm_fops);
	debugfs_create_file("3d_actmon_avg_norm", S_IRUGO, de,
			master, &actmon_avg_norm_fops);
	debugfs_create_file("3d_actmon_avg", S_IRUGO, de,
			master, &actmon_avg_fops);
	debugfs_create_file("3d_actmon_above_wmark", S_IRUGO, de,
			master, &actmon_above_wmark_fops);
	debugfs_create_file("3d_actmon_below_wmark", S_IRUGO, de,
			master, &actmon_below_wmark_fops);
}
Esempio n. 5
0
static void show_all_no_fifo(struct nvhost_master *m, struct output *o)
{
	nvhost_module_busy(m->dev);

	nvhost_get_chip_ops()->debug.show_mlocks(m, o);
	show_syncpts(m, o);
	nvhost_debug_output(o, "---- channels ----\n");
	nvhost_device_list_for_all(o, show_channels_no_fifo);

	nvhost_module_idle(m->dev);
}
Esempio n. 6
0
static void show_all_no_fifo(struct nvhost_master *m, struct output *o)
{
	nvhost_module_busy(m->dev);

	nvhost_get_chip_ops()->debug.show_mlocks(m, o);
	show_syncpts(m, o);
	nvhost_debug_output(o, "---- channels ----\n");
	bus_for_each_dev(&(nvhost_bus_get())->nvhost_bus_type, NULL, o,
			show_channels_no_fifo);

	nvhost_module_idle(m->dev);
}
Esempio n. 7
0
void nvhost_debug_init(struct nvhost_master *master)
{
	struct dentry *de = debugfs_create_dir("tegra_host", NULL);

	debugfs_create_file("status", S_IRUGO, de,
			master, &nvhost_debug_fops);
	debugfs_create_file("status_all", S_IRUGO, de,
			master, &nvhost_debug_all_fops);

	debugfs_create_u32("null_kickoff_pid", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_null_kickoff_pid);
	debugfs_create_u32("trace_cmdbuf", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_trace_cmdbuf);

	if (nvhost_get_chip_ops()->debug.debug_init)
		nvhost_get_chip_ops()->debug.debug_init(de);

	debugfs_create_u32("force_timeout_pid", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_pid);
	debugfs_create_u32("force_timeout_val", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_val);
	debugfs_create_u32("force_timeout_channel", S_IRUGO|S_IWUSR, de,
			&nvhost_debug_force_timeout_channel);
}