xref: /openbmc/linux/tools/testing/nvdimm/test/ndtest.h (revision b7f8f259896f669f131713b0c74ba4d008daa71d)
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