uint64_t        line_len;
 } oppanel_line_t;
 
+/* /sys/firmware/opal */
+extern struct kobject *opal_kobj;
+
 /* API functions */
 int64_t opal_console_write(int64_t term_number, __be64 *length,
                           const uint8_t *buffer);
 
 #include <linux/interrupt.h>
 #include <linux/notifier.h>
 #include <linux/slab.h>
+#include <linux/kobject.h>
 #include <asm/opal.h>
 #include <asm/firmware.h>
 
 #include "powernv.h"
 
+/* /sys/firmware/opal */
+struct kobject *opal_kobj;
+
 struct opal {
        u64 base;
        u64 entry;
        return IRQ_HANDLED;
 }
 
+static int opal_sysfs_init(void)
+{
+       opal_kobj = kobject_create_and_add("opal", firmware_kobj);
+       if (!opal_kobj) {
+               pr_warn("kobject_create_and_add opal failed\n");
+               return -ENOMEM;
+       }
+
+       return 0;
+}
+
 static int __init opal_init(void)
 {
        struct device_node *np, *consoles;
                                   " (0x%x)\n", rc, irq, hwirq);
                opal_irqs[i] = irq;
        }
+
+       /* Create "opal" kobject under /sys/firmware */
+       rc = opal_sysfs_init();
+
        return 0;
 }
 subsys_initcall(opal_init);