567
567
value = pm8001_cr32(pm8001_ha, 0, 0x44);
568
568
offset = value & 0x03FFFFFF;
569
569
PM8001_INIT_DBG(pm8001_ha,
570
pm8001_printk("Scratchpad 0 Offset: %x \n", offset));
570
pm8001_printk("Scratchpad 0 Offset: %x\n", offset));
571
571
pcilogic = (value & 0xFC000000) >> 26;
572
572
pcibar = get_pci_bar_index(pcilogic);
573
573
PM8001_INIT_DBG(pm8001_ha,
574
pm8001_printk("Scratchpad 0 PCI BAR: %d \n", pcibar));
574
pm8001_printk("Scratchpad 0 PCI BAR: %d\n", pcibar));
575
575
pm8001_ha->main_cfg_tbl_addr = base_addr =
576
576
pm8001_ha->io_mem[pcibar].memvirtaddr + offset;
577
577
pm8001_ha->general_stat_tbl_addr =
1262
1262
pm8001_cw32(pm8001_ha, circularQ->pi_pci_bar,
1263
1263
circularQ->pi_offset, circularQ->producer_idx);
1264
1264
PM8001_IO_DBG(pm8001_ha,
1265
pm8001_printk("after PI= %d CI= %d \n", circularQ->producer_idx,
1265
pm8001_printk("after PI= %d CI= %d\n", circularQ->producer_idx,
1266
1266
circularQ->consumer_index));
1474
1474
switch (status) {
1475
1475
case IO_SUCCESS:
1476
1476
PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS"
1477
",param = %d \n", param));
1477
",param = %d\n", param));
1478
1478
if (param == 0) {
1479
1479
ts->resp = SAS_TASK_COMPLETE;
1480
1480
ts->stat = SAM_STAT_GOOD;
1491
1491
case IO_ABORTED:
1492
1492
PM8001_IO_DBG(pm8001_ha,
1493
pm8001_printk("IO_ABORTED IOMB Tag \n"));
1493
pm8001_printk("IO_ABORTED IOMB Tag\n"));
1494
1494
ts->resp = SAS_TASK_COMPLETE;
1495
1495
ts->stat = SAS_ABORTED_TASK;
1497
1497
case IO_UNDERFLOW:
1498
1498
/* SSP Completion with error */
1499
1499
PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW"
1500
",param = %d \n", param));
1500
",param = %d\n", param));
1501
1501
ts->resp = SAS_TASK_COMPLETE;
1502
1502
ts->stat = SAS_DATA_UNDERRUN;
1503
1503
ts->residual = param;
1649
1649
ts->resp = SAS_TASK_COMPLETE;
1650
1650
ts->stat = SAS_OPEN_REJECT;
1651
1651
ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
1653
1654
PM8001_IO_DBG(pm8001_ha,
1654
1655
pm8001_printk("Unknown status 0x%x\n", status));
1937
1938
ts->buf_valid_size = sizeof(*resp);
1939
1940
PM8001_IO_DBG(pm8001_ha,
1940
pm8001_printk("response to large \n"));
1941
pm8001_printk("response to large\n"));
1942
1943
if (pm8001_dev)
1943
1944
pm8001_dev->running_req--;
1945
1946
case IO_ABORTED:
1946
1947
PM8001_IO_DBG(pm8001_ha,
1947
pm8001_printk("IO_ABORTED IOMB Tag \n"));
1948
pm8001_printk("IO_ABORTED IOMB Tag\n"));
1948
1949
ts->resp = SAS_TASK_COMPLETE;
1949
1950
ts->stat = SAS_ABORTED_TASK;
1950
1951
if (pm8001_dev)
2728
2729
u32 phy_op = le32_to_cpu(pPayload->phyop_phyid) & OP_BITS;
2729
2730
if (status != 0) {
2730
2731
PM8001_MSG_DBG(pm8001_ha,
2731
pm8001_printk("%x phy execute %x phy op failed! \n",
2732
pm8001_printk("%x phy execute %x phy op failed!\n",
2732
2733
phy_id, phy_op));
2734
2735
PM8001_MSG_DBG(pm8001_ha,
2735
pm8001_printk("%x phy execute %x phy op success! \n",
2736
pm8001_printk("%x phy execute %x phy op success!\n",
2736
2737
phy_id, phy_op));
3019
3020
case PORT_INVALID:
3020
3021
PM8001_MSG_DBG(pm8001_ha,
3021
pm8001_printk(" PortInvalid portID %d \n", port_id));
3022
pm8001_printk(" PortInvalid portID %d\n", port_id));
3022
3023
PM8001_MSG_DBG(pm8001_ha,
3023
3024
pm8001_printk(" Last phy Down and port invalid\n"));
3024
3025
port->port_attached = 0;
3028
3029
case PORT_IN_RESET:
3029
3030
PM8001_MSG_DBG(pm8001_ha,
3030
pm8001_printk(" Port In Reset portID %d \n", port_id));
3031
pm8001_printk(" Port In Reset portID %d\n", port_id));
3032
3033
case PORT_NOT_ESTABLISHED:
3033
3034
PM8001_MSG_DBG(pm8001_ha,
3220
3221
pm8001_printk(" status = 0x%x\n", status));
3221
3222
for (i = 0; i < GENERAL_EVENT_PAYLOAD; i++)
3222
3223
PM8001_MSG_DBG(pm8001_ha,
3223
pm8001_printk("inb_IOMB_payload[0x%x] 0x%x, \n", i,
3224
pm8001_printk("inb_IOMB_payload[0x%x] 0x%x,\n", i,
3224
3225
pPayload->inb_IOMB_payload[i]));
3313
3314
case HW_EVENT_SAS_PHY_UP:
3314
3315
PM8001_MSG_DBG(pm8001_ha,
3315
pm8001_printk("HW_EVENT_PHY_START_STATUS \n"));
3316
pm8001_printk("HW_EVENT_PHY_START_STATUS\n"));
3316
3317
hw_event_sas_phy_up(pm8001_ha, piomb);
3318
3319
case HW_EVENT_SATA_PHY_UP:
3319
3320
PM8001_MSG_DBG(pm8001_ha,
3320
pm8001_printk("HW_EVENT_SATA_PHY_UP \n"));
3321
pm8001_printk("HW_EVENT_SATA_PHY_UP\n"));
3321
3322
hw_event_sata_phy_up(pm8001_ha, piomb);
3323
3324
case HW_EVENT_PHY_STOP_STATUS:
3330
3331
case HW_EVENT_SATA_SPINUP_HOLD:
3331
3332
PM8001_MSG_DBG(pm8001_ha,
3332
pm8001_printk("HW_EVENT_SATA_SPINUP_HOLD \n"));
3333
pm8001_printk("HW_EVENT_SATA_SPINUP_HOLD\n"));
3333
3334
sas_ha->notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
3335
3336
case HW_EVENT_PHY_DOWN:
3336
3337
PM8001_MSG_DBG(pm8001_ha,
3337
pm8001_printk("HW_EVENT_PHY_DOWN \n"));
3338
pm8001_printk("HW_EVENT_PHY_DOWN\n"));
3338
3339
sas_ha->notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
3339
3340
phy->phy_attached = 0;
3340
3341
phy->phy_state = 0;
3447
3448
case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
3448
3449
PM8001_MSG_DBG(pm8001_ha,
3449
pm8001_printk("HW_EVENT_LINK_ERR_PHY_RESET_FAILED \n"));
3450
pm8001_printk("HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n"));
3450
3451
pm8001_hw_event_ack_req(pm8001_ha, 0,
3451
3452
HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
3452
3453
port_id, phy_id, 0, 0);
3457
3458
case HW_EVENT_PORT_RESET_TIMER_TMO:
3458
3459
PM8001_MSG_DBG(pm8001_ha,
3459
pm8001_printk("HW_EVENT_PORT_RESET_TIMER_TMO \n"));
3460
pm8001_printk("HW_EVENT_PORT_RESET_TIMER_TMO\n"));
3460
3461
sas_phy_disconnected(sas_phy);
3461
3462
phy->phy_attached = 0;
3462
3463
sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
3464
3465
case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
3465
3466
PM8001_MSG_DBG(pm8001_ha,
3466
pm8001_printk("HW_EVENT_PORT_RECOVERY_TIMER_TMO \n"));
3467
pm8001_printk("HW_EVENT_PORT_RECOVERY_TIMER_TMO\n"));
3467
3468
sas_phy_disconnected(sas_phy);
3468
3469
phy->phy_attached = 0;
3469
3470
sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
3471
3472
case HW_EVENT_PORT_RECOVER:
3472
3473
PM8001_MSG_DBG(pm8001_ha,
3473
pm8001_printk("HW_EVENT_PORT_RECOVER \n"));
3474
pm8001_printk("HW_EVENT_PORT_RECOVER\n"));
3475
3476
case HW_EVENT_PORT_RESET_COMPLETE:
3476
3477
PM8001_MSG_DBG(pm8001_ha,
3477
pm8001_printk("HW_EVENT_PORT_RESET_COMPLETE \n"));
3478
pm8001_printk("HW_EVENT_PORT_RESET_COMPLETE\n"));
3479
3480
case EVENT_BROADCAST_ASYNCH_EVENT:
3480
3481
PM8001_MSG_DBG(pm8001_ha,
3504
3505
case OPC_OUB_ECHO:
3505
PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO \n"));
3506
PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n"));
3507
3508
case OPC_OUB_HW_EVENT:
3508
3509
PM8001_MSG_DBG(pm8001_ha,
3509
pm8001_printk("OPC_OUB_HW_EVENT \n"));
3510
pm8001_printk("OPC_OUB_HW_EVENT\n"));
3510
3511
mpi_hw_event(pm8001_ha, piomb);
3512
3513
case OPC_OUB_SSP_COMP:
3513
3514
PM8001_MSG_DBG(pm8001_ha,
3514
pm8001_printk("OPC_OUB_SSP_COMP \n"));
3515
pm8001_printk("OPC_OUB_SSP_COMP\n"));
3515
3516
mpi_ssp_completion(pm8001_ha, piomb);
3517
3518
case OPC_OUB_SMP_COMP:
3518
3519
PM8001_MSG_DBG(pm8001_ha,
3519
pm8001_printk("OPC_OUB_SMP_COMP \n"));
3520
pm8001_printk("OPC_OUB_SMP_COMP\n"));
3520
3521
mpi_smp_completion(pm8001_ha, piomb);
3522
3523
case OPC_OUB_LOCAL_PHY_CNTRL:
3527
3528
case OPC_OUB_DEV_REGIST:
3528
3529
PM8001_MSG_DBG(pm8001_ha,
3529
pm8001_printk("OPC_OUB_DEV_REGIST \n"));
3530
pm8001_printk("OPC_OUB_DEV_REGIST\n"));
3530
3531
mpi_reg_resp(pm8001_ha, piomb);
3532
3533
case OPC_OUB_DEREG_DEV:
3533
3534
PM8001_MSG_DBG(pm8001_ha,
3534
pm8001_printk("unresgister the deviece \n"));
3535
pm8001_printk("unresgister the deviece\n"));
3535
3536
mpi_dereg_resp(pm8001_ha, piomb);
3537
3538
case OPC_OUB_GET_DEV_HANDLE:
3538
3539
PM8001_MSG_DBG(pm8001_ha,
3539
pm8001_printk("OPC_OUB_GET_DEV_HANDLE \n"));
3540
pm8001_printk("OPC_OUB_GET_DEV_HANDLE\n"));
3541
3542
case OPC_OUB_SATA_COMP:
3542
3543
PM8001_MSG_DBG(pm8001_ha,
3543
pm8001_printk("OPC_OUB_SATA_COMP \n"));
3544
pm8001_printk("OPC_OUB_SATA_COMP\n"));
3544
3545
mpi_sata_completion(pm8001_ha, piomb);
3546
3547
case OPC_OUB_SATA_EVENT:
3547
3548
PM8001_MSG_DBG(pm8001_ha,
3548
pm8001_printk("OPC_OUB_SATA_EVENT \n"));
3549
pm8001_printk("OPC_OUB_SATA_EVENT\n"));
3549
3550
mpi_sata_event(pm8001_ha, piomb);
3551
3552
case OPC_OUB_SSP_EVENT:
3858
3859
circularQ = &pm8001_ha->inbnd_q_tbl[0];
3859
3860
if (task->data_dir == PCI_DMA_NONE) {
3860
3861
ATAP = 0x04; /* no data*/
3861
PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data \n"));
3862
PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
3862
3863
} else if (likely(!task->ata_task.device_control_reg_update)) {
3863
3864
if (task->ata_task.dma_xfer) {
3864
3865
ATAP = 0x06; /* DMA */
3865
PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA \n"));
3866
PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n"));
3867
3868
ATAP = 0x05; /* PIO*/
3868
PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO \n"));
3869
PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n"));
3870
3871
if (task->ata_task.use_ncq &&
3871
3872
dev->sata_dev.command_set != ATAPI_COMMAND_SET) {
3872
3873
ATAP = 0x07; /* FPDMA */
3873
PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA \n"));
3874
PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n"));
3876
3877
if (task->ata_task.use_ncq && pm8001_get_ncq_tag(task, &hdr_tag))