Merge patch series "mpi3mr: Add support for Broadcom SAS5116 IO/RAID controllers"
Sumit Saxena <sumit.saxena@broadcom.com> says: These patches add support for Broadcom's SAS5116 IO/RAID controllers in mpi3mr driver. Link: https://lore.kernel.org/r/20231123160132.4155-1-sumit.saxena@broadcom.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
commit
130fbf45f4
@ -28,6 +28,7 @@ struct mpi3_ioc_init_request {
|
||||
__le64 driver_information_address;
|
||||
};
|
||||
|
||||
#define MPI3_IOCINIT_MSGFLAGS_SCSIIOSTATUSREPLY_SUPPORTED (0x04)
|
||||
#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_MASK (0x03)
|
||||
#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_NOT_USED (0x00)
|
||||
#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_SEPARATED (0x01)
|
||||
|
@ -55,8 +55,8 @@ extern struct list_head mrioc_list;
|
||||
extern int prot_mask;
|
||||
extern atomic64_t event_counter;
|
||||
|
||||
#define MPI3MR_DRIVER_VERSION "8.5.0.0.0"
|
||||
#define MPI3MR_DRIVER_RELDATE "24-July-2023"
|
||||
#define MPI3MR_DRIVER_VERSION "8.5.0.0.50"
|
||||
#define MPI3MR_DRIVER_RELDATE "22-November-2023"
|
||||
|
||||
#define MPI3MR_DRIVER_NAME "mpi3mr"
|
||||
#define MPI3MR_DRIVER_LICENSE "GPL"
|
||||
@ -506,7 +506,7 @@ struct mpi3mr_sas_port {
|
||||
u8 num_phys;
|
||||
u8 marked_responding;
|
||||
int lowest_phy;
|
||||
u32 phy_mask;
|
||||
u64 phy_mask;
|
||||
struct mpi3mr_hba_port *hba_port;
|
||||
struct sas_identify remote_identify;
|
||||
struct sas_rphy *rphy;
|
||||
|
@ -1892,7 +1892,8 @@ static int mpi3mr_create_op_reply_q(struct mpi3mr_ioc *mrioc, u16 qidx)
|
||||
|
||||
reply_qid = qidx + 1;
|
||||
op_reply_q->num_replies = MPI3MR_OP_REP_Q_QD;
|
||||
if (!mrioc->pdev->revision)
|
||||
if ((mrioc->pdev->device == MPI3_MFGPAGE_DEVID_SAS4116) &&
|
||||
!mrioc->pdev->revision)
|
||||
op_reply_q->num_replies = MPI3MR_OP_REP_Q_QD4K;
|
||||
op_reply_q->ci = 0;
|
||||
op_reply_q->ephase = 1;
|
||||
@ -3193,6 +3194,9 @@ static int mpi3mr_issue_iocinit(struct mpi3mr_ioc *mrioc)
|
||||
current_time = ktime_get_real();
|
||||
iocinit_req.time_stamp = cpu_to_le64(ktime_to_ms(current_time));
|
||||
|
||||
iocinit_req.msg_flags |=
|
||||
MPI3_IOCINIT_MSGFLAGS_SCSIIOSTATUSREPLY_SUPPORTED;
|
||||
|
||||
init_completion(&mrioc->init_cmds.done);
|
||||
retval = mpi3mr_admin_request_post(mrioc, &iocinit_req,
|
||||
sizeof(iocinit_req), 1);
|
||||
|
@ -5101,7 +5101,10 @@ mpi3mr_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mpi3mr_init_drv_cmd(&mrioc->evtack_cmds[i],
|
||||
MPI3MR_HOSTTAG_EVTACKCMD_MIN + i);
|
||||
|
||||
if (pdev->revision)
|
||||
if ((pdev->device == MPI3_MFGPAGE_DEVID_SAS4116) &&
|
||||
!pdev->revision)
|
||||
mrioc->enable_segqueue = false;
|
||||
else
|
||||
mrioc->enable_segqueue = true;
|
||||
|
||||
init_waitqueue_head(&mrioc->reset_waitq);
|
||||
@ -5430,6 +5433,14 @@ static const struct pci_device_id mpi3mr_pci_id_table[] = {
|
||||
PCI_DEVICE_SUB(MPI3_MFGPAGE_VENDORID_BROADCOM,
|
||||
MPI3_MFGPAGE_DEVID_SAS4116, PCI_ANY_ID, PCI_ANY_ID)
|
||||
},
|
||||
{
|
||||
PCI_DEVICE_SUB(MPI3_MFGPAGE_VENDORID_BROADCOM,
|
||||
MPI3_MFGPAGE_DEVID_SAS5116_MPI, PCI_ANY_ID, PCI_ANY_ID)
|
||||
},
|
||||
{
|
||||
PCI_DEVICE_SUB(MPI3_MFGPAGE_VENDORID_BROADCOM,
|
||||
MPI3_MFGPAGE_DEVID_SAS5116_MPI_MGMT, PCI_ANY_ID, PCI_ANY_ID)
|
||||
},
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, mpi3mr_pci_id_table);
|
||||
|
@ -1587,7 +1587,7 @@ static void mpi3mr_sas_port_remove(struct mpi3mr_ioc *mrioc, u64 sas_address,
|
||||
*/
|
||||
struct host_port {
|
||||
u64 sas_address;
|
||||
u32 phy_mask;
|
||||
u64 phy_mask;
|
||||
u16 handle;
|
||||
u8 iounit_port_id;
|
||||
u8 used;
|
||||
@ -1611,7 +1611,7 @@ mpi3mr_update_mr_sas_port(struct mpi3mr_ioc *mrioc, struct host_port *h_port,
|
||||
struct mpi3mr_sas_port *mr_sas_port)
|
||||
{
|
||||
struct mpi3mr_sas_phy *mr_sas_phy;
|
||||
u32 phy_mask_xor;
|
||||
u64 phy_mask_xor;
|
||||
u64 phys_to_be_added, phys_to_be_removed;
|
||||
int i;
|
||||
|
||||
@ -1619,7 +1619,7 @@ mpi3mr_update_mr_sas_port(struct mpi3mr_ioc *mrioc, struct host_port *h_port,
|
||||
mr_sas_port->marked_responding = 1;
|
||||
|
||||
dev_info(&mr_sas_port->port->dev,
|
||||
"sas_address(0x%016llx), old: port_id %d phy_mask 0x%x, new: port_id %d phy_mask:0x%x\n",
|
||||
"sas_address(0x%016llx), old: port_id %d phy_mask 0x%llx, new: port_id %d phy_mask:0x%llx\n",
|
||||
mr_sas_port->remote_identify.sas_address,
|
||||
mr_sas_port->hba_port->port_id, mr_sas_port->phy_mask,
|
||||
h_port->iounit_port_id, h_port->phy_mask);
|
||||
@ -1637,7 +1637,7 @@ mpi3mr_update_mr_sas_port(struct mpi3mr_ioc *mrioc, struct host_port *h_port,
|
||||
* if these phys are previously registered with another port
|
||||
* then delete these phys from that port first.
|
||||
*/
|
||||
for_each_set_bit(i, (ulong *) &phys_to_be_added, BITS_PER_TYPE(u32)) {
|
||||
for_each_set_bit(i, (ulong *) &phys_to_be_added, BITS_PER_TYPE(u64)) {
|
||||
mr_sas_phy = &mrioc->sas_hba.phy[i];
|
||||
if (mr_sas_phy->phy_belongs_to_port)
|
||||
mpi3mr_del_phy_from_an_existing_port(mrioc,
|
||||
@ -1649,7 +1649,7 @@ mpi3mr_update_mr_sas_port(struct mpi3mr_ioc *mrioc, struct host_port *h_port,
|
||||
}
|
||||
|
||||
/* Delete the phys which are not part of current mr_sas_port's port. */
|
||||
for_each_set_bit(i, (ulong *) &phys_to_be_removed, BITS_PER_TYPE(u32)) {
|
||||
for_each_set_bit(i, (ulong *) &phys_to_be_removed, BITS_PER_TYPE(u64)) {
|
||||
mr_sas_phy = &mrioc->sas_hba.phy[i];
|
||||
if (mr_sas_phy->phy_belongs_to_port)
|
||||
mpi3mr_del_phy_from_an_existing_port(mrioc,
|
||||
@ -1671,7 +1671,7 @@ mpi3mr_update_mr_sas_port(struct mpi3mr_ioc *mrioc, struct host_port *h_port,
|
||||
void
|
||||
mpi3mr_refresh_sas_ports(struct mpi3mr_ioc *mrioc)
|
||||
{
|
||||
struct host_port h_port[32];
|
||||
struct host_port h_port[64];
|
||||
int i, j, found, host_port_count = 0, port_idx;
|
||||
u16 sz, attached_handle, ioc_status;
|
||||
struct mpi3_sas_io_unit_page0 *sas_io_unit_pg0 = NULL;
|
||||
@ -1742,7 +1742,7 @@ mpi3mr_refresh_sas_ports(struct mpi3mr_ioc *mrioc)
|
||||
list_for_each_entry(mr_sas_port, &mrioc->sas_hba.sas_port_list,
|
||||
port_list) {
|
||||
ioc_info(mrioc,
|
||||
"port_id:%d, sas_address:(0x%016llx), phy_mask:(0x%x), lowest phy id:%d\n",
|
||||
"port_id:%d, sas_address:(0x%016llx), phy_mask:(0x%llx), lowest phy id:%d\n",
|
||||
mr_sas_port->hba_port->port_id,
|
||||
mr_sas_port->remote_identify.sas_address,
|
||||
mr_sas_port->phy_mask, mr_sas_port->lowest_phy);
|
||||
@ -1751,7 +1751,7 @@ mpi3mr_refresh_sas_ports(struct mpi3mr_ioc *mrioc)
|
||||
ioc_info(mrioc, "Host port details after reset\n");
|
||||
for (i = 0; i < host_port_count; i++) {
|
||||
ioc_info(mrioc,
|
||||
"port_id:%d, sas_address:(0x%016llx), phy_mask:(0x%x), lowest phy id:%d\n",
|
||||
"port_id:%d, sas_address:(0x%016llx), phy_mask:(0x%llx), lowest phy id:%d\n",
|
||||
h_port[i].iounit_port_id, h_port[i].sas_address,
|
||||
h_port[i].phy_mask, h_port[i].lowest_phy);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user