162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright(c) 2018 Intel Corporation. All rights reserved. 462306a36Sopenharmony_ci * Intel specific definitions for NVDIMM Firmware Interface Table - NFIT 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#ifndef _NFIT_INTEL_H_ 762306a36Sopenharmony_ci#define _NFIT_INTEL_H_ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#define ND_INTEL_SMART 1 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define ND_INTEL_SMART_SHUTDOWN_COUNT_VALID (1 << 5) 1262306a36Sopenharmony_ci#define ND_INTEL_SMART_SHUTDOWN_VALID (1 << 10) 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct nd_intel_smart { 1562306a36Sopenharmony_ci u32 status; 1662306a36Sopenharmony_ci union { 1762306a36Sopenharmony_ci struct { 1862306a36Sopenharmony_ci u32 flags; 1962306a36Sopenharmony_ci u8 reserved0[4]; 2062306a36Sopenharmony_ci u8 health; 2162306a36Sopenharmony_ci u8 spares; 2262306a36Sopenharmony_ci u8 life_used; 2362306a36Sopenharmony_ci u8 alarm_flags; 2462306a36Sopenharmony_ci u16 media_temperature; 2562306a36Sopenharmony_ci u16 ctrl_temperature; 2662306a36Sopenharmony_ci u32 shutdown_count; 2762306a36Sopenharmony_ci u8 ait_status; 2862306a36Sopenharmony_ci u16 pmic_temperature; 2962306a36Sopenharmony_ci u8 reserved1[8]; 3062306a36Sopenharmony_ci u8 shutdown_state; 3162306a36Sopenharmony_ci u32 vendor_size; 3262306a36Sopenharmony_ci u8 vendor_data[92]; 3362306a36Sopenharmony_ci } __packed; 3462306a36Sopenharmony_ci u8 data[128]; 3562306a36Sopenharmony_ci }; 3662306a36Sopenharmony_ci} __packed; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciextern const struct nvdimm_security_ops *intel_security_ops; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci#define ND_INTEL_STATUS_SIZE 4 4162306a36Sopenharmony_ci#define ND_INTEL_PASSPHRASE_SIZE 32 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#define ND_INTEL_STATUS_NOT_SUPPORTED 1 4462306a36Sopenharmony_ci#define ND_INTEL_STATUS_RETRY 5 4562306a36Sopenharmony_ci#define ND_INTEL_STATUS_NOT_READY 9 4662306a36Sopenharmony_ci#define ND_INTEL_STATUS_INVALID_STATE 10 4762306a36Sopenharmony_ci#define ND_INTEL_STATUS_INVALID_PASS 11 4862306a36Sopenharmony_ci#define ND_INTEL_STATUS_OVERWRITE_UNSUPPORTED 0x10007 4962306a36Sopenharmony_ci#define ND_INTEL_STATUS_OQUERY_INPROGRESS 0x10007 5062306a36Sopenharmony_ci#define ND_INTEL_STATUS_OQUERY_SEQUENCE_ERR 0x20007 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define ND_INTEL_SEC_STATE_ENABLED 0x02 5362306a36Sopenharmony_ci#define ND_INTEL_SEC_STATE_LOCKED 0x04 5462306a36Sopenharmony_ci#define ND_INTEL_SEC_STATE_FROZEN 0x08 5562306a36Sopenharmony_ci#define ND_INTEL_SEC_STATE_PLIMIT 0x10 5662306a36Sopenharmony_ci#define ND_INTEL_SEC_STATE_UNSUPPORTED 0x20 5762306a36Sopenharmony_ci#define ND_INTEL_SEC_STATE_OVERWRITE 0x40 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define ND_INTEL_SEC_ESTATE_ENABLED 0x01 6062306a36Sopenharmony_ci#define ND_INTEL_SEC_ESTATE_PLIMIT 0x02 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistruct nd_intel_get_security_state { 6362306a36Sopenharmony_ci u32 status; 6462306a36Sopenharmony_ci u8 extended_state; 6562306a36Sopenharmony_ci u8 reserved[3]; 6662306a36Sopenharmony_ci u8 state; 6762306a36Sopenharmony_ci u8 reserved1[3]; 6862306a36Sopenharmony_ci} __packed; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cistruct nd_intel_set_passphrase { 7162306a36Sopenharmony_ci u8 old_pass[ND_INTEL_PASSPHRASE_SIZE]; 7262306a36Sopenharmony_ci u8 new_pass[ND_INTEL_PASSPHRASE_SIZE]; 7362306a36Sopenharmony_ci u32 status; 7462306a36Sopenharmony_ci} __packed; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cistruct nd_intel_unlock_unit { 7762306a36Sopenharmony_ci u8 passphrase[ND_INTEL_PASSPHRASE_SIZE]; 7862306a36Sopenharmony_ci u32 status; 7962306a36Sopenharmony_ci} __packed; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_cistruct nd_intel_disable_passphrase { 8262306a36Sopenharmony_ci u8 passphrase[ND_INTEL_PASSPHRASE_SIZE]; 8362306a36Sopenharmony_ci u32 status; 8462306a36Sopenharmony_ci} __packed; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistruct nd_intel_freeze_lock { 8762306a36Sopenharmony_ci u32 status; 8862306a36Sopenharmony_ci} __packed; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_cistruct nd_intel_secure_erase { 9162306a36Sopenharmony_ci u8 passphrase[ND_INTEL_PASSPHRASE_SIZE]; 9262306a36Sopenharmony_ci u32 status; 9362306a36Sopenharmony_ci} __packed; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_cistruct nd_intel_overwrite { 9662306a36Sopenharmony_ci u8 passphrase[ND_INTEL_PASSPHRASE_SIZE]; 9762306a36Sopenharmony_ci u32 status; 9862306a36Sopenharmony_ci} __packed; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_cistruct nd_intel_query_overwrite { 10162306a36Sopenharmony_ci u32 status; 10262306a36Sopenharmony_ci} __packed; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cistruct nd_intel_set_master_passphrase { 10562306a36Sopenharmony_ci u8 old_pass[ND_INTEL_PASSPHRASE_SIZE]; 10662306a36Sopenharmony_ci u8 new_pass[ND_INTEL_PASSPHRASE_SIZE]; 10762306a36Sopenharmony_ci u32 status; 10862306a36Sopenharmony_ci} __packed; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_cistruct nd_intel_master_secure_erase { 11162306a36Sopenharmony_ci u8 passphrase[ND_INTEL_PASSPHRASE_SIZE]; 11262306a36Sopenharmony_ci u32 status; 11362306a36Sopenharmony_ci} __packed; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci#define ND_INTEL_FWA_IDLE 0 11662306a36Sopenharmony_ci#define ND_INTEL_FWA_ARMED 1 11762306a36Sopenharmony_ci#define ND_INTEL_FWA_BUSY 2 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_NONE 0 12062306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_NOTSTAGED 1 12162306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_SUCCESS 2 12262306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_NEEDRESET 3 12362306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_MEDIAFAILED 4 12462306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_ABORT 5 12562306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_NOTSUPP 6 12662306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_ERROR 7 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_cistruct nd_intel_fw_activate_dimminfo { 12962306a36Sopenharmony_ci u32 status; 13062306a36Sopenharmony_ci u16 result; 13162306a36Sopenharmony_ci u8 state; 13262306a36Sopenharmony_ci u8 reserved[7]; 13362306a36Sopenharmony_ci} __packed; 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_ARM 1 13662306a36Sopenharmony_ci#define ND_INTEL_DIMM_FWA_DISARM 0 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_cistruct nd_intel_fw_activate_arm { 13962306a36Sopenharmony_ci u8 activate_arm; 14062306a36Sopenharmony_ci u32 status; 14162306a36Sopenharmony_ci} __packed; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci/* Root device command payloads */ 14462306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_CAP_FWQUIESCE (1 << 0) 14562306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_CAP_OSQUIESCE (1 << 1) 14662306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_CAP_RESET (1 << 2) 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_cistruct nd_intel_bus_fw_activate_businfo { 14962306a36Sopenharmony_ci u32 status; 15062306a36Sopenharmony_ci u16 reserved; 15162306a36Sopenharmony_ci u8 state; 15262306a36Sopenharmony_ci u8 capability; 15362306a36Sopenharmony_ci u64 activate_tmo; 15462306a36Sopenharmony_ci u64 cpu_quiesce_tmo; 15562306a36Sopenharmony_ci u64 io_quiesce_tmo; 15662306a36Sopenharmony_ci u64 max_quiesce_tmo; 15762306a36Sopenharmony_ci} __packed; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_STATUS_NOARM (6 | 1 << 16) 16062306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_STATUS_BUSY (6 | 2 << 16) 16162306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_STATUS_NOFW (6 | 3 << 16) 16262306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_STATUS_TMO (6 | 4 << 16) 16362306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_STATUS_NOIDLE (6 | 5 << 16) 16462306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_STATUS_ABORT (6 | 6 << 16) 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_IODEV_FORCE_IDLE (0) 16762306a36Sopenharmony_ci#define ND_INTEL_BUS_FWA_IODEV_OS_IDLE (1) 16862306a36Sopenharmony_cistruct nd_intel_bus_fw_activate { 16962306a36Sopenharmony_ci u8 iodev_state; 17062306a36Sopenharmony_ci u32 status; 17162306a36Sopenharmony_ci} __packed; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ciextern const struct nvdimm_fw_ops *intel_fw_ops; 17462306a36Sopenharmony_ciextern const struct nvdimm_bus_fw_ops *intel_bus_fw_ops; 17562306a36Sopenharmony_ci#endif 176