@@ -616,38 +616,38 @@ static int iwl_pcie_load_firmware_chunk(struct iwl_trans *trans, u32 dst_addr,
616
616
dma_addr_t phy_addr , u32 byte_cnt )
617
617
{
618
618
struct iwl_trans_pcie * trans_pcie = IWL_TRANS_GET_PCIE_TRANS (trans );
619
+ unsigned long flags ;
619
620
int ret ;
620
621
621
622
trans_pcie -> ucode_write_complete = false;
622
623
623
- iwl_write_direct32 (trans ,
624
- FH_TCSR_CHNL_TX_CONFIG_REG (FH_SRVC_CHNL ),
625
- FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE );
626
-
627
- iwl_write_direct32 (trans ,
628
- FH_SRVC_CHNL_SRAM_ADDR_REG (FH_SRVC_CHNL ),
629
- dst_addr );
630
-
631
- iwl_write_direct32 (trans ,
632
- FH_TFDIB_CTRL0_REG (FH_SRVC_CHNL ),
633
- phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK );
634
-
635
- iwl_write_direct32 (trans ,
636
- FH_TFDIB_CTRL1_REG (FH_SRVC_CHNL ),
637
- (iwl_get_dma_hi_addr (phy_addr )
638
- << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT ) | byte_cnt );
639
-
640
- iwl_write_direct32 (trans ,
641
- FH_TCSR_CHNL_TX_BUF_STS_REG (FH_SRVC_CHNL ),
642
- 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM |
643
- 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX |
644
- FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID );
645
-
646
- iwl_write_direct32 (trans ,
647
- FH_TCSR_CHNL_TX_CONFIG_REG (FH_SRVC_CHNL ),
648
- FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE |
649
- FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE |
650
- FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD );
624
+ if (!iwl_trans_grab_nic_access (trans , & flags ))
625
+ return - EIO ;
626
+
627
+ iwl_write32 (trans , FH_TCSR_CHNL_TX_CONFIG_REG (FH_SRVC_CHNL ),
628
+ FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE );
629
+
630
+ iwl_write32 (trans , FH_SRVC_CHNL_SRAM_ADDR_REG (FH_SRVC_CHNL ),
631
+ dst_addr );
632
+
633
+ iwl_write32 (trans , FH_TFDIB_CTRL0_REG (FH_SRVC_CHNL ),
634
+ phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK );
635
+
636
+ iwl_write32 (trans , FH_TFDIB_CTRL1_REG (FH_SRVC_CHNL ),
637
+ (iwl_get_dma_hi_addr (phy_addr )
638
+ << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT ) | byte_cnt );
639
+
640
+ iwl_write32 (trans , FH_TCSR_CHNL_TX_BUF_STS_REG (FH_SRVC_CHNL ),
641
+ BIT (FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM ) |
642
+ BIT (FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX ) |
643
+ FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID );
644
+
645
+ iwl_write32 (trans , FH_TCSR_CHNL_TX_CONFIG_REG (FH_SRVC_CHNL ),
646
+ FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE |
647
+ FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE |
648
+ FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD );
649
+
650
+ iwl_trans_release_nic_access (trans , & flags );
651
651
652
652
ret = wait_event_timeout (trans_pcie -> ucode_write_waitq ,
653
653
trans_pcie -> ucode_write_complete , 5 * HZ );
0 commit comments