extern struct efi_memory_map_loongson *loongson_memmap;
 extern struct loongson_system_configuration loongson_sysconf;
 
+extern struct board_devices *eboard;
+extern struct interface_info *einter;
+extern struct loongson_special_attribute *especial;
+
 extern u32 node_id_offset;
 extern void ls7a_early_config(void);
 extern void rs780e_early_config(void);
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0
+#include <linux/kobject.h>
+#include <boot_param.h>
+
+static ssize_t boardinfo_show(struct kobject *kobj,
+                             struct kobj_attribute *attr, char *buf)
+{
+       char board_manufacturer[64] = {0};
+       char *tmp_board_manufacturer = board_manufacturer;
+       char bios_vendor[64] = {0};
+       char *tmp_bios_vendor = bios_vendor;
+
+       strcpy(board_manufacturer, eboard->name);
+       strcpy(bios_vendor, einter->description);
+
+       return sprintf(buf,
+                      "Board Info\n"
+                      "Manufacturer\t\t: %s\n"
+                      "Board Name\t\t: %s\n"
+                      "Family\t\t\t: LOONGSON3\n\n"
+                      "BIOS Info\n"
+                      "Vendor\t\t\t: %s\n"
+                      "Version\t\t\t: %s\n"
+                      "ROM Size\t\t: %d KB\n"
+                      "Release Date\t\t: %s\n",
+                      strsep(&tmp_board_manufacturer, "-"),
+                      eboard->name,
+                      strsep(&tmp_bios_vendor, "-"),
+                      einter->description,
+                      einter->size,
+                      especial->special_name);
+}
+static struct kobj_attribute boardinfo_attr = __ATTR(boardinfo, 0444,
+                                                    boardinfo_show, NULL);
+
+static int __init boardinfo_init(void)
+{
+       struct kobject *lefi_kobj;
+
+       lefi_kobj = kobject_create_and_add("lefi", firmware_kobj);
+       if (!lefi_kobj) {
+               pr_err("lefi: Firmware registration failed.\n");
+               return -ENOMEM;
+       }
+
+       return sysfs_create_file(lefi_kobj, &boardinfo_attr.attr);
+}
+late_initcall(boardinfo_init);
 
 struct efi_memory_map_loongson *loongson_memmap;
 struct loongson_system_configuration loongson_sysconf;
 
+struct board_devices *eboard;
+struct interface_info *einter;
+struct loongson_special_attribute *especial;
+
 u64 loongson_chipcfg[MAX_PACKAGES] = {0xffffffffbfc00180};
 u64 loongson_chiptemp[MAX_PACKAGES];
 u64 loongson_freqctrl[MAX_PACKAGES];
                ((u64)loongson_p + loongson_p->system_offset);
        ecpu = (struct efi_cpuinfo_loongson *)
                ((u64)loongson_p + loongson_p->cpu_offset);
+       eboard = (struct board_devices *)
+               ((u64)loongson_p + loongson_p->boarddev_table_offset);
+       einter = (struct interface_info *)
+               ((u64)loongson_p + loongson_p->interface_offset);
+       especial = (struct loongson_special_attribute *)
+               ((u64)loongson_p + loongson_p->special_offset);
        eirq_source = (struct irq_source_routing_table *)
                ((u64)loongson_p + loongson_p->irq_offset);
        loongson_memmap = (struct efi_memory_map_loongson *)