* [PATCH 1/6] scsi: pm80xx: Log some HW events by default
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
@ 2023-04-18 19:00 ` Pranav Prasad
2023-04-19 7:17 ` Jinpu Wang
2023-04-18 19:00 ` [PATCH 2/6] scsi: pm80xx: Enable init logging Pranav Prasad
` (6 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Pranav Prasad @ 2023-04-18 19:00 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Akshat Jain, Pranav Prasad
From: Akshat Jain <akshatzen@google.com>
Log the following hw_event logs under EVENT log severity
to help debug disk issues:
HW_EVENT_LINK_ERR_INVALID_DWORD
HW_EVENT_LINK_ERR_DISPARITY_ERROR
HW_EVENT_LINK_ERR_CODE_VIOLATION
HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH
HW_EVENT_LINK_ERR_PHY_RESET_FAILED
HW_EVENT_INBOUND_CRC_ERROR
HW_EVENT_PHY_ERROR
HW_EVENT_SAS_PHY_UP
HW_EVENT_SATA_PHY_UP
HW_EVENT_SATA_SPINUP_HOLD
HW_EVENT_PHY_DOWN
HW_EVENT_PORT_INVALID
HW_EVENT_MALFUNCTION
HW_EVENT_PORT_RESET_TIMER_TMO
HW_EVENT_PORT_RECOVERY_TIMER_TMO
HW_EVENT_HARD_RESET_RECEIVED
HW_EVENT_ID_FRAME_TIMEOUT
HW_EVENT_PORT_RECOVER
Signed-off-by: Akshat Jain <akshatzen@google.com>
Signed-off-by: Pranav Prasad <pranavpp@google.com>
---
drivers/scsi/pm8001/pm8001_init.c | 3 +-
drivers/scsi/pm8001/pm8001_sas.h | 1 +
drivers/scsi/pm8001/pm80xx_hwi.c | 72 ++++++++++++++++++++-----------
3 files changed, 50 insertions(+), 26 deletions(-)
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index 7e589fe3e010..d8dc629c0efb 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -43,7 +43,8 @@
#include "pm8001_chips.h"
#include "pm80xx_hwi.h"
-static ulong logging_level = PM8001_FAIL_LOGGING | PM8001_IOERR_LOGGING;
+static ulong logging_level = PM8001_FAIL_LOGGING | PM8001_IOERR_LOGGING |
+ PM8001_EVENT_LOGGING;
module_param(logging_level, ulong, 0644);
MODULE_PARM_DESC(logging_level, " bits for enabling logging info.");
diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h
index dc1f4d958e03..953572fc0d9e 100644
--- a/drivers/scsi/pm8001/pm8001_sas.h
+++ b/drivers/scsi/pm8001/pm8001_sas.h
@@ -71,6 +71,7 @@
#define PM8001_DEV_LOGGING 0x80 /* development message logging */
#define PM8001_DEVIO_LOGGING 0x100 /* development io message logging */
#define PM8001_IOERR_LOGGING 0x200 /* development io err message logging */
+#define PM8001_EVENT_LOGGING 0x400 /* HW event logging */
#define pm8001_info(HBA, fmt, ...) \
pr_info("%s:: %s %d: " fmt, \
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 9584cadc4201..ce6a442d2418 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3425,26 +3425,31 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
switch (eventType) {
case HW_EVENT_SAS_PHY_UP:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_START_STATUS\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_SAS_PHY_UP phyid:%#x\n", phy_id);
hw_event_sas_phy_up(pm8001_ha, piomb);
break;
case HW_EVENT_SATA_PHY_UP:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_PHY_UP\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_SATA_PHY_UP phyid:%#x\n", phy_id);
hw_event_sata_phy_up(pm8001_ha, piomb);
break;
case HW_EVENT_SATA_SPINUP_HOLD:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_SPINUP_HOLD\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_SATA_SPINUP_HOLD phyid:%#x\n", phy_id);
sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD,
GFP_ATOMIC);
break;
case HW_EVENT_PHY_DOWN:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_DOWN\n");
+ pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_DOWN phyid:%#x\n",
+ phy_id);
hw_event_phy_down(pm8001_ha, piomb);
phy->phy_attached = 0;
phy->phy_state = PHY_LINK_DISABLE;
break;
case HW_EVENT_PORT_INVALID:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_INVALID\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PORT_INVALID phyid:%#x\n", phy_id);
sas_phy_disconnected(sas_phy);
phy->phy_attached = 0;
sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
@@ -3463,7 +3468,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
GFP_ATOMIC);
break;
case HW_EVENT_PHY_ERROR:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_ERROR\n");
+ pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_ERROR phyid:%#x\n",
+ phy_id);
sas_phy_disconnected(&phy->sas_phy);
phy->phy_attached = 0;
sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR, GFP_ATOMIC);
@@ -3477,34 +3483,39 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
GFP_ATOMIC);
break;
case HW_EVENT_LINK_ERR_INVALID_DWORD:
- pm8001_dbg(pm8001_ha, MSG,
- "HW_EVENT_LINK_ERR_INVALID_DWORD\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_LINK_ERR_INVALID_DWORD phyid:%#x\n",
+ phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_INVALID_DWORD, port_id, phy_id, 0, 0);
break;
case HW_EVENT_LINK_ERR_DISPARITY_ERROR:
- pm8001_dbg(pm8001_ha, MSG,
- "HW_EVENT_LINK_ERR_DISPARITY_ERROR\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_LINK_ERR_DISPARITY_ERROR phyid:%#x\n",
+ phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_DISPARITY_ERROR,
port_id, phy_id, 0, 0);
break;
case HW_EVENT_LINK_ERR_CODE_VIOLATION:
- pm8001_dbg(pm8001_ha, MSG,
- "HW_EVENT_LINK_ERR_CODE_VIOLATION\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_LINK_ERR_CODE_VIOLATION phyid:%#x\n",
+ phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_CODE_VIOLATION,
port_id, phy_id, 0, 0);
break;
case HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH:
- pm8001_dbg(pm8001_ha, MSG,
- "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH phyid:%#x\n",
+ phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH,
port_id, phy_id, 0, 0);
break;
case HW_EVENT_MALFUNCTION:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_MALFUNCTION\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_MALFUNCTION phyid:%#x\n", phy_id);
break;
case HW_EVENT_BROADCAST_SES:
pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_SES\n");
@@ -3515,25 +3526,29 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
GFP_ATOMIC);
break;
case HW_EVENT_INBOUND_CRC_ERROR:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_INBOUND_CRC_ERROR\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_INBOUND_CRC_ERROR phyid:%#x\n", phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_INBOUND_CRC_ERROR,
port_id, phy_id, 0, 0);
break;
case HW_EVENT_HARD_RESET_RECEIVED:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_HARD_RESET_RECEIVED\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_HARD_RESET_RECEIVED phyid:%#x\n", phy_id);
sas_notify_port_event(sas_phy, PORTE_HARD_RESET, GFP_ATOMIC);
break;
case HW_EVENT_ID_FRAME_TIMEOUT:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_ID_FRAME_TIMEOUT\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_ID_FRAME_TIMEOUT phyid:%#x\n", phy_id);
sas_phy_disconnected(sas_phy);
phy->phy_attached = 0;
sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
GFP_ATOMIC);
break;
case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
- pm8001_dbg(pm8001_ha, MSG,
- "HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_LINK_ERR_PHY_RESET_FAILED phyid:%#x\n",
+ phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
port_id, phy_id, 0, 0);
@@ -3543,7 +3558,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
GFP_ATOMIC);
break;
case HW_EVENT_PORT_RESET_TIMER_TMO:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_TIMER_TMO\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x\n",
+ phy_id);
if (!pm8001_ha->phy[phy_id].reset_completion) {
pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
port_id, phy_id, 0, 0);
@@ -3560,8 +3577,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
}
break;
case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
- pm8001_dbg(pm8001_ha, MSG,
- "HW_EVENT_PORT_RECOVERY_TIMER_TMO\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PORT_RECOVERY_TIMER_TMO phyid:%#x\n",
+ phy_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_PORT_RECOVERY_TIMER_TMO,
port_id, phy_id, 0, 0);
@@ -3575,11 +3593,15 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
}
break;
case HW_EVENT_PORT_RECOVER:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RECOVER\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PORT_RECOVER phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
hw_event_port_recover(pm8001_ha, piomb);
break;
case HW_EVENT_PORT_RESET_COMPLETE:
- pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_COMPLETE\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PORT_RESET_COMPLETE phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
if (pm8001_ha->phy[phy_id].reset_completion) {
pm8001_ha->phy[phy_id].port_reset_status =
PORT_RESET_SUCCESS;
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 1/6] scsi: pm80xx: Log some HW events by default
2023-04-18 19:00 ` [PATCH 1/6] scsi: pm80xx: Log some HW events by default Pranav Prasad
@ 2023-04-19 7:17 ` Jinpu Wang
0 siblings, 0 replies; 15+ messages in thread
From: Jinpu Wang @ 2023-04-19 7:17 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Akshat Jain
On Tue, Apr 18, 2023 at 9:01 PM Pranav Prasad <pranavpp@google.com> wrote:
>
> From: Akshat Jain <akshatzen@google.com>
>
> Log the following hw_event logs under EVENT log severity
> to help debug disk issues:
> HW_EVENT_LINK_ERR_INVALID_DWORD
> HW_EVENT_LINK_ERR_DISPARITY_ERROR
> HW_EVENT_LINK_ERR_CODE_VIOLATION
> HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH
> HW_EVENT_LINK_ERR_PHY_RESET_FAILED
> HW_EVENT_INBOUND_CRC_ERROR
> HW_EVENT_PHY_ERROR
> HW_EVENT_SAS_PHY_UP
> HW_EVENT_SATA_PHY_UP
> HW_EVENT_SATA_SPINUP_HOLD
> HW_EVENT_PHY_DOWN
> HW_EVENT_PORT_INVALID
> HW_EVENT_MALFUNCTION
> HW_EVENT_PORT_RESET_TIMER_TMO
> HW_EVENT_PORT_RECOVERY_TIMER_TMO
> HW_EVENT_HARD_RESET_RECEIVED
> HW_EVENT_ID_FRAME_TIMEOUT
> HW_EVENT_PORT_RECOVER
>
> Signed-off-by: Akshat Jain <akshatzen@google.com>
> Signed-off-by: Pranav Prasad <pranavpp@google.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm8001_init.c | 3 +-
> drivers/scsi/pm8001/pm8001_sas.h | 1 +
> drivers/scsi/pm8001/pm80xx_hwi.c | 72 ++++++++++++++++++++-----------
> 3 files changed, 50 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
> index 7e589fe3e010..d8dc629c0efb 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -43,7 +43,8 @@
> #include "pm8001_chips.h"
> #include "pm80xx_hwi.h"
>
> -static ulong logging_level = PM8001_FAIL_LOGGING | PM8001_IOERR_LOGGING;
> +static ulong logging_level = PM8001_FAIL_LOGGING | PM8001_IOERR_LOGGING |
> + PM8001_EVENT_LOGGING;
> module_param(logging_level, ulong, 0644);
> MODULE_PARM_DESC(logging_level, " bits for enabling logging info.");
>
> diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h
> index dc1f4d958e03..953572fc0d9e 100644
> --- a/drivers/scsi/pm8001/pm8001_sas.h
> +++ b/drivers/scsi/pm8001/pm8001_sas.h
> @@ -71,6 +71,7 @@
> #define PM8001_DEV_LOGGING 0x80 /* development message logging */
> #define PM8001_DEVIO_LOGGING 0x100 /* development io message logging */
> #define PM8001_IOERR_LOGGING 0x200 /* development io err message logging */
> +#define PM8001_EVENT_LOGGING 0x400 /* HW event logging */
>
> #define pm8001_info(HBA, fmt, ...) \
> pr_info("%s:: %s %d: " fmt, \
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index 9584cadc4201..ce6a442d2418 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -3425,26 +3425,31 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> switch (eventType) {
>
> case HW_EVENT_SAS_PHY_UP:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_START_STATUS\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_SAS_PHY_UP phyid:%#x\n", phy_id);
> hw_event_sas_phy_up(pm8001_ha, piomb);
> break;
> case HW_EVENT_SATA_PHY_UP:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_PHY_UP\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_SATA_PHY_UP phyid:%#x\n", phy_id);
> hw_event_sata_phy_up(pm8001_ha, piomb);
> break;
> case HW_EVENT_SATA_SPINUP_HOLD:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_SPINUP_HOLD\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_SATA_SPINUP_HOLD phyid:%#x\n", phy_id);
> sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD,
> GFP_ATOMIC);
> break;
> case HW_EVENT_PHY_DOWN:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_DOWN\n");
> + pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_DOWN phyid:%#x\n",
> + phy_id);
> hw_event_phy_down(pm8001_ha, piomb);
> phy->phy_attached = 0;
> phy->phy_state = PHY_LINK_DISABLE;
> break;
> case HW_EVENT_PORT_INVALID:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_INVALID\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PORT_INVALID phyid:%#x\n", phy_id);
> sas_phy_disconnected(sas_phy);
> phy->phy_attached = 0;
> sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
> @@ -3463,7 +3468,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> GFP_ATOMIC);
> break;
> case HW_EVENT_PHY_ERROR:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_ERROR\n");
> + pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_ERROR phyid:%#x\n",
> + phy_id);
> sas_phy_disconnected(&phy->sas_phy);
> phy->phy_attached = 0;
> sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR, GFP_ATOMIC);
> @@ -3477,34 +3483,39 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> GFP_ATOMIC);
> break;
> case HW_EVENT_LINK_ERR_INVALID_DWORD:
> - pm8001_dbg(pm8001_ha, MSG,
> - "HW_EVENT_LINK_ERR_INVALID_DWORD\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_LINK_ERR_INVALID_DWORD phyid:%#x\n",
> + phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_INVALID_DWORD, port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_LINK_ERR_DISPARITY_ERROR:
> - pm8001_dbg(pm8001_ha, MSG,
> - "HW_EVENT_LINK_ERR_DISPARITY_ERROR\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_LINK_ERR_DISPARITY_ERROR phyid:%#x\n",
> + phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_DISPARITY_ERROR,
> port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_LINK_ERR_CODE_VIOLATION:
> - pm8001_dbg(pm8001_ha, MSG,
> - "HW_EVENT_LINK_ERR_CODE_VIOLATION\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_LINK_ERR_CODE_VIOLATION phyid:%#x\n",
> + phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_CODE_VIOLATION,
> port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH:
> - pm8001_dbg(pm8001_ha, MSG,
> - "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH phyid:%#x\n",
> + phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH,
> port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_MALFUNCTION:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_MALFUNCTION\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_MALFUNCTION phyid:%#x\n", phy_id);
> break;
> case HW_EVENT_BROADCAST_SES:
> pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_SES\n");
> @@ -3515,25 +3526,29 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> GFP_ATOMIC);
> break;
> case HW_EVENT_INBOUND_CRC_ERROR:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_INBOUND_CRC_ERROR\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_INBOUND_CRC_ERROR phyid:%#x\n", phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_INBOUND_CRC_ERROR,
> port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_HARD_RESET_RECEIVED:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_HARD_RESET_RECEIVED\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_HARD_RESET_RECEIVED phyid:%#x\n", phy_id);
> sas_notify_port_event(sas_phy, PORTE_HARD_RESET, GFP_ATOMIC);
> break;
> case HW_EVENT_ID_FRAME_TIMEOUT:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_ID_FRAME_TIMEOUT\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_ID_FRAME_TIMEOUT phyid:%#x\n", phy_id);
> sas_phy_disconnected(sas_phy);
> phy->phy_attached = 0;
> sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
> GFP_ATOMIC);
> break;
> case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
> - pm8001_dbg(pm8001_ha, MSG,
> - "HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_LINK_ERR_PHY_RESET_FAILED phyid:%#x\n",
> + phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
> port_id, phy_id, 0, 0);
> @@ -3543,7 +3558,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> GFP_ATOMIC);
> break;
> case HW_EVENT_PORT_RESET_TIMER_TMO:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_TIMER_TMO\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x\n",
> + phy_id);
> if (!pm8001_ha->phy[phy_id].reset_completion) {
> pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
> port_id, phy_id, 0, 0);
> @@ -3560,8 +3577,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> }
> break;
> case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
> - pm8001_dbg(pm8001_ha, MSG,
> - "HW_EVENT_PORT_RECOVERY_TIMER_TMO\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PORT_RECOVERY_TIMER_TMO phyid:%#x\n",
> + phy_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_PORT_RECOVERY_TIMER_TMO,
> port_id, phy_id, 0, 0);
> @@ -3575,11 +3593,15 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> }
> break;
> case HW_EVENT_PORT_RECOVER:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RECOVER\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PORT_RECOVER phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> hw_event_port_recover(pm8001_ha, piomb);
> break;
> case HW_EVENT_PORT_RESET_COMPLETE:
> - pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_COMPLETE\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PORT_RESET_COMPLETE phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> if (pm8001_ha->phy[phy_id].reset_completion) {
> pm8001_ha->phy[phy_id].port_reset_status =
> PORT_RESET_SUCCESS;
> --
> 2.40.0.634.g4ca3ef3211-goog
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/6] scsi: pm80xx: Enable init logging
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
2023-04-18 19:00 ` [PATCH 1/6] scsi: pm80xx: Log some HW events by default Pranav Prasad
@ 2023-04-18 19:00 ` Pranav Prasad
2023-04-19 7:19 ` Jinpu Wang
2023-04-18 19:00 ` [PATCH 3/6] scsi: pm80xx: Print port_id in HW events Pranav Prasad
` (5 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Pranav Prasad @ 2023-04-18 19:00 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Akshat Jain, Pranav Prasad
From: Akshat Jain <akshatzen@google.com>
Enable init logging to debug drive discovery issues.
Signed-off-by: Akshat Jain <akshatzen@google.com>
Signed-off-by: Pranav Prasad <pranavpp@google.com>
---
drivers/scsi/pm8001/pm8001_init.c | 2 +-
drivers/scsi/pm8001/pm80xx_hwi.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index d8dc629c0efb..041cdc41af80 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -44,7 +44,7 @@
#include "pm80xx_hwi.h"
static ulong logging_level = PM8001_FAIL_LOGGING | PM8001_IOERR_LOGGING |
- PM8001_EVENT_LOGGING;
+ PM8001_EVENT_LOGGING | PM8001_INIT_LOGGING;
module_param(logging_level, ulong, 0644);
MODULE_PARM_DESC(logging_level, " bits for enabling logging info.");
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index ce6a442d2418..61c1bf3d98a0 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -4837,7 +4837,7 @@ static void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha,
payload.tag = cpu_to_le32(tag);
payload.ppc_phyid =
cpu_to_le32(((operation & 0xF) << 8) | (phyid & 0xFF));
- pm8001_dbg(pm8001_ha, INIT,
+ pm8001_dbg(pm8001_ha, DISC,
" phy profile command for phy %x ,length is %d\n",
le32_to_cpu(payload.ppc_phyid), length);
for (i = length; i < (length + PHY_DWORD_LENGTH - 1); i++) {
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 2/6] scsi: pm80xx: Enable init logging
2023-04-18 19:00 ` [PATCH 2/6] scsi: pm80xx: Enable init logging Pranav Prasad
@ 2023-04-19 7:19 ` Jinpu Wang
0 siblings, 0 replies; 15+ messages in thread
From: Jinpu Wang @ 2023-04-19 7:19 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Akshat Jain
On Tue, Apr 18, 2023 at 9:01 PM Pranav Prasad <pranavpp@google.com> wrote:
>
> From: Akshat Jain <akshatzen@google.com>
>
> Enable init logging to debug drive discovery issues.
>
> Signed-off-by: Akshat Jain <akshatzen@google.com>
> Signed-off-by: Pranav Prasad <pranavpp@google.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm8001_init.c | 2 +-
> drivers/scsi/pm8001/pm80xx_hwi.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
> index d8dc629c0efb..041cdc41af80 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -44,7 +44,7 @@
> #include "pm80xx_hwi.h"
>
> static ulong logging_level = PM8001_FAIL_LOGGING | PM8001_IOERR_LOGGING |
> - PM8001_EVENT_LOGGING;
> + PM8001_EVENT_LOGGING | PM8001_INIT_LOGGING;
> module_param(logging_level, ulong, 0644);
> MODULE_PARM_DESC(logging_level, " bits for enabling logging info.");
>
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index ce6a442d2418..61c1bf3d98a0 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -4837,7 +4837,7 @@ static void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha,
> payload.tag = cpu_to_le32(tag);
> payload.ppc_phyid =
> cpu_to_le32(((operation & 0xF) << 8) | (phyid & 0xFF));
> - pm8001_dbg(pm8001_ha, INIT,
> + pm8001_dbg(pm8001_ha, DISC,
> " phy profile command for phy %x ,length is %d\n",
> le32_to_cpu(payload.ppc_phyid), length);
> for (i = length; i < (length + PHY_DWORD_LENGTH - 1); i++) {
> --
> 2.40.0.634.g4ca3ef3211-goog
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/6] scsi: pm80xx: Print port_id in HW events
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
2023-04-18 19:00 ` [PATCH 1/6] scsi: pm80xx: Log some HW events by default Pranav Prasad
2023-04-18 19:00 ` [PATCH 2/6] scsi: pm80xx: Enable init logging Pranav Prasad
@ 2023-04-18 19:00 ` Pranav Prasad
2023-04-19 7:20 ` Jinpu Wang
2023-04-18 19:00 ` [PATCH 4/6] scsi: pm80xx: Log phy_id and port_id in the device registration request Pranav Prasad
` (4 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Pranav Prasad @ 2023-04-18 19:00 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Akshat Jain, Pranav Prasad
From: Akshat Jain <akshatzen@google.com>
Log port_id and phy_id along with the PHY_UP event.
Signed-off-by: Akshat Jain <akshatzen@google.com>
Signed-off-by: Pranav Prasad <pranavpp@google.com>
---
drivers/scsi/pm8001/pm80xx_hwi.c | 58 ++++++++++++++++++--------------
1 file changed, 33 insertions(+), 25 deletions(-)
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 61c1bf3d98a0..c5bf65d0ad14 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3426,30 +3426,35 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
case HW_EVENT_SAS_PHY_UP:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_SAS_PHY_UP phyid:%#x\n", phy_id);
+ "HW_EVENT_SAS_PHY_UP phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
hw_event_sas_phy_up(pm8001_ha, piomb);
break;
case HW_EVENT_SATA_PHY_UP:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_SATA_PHY_UP phyid:%#x\n", phy_id);
+ "HW_EVENT_SATA_PHY_UP phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
hw_event_sata_phy_up(pm8001_ha, piomb);
break;
case HW_EVENT_SATA_SPINUP_HOLD:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_SATA_SPINUP_HOLD phyid:%#x\n", phy_id);
+ "HW_EVENT_SATA_SPINUP_HOLD phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD,
GFP_ATOMIC);
break;
case HW_EVENT_PHY_DOWN:
- pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_DOWN phyid:%#x\n",
- phy_id);
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
hw_event_phy_down(pm8001_ha, piomb);
phy->phy_attached = 0;
phy->phy_state = PHY_LINK_DISABLE;
break;
case HW_EVENT_PORT_INVALID:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_PORT_INVALID phyid:%#x\n", phy_id);
+ "HW_EVENT_PORT_INVALID phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
sas_phy_disconnected(sas_phy);
phy->phy_attached = 0;
sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
@@ -3468,8 +3473,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
GFP_ATOMIC);
break;
case HW_EVENT_PHY_ERROR:
- pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_ERROR phyid:%#x\n",
- phy_id);
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_ERROR phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
sas_phy_disconnected(&phy->sas_phy);
phy->phy_attached = 0;
sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR, GFP_ATOMIC);
@@ -3484,31 +3490,31 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_LINK_ERR_INVALID_DWORD:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_LINK_ERR_INVALID_DWORD phyid:%#x\n",
- phy_id);
+ "HW_EVENT_LINK_ERR_INVALID_DWORD phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_INVALID_DWORD, port_id, phy_id, 0, 0);
break;
case HW_EVENT_LINK_ERR_DISPARITY_ERROR:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_LINK_ERR_DISPARITY_ERROR phyid:%#x\n",
- phy_id);
+ "HW_EVENT_LINK_ERR_DISPARITY_ERROR phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_DISPARITY_ERROR,
port_id, phy_id, 0, 0);
break;
case HW_EVENT_LINK_ERR_CODE_VIOLATION:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_LINK_ERR_CODE_VIOLATION phyid:%#x\n",
- phy_id);
+ "HW_EVENT_LINK_ERR_CODE_VIOLATION phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_CODE_VIOLATION,
port_id, phy_id, 0, 0);
break;
case HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH phyid:%#x\n",
- phy_id);
+ "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH,
port_id, phy_id, 0, 0);
@@ -3527,7 +3533,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_INBOUND_CRC_ERROR:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_INBOUND_CRC_ERROR phyid:%#x\n", phy_id);
+ "HW_EVENT_INBOUND_CRC_ERROR phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_INBOUND_CRC_ERROR,
port_id, phy_id, 0, 0);
@@ -3547,8 +3554,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_LINK_ERR_PHY_RESET_FAILED phyid:%#x\n",
- phy_id);
+ "HW_EVENT_LINK_ERR_PHY_RESET_FAILED phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
port_id, phy_id, 0, 0);
@@ -3559,8 +3566,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_PORT_RESET_TIMER_TMO:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x\n",
- phy_id);
+ "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
if (!pm8001_ha->phy[phy_id].reset_completion) {
pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
port_id, phy_id, 0, 0);
@@ -3578,8 +3585,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_PORT_RECOVERY_TIMER_TMO phyid:%#x\n",
- phy_id);
+ "HW_EVENT_PORT_RECOVERY_TIMER_TMO phyid:%#x port_id:%#x\n",
+ phy_id, port_id);
pm80xx_hw_event_ack_req(pm8001_ha, 0,
HW_EVENT_PORT_RECOVERY_TIMER_TMO,
port_id, phy_id, 0, 0);
@@ -3613,8 +3620,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
pm8001_dbg(pm8001_ha, MSG, "EVENT_BROADCAST_ASYNCH_EVENT\n");
break;
default:
- pm8001_dbg(pm8001_ha, DEVIO, "Unknown event type 0x%x\n",
- eventType);
+ pm8001_dbg(pm8001_ha, DEVIO,
+ "Unknown event portid:%d phyid:%d event:0x%x status:0x%x\n",
+ port_id, phy_id, eventType, status);
break;
}
return 0;
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 3/6] scsi: pm80xx: Print port_id in HW events
2023-04-18 19:00 ` [PATCH 3/6] scsi: pm80xx: Print port_id in HW events Pranav Prasad
@ 2023-04-19 7:20 ` Jinpu Wang
0 siblings, 0 replies; 15+ messages in thread
From: Jinpu Wang @ 2023-04-19 7:20 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Akshat Jain
On Tue, Apr 18, 2023 at 9:01 PM Pranav Prasad <pranavpp@google.com> wrote:
>
> From: Akshat Jain <akshatzen@google.com>
>
> Log port_id and phy_id along with the PHY_UP event.
>
> Signed-off-by: Akshat Jain <akshatzen@google.com>
> Signed-off-by: Pranav Prasad <pranavpp@google.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm80xx_hwi.c | 58 ++++++++++++++++++--------------
> 1 file changed, 33 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index 61c1bf3d98a0..c5bf65d0ad14 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -3426,30 +3426,35 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
>
> case HW_EVENT_SAS_PHY_UP:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_SAS_PHY_UP phyid:%#x\n", phy_id);
> + "HW_EVENT_SAS_PHY_UP phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> hw_event_sas_phy_up(pm8001_ha, piomb);
> break;
> case HW_EVENT_SATA_PHY_UP:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_SATA_PHY_UP phyid:%#x\n", phy_id);
> + "HW_EVENT_SATA_PHY_UP phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> hw_event_sata_phy_up(pm8001_ha, piomb);
> break;
> case HW_EVENT_SATA_SPINUP_HOLD:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_SATA_SPINUP_HOLD phyid:%#x\n", phy_id);
> + "HW_EVENT_SATA_SPINUP_HOLD phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD,
> GFP_ATOMIC);
> break;
> case HW_EVENT_PHY_DOWN:
> - pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_DOWN phyid:%#x\n",
> - phy_id);
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> hw_event_phy_down(pm8001_ha, piomb);
> phy->phy_attached = 0;
> phy->phy_state = PHY_LINK_DISABLE;
> break;
> case HW_EVENT_PORT_INVALID:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_PORT_INVALID phyid:%#x\n", phy_id);
> + "HW_EVENT_PORT_INVALID phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> sas_phy_disconnected(sas_phy);
> phy->phy_attached = 0;
> sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
> @@ -3468,8 +3473,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> GFP_ATOMIC);
> break;
> case HW_EVENT_PHY_ERROR:
> - pm8001_dbg(pm8001_ha, EVENT, "HW_EVENT_PHY_ERROR phyid:%#x\n",
> - phy_id);
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_ERROR phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> sas_phy_disconnected(&phy->sas_phy);
> phy->phy_attached = 0;
> sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR, GFP_ATOMIC);
> @@ -3484,31 +3490,31 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_LINK_ERR_INVALID_DWORD:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_LINK_ERR_INVALID_DWORD phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_LINK_ERR_INVALID_DWORD phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_INVALID_DWORD, port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_LINK_ERR_DISPARITY_ERROR:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_LINK_ERR_DISPARITY_ERROR phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_LINK_ERR_DISPARITY_ERROR phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_DISPARITY_ERROR,
> port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_LINK_ERR_CODE_VIOLATION:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_LINK_ERR_CODE_VIOLATION phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_LINK_ERR_CODE_VIOLATION phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_CODE_VIOLATION,
> port_id, phy_id, 0, 0);
> break;
> case HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH,
> port_id, phy_id, 0, 0);
> @@ -3527,7 +3533,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_INBOUND_CRC_ERROR:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_INBOUND_CRC_ERROR phyid:%#x\n", phy_id);
> + "HW_EVENT_INBOUND_CRC_ERROR phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_INBOUND_CRC_ERROR,
> port_id, phy_id, 0, 0);
> @@ -3547,8 +3554,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_LINK_ERR_PHY_RESET_FAILED phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_LINK_ERR_PHY_RESET_FAILED phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
> port_id, phy_id, 0, 0);
> @@ -3559,8 +3566,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_PORT_RESET_TIMER_TMO:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> if (!pm8001_ha->phy[phy_id].reset_completion) {
> pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
> port_id, phy_id, 0, 0);
> @@ -3578,8 +3585,8 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_PORT_RECOVERY_TIMER_TMO phyid:%#x\n",
> - phy_id);
> + "HW_EVENT_PORT_RECOVERY_TIMER_TMO phyid:%#x port_id:%#x\n",
> + phy_id, port_id);
> pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_PORT_RECOVERY_TIMER_TMO,
> port_id, phy_id, 0, 0);
> @@ -3613,8 +3620,9 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> pm8001_dbg(pm8001_ha, MSG, "EVENT_BROADCAST_ASYNCH_EVENT\n");
> break;
> default:
> - pm8001_dbg(pm8001_ha, DEVIO, "Unknown event type 0x%x\n",
> - eventType);
> + pm8001_dbg(pm8001_ha, DEVIO,
> + "Unknown event portid:%d phyid:%d event:0x%x status:0x%x\n",
> + port_id, phy_id, eventType, status);
> break;
> }
> return 0;
> --
> 2.40.0.634.g4ca3ef3211-goog
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 4/6] scsi: pm80xx: Log phy_id and port_id in the device registration request
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
` (2 preceding siblings ...)
2023-04-18 19:00 ` [PATCH 3/6] scsi: pm80xx: Print port_id in HW events Pranav Prasad
@ 2023-04-18 19:00 ` Pranav Prasad
2023-04-19 7:20 ` Jinpu Wang
2023-04-18 19:01 ` [PATCH 5/6] scsi: pm80xx: Log port state during HW event Pranav Prasad
` (3 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Pranav Prasad @ 2023-04-18 19:00 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Akshat Jain, Pranav Prasad
From: Akshat Jain <akshatzen@google.com>
Print phy_id and port_id sent as part of device registration
request.
Signed-off-by: Akshat Jain <akshatzen@google.com>
Signed-off-by: Pranav Prasad <pranavpp@google.com>
---
drivers/scsi/pm8001/pm80xx_hwi.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index c5bf65d0ad14..8571f6222eb8 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -4756,6 +4756,9 @@ static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha,
memcpy(payload.sas_addr, pm8001_dev->sas_device->sas_addr,
SAS_ADDR_SIZE);
+ pm8001_dbg(pm8001_ha, INIT,
+ "register device req phy_id 0x%x port_id 0x%x\n", phy_id,
+ (port->port_id & 0xFF));
rc = pm8001_mpi_build_cmd(pm8001_ha, 0, opc, &payload,
sizeof(payload), 0);
if (rc)
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 4/6] scsi: pm80xx: Log phy_id and port_id in the device registration request
2023-04-18 19:00 ` [PATCH 4/6] scsi: pm80xx: Log phy_id and port_id in the device registration request Pranav Prasad
@ 2023-04-19 7:20 ` Jinpu Wang
0 siblings, 0 replies; 15+ messages in thread
From: Jinpu Wang @ 2023-04-19 7:20 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Akshat Jain
On Tue, Apr 18, 2023 at 9:01 PM Pranav Prasad <pranavpp@google.com> wrote:
>
> From: Akshat Jain <akshatzen@google.com>
>
> Print phy_id and port_id sent as part of device registration
> request.
>
> Signed-off-by: Akshat Jain <akshatzen@google.com>
> Signed-off-by: Pranav Prasad <pranavpp@google.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm80xx_hwi.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index c5bf65d0ad14..8571f6222eb8 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -4756,6 +4756,9 @@ static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha,
> memcpy(payload.sas_addr, pm8001_dev->sas_device->sas_addr,
> SAS_ADDR_SIZE);
>
> + pm8001_dbg(pm8001_ha, INIT,
> + "register device req phy_id 0x%x port_id 0x%x\n", phy_id,
> + (port->port_id & 0xFF));
> rc = pm8001_mpi_build_cmd(pm8001_ha, 0, opc, &payload,
> sizeof(payload), 0);
> if (rc)
> --
> 2.40.0.634.g4ca3ef3211-goog
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 5/6] scsi: pm80xx: Log port state during HW event
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
` (3 preceding siblings ...)
2023-04-18 19:00 ` [PATCH 4/6] scsi: pm80xx: Log phy_id and port_id in the device registration request Pranav Prasad
@ 2023-04-18 19:01 ` Pranav Prasad
2023-04-19 7:22 ` Jinpu Wang
2023-04-18 19:01 ` [PATCH 6/6] scsi: pm80xx: Update PHY state after hard reset Pranav Prasad
` (2 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Pranav Prasad @ 2023-04-18 19:01 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Akshat Jain, Pranav Prasad
From: Akshat Jain <akshatzen@google.com>
Log port state during PHY_DOWN event to understand reasoning for PHY_DOWNs.
Signed-off-by: Akshat Jain <akshatzen@google.com>
Signed-off-by: Pranav Prasad <pranavpp@google.com>
---
drivers/scsi/pm8001/pm80xx_hwi.c | 43 ++++++++++++++++----------------
1 file changed, 22 insertions(+), 21 deletions(-)
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 8571f6222eb8..85908068b8d7 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3239,9 +3239,9 @@ hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
struct pm8001_port *port = &pm8001_ha->port[port_id];
struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
unsigned long flags;
- pm8001_dbg(pm8001_ha, DEVIO,
- "port id %d, phy id %d link_rate %d portstate 0x%x\n",
- port_id, phy_id, link_rate, portstate);
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_SATA_PHY_UP phyid:%#x port_id:%#x link_rate:%d portstate:%#x\n",
+ phy_id, port_id, link_rate, portstate);
phy->port = port;
port->port_id = port_id;
@@ -3291,10 +3291,14 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
phy->phy_attached = 0;
switch (portstate) {
case PORT_VALID:
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_VALID\n",
+ phy_id, port_id);
break;
case PORT_INVALID:
- pm8001_dbg(pm8001_ha, MSG, " PortInvalid portID %d\n",
- port_id);
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_INVALID\n",
+ phy_id, port_id);
pm8001_dbg(pm8001_ha, MSG,
" Last phy Down and port invalid\n");
if (port_sata) {
@@ -3306,18 +3310,21 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
sas_phy_disconnected(&phy->sas_phy);
break;
case PORT_IN_RESET:
- pm8001_dbg(pm8001_ha, MSG, " Port In Reset portID %d\n",
- port_id);
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_IN_RESET\n",
+ phy_id, port_id);
break;
case PORT_NOT_ESTABLISHED:
- pm8001_dbg(pm8001_ha, MSG,
- " Phy Down and PORT_NOT_ESTABLISHED\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_NOT_ESTABLISHED\n",
+ phy_id, port_id);
port->port_attached = 0;
break;
case PORT_LOSTCOMM:
- pm8001_dbg(pm8001_ha, MSG, " Phy Down and PORT_LOSTCOMM\n");
- pm8001_dbg(pm8001_ha, MSG,
- " Last phy Down and port invalid\n");
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_LOSTCOMM\n",
+ phy_id, port_id);
+ pm8001_dbg(pm8001_ha, MSG, " Last phy Down and port invalid\n");
if (port_sata) {
port->port_attached = 0;
phy->phy_type = 0;
@@ -3328,9 +3335,9 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
default:
port->port_attached = 0;
- pm8001_dbg(pm8001_ha, DEVIO,
- " Phy Down and(default) = 0x%x\n",
- portstate);
+ pm8001_dbg(pm8001_ha, EVENT,
+ "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate:%#x\n",
+ phy_id, port_id, portstate);
break;
}
@@ -3431,9 +3438,6 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
hw_event_sas_phy_up(pm8001_ha, piomb);
break;
case HW_EVENT_SATA_PHY_UP:
- pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_SATA_PHY_UP phyid:%#x port_id:%#x\n",
- phy_id, port_id);
hw_event_sata_phy_up(pm8001_ha, piomb);
break;
case HW_EVENT_SATA_SPINUP_HOLD:
@@ -3444,9 +3448,6 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
GFP_ATOMIC);
break;
case HW_EVENT_PHY_DOWN:
- pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x\n",
- phy_id, port_id);
hw_event_phy_down(pm8001_ha, piomb);
phy->phy_attached = 0;
phy->phy_state = PHY_LINK_DISABLE;
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 5/6] scsi: pm80xx: Log port state during HW event
2023-04-18 19:01 ` [PATCH 5/6] scsi: pm80xx: Log port state during HW event Pranav Prasad
@ 2023-04-19 7:22 ` Jinpu Wang
0 siblings, 0 replies; 15+ messages in thread
From: Jinpu Wang @ 2023-04-19 7:22 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Akshat Jain
On Tue, Apr 18, 2023 at 9:01 PM Pranav Prasad <pranavpp@google.com> wrote:
>
> From: Akshat Jain <akshatzen@google.com>
>
> Log port state during PHY_DOWN event to understand reasoning for PHY_DOWNs.
>
> Signed-off-by: Akshat Jain <akshatzen@google.com>
> Signed-off-by: Pranav Prasad <pranavpp@google.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm80xx_hwi.c | 43 ++++++++++++++++----------------
> 1 file changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index 8571f6222eb8..85908068b8d7 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -3239,9 +3239,9 @@ hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
> struct pm8001_port *port = &pm8001_ha->port[port_id];
> struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
> unsigned long flags;
> - pm8001_dbg(pm8001_ha, DEVIO,
> - "port id %d, phy id %d link_rate %d portstate 0x%x\n",
> - port_id, phy_id, link_rate, portstate);
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_SATA_PHY_UP phyid:%#x port_id:%#x link_rate:%d portstate:%#x\n",
> + phy_id, port_id, link_rate, portstate);
>
> phy->port = port;
> port->port_id = port_id;
> @@ -3291,10 +3291,14 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
> phy->phy_attached = 0;
> switch (portstate) {
> case PORT_VALID:
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_VALID\n",
> + phy_id, port_id);
> break;
> case PORT_INVALID:
> - pm8001_dbg(pm8001_ha, MSG, " PortInvalid portID %d\n",
> - port_id);
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_INVALID\n",
> + phy_id, port_id);
> pm8001_dbg(pm8001_ha, MSG,
> " Last phy Down and port invalid\n");
> if (port_sata) {
> @@ -3306,18 +3310,21 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
> sas_phy_disconnected(&phy->sas_phy);
> break;
> case PORT_IN_RESET:
> - pm8001_dbg(pm8001_ha, MSG, " Port In Reset portID %d\n",
> - port_id);
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_IN_RESET\n",
> + phy_id, port_id);
> break;
> case PORT_NOT_ESTABLISHED:
> - pm8001_dbg(pm8001_ha, MSG,
> - " Phy Down and PORT_NOT_ESTABLISHED\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_NOT_ESTABLISHED\n",
> + phy_id, port_id);
> port->port_attached = 0;
> break;
> case PORT_LOSTCOMM:
> - pm8001_dbg(pm8001_ha, MSG, " Phy Down and PORT_LOSTCOMM\n");
> - pm8001_dbg(pm8001_ha, MSG,
> - " Last phy Down and port invalid\n");
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate: PORT_LOSTCOMM\n",
> + phy_id, port_id);
> + pm8001_dbg(pm8001_ha, MSG, " Last phy Down and port invalid\n");
> if (port_sata) {
> port->port_attached = 0;
> phy->phy_type = 0;
> @@ -3328,9 +3335,9 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> default:
> port->port_attached = 0;
> - pm8001_dbg(pm8001_ha, DEVIO,
> - " Phy Down and(default) = 0x%x\n",
> - portstate);
> + pm8001_dbg(pm8001_ha, EVENT,
> + "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x portstate:%#x\n",
> + phy_id, port_id, portstate);
> break;
>
> }
> @@ -3431,9 +3438,6 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> hw_event_sas_phy_up(pm8001_ha, piomb);
> break;
> case HW_EVENT_SATA_PHY_UP:
> - pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_SATA_PHY_UP phyid:%#x port_id:%#x\n",
> - phy_id, port_id);
> hw_event_sata_phy_up(pm8001_ha, piomb);
> break;
> case HW_EVENT_SATA_SPINUP_HOLD:
> @@ -3444,9 +3448,6 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> GFP_ATOMIC);
> break;
> case HW_EVENT_PHY_DOWN:
> - pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_PHY_DOWN phyid:%#x port_id:%#x\n",
> - phy_id, port_id);
> hw_event_phy_down(pm8001_ha, piomb);
> phy->phy_attached = 0;
> phy->phy_state = PHY_LINK_DISABLE;
> --
> 2.40.0.634.g4ca3ef3211-goog
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 6/6] scsi: pm80xx: Update PHY state after hard reset
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
` (4 preceding siblings ...)
2023-04-18 19:01 ` [PATCH 5/6] scsi: pm80xx: Log port state during HW event Pranav Prasad
@ 2023-04-18 19:01 ` Pranav Prasad
2023-04-19 7:23 ` Jinpu Wang
2023-05-06 21:59 ` [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Martin K. Petersen
2023-05-17 2:12 ` Martin K. Petersen
7 siblings, 1 reply; 15+ messages in thread
From: Pranav Prasad @ 2023-04-18 19:01 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Changyuan Lyu, Pranav Prasad
From: Changyuan Lyu <changyuanl@google.com>
Update phy_attached, phy_state, and port_state to correct values
after a hard rest. Without this patch, after a successful hard reset,
phy_attached is still 0, as a result, any following hard reset will
cause a PHY START to be issued first.
Signed-off-by: Changyuan Lyu <changyuanl@google.com>
Signed-off-by: Pranav Prasad <pranavpp@google.com>
---
drivers/scsi/pm8001/pm80xx_hwi.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 85908068b8d7..39a12ee94a72 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3417,6 +3417,7 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
u8 port_id = (u8)(lr_status_evt_portid & 0x000000FF);
u8 phy_id =
(u8)((phyid_npip_portstate & 0xFF0000) >> 16);
+ u8 portstate = (u8)(phyid_npip_portstate & 0x0000000F);
u16 eventType =
(u16)((lr_status_evt_portid & 0x00FFFF00) >> 8);
u8 status =
@@ -3449,7 +3450,6 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_PHY_DOWN:
hw_event_phy_down(pm8001_ha, piomb);
- phy->phy_attached = 0;
phy->phy_state = PHY_LINK_DISABLE;
break;
case HW_EVENT_PORT_INVALID:
@@ -3567,14 +3567,15 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_PORT_RESET_TIMER_TMO:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x port_id:%#x\n",
- phy_id, port_id);
+ "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x port_id:%#x portstate:%#x\n",
+ phy_id, port_id, portstate);
if (!pm8001_ha->phy[phy_id].reset_completion) {
pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
port_id, phy_id, 0, 0);
}
sas_phy_disconnected(sas_phy);
phy->phy_attached = 0;
+ port->port_state = portstate;
sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
GFP_ATOMIC);
if (pm8001_ha->phy[phy_id].reset_completion) {
@@ -3608,14 +3609,17 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
break;
case HW_EVENT_PORT_RESET_COMPLETE:
pm8001_dbg(pm8001_ha, EVENT,
- "HW_EVENT_PORT_RESET_COMPLETE phyid:%#x port_id:%#x\n",
- phy_id, port_id);
+ "HW_EVENT_PORT_RESET_COMPLETE phyid:%#x port_id:%#x portstate:%#x\n",
+ phy_id, port_id, portstate);
if (pm8001_ha->phy[phy_id].reset_completion) {
pm8001_ha->phy[phy_id].port_reset_status =
PORT_RESET_SUCCESS;
complete(pm8001_ha->phy[phy_id].reset_completion);
pm8001_ha->phy[phy_id].reset_completion = NULL;
}
+ phy->phy_attached = 1;
+ phy->phy_state = PHY_STATE_LINK_UP_SPCV;
+ port->port_state = portstate;
break;
case EVENT_BROADCAST_ASYNCH_EVENT:
pm8001_dbg(pm8001_ha, MSG, "EVENT_BROADCAST_ASYNCH_EVENT\n");
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 6/6] scsi: pm80xx: Update PHY state after hard reset
2023-04-18 19:01 ` [PATCH 6/6] scsi: pm80xx: Update PHY state after hard reset Pranav Prasad
@ 2023-04-19 7:23 ` Jinpu Wang
0 siblings, 0 replies; 15+ messages in thread
From: Jinpu Wang @ 2023-04-19 7:23 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Changyuan Lyu
On Tue, Apr 18, 2023 at 9:01 PM Pranav Prasad <pranavpp@google.com> wrote:
>
> From: Changyuan Lyu <changyuanl@google.com>
>
> Update phy_attached, phy_state, and port_state to correct values
> after a hard rest. Without this patch, after a successful hard reset,
typo, s/rest/reset
> phy_attached is still 0, as a result, any following hard reset will
> cause a PHY START to be issued first.
>
> Signed-off-by: Changyuan Lyu <changyuanl@google.com>
> Signed-off-by: Pranav Prasad <pranavpp@google.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm80xx_hwi.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index 85908068b8d7..39a12ee94a72 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -3417,6 +3417,7 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> u8 port_id = (u8)(lr_status_evt_portid & 0x000000FF);
> u8 phy_id =
> (u8)((phyid_npip_portstate & 0xFF0000) >> 16);
> + u8 portstate = (u8)(phyid_npip_portstate & 0x0000000F);
> u16 eventType =
> (u16)((lr_status_evt_portid & 0x00FFFF00) >> 8);
> u8 status =
> @@ -3449,7 +3450,6 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_PHY_DOWN:
> hw_event_phy_down(pm8001_ha, piomb);
> - phy->phy_attached = 0;
> phy->phy_state = PHY_LINK_DISABLE;
> break;
> case HW_EVENT_PORT_INVALID:
> @@ -3567,14 +3567,15 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_PORT_RESET_TIMER_TMO:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x port_id:%#x\n",
> - phy_id, port_id);
> + "HW_EVENT_PORT_RESET_TIMER_TMO phyid:%#x port_id:%#x portstate:%#x\n",
> + phy_id, port_id, portstate);
> if (!pm8001_ha->phy[phy_id].reset_completion) {
> pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
> port_id, phy_id, 0, 0);
> }
> sas_phy_disconnected(sas_phy);
> phy->phy_attached = 0;
> + port->port_state = portstate;
> sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
> GFP_ATOMIC);
> if (pm8001_ha->phy[phy_id].reset_completion) {
> @@ -3608,14 +3609,17 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
> break;
> case HW_EVENT_PORT_RESET_COMPLETE:
> pm8001_dbg(pm8001_ha, EVENT,
> - "HW_EVENT_PORT_RESET_COMPLETE phyid:%#x port_id:%#x\n",
> - phy_id, port_id);
> + "HW_EVENT_PORT_RESET_COMPLETE phyid:%#x port_id:%#x portstate:%#x\n",
> + phy_id, port_id, portstate);
> if (pm8001_ha->phy[phy_id].reset_completion) {
> pm8001_ha->phy[phy_id].port_reset_status =
> PORT_RESET_SUCCESS;
> complete(pm8001_ha->phy[phy_id].reset_completion);
> pm8001_ha->phy[phy_id].reset_completion = NULL;
> }
> + phy->phy_attached = 1;
> + phy->phy_state = PHY_STATE_LINK_UP_SPCV;
> + port->port_state = portstate;
> break;
> case EVENT_BROADCAST_ASYNCH_EVENT:
> pm8001_dbg(pm8001_ha, MSG, "EVENT_BROADCAST_ASYNCH_EVENT\n");
> --
> 2.40.0.634.g4ca3ef3211-goog
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
` (5 preceding siblings ...)
2023-04-18 19:01 ` [PATCH 6/6] scsi: pm80xx: Update PHY state after hard reset Pranav Prasad
@ 2023-05-06 21:59 ` Martin K. Petersen
2023-05-17 2:12 ` Martin K. Petersen
7 siblings, 0 replies; 15+ messages in thread
From: Martin K. Petersen @ 2023-05-06 21:59 UTC (permalink / raw)
To: Pranav Prasad
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel
Pranav,
> This patch series enhances debug logs for pm80xx HW events, and
> provides a minor fix in the case of a hard reset. The log enhancement
> involves changing the log severity level to enable logging for HW
> events which consequently help debug disk discovery issues.
Applied to 6.5/scsi-staging, thanks!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 15+ messages in thread* Re: [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events
2023-04-18 19:00 [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Pranav Prasad
` (6 preceding siblings ...)
2023-05-06 21:59 ` [PATCH 0/6] scsi: pm80xx: Enhanced debug logs for HW events Martin K. Petersen
@ 2023-05-17 2:12 ` Martin K. Petersen
7 siblings, 0 replies; 15+ messages in thread
From: Martin K. Petersen @ 2023-05-17 2:12 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Pranav Prasad
Cc: Martin K . Petersen, linux-scsi, linux-kernel
On Tue, 18 Apr 2023 19:00:55 +0000, Pranav Prasad wrote:
> This patch series enhances debug logs for pm80xx HW events, and provides
> a minor fix in the case of a hard reset. The log enhancement involves
> changing the log severity level to enable logging for HW events
> which consequently help debug disk discovery issues.
>
> 1. Changed log severity level from MSG to EVENT for HW events.
> Enhanced the HW event logs by adding the phyid.
>
> [...]
Applied to 6.5/scsi-queue, thanks!
[1/6] scsi: pm80xx: Log some HW events by default
https://git.kernel.org/mkp/scsi/c/b7d26c1d8c51
[2/6] scsi: pm80xx: Enable init logging
https://git.kernel.org/mkp/scsi/c/6a516506aad6
[3/6] scsi: pm80xx: Print port_id in HW events
https://git.kernel.org/mkp/scsi/c/a6cf6b8bd6e2
[4/6] scsi: pm80xx: Log phy_id and port_id in the device registration request
https://git.kernel.org/mkp/scsi/c/5f797120d853
[5/6] scsi: pm80xx: Log port state during HW event
https://git.kernel.org/mkp/scsi/c/d309422d7dc6
[6/6] scsi: pm80xx: Update PHY state after hard reset
https://git.kernel.org/mkp/scsi/c/3aa65f7e25ac
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 15+ messages in thread