19a27e109SSantosh Sivaraj /* SPDX-License-Identifier: GPL-2.0-only */ 29a27e109SSantosh Sivaraj #ifndef NDTEST_H 39a27e109SSantosh Sivaraj #define NDTEST_H 49a27e109SSantosh Sivaraj 59a27e109SSantosh Sivaraj #include <linux/platform_device.h> 69a27e109SSantosh Sivaraj #include <linux/libnvdimm.h> 79a27e109SSantosh Sivaraj 8*50f558a5SSantosh Sivaraj /* SCM device is unable to persist memory contents */ 9*50f558a5SSantosh Sivaraj #define PAPR_PMEM_UNARMED (1ULL << (63 - 0)) 10*50f558a5SSantosh Sivaraj /* SCM device failed to persist memory contents */ 11*50f558a5SSantosh Sivaraj #define PAPR_PMEM_SHUTDOWN_DIRTY (1ULL << (63 - 1)) 12*50f558a5SSantosh Sivaraj /* SCM device contents are not persisted from previous IPL */ 13*50f558a5SSantosh Sivaraj #define PAPR_PMEM_EMPTY (1ULL << (63 - 3)) 14*50f558a5SSantosh Sivaraj #define PAPR_PMEM_HEALTH_CRITICAL (1ULL << (63 - 4)) 15*50f558a5SSantosh Sivaraj /* SCM device will be garded off next IPL due to failure */ 16*50f558a5SSantosh Sivaraj #define PAPR_PMEM_HEALTH_FATAL (1ULL << (63 - 5)) 17*50f558a5SSantosh Sivaraj /* SCM contents cannot persist due to current platform health status */ 18*50f558a5SSantosh Sivaraj #define PAPR_PMEM_HEALTH_UNHEALTHY (1ULL << (63 - 6)) 19*50f558a5SSantosh Sivaraj 20*50f558a5SSantosh Sivaraj /* Bits status indicators for health bitmap indicating unarmed dimm */ 21*50f558a5SSantosh Sivaraj #define PAPR_PMEM_UNARMED_MASK (PAPR_PMEM_UNARMED | \ 22*50f558a5SSantosh Sivaraj PAPR_PMEM_HEALTH_UNHEALTHY) 23*50f558a5SSantosh Sivaraj 24*50f558a5SSantosh Sivaraj #define PAPR_PMEM_SAVE_FAILED (1ULL << (63 - 10)) 25*50f558a5SSantosh Sivaraj 26*50f558a5SSantosh Sivaraj /* Bits status indicators for health bitmap indicating unflushed dimm */ 27*50f558a5SSantosh Sivaraj #define PAPR_PMEM_BAD_SHUTDOWN_MASK (PAPR_PMEM_SHUTDOWN_DIRTY) 28*50f558a5SSantosh Sivaraj 29*50f558a5SSantosh Sivaraj /* Bits status indicators for health bitmap indicating unrestored dimm */ 30*50f558a5SSantosh Sivaraj #define PAPR_PMEM_BAD_RESTORE_MASK (PAPR_PMEM_EMPTY) 31*50f558a5SSantosh Sivaraj 32*50f558a5SSantosh Sivaraj /* Bit status indicators for smart event notification */ 33*50f558a5SSantosh Sivaraj #define PAPR_PMEM_SMART_EVENT_MASK (PAPR_PMEM_HEALTH_CRITICAL | \ 34*50f558a5SSantosh Sivaraj PAPR_PMEM_HEALTH_FATAL | \ 35*50f558a5SSantosh Sivaraj PAPR_PMEM_HEALTH_UNHEALTHY) 36*50f558a5SSantosh Sivaraj 37*50f558a5SSantosh Sivaraj #define PAPR_PMEM_SAVE_MASK (PAPR_PMEM_SAVE_FAILED) 38*50f558a5SSantosh Sivaraj 399399ab61SSantosh Sivaraj struct ndtest_config; 409399ab61SSantosh Sivaraj 419a27e109SSantosh Sivaraj struct ndtest_priv { 429a27e109SSantosh Sivaraj struct platform_device pdev; 439a27e109SSantosh Sivaraj struct device_node *dn; 449a27e109SSantosh Sivaraj struct list_head resources; 459a27e109SSantosh Sivaraj struct nvdimm_bus_descriptor bus_desc; 469a27e109SSantosh Sivaraj struct nvdimm_bus *bus; 479399ab61SSantosh Sivaraj struct ndtest_config *config; 489399ab61SSantosh Sivaraj 499399ab61SSantosh Sivaraj dma_addr_t *dcr_dma; 509399ab61SSantosh Sivaraj dma_addr_t *label_dma; 519399ab61SSantosh Sivaraj dma_addr_t *dimm_dma; 529399ab61SSantosh Sivaraj }; 539399ab61SSantosh Sivaraj 546fde2d4cSSantosh Sivaraj struct ndtest_blk_mmio { 556fde2d4cSSantosh Sivaraj void __iomem *base; 566fde2d4cSSantosh Sivaraj u64 size; 576fde2d4cSSantosh Sivaraj u64 base_offset; 586fde2d4cSSantosh Sivaraj u32 line_size; 596fde2d4cSSantosh Sivaraj u32 num_lines; 606fde2d4cSSantosh Sivaraj u32 table_size; 616fde2d4cSSantosh Sivaraj }; 626fde2d4cSSantosh Sivaraj 639399ab61SSantosh Sivaraj struct ndtest_dimm { 649399ab61SSantosh Sivaraj struct device *dev; 659399ab61SSantosh Sivaraj struct nvdimm *nvdimm; 669399ab61SSantosh Sivaraj struct ndtest_blk_mmio *mmio; 679399ab61SSantosh Sivaraj struct nd_region *blk_region; 689399ab61SSantosh Sivaraj 699399ab61SSantosh Sivaraj dma_addr_t address; 709399ab61SSantosh Sivaraj unsigned long long flags; 719399ab61SSantosh Sivaraj unsigned long config_size; 729399ab61SSantosh Sivaraj void *label_area; 739399ab61SSantosh Sivaraj char *uuid_str; 749399ab61SSantosh Sivaraj 759399ab61SSantosh Sivaraj unsigned int size; 769399ab61SSantosh Sivaraj unsigned int handle; 779399ab61SSantosh Sivaraj unsigned int fail_cmd; 789399ab61SSantosh Sivaraj unsigned int physical_id; 799399ab61SSantosh Sivaraj unsigned int num_formats; 809399ab61SSantosh Sivaraj int id; 819399ab61SSantosh Sivaraj int fail_cmd_code; 829399ab61SSantosh Sivaraj u8 no_alias; 839399ab61SSantosh Sivaraj }; 849399ab61SSantosh Sivaraj 856fde2d4cSSantosh Sivaraj struct ndtest_mapping { 866fde2d4cSSantosh Sivaraj u64 start; 876fde2d4cSSantosh Sivaraj u64 size; 886fde2d4cSSantosh Sivaraj u8 position; 896fde2d4cSSantosh Sivaraj u8 dimm; 906fde2d4cSSantosh Sivaraj }; 916fde2d4cSSantosh Sivaraj 926fde2d4cSSantosh Sivaraj struct ndtest_region { 936fde2d4cSSantosh Sivaraj struct nd_region *region; 946fde2d4cSSantosh Sivaraj struct ndtest_mapping *mapping; 956fde2d4cSSantosh Sivaraj u64 size; 966fde2d4cSSantosh Sivaraj u8 type; 976fde2d4cSSantosh Sivaraj u8 num_mappings; 986fde2d4cSSantosh Sivaraj u8 range_index; 996fde2d4cSSantosh Sivaraj }; 1006fde2d4cSSantosh Sivaraj 1019399ab61SSantosh Sivaraj struct ndtest_config { 1029399ab61SSantosh Sivaraj struct ndtest_dimm *dimms; 1036fde2d4cSSantosh Sivaraj struct ndtest_region *regions; 1049399ab61SSantosh Sivaraj unsigned int dimm_count; 1059399ab61SSantosh Sivaraj unsigned int dimm_start; 1069399ab61SSantosh Sivaraj u8 num_regions; 1079a27e109SSantosh Sivaraj }; 1089a27e109SSantosh Sivaraj 1099a27e109SSantosh Sivaraj #endif /* NDTEST_H */ 110