mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 03:33:59 +08:00
qlge: Clean up firmware reset path.
Add function for performing the reset rather than in-line. This function may later be called by a core dump process. Signed-off-by: Ron Mercer <ron.mercer@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b82808b759
commit
a2e809bb1b
@ -1,6 +1,6 @@
|
||||
#include "qlge.h"
|
||||
|
||||
static int ql_read_mbox_reg(struct ql_adapter *qdev, u32 reg, u32 *data)
|
||||
int ql_read_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 *data)
|
||||
{
|
||||
int status;
|
||||
/* wait for reg to come ready */
|
||||
@ -19,6 +19,32 @@ exit:
|
||||
return status;
|
||||
}
|
||||
|
||||
int ql_write_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 data)
|
||||
{
|
||||
int status = 0;
|
||||
/* wait for reg to come ready */
|
||||
status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR);
|
||||
if (status)
|
||||
goto exit;
|
||||
/* write the data to the data reg */
|
||||
ql_write32(qdev, PROC_DATA, data);
|
||||
/* trigger the write */
|
||||
ql_write32(qdev, PROC_ADDR, reg);
|
||||
/* wait for reg to come ready */
|
||||
status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR);
|
||||
if (status)
|
||||
goto exit;
|
||||
exit:
|
||||
return status;
|
||||
}
|
||||
|
||||
int ql_soft_reset_mpi_risc(struct ql_adapter *qdev)
|
||||
{
|
||||
int status;
|
||||
status = ql_write_mpi_reg(qdev, 0x00001010, 1);
|
||||
return status;
|
||||
}
|
||||
|
||||
static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp)
|
||||
{
|
||||
int i, status;
|
||||
@ -28,7 +54,7 @@ static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp)
|
||||
return -EBUSY;
|
||||
for (i = 0; i < mbcp->out_count; i++) {
|
||||
status =
|
||||
ql_read_mbox_reg(qdev, qdev->mailbox_out + i,
|
||||
ql_read_mpi_reg(qdev, qdev->mailbox_out + i,
|
||||
&mbcp->mbox_out[i]);
|
||||
if (status) {
|
||||
QPRINTK(qdev, DRV, ERR, "Failed mailbox read.\n");
|
||||
@ -142,9 +168,5 @@ void ql_mpi_reset_work(struct work_struct *work)
|
||||
{
|
||||
struct ql_adapter *qdev =
|
||||
container_of(work, struct ql_adapter, mpi_reset_work.work);
|
||||
QPRINTK(qdev, DRV, ERR,
|
||||
"Enter, qdev = %p..\n", qdev);
|
||||
ql_write32(qdev, CSR, CSR_CMD_SET_RST);
|
||||
msleep(50);
|
||||
ql_write32(qdev, CSR, CSR_CMD_CLR_RST);
|
||||
ql_soft_reset_mpi_risc(qdev);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user