2020-12-22 04:22:34 +00:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef NDTEST_H
|
|
|
|
#define NDTEST_H
|
|
|
|
|
|
|
|
#include <linux/platform_device.h>
|
|
|
|
#include <linux/libnvdimm.h>
|
|
|
|
|
2020-12-22 04:22:40 +00:00
|
|
|
/* SCM device is unable to persist memory contents */
|
|
|
|
#define PAPR_PMEM_UNARMED (1ULL << (63 - 0))
|
|
|
|
/* SCM device failed to persist memory contents */
|
|
|
|
#define PAPR_PMEM_SHUTDOWN_DIRTY (1ULL << (63 - 1))
|
|
|
|
/* SCM device contents are not persisted from previous IPL */
|
|
|
|
#define PAPR_PMEM_EMPTY (1ULL << (63 - 3))
|
|
|
|
#define PAPR_PMEM_HEALTH_CRITICAL (1ULL << (63 - 4))
|
|
|
|
/* SCM device will be garded off next IPL due to failure */
|
|
|
|
#define PAPR_PMEM_HEALTH_FATAL (1ULL << (63 - 5))
|
|
|
|
/* SCM contents cannot persist due to current platform health status */
|
|
|
|
#define PAPR_PMEM_HEALTH_UNHEALTHY (1ULL << (63 - 6))
|
|
|
|
|
|
|
|
/* Bits status indicators for health bitmap indicating unarmed dimm */
|
|
|
|
#define PAPR_PMEM_UNARMED_MASK (PAPR_PMEM_UNARMED | \
|
|
|
|
PAPR_PMEM_HEALTH_UNHEALTHY)
|
|
|
|
|
|
|
|
#define PAPR_PMEM_SAVE_FAILED (1ULL << (63 - 10))
|
|
|
|
|
|
|
|
/* Bits status indicators for health bitmap indicating unflushed dimm */
|
|
|
|
#define PAPR_PMEM_BAD_SHUTDOWN_MASK (PAPR_PMEM_SHUTDOWN_DIRTY)
|
|
|
|
|
|
|
|
/* Bits status indicators for health bitmap indicating unrestored dimm */
|
|
|
|
#define PAPR_PMEM_BAD_RESTORE_MASK (PAPR_PMEM_EMPTY)
|
|
|
|
|
|
|
|
/* Bit status indicators for smart event notification */
|
|
|
|
#define PAPR_PMEM_SMART_EVENT_MASK (PAPR_PMEM_HEALTH_CRITICAL | \
|
|
|
|
PAPR_PMEM_HEALTH_FATAL | \
|
|
|
|
PAPR_PMEM_HEALTH_UNHEALTHY)
|
|
|
|
|
|
|
|
#define PAPR_PMEM_SAVE_MASK (PAPR_PMEM_SAVE_FAILED)
|
|
|
|
|
2020-12-22 04:22:36 +00:00
|
|
|
struct ndtest_config;
|
|
|
|
|
2020-12-22 04:22:34 +00:00
|
|
|
struct ndtest_priv {
|
|
|
|
struct platform_device pdev;
|
|
|
|
struct device_node *dn;
|
|
|
|
struct list_head resources;
|
|
|
|
struct nvdimm_bus_descriptor bus_desc;
|
|
|
|
struct nvdimm_bus *bus;
|
2020-12-22 04:22:36 +00:00
|
|
|
struct ndtest_config *config;
|
|
|
|
|
|
|
|
dma_addr_t *dcr_dma;
|
|
|
|
dma_addr_t *label_dma;
|
|
|
|
dma_addr_t *dimm_dma;
|
|
|
|
};
|
|
|
|
|
2020-12-22 04:22:38 +00:00
|
|
|
struct ndtest_blk_mmio {
|
|
|
|
void __iomem *base;
|
|
|
|
u64 size;
|
|
|
|
u64 base_offset;
|
|
|
|
u32 line_size;
|
|
|
|
u32 num_lines;
|
|
|
|
u32 table_size;
|
|
|
|
};
|
|
|
|
|
2020-12-22 04:22:36 +00:00
|
|
|
struct ndtest_dimm {
|
|
|
|
struct device *dev;
|
|
|
|
struct nvdimm *nvdimm;
|
|
|
|
struct ndtest_blk_mmio *mmio;
|
|
|
|
struct nd_region *blk_region;
|
|
|
|
|
|
|
|
dma_addr_t address;
|
|
|
|
unsigned long long flags;
|
|
|
|
unsigned long config_size;
|
|
|
|
void *label_area;
|
|
|
|
char *uuid_str;
|
|
|
|
|
|
|
|
unsigned int size;
|
|
|
|
unsigned int handle;
|
|
|
|
unsigned int fail_cmd;
|
|
|
|
unsigned int physical_id;
|
|
|
|
unsigned int num_formats;
|
|
|
|
int id;
|
|
|
|
int fail_cmd_code;
|
|
|
|
u8 no_alias;
|
|
|
|
};
|
|
|
|
|
2020-12-22 04:22:38 +00:00
|
|
|
struct ndtest_mapping {
|
|
|
|
u64 start;
|
|
|
|
u64 size;
|
|
|
|
u8 position;
|
|
|
|
u8 dimm;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct ndtest_region {
|
|
|
|
struct nd_region *region;
|
|
|
|
struct ndtest_mapping *mapping;
|
|
|
|
u64 size;
|
|
|
|
u8 type;
|
|
|
|
u8 num_mappings;
|
|
|
|
u8 range_index;
|
|
|
|
};
|
|
|
|
|
2020-12-22 04:22:36 +00:00
|
|
|
struct ndtest_config {
|
|
|
|
struct ndtest_dimm *dimms;
|
2020-12-22 04:22:38 +00:00
|
|
|
struct ndtest_region *regions;
|
2020-12-22 04:22:36 +00:00
|
|
|
unsigned int dimm_count;
|
|
|
|
unsigned int dimm_start;
|
|
|
|
u8 num_regions;
|
2020-12-22 04:22:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* NDTEST_H */
|