scsi: smartpqi: Add support for new product ids
Add support for newer hardware by adding in a product identifier. This identifier can then be used to check for the hardware generation. Link: https://lore.kernel.org/r/161549370966.25025.2968242206975557607.stgit@brunhilda Reviewed-by: Scott Benesh <scott.benesh@microchip.com> Reviewed-by: Mike McGowen <mike.mcgowen@microchip.com> Reviewed-by: Scott Teel <scott.teel@microchip.com> Reviewed-by: Martin Wilck <mwilck@suse.com> Signed-off-by: Kevin Barnett <kevin.barnett@microchip.com> Signed-off-by: Don Brace <don.brace@microchip.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
b622a601a1
Коммит
2708a25643
|
@ -79,7 +79,8 @@ struct pqi_ctrl_registers {
|
|||
__le32 sis_ctrl_to_host_doorbell_clear; /* A0h */
|
||||
u8 reserved4[0xb0 - (0xa0 + sizeof(__le32))];
|
||||
__le32 sis_driver_scratch; /* B0h */
|
||||
u8 reserved5[0xbc - (0xb0 + sizeof(__le32))];
|
||||
__le32 sis_product_identifier; /* B4h */
|
||||
u8 reserved5[0xbc - (0xb4 + sizeof(__le32))];
|
||||
__le32 sis_firmware_status; /* BCh */
|
||||
u8 reserved6[0x1000 - (0xbc + sizeof(__le32))];
|
||||
__le32 sis_mailbox[8]; /* 1000h */
|
||||
|
@ -585,6 +586,7 @@ struct pqi_raid_error_info {
|
|||
/* these values are defined by the PQI spec */
|
||||
#define PQI_MAX_NUM_ELEMENTS_ADMIN_QUEUE 255
|
||||
#define PQI_MAX_NUM_ELEMENTS_OPERATIONAL_QUEUE 65535
|
||||
|
||||
#define PQI_QUEUE_ELEMENT_ARRAY_ALIGNMENT 64
|
||||
#define PQI_QUEUE_ELEMENT_LENGTH_ALIGNMENT 16
|
||||
#define PQI_ADMIN_INDEX_ALIGNMENT 64
|
||||
|
@ -1082,6 +1084,11 @@ struct pqi_event {
|
|||
(PQI_RESERVED_IO_SLOTS_LUN_RESET + PQI_RESERVED_IO_SLOTS_EVENT_ACK + \
|
||||
PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS)
|
||||
|
||||
#define PQI_CTRL_PRODUCT_ID_GEN1 0
|
||||
#define PQI_CTRL_PRODUCT_ID_GEN2 7
|
||||
#define PQI_CTRL_PRODUCT_REVISION_A 0
|
||||
#define PQI_CTRL_PRODUCT_REVISION_B 1
|
||||
|
||||
struct pqi_ctrl_info {
|
||||
unsigned int ctrl_id;
|
||||
struct pci_dev *pci_dev;
|
||||
|
@ -1089,6 +1096,8 @@ struct pqi_ctrl_info {
|
|||
char serial_number[17];
|
||||
char model[17];
|
||||
char vendor[9];
|
||||
u8 product_id;
|
||||
u8 product_revision;
|
||||
void __iomem *iomem_base;
|
||||
struct pqi_ctrl_registers __iomem *registers;
|
||||
struct pqi_device_registers __iomem *pqi_registers;
|
||||
|
|
|
@ -7151,6 +7151,7 @@ static int pqi_force_sis_mode(struct pqi_ctrl_info *ctrl_info)
|
|||
static int pqi_ctrl_init(struct pqi_ctrl_info *ctrl_info)
|
||||
{
|
||||
int rc;
|
||||
u32 product_id;
|
||||
|
||||
if (reset_devices) {
|
||||
sis_soft_reset(ctrl_info);
|
||||
|
@ -7187,6 +7188,10 @@ static int pqi_ctrl_init(struct pqi_ctrl_info *ctrl_info)
|
|||
return rc;
|
||||
}
|
||||
|
||||
product_id = sis_get_product_id(ctrl_info);
|
||||
ctrl_info->product_id = (u8)product_id;
|
||||
ctrl_info->product_revision = (u8)(product_id >> 8);
|
||||
|
||||
if (reset_devices) {
|
||||
if (ctrl_info->max_outstanding_requests >
|
||||
PQI_MAX_OUTSTANDING_REQUESTS_KDUMP)
|
||||
|
@ -8607,6 +8612,8 @@ static void __attribute__((unused)) verify_structures(void)
|
|||
sis_ctrl_to_host_doorbell_clear) != 0xa0);
|
||||
BUILD_BUG_ON(offsetof(struct pqi_ctrl_registers,
|
||||
sis_driver_scratch) != 0xb0);
|
||||
BUILD_BUG_ON(offsetof(struct pqi_ctrl_registers,
|
||||
sis_product_identifier) != 0xb4);
|
||||
BUILD_BUG_ON(offsetof(struct pqi_ctrl_registers,
|
||||
sis_firmware_status) != 0xbc);
|
||||
BUILD_BUG_ON(offsetof(struct pqi_ctrl_registers,
|
||||
|
|
|
@ -149,6 +149,11 @@ bool sis_is_kernel_up(struct pqi_ctrl_info *ctrl_info)
|
|||
SIS_CTRL_KERNEL_UP;
|
||||
}
|
||||
|
||||
u32 sis_get_product_id(struct pqi_ctrl_info *ctrl_info)
|
||||
{
|
||||
return readl(&ctrl_info->registers->sis_product_identifier);
|
||||
}
|
||||
|
||||
/* used for passing command parameters/results when issuing SIS commands */
|
||||
struct sis_sync_cmd_params {
|
||||
u32 mailbox[6]; /* mailboxes 0-5 */
|
||||
|
|
|
@ -27,5 +27,6 @@ int sis_reenable_sis_mode(struct pqi_ctrl_info *ctrl_info);
|
|||
void sis_write_driver_scratch(struct pqi_ctrl_info *ctrl_info, u32 value);
|
||||
u32 sis_read_driver_scratch(struct pqi_ctrl_info *ctrl_info);
|
||||
void sis_soft_reset(struct pqi_ctrl_info *ctrl_info);
|
||||
u32 sis_get_product_id(struct pqi_ctrl_info *ctrl_info);
|
||||
|
||||
#endif /* _SMARTPQI_SIS_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче