scsi: mpi3mr: Increase maximum number of PHYs to 64 from 32
authorSumit Saxena <sumit.saxena@broadcom.com>
Thu, 23 Nov 2023 16:01:30 +0000 (21:31 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 25 Nov 2023 01:53:05 +0000 (20:53 -0500)
SAS5116 controllers supports maximum 48 physical PHYs. Modify driver to
accommodate up to 64 PHYs (though current need is to support 48 PHYs).

Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
Link: https://lore.kernel.org/r/20231123160132.4155-4-sumit.saxena@broadcom.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpi3mr/mpi3mr.h
drivers/scsi/mpi3mr/mpi3mr_transport.c

index ae98d15c30b1dd0c367fb53d3fdb4f11172fb17d..7658e8aaadbee20e95e49595052a62ceb5370742 100644 (file)
@@ -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;
index 82b55e95573041387395a3d104df6d4ce5ac058a..c0c8ab5869572f77fa11f1c2154e85802ff8a4e5 100644 (file)
@@ -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);
                }