diff --git a/marvell/linux/drivers/pnp/isapnp/proc.c b/marvell/linux/drivers/pnp/isapnp/proc.c
new file mode 100644
index 0000000..3682097
--- /dev/null
+++ b/marvell/linux/drivers/pnp/isapnp/proc.c
@@ -0,0 +1,88 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ *  ISA Plug & Play support
+ *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
+ */
+
+#include <linux/module.h>
+#include <linux/isapnp.h>
+#include <linux/proc_fs.h>
+#include <linux/init.h>
+#include <linux/uaccess.h>
+
+extern struct pnp_protocol isapnp_protocol;
+
+static struct proc_dir_entry *isapnp_proc_bus_dir = NULL;
+
+static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence)
+{
+	return fixed_size_llseek(file, off, whence, 256);
+}
+
+static ssize_t isapnp_proc_bus_read(struct file *file, char __user * buf,
+				    size_t nbytes, loff_t * ppos)
+{
+	struct pnp_dev *dev = PDE_DATA(file_inode(file));
+	int pos = *ppos;
+	int cnt, size = 256;
+
+	if (pos >= size)
+		return 0;
+	if (nbytes >= size)
+		nbytes = size;
+	if (pos + nbytes > size)
+		nbytes = size - pos;
+	cnt = nbytes;
+
+	if (!access_ok(buf, cnt))
+		return -EINVAL;
+
+	isapnp_cfg_begin(dev->card->number, dev->number);
+	for (; pos < 256 && cnt > 0; pos++, buf++, cnt--) {
+		unsigned char val;
+		val = isapnp_read_byte(pos);
+		__put_user(val, buf);
+	}
+	isapnp_cfg_end();
+
+	*ppos = pos;
+	return nbytes;
+}
+
+static const struct file_operations isapnp_proc_bus_file_operations = {
+	.owner	= THIS_MODULE,
+	.llseek = isapnp_proc_bus_lseek,
+	.read = isapnp_proc_bus_read,
+};
+
+static int isapnp_proc_attach_device(struct pnp_dev *dev)
+{
+	struct pnp_card *bus = dev->card;
+	struct proc_dir_entry *de, *e;
+	char name[16];
+
+	if (!(de = bus->procdir)) {
+		sprintf(name, "%02x", bus->number);
+		de = bus->procdir = proc_mkdir(name, isapnp_proc_bus_dir);
+		if (!de)
+			return -ENOMEM;
+	}
+	sprintf(name, "%02x", dev->number);
+	e = dev->procent = proc_create_data(name, S_IFREG | S_IRUGO, de,
+			&isapnp_proc_bus_file_operations, dev);
+	if (!e)
+		return -ENOMEM;
+	proc_set_size(e, 256);
+	return 0;
+}
+
+int __init isapnp_proc_init(void)
+{
+	struct pnp_dev *dev;
+
+	isapnp_proc_bus_dir = proc_mkdir("bus/isapnp", NULL);
+	protocol_for_each_dev(&isapnp_protocol, dev) {
+		isapnp_proc_attach_device(dev);
+	}
+	return 0;
+}
