/*
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation.
 *
 * Copyright (C) 2013 John Crispin <blogic@openwrt.org>
 */

#include <linux/debugfs.h>
#include <linux/seq_file.h>

#define BOOTROM_OFFSET	0x10118000
#define BOOTROM_SIZE	0x8000

static void __iomem *membase = (void __iomem *) KSEG1ADDR(BOOTROM_OFFSET);

static int bootrom_show(struct seq_file *s, void *unused)
{
	seq_write(s, membase, BOOTROM_SIZE);

	return 0;
}

static int bootrom_open(struct inode *inode, struct file *file)
{
	return single_open(file, bootrom_show, NULL);
}

static const struct file_operations bootrom_file_ops = {
	.open		= bootrom_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
	.release	= single_release,
};

static int bootrom_setup(void)
{
	if (!debugfs_create_file("bootrom", 0444,
			NULL, NULL, &bootrom_file_ops)) {
		pr_err("Failed to create bootrom debugfs file\n");

		return -EINVAL;
	}

	return 0;
}

postcore_initcall(bootrom_setup);
