162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci#ifndef NDTEST_H 362306a36Sopenharmony_ci#define NDTEST_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/platform_device.h> 662306a36Sopenharmony_ci#include <linux/libnvdimm.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci/* SCM device is unable to persist memory contents */ 962306a36Sopenharmony_ci#define PAPR_PMEM_UNARMED (1ULL << (63 - 0)) 1062306a36Sopenharmony_ci/* SCM device failed to persist memory contents */ 1162306a36Sopenharmony_ci#define PAPR_PMEM_SHUTDOWN_DIRTY (1ULL << (63 - 1)) 1262306a36Sopenharmony_ci/* SCM device contents are not persisted from previous IPL */ 1362306a36Sopenharmony_ci#define PAPR_PMEM_EMPTY (1ULL << (63 - 3)) 1462306a36Sopenharmony_ci#define PAPR_PMEM_HEALTH_CRITICAL (1ULL << (63 - 4)) 1562306a36Sopenharmony_ci/* SCM device will be garded off next IPL due to failure */ 1662306a36Sopenharmony_ci#define PAPR_PMEM_HEALTH_FATAL (1ULL << (63 - 5)) 1762306a36Sopenharmony_ci/* SCM contents cannot persist due to current platform health status */ 1862306a36Sopenharmony_ci#define PAPR_PMEM_HEALTH_UNHEALTHY (1ULL << (63 - 6)) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* Bits status indicators for health bitmap indicating unarmed dimm */ 2162306a36Sopenharmony_ci#define PAPR_PMEM_UNARMED_MASK (PAPR_PMEM_UNARMED | \ 2262306a36Sopenharmony_ci PAPR_PMEM_HEALTH_UNHEALTHY) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define PAPR_PMEM_SAVE_FAILED (1ULL << (63 - 10)) 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* Bits status indicators for health bitmap indicating unflushed dimm */ 2762306a36Sopenharmony_ci#define PAPR_PMEM_BAD_SHUTDOWN_MASK (PAPR_PMEM_SHUTDOWN_DIRTY) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci/* Bits status indicators for health bitmap indicating unrestored dimm */ 3062306a36Sopenharmony_ci#define PAPR_PMEM_BAD_RESTORE_MASK (PAPR_PMEM_EMPTY) 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* Bit status indicators for smart event notification */ 3362306a36Sopenharmony_ci#define PAPR_PMEM_SMART_EVENT_MASK (PAPR_PMEM_HEALTH_CRITICAL | \ 3462306a36Sopenharmony_ci PAPR_PMEM_HEALTH_FATAL | \ 3562306a36Sopenharmony_ci PAPR_PMEM_HEALTH_UNHEALTHY) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define PAPR_PMEM_SAVE_MASK (PAPR_PMEM_SAVE_FAILED) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistruct ndtest_config; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct ndtest_priv { 4262306a36Sopenharmony_ci struct platform_device pdev; 4362306a36Sopenharmony_ci struct device_node *dn; 4462306a36Sopenharmony_ci struct list_head resources; 4562306a36Sopenharmony_ci struct nvdimm_bus_descriptor bus_desc; 4662306a36Sopenharmony_ci struct nvdimm_bus *bus; 4762306a36Sopenharmony_ci struct ndtest_config *config; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci dma_addr_t *dcr_dma; 5062306a36Sopenharmony_ci dma_addr_t *label_dma; 5162306a36Sopenharmony_ci dma_addr_t *dimm_dma; 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistruct ndtest_blk_mmio { 5562306a36Sopenharmony_ci void __iomem *base; 5662306a36Sopenharmony_ci u64 size; 5762306a36Sopenharmony_ci u64 base_offset; 5862306a36Sopenharmony_ci u32 line_size; 5962306a36Sopenharmony_ci u32 num_lines; 6062306a36Sopenharmony_ci u32 table_size; 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistruct ndtest_dimm { 6462306a36Sopenharmony_ci struct device *dev; 6562306a36Sopenharmony_ci struct nvdimm *nvdimm; 6662306a36Sopenharmony_ci struct ndtest_blk_mmio *mmio; 6762306a36Sopenharmony_ci struct nd_region *blk_region; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci dma_addr_t address; 7062306a36Sopenharmony_ci unsigned long long flags; 7162306a36Sopenharmony_ci unsigned long config_size; 7262306a36Sopenharmony_ci void *label_area; 7362306a36Sopenharmony_ci char *uuid_str; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci unsigned int size; 7662306a36Sopenharmony_ci unsigned int handle; 7762306a36Sopenharmony_ci unsigned int fail_cmd; 7862306a36Sopenharmony_ci unsigned int physical_id; 7962306a36Sopenharmony_ci unsigned int num_formats; 8062306a36Sopenharmony_ci int id; 8162306a36Sopenharmony_ci int fail_cmd_code; 8262306a36Sopenharmony_ci u8 no_alias; 8362306a36Sopenharmony_ci}; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cistruct ndtest_mapping { 8662306a36Sopenharmony_ci u64 start; 8762306a36Sopenharmony_ci u64 size; 8862306a36Sopenharmony_ci u8 position; 8962306a36Sopenharmony_ci u8 dimm; 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cistruct ndtest_region { 9362306a36Sopenharmony_ci struct nd_region *region; 9462306a36Sopenharmony_ci struct ndtest_mapping *mapping; 9562306a36Sopenharmony_ci u64 size; 9662306a36Sopenharmony_ci u8 type; 9762306a36Sopenharmony_ci u8 num_mappings; 9862306a36Sopenharmony_ci u8 range_index; 9962306a36Sopenharmony_ci}; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_cistruct ndtest_config { 10262306a36Sopenharmony_ci struct ndtest_dimm *dimms; 10362306a36Sopenharmony_ci struct ndtest_region *regions; 10462306a36Sopenharmony_ci unsigned int dimm_count; 10562306a36Sopenharmony_ci unsigned int dimm_start; 10662306a36Sopenharmony_ci u8 num_regions; 10762306a36Sopenharmony_ci}; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci#endif /* NDTEST_H */ 110