Commit ae996aeb authored by Martin K. Petersen's avatar Martin K. Petersen
Browse files

Merge patch series "mpi3mr: Few minor bug fixes"

Ranjan Kumar <ranjan.kumar@broadcom.com> says:

Few minor fixes of mpi3mr driver.

Link: https://lore.kernel.org/r/20250627194539.48851-1-ranjan.kumar@broadcom.com


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 8314312c e1c9a704
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -56,8 +56,8 @@ extern struct list_head mrioc_list;
extern int prot_mask;
extern atomic64_t event_counter;

#define MPI3MR_DRIVER_VERSION	"8.13.0.5.50"
#define MPI3MR_DRIVER_RELDATE	"20-February-2025"
#define MPI3MR_DRIVER_VERSION	"8.14.0.5.50"
#define MPI3MR_DRIVER_RELDATE	"27-June-2025"

#define MPI3MR_DRIVER_NAME	"mpi3mr"
#define MPI3MR_DRIVER_LICENSE	"GPL"
@@ -1137,6 +1137,8 @@ struct scmd_priv {
 * @logdata_buf: Circular buffer to store log data entries
 * @logdata_buf_idx: Index of entry in buffer to store
 * @logdata_entry_sz: log data entry size
 * @adm_req_q_bar_writeq_lock: Admin request queue lock
 * @adm_reply_q_bar_writeq_lock: Admin reply queue lock
 * @pend_large_data_sz: Counter to track pending large data
 * @io_throttle_data_length: I/O size to track in 512b blocks
 * @io_throttle_high: I/O size to start throttle in 512b blocks
@@ -1185,7 +1187,7 @@ struct mpi3mr_ioc {
	char name[MPI3MR_NAME_LENGTH];
	char driver_name[MPI3MR_NAME_LENGTH];

	volatile struct mpi3_sysif_registers __iomem *sysif_regs;
	struct mpi3_sysif_registers __iomem *sysif_regs;
	resource_size_t sysif_regs_phys;
	int bars;
	u64 dma_mask;
@@ -1339,6 +1341,8 @@ struct mpi3mr_ioc {
	u8 *logdata_buf;
	u16 logdata_buf_idx;
	u16 logdata_entry_sz;
	spinlock_t adm_req_q_bar_writeq_lock;
	spinlock_t adm_reply_q_bar_writeq_lock;

	atomic_t pend_large_data_sz;
	u32 io_throttle_data_length;
+12 −5
Original line number Diff line number Diff line
@@ -23,17 +23,22 @@ module_param(poll_queues, int, 0444);
MODULE_PARM_DESC(poll_queues, "Number of queues for io_uring poll mode. (Range 1 - 126)");

#if defined(writeq) && defined(CONFIG_64BIT)
static inline void mpi3mr_writeq(__u64 b, volatile void __iomem *addr)
static inline void mpi3mr_writeq(__u64 b, void __iomem *addr,
	spinlock_t *write_queue_lock)
{
	writeq(b, addr);
}
#else
static inline void mpi3mr_writeq(__u64 b, volatile void __iomem *addr)
static inline void mpi3mr_writeq(__u64 b, void __iomem *addr,
	spinlock_t *write_queue_lock)
{
	__u64 data_out = b;
	unsigned long flags;

	spin_lock_irqsave(write_queue_lock, flags);
	writel((u32)(data_out), addr);
	writel((u32)(data_out >> 32), (addr + 4));
	spin_unlock_irqrestore(write_queue_lock, flags);
}
#endif

@@ -428,8 +433,8 @@ static void mpi3mr_process_admin_reply_desc(struct mpi3mr_ioc *mrioc,
				       MPI3MR_SENSE_BUF_SZ);
			}
			if (cmdptr->is_waiting) {
				complete(&cmdptr->done);
				cmdptr->is_waiting = 0;
				complete(&cmdptr->done);
			} else if (cmdptr->callback)
				cmdptr->callback(mrioc, cmdptr);
		}
@@ -2954,9 +2959,11 @@ static int mpi3mr_setup_admin_qpair(struct mpi3mr_ioc *mrioc)
	    (mrioc->num_admin_req);
	writel(num_admin_entries, &mrioc->sysif_regs->admin_queue_num_entries);
	mpi3mr_writeq(mrioc->admin_req_dma,
	    &mrioc->sysif_regs->admin_request_queue_address);
		&mrioc->sysif_regs->admin_request_queue_address,
		&mrioc->adm_req_q_bar_writeq_lock);
	mpi3mr_writeq(mrioc->admin_reply_dma,
	    &mrioc->sysif_regs->admin_reply_queue_address);
		&mrioc->sysif_regs->admin_reply_queue_address,
		&mrioc->adm_reply_q_bar_writeq_lock);
	writel(mrioc->admin_req_pi, &mrioc->sysif_regs->admin_request_queue_pi);
	writel(mrioc->admin_reply_ci, &mrioc->sysif_regs->admin_reply_queue_ci);
	return retval;
+2 −0
Original line number Diff line number Diff line
@@ -5383,6 +5383,8 @@ mpi3mr_probe(struct pci_dev *pdev, const struct pci_device_id *id)
	spin_lock_init(&mrioc->tgtdev_lock);
	spin_lock_init(&mrioc->watchdog_lock);
	spin_lock_init(&mrioc->chain_buf_lock);
	spin_lock_init(&mrioc->adm_req_q_bar_writeq_lock);
	spin_lock_init(&mrioc->adm_reply_q_bar_writeq_lock);
	spin_lock_init(&mrioc->sas_node_lock);
	spin_lock_init(&mrioc->trigger_lock);