diff options
Diffstat (limited to 'drivers/firmware/google/memconsole-coreboot.c')
| -rw-r--r-- | drivers/firmware/google/memconsole-coreboot.c | 49 | 
1 files changed, 17 insertions, 32 deletions
diff --git a/drivers/firmware/google/memconsole-coreboot.c b/drivers/firmware/google/memconsole-coreboot.c index 52738887735c..b29e10757bfb 100644 --- a/drivers/firmware/google/memconsole-coreboot.c +++ b/drivers/firmware/google/memconsole-coreboot.c @@ -15,9 +15,9 @@   * GNU General Public License for more details.   */ +#include <linux/device.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/platform_device.h>  #include "memconsole.h"  #include "coreboot_table.h" @@ -73,18 +73,19 @@ static ssize_t memconsole_coreboot_read(char *buf, loff_t pos, size_t count)  	return done;  } -static int memconsole_coreboot_init(phys_addr_t physaddr) +static int memconsole_probe(struct coreboot_device *dev)  {  	struct cbmem_cons __iomem *tmp_cbmc; -	tmp_cbmc = memremap(physaddr, sizeof(*tmp_cbmc), MEMREMAP_WB); +	tmp_cbmc = memremap(dev->cbmem_ref.cbmem_addr, +			    sizeof(*tmp_cbmc), MEMREMAP_WB);  	if (!tmp_cbmc)  		return -ENOMEM;  	/* Read size only once to prevent overrun attack through /dev/mem. */  	cbmem_console_size = tmp_cbmc->size_dont_access_after_boot; -	cbmem_console = memremap(physaddr, +	cbmem_console = memremap(dev->cbmem_ref.cbmem_addr,  				 cbmem_console_size + sizeof(*cbmem_console),  				 MEMREMAP_WB);  	memunmap(tmp_cbmc); @@ -93,26 +94,11 @@ static int memconsole_coreboot_init(phys_addr_t physaddr)  		return -ENOMEM;  	memconsole_setup(memconsole_coreboot_read); -	return 0; -} - -static int memconsole_probe(struct platform_device *pdev) -{ -	int ret; -	struct lb_cbmem_ref entry; - -	ret = coreboot_table_find(CB_TAG_CBMEM_CONSOLE, &entry, sizeof(entry)); -	if (ret) -		return ret; - -	ret = memconsole_coreboot_init(entry.cbmem_addr); -	if (ret) -		return ret;  	return memconsole_sysfs_init();  } -static int memconsole_remove(struct platform_device *pdev) +static int memconsole_remove(struct coreboot_device *dev)  {  	memconsole_exit(); @@ -122,28 +108,27 @@ static int memconsole_remove(struct platform_device *pdev)  	return 0;  } -static struct platform_driver memconsole_driver = { +static struct coreboot_driver memconsole_driver = {  	.probe = memconsole_probe,  	.remove = memconsole_remove, -	.driver = { +	.drv = {  		.name = "memconsole",  	}, +	.tag = CB_TAG_CBMEM_CONSOLE,  }; -static int __init platform_memconsole_init(void) +static void coreboot_memconsole_exit(void)  { -	struct platform_device *pdev; - -	pdev = platform_device_register_simple("memconsole", -1, NULL, 0); -	if (IS_ERR(pdev)) -		return PTR_ERR(pdev); - -	platform_driver_register(&memconsole_driver); +	coreboot_driver_unregister(&memconsole_driver); +} -	return 0; +static int __init coreboot_memconsole_init(void) +{ +	return coreboot_driver_register(&memconsole_driver);  } -module_init(platform_memconsole_init); +module_exit(coreboot_memconsole_exit); +module_init(coreboot_memconsole_init);  MODULE_AUTHOR("Google, Inc.");  MODULE_LICENSE("GPL");  | 
