pm80xx : Updates for the driver version 0.1.39.
Subsystems (2)
v3 cover pm80xx : Updates for the driver version 0.1.39.
From: Deepak Ukey <[email protected]>
This patch set includes some bug fixes and features for pm80xx driver.
Changes from V2:
For "Support for get phy profile functionality."
-Added fix for Wmissing-prototypes warning reported by kernel test robot
For "Staggered spin up support."
-Added fix for Wmissing-prototypes warning reported by kernel test robot
For "Wait for PHY startup before draining libsas queue."
-Removed the patch from patchset. According to recommendation we need to fix this using udev so planning to submit in future.
Viswas G (2):
pm80xx : Support for get phy profile functionality. pm80xx : Staggered spin up support.
drivers/scsi/pm8001/pm8001_ctl.h | 20 ++++ drivers/scsi/pm8001/pm8001_defs.h | 3 + drivers/scsi/pm8001/pm8001_hwi.c | 14 ++- drivers/scsi/pm8001/pm8001_init.c | 55 +++++++++- drivers/scsi/pm8001/pm8001_sas.c | 36 ++++++- drivers/scsi/pm8001/pm8001_sas.h | 18 ++++ drivers/scsi/pm8001/pm80xx_hwi.c | 208 ++++++++++++++++++++++++++++++++++---- drivers/scsi/pm8001/pm80xx_hwi.h | 2 + 8 files changed, 331 insertions(+), 25 deletions(-)
Signature · 1 line
2.16.3
PATCH v3 1/2 pm80xx : Support for get phy profile functionality.
From: Viswas G <[email protected]>
Added the support to get the phy profile which gives information about the phy states, port and errors on phy.
--- drivers/scsi/pm8001/pm8001_ctl.h | 20 ++++++++++ drivers/scsi/pm8001/pm8001_init.c | 2 + drivers/scsi/pm8001/pm8001_sas.h | 5 +++ drivers/scsi/pm8001/pm80xx_hwi.c | 83 ++++++++++++++++++++++++++++++++++++++- drivers/scsi/pm8001/pm80xx_hwi.h | 2 + 5 files changed, 110 insertions(+), 2 deletions(-)
drivers/scsi/pm8001/pm8001_ctl.h +20 -0
@@ -41,6 +41,26 @@#ifndef PM8001_CTL_H_INCLUDED #define PM8001_CTL_H_INCLUDED +struct phy_status { +char phy_id; +unsigned int phy_state:4 ; +unsigned int nlr:4 ; +unsigned int plr:4 ; +unsigned int reserved1:12 ; +unsigned char port_id; +unsigned int prts:4 ; +unsigned int reserved2:20 ; +} __packed; + +struct phy_errcnt { +unsigned int InvalidDword; +unsigned int runningDisparityError; +unsigned int codeViolation; +unsigned int LossOfSyncDW; +unsigned int phyResetProblem; +unsigned int inboundCRCError; +}; +#define IOCTL_BUF_SIZE 4096#define HEADER_LEN 28#define SIZE_OFFSET 16
drivers/scsi/pm8001/pm8001_init.c +2 -0
@@ -398,6 +398,8 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha, pm8001_ha->ccb_info[i].task =NULL ; pm8001_ha->ccb_info[i].ccb_tag =0xffffffff ; pm8001_ha->ccb_info[i].device =NULL ; + pm8001_ha->ccb_info[i].completion =NULL ; + pm8001_ha->ccb_info[i].resp_buf =NULL ; ++pm8001_ha->tags_num; } pm8001_ha->flags =PM8001F_INIT_TIME ;
drivers/scsi/pm8001/pm8001_sas.h +5 -0
@@ -56,6 +56,7 @@#include <scsi/sas_ata.h> #include <linux/atomic.h> #include "pm8001_defs.h" +#include "pm8001_ctl.h" #define DRV_NAME "pm80xx"#define DRV_VERSION "0.1.39"
@@ -244,6 +245,8 @@ struct pm8001_dispatch {int (*sas_diag_execute_req)(struct pm8001_hba_info *pm8001_ha,u32 state);int (*sas_re_init_req)(struct pm8001_hba_info *pm8001_ha); +int (*get_phy_profile_req)(struct pm8001_hba_info *pm8001_ha, +int phy,int page,struct completion *comp,void *buf); };struct pm8001_chip_info {
@@ -318,6 +321,8 @@ struct pm8001_ccb_info {struct pm8001_prd buf_prd[PM8001_MAX_DMA_SG ];struct fw_control_ex *fw_control_context;u8 open_retry; +struct completion *completion; +void *resp_buf; };struct mpi_mem {
drivers/scsi/pm8001/pm80xx_hwi.c +81 -2
107 lines not on this page · raw message
drivers/scsi/pm8001/pm80xx_hwi.h +2 -0
@@ -175,7 +175,9 @@#define PHY_STOP_ERR_DEVICE_ATTACHED 0x1046/* phy_profile */ +#define SAS_PHY_ERR_COUNTERS_PAGE 0x01#define SAS_PHY_ANALOG_SETTINGS_PAGE 0x04 +#define SAS_PHY_GENERAL_STATUS_PAGE 0x05#define PHY_DWORD_LENGTH 0xC/* Thermal related */
Signature · 1 line
2.16.3
kernel test robot
build botRe: [PATCH V3 1/2] pm80xx : Support for get phy profile functionality.
Thank you for the patch! Perhaps something to improve:
Hi Deepak,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on v5.8-rc6]
[also build test WARNING on next-20200720]
[cannot apply to mkp-scsi/for-next scsi/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Deepak-Ukey/pm80xx-Updates-for-the-driver-version-0-1-39/20200720-214608 base: ba47d845d715a010f7b51f6f89bae32845e6acb7 config: x86_64-randconfig-s022-20200719 (attached as .config) compiler: gcc-9 (Debian 9.3.0-14) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.2-49-g707c5017-dirty # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
sparse warnings: (new ones prefixed by >>)
drivers/scsi/pm8001/pm80xx_hwi.c:81:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:81:39: sparse: expected unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:81:39: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:69:6: sparse: sparse: symbol 'pm80xx_pci_mem_copy' was not declared. Should it be static?
drivers/scsi/pm8001/pm80xx_hwi.c:1213:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 @@ got unsigned int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1213:27: sparse: expected restricted __le32
drivers/scsi/pm8001/pm80xx_hwi.c:1213:27: sparse: got unsigned int
drivers/scsi/pm8001/pm80xx_hwi.c:1215:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1215:27: sparse: expected restricted __le32
drivers/scsi/pm8001/pm80xx_hwi.c:1215:27: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1255:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] pageCode @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1255:39: sparse: expected restricted __le32 [addressable] [usertype] pageCode
drivers/scsi/pm8001/pm80xx_hwi.c:1255:39: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1256:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] MST_MSI @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1256:39: sparse: expected restricted __le32 [addressable] [usertype] MST_MSI
drivers/scsi/pm8001/pm80xx_hwi.c:1256:39: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1257:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] STP_SSP_MCT_TMO @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1257:39: sparse: expected restricted __le32 [addressable] [usertype] STP_SSP_MCT_TMO
drivers/scsi/pm8001/pm80xx_hwi.c:1257:39: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1258:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] STP_FRM_TMO @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1258:39: sparse: expected restricted __le32 [addressable] [usertype] STP_FRM_TMO
drivers/scsi/pm8001/pm80xx_hwi.c:1258:39: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1260:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] STP_IDLE_TMO @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1260:39: sparse: expected restricted __le32 [addressable] [usertype] STP_IDLE_TMO
drivers/scsi/pm8001/pm80xx_hwi.c:1260:39: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1262:26: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:1263:44: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] STP_IDLE_TMO @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1263:44: sparse: expected restricted __le32 [addressable] [usertype] STP_IDLE_TMO
drivers/scsi/pm8001/pm80xx_hwi.c:1263:44: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1266:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] OPNRJT_RTRY_INTVL @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1266:41: sparse: expected restricted __le32 [addressable] [usertype] OPNRJT_RTRY_INTVL
drivers/scsi/pm8001/pm80xx_hwi.c:1266:41: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1268:48: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] Data_Cmd_OPNRJT_RTRY_TMO @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1268:48: sparse: expected restricted __le32 [addressable] [usertype] Data_Cmd_OPNRJT_RTRY_TMO
drivers/scsi/pm8001/pm80xx_hwi.c:1268:48: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1270:48: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] Data_Cmd_OPNRJT_RTRY_THR @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1270:48: sparse: expected restricted __le32 [addressable] [usertype] Data_Cmd_OPNRJT_RTRY_THR
drivers/scsi/pm8001/pm80xx_hwi.c:1270:48: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1272:31: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [usertype] MAX_AIP @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1272:31: sparse: expected restricted __le32 [addressable] [usertype] MAX_AIP
drivers/scsi/pm8001/pm80xx_hwi.c:1272:31: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1425:33: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] new_curidx_ksop @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:1425:33: sparse: expected restricted __le32 [addressable] [assigned] [usertype] new_curidx_ksop
drivers/scsi/pm8001/pm80xx_hwi.c:1425:33: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:1869:40: sparse: sparse: invalid assignment: |=
drivers/scsi/pm8001/pm80xx_hwi.c:1869:40: sparse: left side has type restricted __le32
drivers/scsi/pm8001/pm80xx_hwi.c:1869:40: sparse: right side has type int
drivers/scsi/pm8001/pm80xx_hwi.c:3037:63: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long long [usertype] address @@ got restricted __le64 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:3037:63: sparse: expected unsigned long long [usertype] address
drivers/scsi/pm8001/pm80xx_hwi.c:3037:63: sparse: got restricted __le64 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:3828:35: sparse: sparse: restricted __le32 degrades to integer
>> drivers/scsi/pm8001/pm80xx_hwi.c:3849:46: sparse: sparse: cast to restricted __le32
drivers/scsi/pm8001/pm80xx_hwi.c:3851:41: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3852:43: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3853:43: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3854:47: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3855:44: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3861:25: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3863:25: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3865:25: sparse: sparse: cast to restricted __le32 drivers/scsi/pm8001/pm80xx_hwi.c:3867:25: sparse: sparse: cast to restricted __le32
drivers/scsi/pm8001/pm80xx_hwi.c:4359:46: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long long [usertype] address @@ got restricted __le64 [assigned] [usertype] tmp_addr @@
drivers/scsi/pm8001/pm80xx_hwi.c:4359:46: sparse: expected unsigned long long [usertype] address
drivers/scsi/pm8001/pm80xx_hwi.c:4359:46: sparse: got restricted __le64 [assigned] [usertype] tmp_addr
drivers/scsi/pm8001/pm80xx_hwi.c:4534:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] start_addr @@ got restricted __le64 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4534:36: sparse: expected unsigned long long [usertype] start_addr
drivers/scsi/pm8001/pm80xx_hwi.c:4534:36: sparse: got restricted __le64 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4535:57: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4536:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_low @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4536:38: sparse: expected unsigned int [usertype] end_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4536:38: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4537:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_high @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4537:39: sparse: expected unsigned int [usertype] end_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4537:39: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4538:53: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4564:35: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] key_cmode @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:4564:35: sparse: expected restricted __le32 [addressable] [assigned] [usertype] key_cmode
drivers/scsi/pm8001/pm80xx_hwi.c:4564:35: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:4593:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] start_addr @@ got restricted __le64 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4593:36: sparse: expected unsigned long long [usertype] start_addr
drivers/scsi/pm8001/pm80xx_hwi.c:4593:36: sparse: got restricted __le64 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4594:57: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4595:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_low @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4595:38: sparse: expected unsigned int [usertype] end_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4595:38: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4596:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_high @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4596:39: sparse: expected unsigned int [usertype] end_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4596:39: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4597:53: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4701:47: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_low @@ got unsigned int [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4701:47: sparse: expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4701:47: sparse: got unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4702:48: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_high @@ got unsigned int [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4702:48: sparse: expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4702:48: sparse: got unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4706:47: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_low @@ got unsigned int [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4706:47: sparse: expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4706:47: sparse: got unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4707:48: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_high @@ got unsigned int [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4707:48: sparse: expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4707:48: sparse: got unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4711:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] start_addr @@ got restricted __le64 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4711:36: sparse: expected unsigned long long [usertype] start_addr
drivers/scsi/pm8001/pm80xx_hwi.c:4711:36: sparse: got restricted __le64 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4712:58: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4713:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_low @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4713:38: sparse: expected unsigned int [usertype] end_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4713:38: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4714:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_high @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4714:39: sparse: expected unsigned int [usertype] end_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4714:39: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4715:54: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4728:55: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_low @@ got unsigned int [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4728:55: sparse: expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4728:55: sparse: got unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4730:56: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_high @@ got unsigned int [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4730:56: sparse: expected restricted __le32 [addressable] [assigned] [usertype] enc_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4730:56: sparse: got unsigned int [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4742:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] key_index_mode @@ got int @@
drivers/scsi/pm8001/pm80xx_hwi.c:4742:41: sparse: expected restricted __le32 [addressable] [assigned] [usertype] key_index_mode
drivers/scsi/pm8001/pm80xx_hwi.c:4742:41: sparse: got int
drivers/scsi/pm8001/pm80xx_hwi.c:4777:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] start_addr @@ got restricted __le64 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4777:36: sparse: expected unsigned long long [usertype] start_addr
drivers/scsi/pm8001/pm80xx_hwi.c:4777:36: sparse: got restricted __le64 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4778:58: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/pm8001/pm80xx_hwi.c:4779:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_low @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4779:38: sparse: expected unsigned int [usertype] end_addr_low
drivers/scsi/pm8001/pm80xx_hwi.c:4779:38: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:4780:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end_addr_high @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:4780:39: sparse: expected unsigned int [usertype] end_addr_high
drivers/scsi/pm8001/pm80xx_hwi.c:4780:39: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:5109:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] ppc_phyid @@ got unsigned int @@
drivers/scsi/pm8001/pm80xx_hwi.c:5109:27: sparse: expected restricted __le32 [addressable] [assigned] [usertype] ppc_phyid
drivers/scsi/pm8001/pm80xx_hwi.c:5109:27: sparse: got unsigned int
drivers/scsi/pm8001/pm80xx_hwi.c:5114:37: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:5114:37: sparse: expected unsigned int
drivers/scsi/pm8001/pm80xx_hwi.c:5114:37: sparse: got restricted __le32 [usertype]
drivers/scsi/pm8001/pm80xx_hwi.c:5094:6: sparse: sparse: symbol 'mpi_set_phy_profile_req' was not declared. Should it be static?
drivers/scsi/pm8001/pm80xx_hwi.c:5154:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [addressable] [assigned] [usertype] ppc_phyid @@ got unsigned int @@
drivers/scsi/pm8001/pm80xx_hwi.c:5154:27: sparse: expected restricted __le32 [addressable] [assigned] [usertype] ppc_phyid
drivers/scsi/pm8001/pm80xx_hwi.c:5154:27: sparse: got unsigned int
drivers/scsi/pm8001/pm80xx_hwi.c:5158:37: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int @@ got restricted __le32 [usertype] @@
drivers/scsi/pm8001/pm80xx_hwi.c:5158:37: sparse: expected unsigned int
drivers/scsi/pm8001/pm80xx_hwi.c:5158:37: sparse: got restricted __le32 [usertype]
vim +3849 drivers/scsi/pm8001/pm80xx_hwi.c
3811
3812 /**
3813 * mpi_get_phy_profile_resp - SPCv specific
3814 * @pm8001_ha: our hba card information
3815 * @piomb: IO message buffer
3816 */
3817 static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha,
3818 void *piomb)
3819 {
3820 u32 tag, page_code;
3821 struct phy_status *phy_status, *phy_stat;
3822 struct phy_errcnt *phy_err, *phy_err_cnt;
3823 struct pm8001_ccb_info *ccb;
3824 struct get_phy_profile_resp *pPayload =
3825 (struct get_phy_profile_resp *)(piomb + 4);
3826 u32 status = le32_to_cpu(pPayload->status);
3827
3828 page_code = (u8)((pPayload->ppc_phyid & 0xFF00) >> 8);
3829
3830 PM8001_MSG_DBG(pm8001_ha,
3831 pm8001_printk(" pm80xx_addition_functionality\n"));
3832 if (status) {
3833 /* status is FAILED */
3834 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
3835 "mpiGetPhyProfileReq failed with status 0x%08x\n",
3836 status));
3837 }
3838
3839 tag = le32_to_cpu(pPayload->tag);
3840 ccb = &pm8001_ha->ccb_info[tag];
3841 if (ccb->completion != NULL) {
3842 if (status) {
3843 /* signal fail status */
3844 memset(&ccb->resp_buf, 0xff, sizeof(ccb->resp_buf));
3845 } else if (page_code == SAS_PHY_GENERAL_STATUS_PAGE) {
3846 phy_status = (struct phy_status *)ccb->resp_buf;
3847 phy_stat =
3848 (struct phy_status *)pPayload->ppc_specific_rsp;
> 3849 phy_status->phy_id = le32_to_cpu(phy_stat->phy_id);
3850 phy_status->phy_state =
3851 le32_to_cpu(phy_stat->phy_state);
3852 phy_status->plr = le32_to_cpu(phy_stat->plr);
3853 phy_status->nlr = le32_to_cpu(phy_stat->nlr);
3854 phy_status->port_id = le32_to_cpu(phy_stat->port_id);
3855 phy_status->prts = le32_to_cpu(phy_stat->prts);
3856 } else if (page_code == SAS_PHY_ERR_COUNTERS_PAGE) {
3857 phy_err = (struct phy_errcnt *)ccb->resp_buf;
3858 phy_err_cnt =
3859 (struct phy_errcnt *)pPayload->ppc_specific_rsp;
3860 phy_err->InvalidDword =
3861 le32_to_cpu(phy_err_cnt->InvalidDword);
3862 phy_err->runningDisparityError =
3863 le32_to_cpu(phy_err_cnt->runningDisparityError);
3864 phy_err->LossOfSyncDW =
3865 le32_to_cpu(phy_err_cnt->LossOfSyncDW);
3866 phy_err->phyResetProblem =
3867 le32_to_cpu(phy_err_cnt->phyResetProblem);
3868 }
3869 complete(ccb->completion);
3870 }
3871 pm8001_tag_free(pm8001_ha, tag);
3872 return 0;
3873 }
3874
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
Jinpu Wang
maintainerRe: [PATCH V3 1/2] pm80xx : Support for get phy profile functionality.
In reply to Deepak UkeyHi Deepak,
Quoted 10 lines · Deepak Ukey
From: Viswas G <[email protected]>
Added the support to get the phy profile which gives information about the phy states, port and errors on phy.
Signed-off-by Deepak Ukey <[email protected]>Signed-off-by Viswas G <[email protected]>Signed-off-by Radha Ramachandran <[email protected]>Signed-off-by kernel test robot <[email protected]>
please check and fix the sparse warnings reported by test robot.
Thanks
PATCH v3 2/2 pm80xx : Staggered spin up support.
In reply to Deepak UkeyFrom: Viswas G <[email protected]>
As a part of drive discovery, driver will initaite the drive spin up. If all drives do spin up together, it will result in large power consumption. To reduce the power consumption, driver provide an option to make a small group of drives (say 3 or 4 drives together) to do the spin up. The delay between two spin up group and no of drives to spin up (group) can be programmed by the customer in seeprom and driver will use it to control the spinup.
--- drivers/scsi/pm8001/pm8001_defs.h | 3 + drivers/scsi/pm8001/pm8001_hwi.c | 14 ++++- drivers/scsi/pm8001/pm8001_init.c | 53 +++++++++++++++- drivers/scsi/pm8001/pm8001_sas.c | 36 ++++++++++- drivers/scsi/pm8001/pm8001_sas.h | 13 ++++ drivers/scsi/pm8001/pm80xx_hwi.c | 125 +++++++++++++++++++++++++++++++++----- 6 files changed, 221 insertions(+), 23 deletions(-)
drivers/scsi/pm8001/pm8001_defs.h +3 -0
@@ -101,6 +101,9 @@ enum port_type {#define USI_MAX_MEMCNT (PI + PM8001_MAX_SPCV_OUTB_NUM)#define CONFIG_SCSI_PM8001_MAX_DMA_SG 528#define PM8001_MAX_DMA_SG CONFIG_SCSI_PM8001_MAX_DMA_SG +#define SPINUP_DELAY_OFFSET 0x890/* 0x890 - delay */ +#define SPINUP_GROUP_OFFSET 0x892/* 0x892 - group */ +#define PM80XX_MAX_SPINUP_DELAY 10000/* 10000 ms */ enum memory_region_num {AAP1 =0x0 ,/* application acceleration processor */ IOP ,/* IO processor */
drivers/scsi/pm8001/pm8001_hwi.c +12 -2
@@ -3237,7 +3237,7 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb) (struct local_phy_ctl_resp *)(piomb +4 );u32 status =le32_to_cpu (pPayload->status);u32 phy_id =le32_to_cpu (pPayload->phyop_phyid) &ID_BITS ; -u32 phy_op =le32_to_cpu (pPayload->phyop_phyid) &OP_BITS ; +u32 phy_op = (le32_to_cpu (pPayload->phyop_phyid) &OP_BITS ) >>8 ; tag =le32_to_cpu (pPayload->tag);if (status !=0 ) { PM8001_MSG_DBG(pm8001_ha,
@@ -3248,6 +3248,13 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)pm8001_printk ("%x phy execute %x phy op success!\n" , phy_id, phy_op)); pm8001_ha->phy[phy_id].reset_success = true; +if (phy_op ==PHY_NOTIFY_ENABLE_SPINUP && + !pm8001_ha->reset_in_progress){ +/* Notify the sas layer to discover +* the the whole sas domain +*/ +pm8001_bytes_dmaed (pm8001_ha, phy_id); + } }if (pm8001_ha->phy[phy_id].enable_completion) {complete (pm8001_ha->phy[phy_id].enable_completion);
@@ -3643,7 +3650,10 @@ int pm8001_mpi_reg_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) pm8001_printk("DEVREG_FAILURE_DEVICE_TYPE_NOT_SUPPORTED\n"));break ; } -complete (pm8001_dev->dcompletion); +if (pm8001_dev->dcompletion) { +complete (pm8001_dev->dcompletion); + pm8001_dev->dcompletion =NULL ; + } ccb->task =NULL ; ccb->ccb_tag =0xFFFFFFFF ;pm8001_tag_free (pm8001_ha, htag);
drivers/scsi/pm8001/pm8001_init.c +50 -3
89 lines not on this page · raw message
drivers/scsi/pm8001/pm8001_sas.c +34 -2
@@ -265,14 +265,39 @@ int pm8001_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,void pm8001_scan_start (struct Scsi_Host *shost) {int i; +unsigned long lock_flags;struct pm8001_hba_info *pm8001_ha;struct sas_ha_struct *sha =SHOST_TO_SAS_HA (shost); +DECLARE_COMPLETION (comp); pm8001_ha = sha->lldd_ha;/* SAS_RE_INITIALIZATION not available in SPCv/ve */ if (pm8001_ha->chip_id == chip_8001)PM8001_CHIP_DISP ->sas_re_init_req (pm8001_ha); -for (i =0 ; i < pm8001_ha->chip->n_phy; ++i) -PM8001_CHIP_DISP ->phy_start_req (pm8001_ha, i); + +if (pm8001_ha->pdev->device ==0x8001 || + pm8001_ha->pdev->device ==0x8081 || + (pm8001_ha->spinup_interval !=0 )) { +for (i =0 ; i < pm8001_ha->chip->n_phy; ++i) +PM8001_CHIP_DISP ->phy_start_req (pm8001_ha, i); + }else { +for (i =0 ; i < pm8001_ha->chip->n_phy; ++i) { +spin_lock_irqsave (&pm8001_ha->lock, lock_flags); + pm8001_ha->phy_started = i; + pm8001_ha->scan_completion = ∁ + pm8001_ha->phystart_timedout =1 ; +spin_unlock_irqrestore (&pm8001_ha->lock, lock_flags); +PM8001_CHIP_DISP ->phy_start_req (pm8001_ha, i); +wait_for_completion_timeout (&comp, +msecs_to_jiffies (500 )); +if (pm8001_ha->phystart_timedout) +PM8001_MSG_DBG (pm8001_ha,pm8001_printk ( +"Timeout happened for phyid = %d\n" , i)); + } +spin_lock_irqsave (&pm8001_ha->lock, lock_flags); + pm8001_ha->phy_started =-1 ; + pm8001_ha->scan_completion =NULL ; +spin_unlock_irqrestore (&pm8001_ha->lock, lock_flags); + } }int pm8001_scan_finished (struct Scsi_Host *shost,unsigned long time)
@@ -662,6 +687,13 @@ static int pm8001_dev_found_notify(struct domain_device *dev) flag =1 ;/* directly sata */ } }/*register this device to HBA*/ + +if (pm8001_ha->phy_started == pm8001_device->attached_phy) { +if (pm8001_ha->scan_completion !=NULL ) { + pm8001_ha->phystart_timedout =0 ; +complete (pm8001_ha->scan_completion); + } + }PM8001_DISC_DBG (pm8001_ha,pm8001_printk ("Found device\n" ));PM8001_CHIP_DISP ->reg_dev_req (pm8001_ha, pm8001_device, flag);spin_unlock_irqrestore (&pm8001_ha->lock, flags);
drivers/scsi/pm8001/pm8001_sas.h +13 -0
@@ -261,6 +261,7 @@ struct pm8001_port {u8 port_attached;u16 wide_port_phymap;u8 port_state; +u8 port_id;struct list_head list; };
@@ -566,6 +567,17 @@ struct pm8001_hba_info {u32 reset_in_progress;u32 non_fatal_count;u32 non_fatal_read_length; +bool staggered_spinup; +struct completion *scan_completion; +u32 phy_started; +u16 phystart_timedout; +int spinup_group; +int spinup_interval; +int phy_up[PM8001_MAX_PHYS ]; +struct timer_list spinup_timer; +int phy_head; +int phy_tail; +spinlock_t phy_q_lock; };struct pm8001_work {
@@ -684,6 +696,7 @@ void pm8001_open_reject_retry(int pm8001_mem_alloc (struct pci_dev *pdev,void **virt_addr,dma_addr_t *pphys_addr,u32 *pphys_addr_hi,u32 *pphys_addr_lo,u32 mem_size,u32 align); +void pm8001_spinup_timedout (struct timer_list *t);void pm8001_chip_iounmap (struct pm8001_hba_info *pm8001_ha); int pm8001_mpi_build_cmd(struct pm8001_hba_info *pm8001_ha,
drivers/scsi/pm8001/pm80xx_hwi.c +109 -16
201 lines not on this page · raw message
Signature · 1 line
2.16.3
Re: [PATCH V3 2/2] pm80xx : Staggered spin up support.
Quoted 11 lines · Deepak Ukey
From: Viswas G <[email protected]>
As a part of drive discovery, driver will initaite the drive spin up. If all drives do spin up together, it will result in large power consumption. To reduce the power consumption, driver provide an option to make a small group of drives (say 3 or 4 drives together) to do the spin up. The delay between two spin up group and no of drives to spin up (group) can be programmed by the customer in seeprom and driver will use it to control the spinup.
Quoted 4 lines
Signed-off-by Viswas G <[email protected]>Signed-off-by Radha Ramachandran <[email protected]>Signed-off-by Deepak Ukey <[email protected]>Signed-off-by kernel test robot <[email protected]>
Thanks,