Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

scsi: pm8001: Clean up kernel-doc and comments

Fix kernel-doc warnings then test again, wash, rinse, find more, then
repeat more/again.

Also fix spellos, some grammar, and some punctuation.

../drivers/scsi/pm8001/pm8001_ctl.c:557: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
** pm8001_ctl_fatal_log_show - fatal error logging
../drivers/scsi/pm8001/pm8001_ctl.c:577: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
** non_fatal_log_show - non fatal error logging
../drivers/scsi/pm8001/pm8001_ctl.c:622: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
** pm8001_ctl_gsm_log_show - gsm dump collection

Link: https://lore.kernel.org/r/20210708165723.8594-1-rdunlap@infradead.org
Cc: Jack Wang <jinpu.wang@cloud.ionos.com>
Cc: linux-scsi@vger.kernel.org
Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

authored by

Randy Dunlap and committed by
Martin K. Petersen
bb6beabf 8b3bdd99

+97 -89
+26 -22
drivers/scsi/pm8001/pm8001_ctl.c
··· 77 77 * @attr: device attribute (unused) 78 78 * @buf: the buffer returned 79 79 * 80 - * A sysfs 'read only' shost attribute. 80 + * A sysfs 'read-only' shost attribute. 81 81 */ 82 82 static ssize_t controller_fatal_error_show(struct device *cdev, 83 83 struct device_attribute *attr, char *buf) ··· 149 149 static DEVICE_ATTR(ila_version, 0444, pm8001_ctl_ila_version_show, NULL); 150 150 151 151 /** 152 - * pm8001_ctl_inactive_fw_version_show - Inacative firmware version number 152 + * pm8001_ctl_inactive_fw_version_show - Inactive firmware version number 153 153 * @cdev: pointer to embedded class device 154 154 * @attr: device attribute (unused) 155 155 * @buf: the buffer returned ··· 396 396 * @cdev:pointer to embedded class device 397 397 * @attr: device attribute (unused) 398 398 * @buf: the buffer returned 399 + * 399 400 * A sysfs 'read-only' shost attribute. 400 401 */ 401 402 static ssize_t pm8001_ctl_ib_queue_log_show(struct device *cdev, ··· 431 430 * @cdev:pointer to embedded class device 432 431 * @attr: device attribute (unused) 433 432 * @buf: the buffer returned 433 + * 434 434 * A sysfs 'read-only' shost attribute. 435 435 */ 436 436 ··· 466 464 * @cdev:pointer to embedded class device 467 465 * @attr: device attribute (unused) 468 466 * @buf:the buffer returned 467 + * 469 468 * A sysfs 'read-only' shost attribute. 470 469 */ 471 470 static ssize_t pm8001_ctl_bios_version_show(struct device *cdev, ··· 558 555 static DEVICE_ATTR(iop_log, S_IRUGO, pm8001_ctl_iop_log_show, NULL); 559 556 560 557 /** 561 - ** pm8001_ctl_fatal_log_show - fatal error logging 562 - ** @cdev:pointer to embedded class device 563 - ** @attr: device attribute 564 - ** @buf: the buffer returned 565 - ** 566 - ** A sysfs 'read-only' shost attribute. 567 - **/ 558 + * pm8001_ctl_fatal_log_show - fatal error logging 559 + * @cdev:pointer to embedded class device 560 + * @attr: device attribute 561 + * @buf: the buffer returned 562 + * 563 + * A sysfs 'read-only' shost attribute. 564 + */ 568 565 569 566 static ssize_t pm8001_ctl_fatal_log_show(struct device *cdev, 570 567 struct device_attribute *attr, char *buf) ··· 578 575 static DEVICE_ATTR(fatal_log, S_IRUGO, pm8001_ctl_fatal_log_show, NULL); 579 576 580 577 /** 581 - ** non_fatal_log_show - non fatal error logging 582 - ** @cdev:pointer to embedded class device 583 - ** @attr: device attribute 584 - ** @buf: the buffer returned 585 - ** 586 - ** A sysfs 'read-only' shost attribute. 587 - **/ 578 + * non_fatal_log_show - non fatal error logging 579 + * @cdev:pointer to embedded class device 580 + * @attr: device attribute 581 + * @buf: the buffer returned 582 + * 583 + * A sysfs 'read-only' shost attribute. 584 + */ 588 585 static ssize_t non_fatal_log_show(struct device *cdev, 589 586 struct device_attribute *attr, char *buf) 590 587 { ··· 623 620 static DEVICE_ATTR_RW(non_fatal_count); 624 621 625 622 /** 626 - ** pm8001_ctl_gsm_log_show - gsm dump collection 627 - ** @cdev:pointer to embedded class device 628 - ** @attr: device attribute (unused) 629 - ** @buf: the buffer returned 630 - ** A sysfs 'read-only' shost attribute. 631 - **/ 623 + * pm8001_ctl_gsm_log_show - gsm dump collection 624 + * @cdev:pointer to embedded class device 625 + * @attr: device attribute (unused) 626 + * @buf: the buffer returned 627 + * 628 + * A sysfs 'read-only' shost attribute. 629 + */ 632 630 static ssize_t pm8001_ctl_gsm_log_show(struct device *cdev, 633 631 struct device_attribute *attr, char *buf) 634 632 {
+9 -9
drivers/scsi/pm8001/pm8001_hwi.c
··· 384 384 385 385 /** 386 386 * pm8001_bar4_shift - function is called to shift BAR base address 387 - * @pm8001_ha : our hba card infomation 387 + * @pm8001_ha : our hba card information 388 388 * @shiftValue : shifting value in memory bar. 389 389 */ 390 390 int pm8001_bar4_shift(struct pm8001_hba_info *pm8001_ha, u32 shiftValue) ··· 1151 1151 } 1152 1152 1153 1153 /** 1154 - * pm8001_chip_iounmap - which maped when initialized. 1154 + * pm8001_chip_iounmap - which mapped when initialized. 1155 1155 * @pm8001_ha: our hba card information 1156 1156 */ 1157 1157 void pm8001_chip_iounmap(struct pm8001_hba_info *pm8001_ha) ··· 1187 1187 pm8001_cw32(pm8001_ha, 0, MSGU_ODCR, ODCR_CLEAR_ALL); 1188 1188 } 1189 1189 1190 - /** 1191 - * pm8001_chip_intx_interrupt_disable- disable PM8001 chip interrupt 1192 - * @pm8001_ha: our hba card information 1193 - */ 1190 + /** 1191 + * pm8001_chip_intx_interrupt_disable - disable PM8001 chip interrupt 1192 + * @pm8001_ha: our hba card information 1193 + */ 1194 1194 static void 1195 1195 pm8001_chip_intx_interrupt_disable(struct pm8001_hba_info *pm8001_ha) 1196 1196 { ··· 1876 1876 * @piomb: the message contents of this outbound message. 1877 1877 * 1878 1878 * When FW has completed a ssp request for example a IO request, after it has 1879 - * filled the SG data with the data, it will trigger this event represent 1880 - * that he has finished the job,please check the coresponding buffer. 1879 + * filled the SG data with the data, it will trigger this event representing 1880 + * that he has finished the job; please check the corresponding buffer. 1881 1881 * So we will tell the caller who maybe waiting the result to tell upper layer 1882 1882 * that the task has been finished. 1883 1883 */ ··· 3522 3522 * 3523 3523 * when sas layer find a device it will notify LLDD, then the driver register 3524 3524 * the domain device to FW, this event is the return device ID which the FW 3525 - * has assigned, from now,inter-communication with FW is no longer using the 3525 + * has assigned, from now, inter-communication with FW is no longer using the 3526 3526 * SAS address, use device ID which FW assigned. 3527 3527 */ 3528 3528 int pm8001_mpi_reg_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+15 -14
drivers/scsi/pm8001/pm8001_init.c
··· 233 233 /** 234 234 * pm8001_interrupt_handler_intx - main INTx interrupt handler. 235 235 * @irq: interrupt number 236 - * @dev_id: sas_ha structure. The HBA is retrieved from sas_has structure. 236 + * @dev_id: sas_ha structure. The HBA is retrieved from sas_ha structure. 237 237 */ 238 238 239 239 static irqreturn_t pm8001_interrupt_handler_intx(int irq, void *dev_id) ··· 439 439 } 440 440 441 441 /** 442 - * pm8001_ioremap - remap the pci high physical address to kernal virtual 442 + * pm8001_ioremap - remap the pci high physical address to kernel virtual 443 443 * address so that we can access them. 444 - * @pm8001_ha:our hba structure. 444 + * @pm8001_ha: our hba structure. 445 445 */ 446 446 static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha) 447 447 { ··· 652 652 * pm8001_init_sas_add - initialize sas address 653 653 * @pm8001_ha: our ha struct. 654 654 * 655 - * Currently we just set the fixed SAS address to our HBA,for manufacture, 655 + * Currently we just set the fixed SAS address to our HBA, for manufacture, 656 656 * it should read from the EEPROM 657 657 */ 658 658 static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) ··· 790 790 }; 791 791 792 792 /** 793 - * pm8001_get_internal_phy_settings : Retrieves the internal PHY settings 793 + * pm8001_get_internal_phy_settings - Retrieves the internal PHY settings 794 794 * @pm8001_ha : our adapter 795 795 * @phycfg : PHY config page to populate 796 796 */ ··· 810 810 } 811 811 812 812 /** 813 - * pm8001_get_external_phy_settings : Retrieves the external PHY settings 813 + * pm8001_get_external_phy_settings - Retrieves the external PHY settings 814 814 * @pm8001_ha : our adapter 815 815 * @phycfg : PHY config page to populate 816 816 */ ··· 830 830 } 831 831 832 832 /** 833 - * pm8001_get_phy_mask : Retrieves the mask that denotes if a PHY is int/ext 833 + * pm8001_get_phy_mask - Retrieves the mask that denotes if a PHY is int/ext 834 834 * @pm8001_ha : our adapter 835 835 * @phymask : The PHY mask 836 836 */ ··· 868 868 } 869 869 870 870 /** 871 - * pm8001_set_phy_settings_ven_117c_12G() : Configure ATTO 12Gb PHY settings 871 + * pm8001_set_phy_settings_ven_117c_12G() - Configure ATTO 12Gb PHY settings 872 872 * @pm8001_ha : our adapter 873 873 */ 874 874 static ··· 903 903 } 904 904 905 905 /** 906 - * pm8001_configure_phy_settings : Configures PHY settings based on vendor ID. 906 + * pm8001_configure_phy_settings - Configures PHY settings based on vendor ID. 907 907 * @pm8001_ha : our hba. 908 908 */ 909 909 static int pm8001_configure_phy_settings(struct pm8001_hba_info *pm8001_ha) ··· 1053 1053 * @ent: pci device id 1054 1054 * 1055 1055 * This function is the main initialization function, when register a new 1056 - * pci driver it is invoked, all struct an hardware initilization should be done 1057 - * here, also, register interrupt 1056 + * pci driver it is invoked, all struct and hardware initialization should be 1057 + * done here, also, register interrupt. 1058 1058 */ 1059 1059 static int pm8001_pci_probe(struct pci_dev *pdev, 1060 1060 const struct pci_device_id *ent) ··· 1172 1172 return rc; 1173 1173 } 1174 1174 1175 - /* 1175 + /** 1176 1176 * pm8001_init_ccb_tag - allocate memory to CCB and tag. 1177 1177 * @pm8001_ha: our hba card information. 1178 1178 * @shost: scsi host which has been allocated outside. 1179 + * @pdev: pci device. 1179 1180 */ 1180 1181 static int 1181 1182 pm8001_init_ccb_tag(struct pm8001_hba_info *pm8001_ha, struct Scsi_Host *shost, ··· 1271 1270 * pm8001_pci_suspend - power management suspend main entry point 1272 1271 * @dev: Device struct 1273 1272 * 1274 - * Returns 0 success, anything else error. 1273 + * Return: 0 on success, anything else on error. 1275 1274 */ 1276 1275 static int __maybe_unused pm8001_pci_suspend(struct device *dev) 1277 1276 { ··· 1316 1315 * pm8001_pci_resume - power management resume main entry point 1317 1316 * @dev: Device struct 1318 1317 * 1319 - * Returns 0 success, anything else error. 1318 + * Return: 0 on success, anything else on error. 1320 1319 */ 1321 1320 static int __maybe_unused pm8001_pci_resume(struct device *dev) 1322 1321 {
+22 -19
drivers/scsi/pm8001/pm8001_sas.c
··· 98 98 pm8001_tag_free(pm8001_ha, i); 99 99 } 100 100 101 - /** 102 - * pm8001_mem_alloc - allocate memory for pm8001. 103 - * @pdev: pci device. 104 - * @virt_addr: the allocated virtual address 105 - * @pphys_addr_hi: the physical address high byte address. 106 - * @pphys_addr_lo: the physical address low byte address. 107 - * @mem_size: memory size. 108 - */ 101 + /** 102 + * pm8001_mem_alloc - allocate memory for pm8001. 103 + * @pdev: pci device. 104 + * @virt_addr: the allocated virtual address 105 + * @pphys_addr: DMA address for this device 106 + * @pphys_addr_hi: the physical address high byte address. 107 + * @pphys_addr_lo: the physical address low byte address. 108 + * @mem_size: memory size. 109 + * @align: requested byte alignment 110 + */ 109 111 int pm8001_mem_alloc(struct pci_dev *pdev, void **virt_addr, 110 112 dma_addr_t *pphys_addr, u32 *pphys_addr_hi, 111 113 u32 *pphys_addr_lo, u32 mem_size, u32 align) ··· 341 339 } 342 340 343 341 /** 344 - * pm8001_task_prep_ssp - the dispatcher function,prepare ssp data for ssp task 342 + * pm8001_task_prep_ssp - the dispatcher function, prepare ssp data for ssp task 345 343 * @pm8001_ha: our hba card information 346 344 * @ccb: the ccb which attached to ssp task 347 345 */ ··· 556 554 pm8001_tag_free(pm8001_ha, ccb_idx); 557 555 } 558 556 559 - /** 560 - * pm8001_alloc_dev - find a empty pm8001_device 561 - * @pm8001_ha: our hba card information 562 - */ 557 + /** 558 + * pm8001_alloc_dev - find a empty pm8001_device 559 + * @pm8001_ha: our hba card information 560 + */ 563 561 static struct pm8001_device *pm8001_alloc_dev(struct pm8001_hba_info *pm8001_ha) 564 562 { 565 563 u32 dev; ··· 707 705 * @parameter: ssp task parameter. 708 706 * 709 707 * when errors or exception happened, we may want to do something, for example 710 - * abort the issued task which result in this execption, it is done by calling 708 + * abort the issued task which result in this exception, it is done by calling 711 709 * this function, note it is also with the task execute interface. 712 710 */ 713 711 static int pm8001_exec_internal_tmf_task(struct domain_device *dev, ··· 986 984 } 987 985 988 986 /** 989 - * pm8001_I_T_nexus_reset() 990 - * Standard mandates link reset for ATA (type 0) and hard reset for 991 - * SSP (type 1) , only for RECOVERY 992 - * @dev: the device structure for the device to reset. 993 - */ 987 + * pm8001_I_T_nexus_reset() - reset the initiator/target connection 988 + * @dev: the device structure for the device to reset. 989 + * 990 + * Standard mandates link reset for ATA (type 0) and hard reset for 991 + * SSP (type 1), only for RECOVERY 992 + */ 994 993 int pm8001_I_T_nexus_reset(struct domain_device *dev) 995 994 { 996 995 int rc = TMF_RESP_FUNC_FAILED;
+25 -25
drivers/scsi/pm8001/pm80xx_hwi.c
··· 140 140 pm8001_ha->fatal_bar_loc = 0; 141 141 } 142 142 143 - /* Read until accum_len is retrived */ 143 + /* Read until accum_len is retrieved */ 144 144 accum_len = pm8001_mr32(fatal_table_address, 145 145 MPI_FATAL_EDUMP_TABLE_ACCUM_LEN); 146 146 /* Determine length of data between previously stored transfer length ··· 1011 1011 value); 1012 1012 return -EBUSY; 1013 1013 } 1014 - /* check the MPI-State for initialization upto 100ms*/ 1014 + /* check the MPI-State for initialization up to 100ms*/ 1015 1015 max_wait_count = 5;/* 100 msec */ 1016 1016 do { 1017 1017 msleep(FW_READY_INTERVAL); ··· 1093 1093 1094 1094 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0); 1095 1095 1096 - /** 1096 + /* 1097 1097 * lower 26 bits of SCRATCHPAD0 register describes offset within the 1098 1098 * PCIe BAR where the MPI configuration table is present 1099 1099 */ ··· 1101 1101 1102 1102 pm8001_dbg(pm8001_ha, DEV, "Scratchpad 0 Offset: 0x%x value 0x%x\n", 1103 1103 offset, value); 1104 - /** 1104 + /* 1105 1105 * Upper 6 bits describe the offset within PCI config space where BAR 1106 1106 * is located. 1107 1107 */ ··· 1109 1109 pcibar = get_pci_bar_index(pcilogic); 1110 1110 pm8001_dbg(pm8001_ha, INIT, "Scratchpad 0 PCI BAR: %d\n", pcibar); 1111 1111 1112 - /** 1112 + /* 1113 1113 * Make sure the offset falls inside the ioremapped PCI BAR 1114 1114 */ 1115 1115 if (offset > pm8001_ha->io_mem[pcibar].memsize) { ··· 1121 1121 pm8001_ha->main_cfg_tbl_addr = base_addr = 1122 1122 pm8001_ha->io_mem[pcibar].memvirtaddr + offset; 1123 1123 1124 - /** 1124 + /* 1125 1125 * Validate main configuration table address: first DWord should read 1126 1126 * "PMCS" 1127 1127 */ ··· 1385 1385 } 1386 1386 1387 1387 /** 1388 - * pm80xx_encrypt_update - update flash with encryption informtion 1388 + * pm80xx_encrypt_update - update flash with encryption information 1389 1389 * @pm8001_ha: our hba card information. 1390 1390 */ 1391 1391 static int pm80xx_encrypt_update(struct pm8001_hba_info *pm8001_ha) ··· 1422 1422 } 1423 1423 1424 1424 /** 1425 - * pm80xx_chip_init - the main init function that initialize whole PM8001 chip. 1425 + * pm80xx_chip_init - the main init function that initializes whole PM8001 chip. 1426 1426 * @pm8001_ha: our hba card information 1427 1427 */ 1428 1428 static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha) ··· 1541 1541 } 1542 1542 1543 1543 /** 1544 - * pm80xx_fatal_errors - returns non zero *ONLY* when fatal errors 1544 + * pm80xx_fatal_errors - returns non-zero *ONLY* when fatal errors 1545 1545 * @pm8001_ha: our hba card information 1546 1546 * 1547 1547 * Fatal errors are recoverable only after a host reboot. ··· 1576 1576 } 1577 1577 1578 1578 /** 1579 - * pm80xx_chip_soft_rst - soft reset the PM8001 chip, so that the clear all 1580 - * the FW register status to the originated status. 1579 + * pm80xx_chip_soft_rst - soft reset the PM8001 chip, so that all 1580 + * FW register status are reset to the originated status. 1581 1581 * @pm8001_ha: our hba card information 1582 1582 */ 1583 1583 ··· 1895 1895 } 1896 1896 1897 1897 /** 1898 - * mpi_ssp_completion- process the event that FW response to the SSP request. 1898 + * mpi_ssp_completion - process the event that FW response to the SSP request. 1899 1899 * @pm8001_ha: our hba card information 1900 1900 * @piomb: the message contents of this outbound message. 1901 1901 * 1902 1902 * When FW has completed a ssp request for example a IO request, after it has 1903 - * filled the SG data with the data, it will trigger this event represent 1904 - * that he has finished the job,please check the coresponding buffer. 1903 + * filled the SG data with the data, it will trigger this event representing 1904 + * that he has finished the job; please check the corresponding buffer. 1905 1905 * So we will tell the caller who maybe waiting the result to tell upper layer 1906 1906 * that the task has been finished. 1907 1907 */ ··· 3217 3217 } 3218 3218 3219 3219 /** 3220 - * pm80xx_hw_event_ack_req- For PM8001,some events need to acknowage to FW. 3220 + * pm80xx_hw_event_ack_req- For PM8001, some events need to acknowledge to FW. 3221 3221 * @pm8001_ha: our hba card information 3222 3222 * @Qnum: the outbound queue message number. 3223 3223 * @SEA: source of event to ack ··· 3275 3275 } 3276 3276 3277 3277 /** 3278 - * hw_event_sas_phy_up -FW tells me a SAS phy up event. 3278 + * hw_event_sas_phy_up - FW tells me a SAS phy up event. 3279 3279 * @pm8001_ha: our hba card information 3280 3280 * @piomb: IO message buffer 3281 3281 */ ··· 3353 3353 } 3354 3354 3355 3355 /** 3356 - * hw_event_sata_phy_up -FW tells me a SATA phy up event. 3356 + * hw_event_sata_phy_up - FW tells me a SATA phy up event. 3357 3357 * @pm8001_ha: our hba card information 3358 3358 * @piomb: IO message buffer 3359 3359 */ ··· 3400 3400 } 3401 3401 3402 3402 /** 3403 - * hw_event_phy_down -we should notify the libsas the phy is down. 3403 + * hw_event_phy_down - we should notify the libsas the phy is down. 3404 3404 * @pm8001_ha: our hba card information 3405 3405 * @piomb: IO message buffer 3406 3406 */ ··· 3500 3500 } 3501 3501 3502 3502 /** 3503 - * mpi_thermal_hw_event -The hw event has come. 3503 + * mpi_thermal_hw_event - a thermal hw event has come. 3504 3504 * @pm8001_ha: our hba card information 3505 3505 * @piomb: IO message buffer 3506 3506 */ ··· 3530 3530 } 3531 3531 3532 3532 /** 3533 - * mpi_hw_event -The hw event has come. 3533 + * mpi_hw_event - The hw event has come. 3534 3534 * @pm8001_ha: our hba card information 3535 3535 * @piomb: IO message buffer 3536 3536 */ ··· 4025 4025 case OPC_OUB_SET_DEV_INFO: 4026 4026 pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_DEV_INFO\n"); 4027 4027 break; 4028 - /* spcv specifc commands */ 4028 + /* spcv specific commands */ 4029 4029 case OPC_OUB_PHY_START_RESP: 4030 4030 pm8001_dbg(pm8001_ha, MSG, 4031 4031 "OPC_OUB_PHY_START_RESP opcode:%x\n", opc); ··· 4186 4186 } 4187 4187 4188 4188 /** 4189 - * pm80xx_chip_smp_req - send a SMP task to FW 4189 + * pm80xx_chip_smp_req - send an SMP task to FW 4190 4190 * @pm8001_ha: our hba card information. 4191 4191 * @ccb: the ccb information this request used. 4192 4192 */ ··· 4346 4346 } 4347 4347 4348 4348 /** 4349 - * pm80xx_chip_ssp_io_req - send a SSP task to FW 4349 + * pm80xx_chip_ssp_io_req - send an SSP task to FW 4350 4350 * @pm8001_ha: our hba card information. 4351 4351 * @ccb: the ccb information this request used. 4352 4352 */ ··· 4750 4750 payload.ase_sh_lm_slr_phyid = cpu_to_le32(SPINHOLD_DISABLE | 4751 4751 LINKMODE_AUTO | pm8001_ha->link_rate | phy_id); 4752 4752 /* SSC Disable and SAS Analog ST configuration */ 4753 - /** 4753 + /* 4754 4754 payload.ase_sh_lm_slr_phyid = 4755 4755 cpu_to_le32(SSC_DISABLE_30 | SAS_ASE | SPINHOLD_DISABLE | 4756 4756 LINKMODE_AUTO | LINKRATE_15 | LINKRATE_30 | LINKRATE_60 | 4757 4757 phy_id); 4758 4758 Have to add "SAS PHY Analog Setup SPASTI 1 Byte" Based on need 4759 - **/ 4759 + */ 4760 4760 4761 4761 payload.sas_identify.dev_type = SAS_END_DEVICE; 4762 4762 payload.sas_identify.initiator_bits = SAS_PROTOCOL_ALL;