xref: /kernel/linux/linux-6.6/drivers/acpi/nfit/intel.h (revision 62306a36)
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