1*7a1a44c9SJohn Crispin /* 2*7a1a44c9SJohn Crispin * This program is free software; you can redistribute it and/or modify it 3*7a1a44c9SJohn Crispin * under the terms of the GNU General Public License version 2 as published 4*7a1a44c9SJohn Crispin * by the Free Software Foundation. 5*7a1a44c9SJohn Crispin * 6*7a1a44c9SJohn Crispin * Copyright (C) 2013 John Crispin <blogic@openwrt.org> 7*7a1a44c9SJohn Crispin */ 8*7a1a44c9SJohn Crispin 9*7a1a44c9SJohn Crispin #include <linux/debugfs.h> 10*7a1a44c9SJohn Crispin #include <linux/seq_file.h> 11*7a1a44c9SJohn Crispin 12*7a1a44c9SJohn Crispin #define BOOTROM_OFFSET 0x10118000 13*7a1a44c9SJohn Crispin #define BOOTROM_SIZE 0x8000 14*7a1a44c9SJohn Crispin 15*7a1a44c9SJohn Crispin static void __iomem *membase = (void __iomem *) KSEG1ADDR(BOOTROM_OFFSET); 16*7a1a44c9SJohn Crispin 17*7a1a44c9SJohn Crispin static int bootrom_show(struct seq_file *s, void *unused) 18*7a1a44c9SJohn Crispin { 19*7a1a44c9SJohn Crispin seq_write(s, membase, BOOTROM_SIZE); 20*7a1a44c9SJohn Crispin 21*7a1a44c9SJohn Crispin return 0; 22*7a1a44c9SJohn Crispin } 23*7a1a44c9SJohn Crispin 24*7a1a44c9SJohn Crispin static int bootrom_open(struct inode *inode, struct file *file) 25*7a1a44c9SJohn Crispin { 26*7a1a44c9SJohn Crispin return single_open(file, bootrom_show, NULL); 27*7a1a44c9SJohn Crispin } 28*7a1a44c9SJohn Crispin 29*7a1a44c9SJohn Crispin static const struct file_operations bootrom_file_ops = { 30*7a1a44c9SJohn Crispin .open = bootrom_open, 31*7a1a44c9SJohn Crispin .read = seq_read, 32*7a1a44c9SJohn Crispin .llseek = seq_lseek, 33*7a1a44c9SJohn Crispin .release = single_release, 34*7a1a44c9SJohn Crispin }; 35*7a1a44c9SJohn Crispin 36*7a1a44c9SJohn Crispin static int bootrom_setup(void) 37*7a1a44c9SJohn Crispin { 38*7a1a44c9SJohn Crispin if (!debugfs_create_file("bootrom", 0444, 39*7a1a44c9SJohn Crispin NULL, NULL, &bootrom_file_ops)) { 40*7a1a44c9SJohn Crispin pr_err("Failed to create bootrom debugfs file\n"); 41*7a1a44c9SJohn Crispin 42*7a1a44c9SJohn Crispin return -EINVAL; 43*7a1a44c9SJohn Crispin } 44*7a1a44c9SJohn Crispin 45*7a1a44c9SJohn Crispin return 0; 46*7a1a44c9SJohn Crispin } 47*7a1a44c9SJohn Crispin 48*7a1a44c9SJohn Crispin postcore_initcall(bootrom_setup); 49