1 /* 2 * chromeos_pstore.c - Driver to instantiate Chromebook ramoops device 3 * 4 * Copyright (C) 2013 Google, Inc. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, version 2 of the License. 9 */ 10 11 #include <linux/dmi.h> 12 #include <linux/module.h> 13 #include <linux/platform_device.h> 14 #include <linux/pstore_ram.h> 15 16 static struct dmi_system_id chromeos_pstore_dmi_table[] __initdata = { 17 { 18 /* 19 * Today all Chromebooks/boxes ship with GOOGLE as vendor and 20 * coreboot as bios vendor. No other systems with this 21 * combination are known to date. 22 */ 23 .matches = { 24 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"), 25 DMI_MATCH(DMI_BIOS_VENDOR, "coreboot"), 26 }, 27 }, 28 { 29 /* 30 * The first Samsung Chromebox and Chromebook Series 5 550 use 31 * coreboot but with Samsung as the system vendor. 32 */ 33 .matches = { 34 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG"), 35 DMI_MATCH(DMI_BIOS_VENDOR, "coreboot"), 36 }, 37 }, 38 { 39 /* x86-alex, the first Samsung Chromebook. */ 40 .matches = { 41 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), 42 DMI_MATCH(DMI_PRODUCT_NAME, "Alex"), 43 }, 44 }, 45 { 46 /* x86-mario, the Cr-48 pilot device from Google. */ 47 .matches = { 48 DMI_MATCH(DMI_SYS_VENDOR, "IEC"), 49 DMI_MATCH(DMI_PRODUCT_NAME, "Mario"), 50 }, 51 }, 52 { 53 /* x86-zgb, the first Acer Chromebook. */ 54 .matches = { 55 DMI_MATCH(DMI_SYS_VENDOR, "ACER"), 56 DMI_MATCH(DMI_PRODUCT_NAME, "ZGB"), 57 }, 58 }, 59 { } 60 }; 61 MODULE_DEVICE_TABLE(dmi, chromeos_pstore_dmi_table); 62 63 /* 64 * On x86 chromebooks/boxes, the firmware will keep the legacy VGA memory 65 * range untouched across reboots, so we use that to store our pstore 66 * contents for panic logs, etc. 67 */ 68 static struct ramoops_platform_data chromeos_ramoops_data = { 69 .mem_size = 0x100000, 70 .mem_address = 0xf00000, 71 .record_size = 0x20000, 72 .console_size = 0x20000, 73 .ftrace_size = 0x20000, 74 .dump_oops = 1, 75 }; 76 77 static struct platform_device chromeos_ramoops = { 78 .name = "ramoops", 79 .dev = { 80 .platform_data = &chromeos_ramoops_data, 81 }, 82 }; 83 84 static int __init chromeos_pstore_init(void) 85 { 86 if (dmi_check_system(chromeos_pstore_dmi_table)) 87 return platform_device_register(&chromeos_ramoops); 88 89 return -ENODEV; 90 } 91 92 static void __exit chromeos_pstore_exit(void) 93 { 94 platform_device_unregister(&chromeos_ramoops); 95 } 96 97 module_init(chromeos_pstore_init); 98 module_exit(chromeos_pstore_exit); 99 100 MODULE_DESCRIPTION("Chrome OS pstore module"); 101 MODULE_LICENSE("GPL"); 102