1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 27a1a44c9SJohn Crispin /* 37a1a44c9SJohn Crispin * 497b92108SJohn Crispin * Copyright (C) 2013 John Crispin <john@phrozen.org> 57a1a44c9SJohn Crispin */ 67a1a44c9SJohn Crispin 77a1a44c9SJohn Crispin #include <linux/debugfs.h> 87a1a44c9SJohn Crispin #include <linux/seq_file.h> 97a1a44c9SJohn Crispin 107a1a44c9SJohn Crispin #define BOOTROM_OFFSET 0x10118000 117a1a44c9SJohn Crispin #define BOOTROM_SIZE 0x8000 127a1a44c9SJohn Crispin 137a1a44c9SJohn Crispin static void __iomem *membase = (void __iomem *) KSEG1ADDR(BOOTROM_OFFSET); 147a1a44c9SJohn Crispin 157a1a44c9SJohn Crispin static int bootrom_show(struct seq_file *s, void *unused) 167a1a44c9SJohn Crispin { 177a1a44c9SJohn Crispin seq_write(s, membase, BOOTROM_SIZE); 187a1a44c9SJohn Crispin 197a1a44c9SJohn Crispin return 0; 207a1a44c9SJohn Crispin } 217a1a44c9SJohn Crispin 227a1a44c9SJohn Crispin static int bootrom_open(struct inode *inode, struct file *file) 237a1a44c9SJohn Crispin { 247a1a44c9SJohn Crispin return single_open(file, bootrom_show, NULL); 257a1a44c9SJohn Crispin } 267a1a44c9SJohn Crispin 277a1a44c9SJohn Crispin static const struct file_operations bootrom_file_ops = { 287a1a44c9SJohn Crispin .open = bootrom_open, 297a1a44c9SJohn Crispin .read = seq_read, 307a1a44c9SJohn Crispin .llseek = seq_lseek, 317a1a44c9SJohn Crispin .release = single_release, 327a1a44c9SJohn Crispin }; 337a1a44c9SJohn Crispin 34*38950069SChristophe JAILLET static int __init bootrom_setup(void) 357a1a44c9SJohn Crispin { 364c90de4dSGreg Kroah-Hartman debugfs_create_file("bootrom", 0444, NULL, NULL, &bootrom_file_ops); 377a1a44c9SJohn Crispin return 0; 387a1a44c9SJohn Crispin } 397a1a44c9SJohn Crispin 407a1a44c9SJohn Crispin postcore_initcall(bootrom_setup); 41