Skip to content

Commit 34eacef

Browse files
committed
Merge: scsi: mpi3mr: Critical Bug Fixes
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/6375 JIRA: https://issues.redhat.com/browse/RHEL-49780 scsi: mpi3mr driver bug fixes Upstream Status: Accepted Tested: Compiled and locally tested Signed-off-by: Chandrakanth Patil <chanpati@redhat.com> Approved-by: Tomas Henzl <thenzl@redhat.com> Approved-by: John Meneghini <jmeneghi@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: Patrick Talbert <ptalbert@redhat.com>
2 parents bf11eb6 + 7348433 commit 34eacef

File tree

11 files changed

+2280
-173
lines changed

11 files changed

+2280
-173
lines changed

drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
#define MPI3_SECURITY_PGAD_SLOT_GROUP_MASK (0x0000ff00)
6868
#define MPI3_SECURITY_PGAD_SLOT_GROUP_SHIFT (8)
6969
#define MPI3_SECURITY_PGAD_SLOT_MASK (0x000000ff)
70+
#define MPI3_INSTANCE_PGAD_INSTANCE_MASK (0x0000ffff)
7071
struct mpi3_config_request {
7172
__le16 host_tag;
7273
u8 ioc_use_only02;
@@ -75,7 +76,8 @@ struct mpi3_config_request {
7576
u8 ioc_use_only06;
7677
u8 msg_flags;
7778
__le16 change_count;
78-
__le16 reserved0a;
79+
u8 proxy_ioc_number;
80+
u8 reserved0b;
7981
u8 page_version;
8082
u8 page_number;
8183
u8 page_type;
@@ -206,6 +208,9 @@ struct mpi3_config_page_header {
206208
#define MPI3_MFGPAGE_DEVID_SAS5116_MPI_MGMT (0x00b5)
207209
#define MPI3_MFGPAGE_DEVID_SAS5116_NVME_MGMT (0x00b6)
208210
#define MPI3_MFGPAGE_DEVID_SAS5116_PCIE_SWITCH (0x00b8)
211+
#define MPI3_MFGPAGE_DEVID_SAS5248_MPI (0x00f0)
212+
#define MPI3_MFGPAGE_DEVID_SAS5248_MPI_NS (0x00f1)
213+
#define MPI3_MFGPAGE_DEVID_SAS5248_PCIE_SWITCH (0x00f2)
209214
struct mpi3_man_page0 {
210215
struct mpi3_config_page_header header;
211216
u8 chip_revision[8];
@@ -1074,6 +1079,8 @@ struct mpi3_io_unit_page8 {
10741079
#define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING (0x04)
10751080
#define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING (0x02)
10761081
#define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED (0x01)
1082+
#define MPI3_IOUNIT8_SBMODE_CURRENT_KEY_IOUNIT17 (0x10)
1083+
#define MPI3_IOUNIT8_SBMODE_HARD_SECURE_RECERTIFIED (0x08)
10771084
struct mpi3_io_unit_page9 {
10781085
struct mpi3_config_page_header header;
10791086
__le32 flags;
@@ -1089,6 +1096,8 @@ struct mpi3_io_unit_page9 {
10891096
#define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_BACKPLANE_TYPE (0x00000004)
10901097
#define MPI3_IOUNIT9_FLAGS_VDFIRST_ENABLED (0x00000001)
10911098
#define MPI3_IOUNIT9_FIRSTDEVICE_UNKNOWN (0xffff)
1099+
#define MPI3_IOUNIT9_FIRSTDEVICE_IN_DRIVER_PAGE_0 (0xfffe)
1100+
10921101
struct mpi3_io_unit_page10 {
10931102
struct mpi3_config_page_header header;
10941103
u8 flags;
@@ -1224,6 +1233,19 @@ struct mpi3_io_unit_page15 {
12241233
#define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_WITHOUT_POWER_BRAKE_GPIO (0x01)
12251234
#define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_WITH_POWER_BRAKE_GPIO (0x02)
12261235
#define MPI3_IOUNIT15_NUMPOWERBUDGETDATA_POWER_BUDGETING_DISABLED (0x00)
1236+
1237+
struct mpi3_io_unit_page17 {
1238+
struct mpi3_config_page_header header;
1239+
u8 num_instances;
1240+
u8 instance;
1241+
__le16 reserved0a;
1242+
__le32 reserved0c[4];
1243+
__le16 key_length;
1244+
u8 encryption_algorithm;
1245+
u8 reserved1f;
1246+
__le32 current_key[];
1247+
};
1248+
#define MPI3_IOUNIT17_PAGEVERSION (0x00)
12271249
struct mpi3_ioc_page0 {
12281250
struct mpi3_config_page_header header;
12291251
__le32 reserved08;
@@ -1311,7 +1333,7 @@ struct mpi3_driver_page0 {
13111333
u8 tur_interval;
13121334
u8 reserved10;
13131335
u8 security_key_timeout;
1314-
__le16 reserved12;
1336+
__le16 first_device;
13151337
__le32 reserved14;
13161338
__le32 reserved18;
13171339
};
@@ -1324,10 +1346,13 @@ struct mpi3_driver_page0 {
13241346
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_AND_DEVS (0x00000000)
13251347
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_ONLY (0x00000001)
13261348
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_AND_INTERNAL_DEVS (0x00000002)
1349+
#define MPI3_DRIVER0_FIRSTDEVICE_IGNORE1 (0x0000)
1350+
#define MPI3_DRIVER0_FIRSTDEVICE_IGNORE2 (0xffff)
13271351
struct mpi3_driver_page1 {
13281352
struct mpi3_config_page_header header;
13291353
__le32 flags;
1330-
__le32 reserved0c;
1354+
u8 time_stamp_update;
1355+
u8 reserved0d[3];
13311356
__le16 host_diag_trace_max_size;
13321357
__le16 host_diag_trace_min_size;
13331358
__le16 host_diag_trace_decrement_size;
@@ -2353,6 +2378,10 @@ struct mpi3_device0_vd_format {
23532378
#define MPI3_DEVICE0_VD_DEVICE_INFO_SAS (0x0001)
23542379
#define MPI3_DEVICE0_VD_FLAGS_IO_THROTTLE_GROUP_QD_MASK (0xf000)
23552380
#define MPI3_DEVICE0_VD_FLAGS_IO_THROTTLE_GROUP_QD_SHIFT (12)
2381+
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_MASK (0x0003)
2382+
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_HDD (0x0000)
2383+
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_SSD (0x0001)
2384+
#define MPI3_DEVICE0_VD_FLAGS_OSEXPOSURE_NO_GUIDANCE (0x0002)
23562385
union mpi3_device0_dev_spec_format {
23572386
struct mpi3_device0_sas_sata_format sas_sata_format;
23582387
struct mpi3_device0_pcie_format pcie_format;

drivers/scsi/mpi3mr/mpi/mpi30_image.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,14 @@ struct mpi3_encrypted_hash_entry {
205205
u8 hash_image_type;
206206
u8 hash_algorithm;
207207
u8 encryption_algorithm;
208-
u8 reserved03;
208+
u8 flags;
209209
__le16 public_key_size;
210210
__le16 signature_size;
211211
__le32 public_key[MPI3_PUBLIC_KEY_MAX];
212212
};
213-
214-
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_SIGNATURE (0x03)
213+
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH (0x03)
214+
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_1_OF_2 (0x04)
215+
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_2_OF_2 (0x05)
215216
#define MPI3_HASH_ALGORITHM_VERSION_MASK (0xe0)
216217
#define MPI3_HASH_ALGORITHM_VERSION_NONE (0x00)
217218
#define MPI3_HASH_ALGORITHM_VERSION_SHA1 (0x20)
@@ -230,6 +231,12 @@ struct mpi3_encrypted_hash_entry {
230231
#define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05)
231232
#define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06)
232233

234+
/* hierarchical signature system (hss) */
235+
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_87 (0x0b)
236+
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_65 (0x0c)
237+
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_44 (0x0d)
238+
#define MPI3_ENCRYPTED_HASH_ENTRY_FLAGS_PAIRED_KEY_MASK (0x0f)
239+
233240
#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
234241
#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
235242
#endif

drivers/scsi/mpi3mr/mpi/mpi30_ioc.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ struct mpi3_ioc_init_request {
3939
#define MPI3_WHOINIT_HOST_DRIVER (0x03)
4040
#define MPI3_WHOINIT_MANUFACTURER (0x04)
4141

42+
#define MPI3_IOCINIT_DRIVERCAP_OSEXPOSURE_MASK (0x00000003)
43+
#define MPI3_IOCINIT_DRIVERCAP_OSEXPOSURE_NO_GUIDANCE (0x00000000)
44+
#define MPI3_IOCINIT_DRIVERCAP_OSEXPOSURE_NO_SPECIAL (0x00000001)
45+
#define MPI3_IOCINIT_DRIVERCAP_OSEXPOSURE_REPORT_AS_HDD (0x00000002)
46+
#define MPI3_IOCINIT_DRIVERCAP_OSEXPOSURE_REPORT_AS_SSD (0x00000003)
47+
4248
struct mpi3_ioc_facts_request {
4349
__le16 host_tag;
4450
u8 ioc_use_only02;
@@ -140,6 +146,8 @@ struct mpi3_ioc_facts_data {
140146
#define MPI3_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL (0x0020)
141147
#define MPI3_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0010)
142148
#define MPI3_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0008)
149+
#define MPI3_IOCFACTS_EXCEPT_BLOCKING_BOOT_EVENT (0x0004)
150+
#define MPI3_IOCFACTS_EXCEPT_SECURITY_SELFTEST_FAILURE (0x0002)
143151
#define MPI3_IOCFACTS_EXCEPT_BOOTSTAT_MASK (0x0001)
144152
#define MPI3_IOCFACTS_EXCEPT_BOOTSTAT_PRIMARY (0x0000)
145153
#define MPI3_IOCFACTS_EXCEPT_BOOTSTAT_SECONDARY (0x0001)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/* SPDX-License-Identifier: GPL-2.0-or-later */
2+
/*
3+
* Copyright 2016-2024 Broadcom Inc. All rights reserved.
4+
*/
5+
#ifndef MPI30_TOOL_H
6+
#define MPI30_TOOL_H 1
7+
8+
#define MPI3_DIAG_BUFFER_TYPE_TRACE (0x01)
9+
#define MPI3_DIAG_BUFFER_TYPE_FW (0x02)
10+
#define MPI3_DIAG_BUFFER_ACTION_RELEASE (0x01)
11+
12+
struct mpi3_diag_buffer_post_request {
13+
__le16 host_tag;
14+
u8 ioc_use_only02;
15+
u8 function;
16+
__le16 ioc_use_only04;
17+
u8 ioc_use_only06;
18+
u8 msg_flags;
19+
__le16 change_count;
20+
__le16 reserved0a;
21+
u8 type;
22+
u8 reserved0d;
23+
__le16 reserved0e;
24+
__le64 address;
25+
__le32 length;
26+
__le32 reserved1c;
27+
};
28+
29+
struct mpi3_diag_buffer_manage_request {
30+
__le16 host_tag;
31+
u8 ioc_use_only02;
32+
u8 function;
33+
__le16 ioc_use_only04;
34+
u8 ioc_use_only06;
35+
u8 msg_flags;
36+
__le16 change_count;
37+
__le16 reserved0a;
38+
u8 type;
39+
u8 action;
40+
__le16 reserved0e;
41+
};
42+
43+
44+
#endif

drivers/scsi/mpi3mr/mpi/mpi30_transport.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ union mpi3_version_union {
1818

1919
#define MPI3_VERSION_MAJOR (3)
2020
#define MPI3_VERSION_MINOR (0)
21-
#define MPI3_VERSION_UNIT (31)
21+
#define MPI3_VERSION_UNIT (34)
2222
#define MPI3_VERSION_DEV (0)
2323
#define MPI3_DEVHANDLE_INVALID (0xffff)
2424
struct mpi3_sysif_oper_queue_indexes {
@@ -158,6 +158,7 @@ struct mpi3_sysif_registers {
158158
#define MPI3_SYSIF_FAULT_CODE_SOFT_RESET_NEEDED (0x0000f004)
159159
#define MPI3_SYSIF_FAULT_CODE_POWER_CYCLE_REQUIRED (0x0000f005)
160160
#define MPI3_SYSIF_FAULT_CODE_TEMP_THRESHOLD_EXCEEDED (0x0000f006)
161+
#define MPI3_SYSIF_FAULT_CODE_INSUFFICIENT_PCI_SLOT_POWER (0x0000f007)
161162
#define MPI3_SYSIF_FAULT_INFO0_OFFSET (0x00001c14)
162163
#define MPI3_SYSIF_FAULT_INFO1_OFFSET (0x00001c18)
163164
#define MPI3_SYSIF_FAULT_INFO2_OFFSET (0x00001c1c)
@@ -410,6 +411,7 @@ struct mpi3_default_reply {
410411
#define MPI3_IOCSTATUS_INSUFFICIENT_RESOURCES (0x0006)
411412
#define MPI3_IOCSTATUS_INVALID_FIELD (0x0007)
412413
#define MPI3_IOCSTATUS_INVALID_STATE (0x0008)
414+
#define MPI3_IOCSTATUS_SHUTDOWN_ACTIVE (0x0009)
413415
#define MPI3_IOCSTATUS_INSUFFICIENT_POWER (0x000a)
414416
#define MPI3_IOCSTATUS_INVALID_CHANGE_COUNT (0x000b)
415417
#define MPI3_IOCSTATUS_ALLOWED_CMD_BLOCK (0x000c)

0 commit comments

Comments
 (0)