1ec776ef6SChristoph Hellwig /* 2ec776ef6SChristoph Hellwig * Copyright (c) 2015, Christoph Hellwig. 39f53f9faSDan Williams * Copyright (c) 2015, Intel Corporation. 4ec776ef6SChristoph Hellwig */ 5ec776ef6SChristoph Hellwig #include <linux/platform_device.h> 6186f4360SPaul Gortmaker #include <linux/init.h> 7bc0d0d09SDan Williams #include <linux/ioport.h> 8bc0d0d09SDan Williams 9bc0d0d09SDan Williams static int found(u64 start, u64 end, void *data) 10bc0d0d09SDan Williams { 11bc0d0d09SDan Williams return 1; 12bc0d0d09SDan Williams } 139f53f9faSDan Williams 149f53f9faSDan Williams static __init int register_e820_pmem(void) 15ec776ef6SChristoph Hellwig { 167a67832cSDan Williams struct platform_device *pdev; 17bc0d0d09SDan Williams int rc; 18bc0d0d09SDan Williams 19f0f4711aSToshi Kani rc = walk_iomem_res_desc(IORES_DESC_PERSISTENT_MEMORY_LEGACY, 20f0f4711aSToshi Kani IORESOURCE_MEM, 0, -1, NULL, found); 21bc0d0d09SDan Williams if (rc <= 0) 22bc0d0d09SDan Williams return 0; 239f53f9faSDan Williams 247a67832cSDan Williams /* 257a67832cSDan Williams * See drivers/nvdimm/e820.c for the implementation, this is 267a67832cSDan Williams * simply here to trigger the module to load on demand. 277a67832cSDan Williams */ 287a67832cSDan Williams pdev = platform_device_alloc("e820_pmem", -1); 297a67832cSDan Williams return platform_device_add(pdev); 30ec776ef6SChristoph Hellwig } 319f53f9faSDan Williams device_initcall(register_e820_pmem); 32