2013-11-12 13:32:13 -08:00
/*
* chromeos_pstore . c - Driver to instantiate Chromebook ramoops device
*
* Copyright ( C ) 2013 Google , Inc .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , version 2 of the License .
*/
# include <linux/dmi.h>
# include <linux/module.h>
# include <linux/platform_device.h>
# include <linux/pstore_ram.h>
static struct dmi_system_id chromeos_pstore_dmi_table [ ] __initdata = {
{
/*
2014-07-10 10:17:35 -07:00
* Today all Chromebooks / boxes ship with Google_ * as version and
2013-11-12 13:32:13 -08:00
* coreboot as bios vendor . No other systems with this
* combination are known to date .
*/
. matches = {
DMI_MATCH ( DMI_BIOS_VENDOR , " coreboot " ) ,
2014-07-10 10:17:35 -07:00
DMI_MATCH ( DMI_BIOS_VERSION , " Google_ " ) ,
2013-11-12 13:32:13 -08:00
} ,
} ,
{
/* x86-alex, the first Samsung Chromebook. */
. matches = {
DMI_MATCH ( DMI_SYS_VENDOR , " SAMSUNG ELECTRONICS CO., LTD. " ) ,
DMI_MATCH ( DMI_PRODUCT_NAME , " Alex " ) ,
} ,
} ,
{
/* x86-mario, the Cr-48 pilot device from Google. */
. matches = {
DMI_MATCH ( DMI_SYS_VENDOR , " IEC " ) ,
DMI_MATCH ( DMI_PRODUCT_NAME , " Mario " ) ,
} ,
} ,
{
/* x86-zgb, the first Acer Chromebook. */
. matches = {
DMI_MATCH ( DMI_SYS_VENDOR , " ACER " ) ,
DMI_MATCH ( DMI_PRODUCT_NAME , " ZGB " ) ,
} ,
} ,
{ }
} ;
MODULE_DEVICE_TABLE ( dmi , chromeos_pstore_dmi_table ) ;
/*
* On x86 chromebooks / boxes , the firmware will keep the legacy VGA memory
* range untouched across reboots , so we use that to store our pstore
* contents for panic logs , etc .
*/
static struct ramoops_platform_data chromeos_ramoops_data = {
. mem_size = 0x100000 ,
. mem_address = 0xf00000 ,
. record_size = 0x20000 ,
. console_size = 0x20000 ,
. ftrace_size = 0x20000 ,
. dump_oops = 1 ,
} ;
static struct platform_device chromeos_ramoops = {
. name = " ramoops " ,
. dev = {
. platform_data = & chromeos_ramoops_data ,
} ,
} ;
static int __init chromeos_pstore_init ( void )
{
if ( dmi_check_system ( chromeos_pstore_dmi_table ) )
return platform_device_register ( & chromeos_ramoops ) ;
return - ENODEV ;
}
static void __exit chromeos_pstore_exit ( void )
{
platform_device_unregister ( & chromeos_ramoops ) ;
}
module_init ( chromeos_pstore_init ) ;
module_exit ( chromeos_pstore_exit ) ;
MODULE_DESCRIPTION ( " Chrome OS pstore module " ) ;
MODULE_LICENSE ( " GPL " ) ;