@@ -272,6 +272,7 @@ struct stm32_fmc2_nfc {
272272 struct sg_table dma_data_sg ;
273273 struct sg_table dma_ecc_sg ;
274274 u8 * ecc_buf ;
275+ dma_addr_t dma_ecc_addr ;
275276 int dma_ecc_len ;
276277 u32 tx_dma_max_burst ;
277278 u32 rx_dma_max_burst ;
@@ -902,17 +903,10 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
902903
903904 if (!write_data && !raw ) {
904905 /* Configure DMA ECC status */
905- p = nfc -> ecc_buf ;
906906 for_each_sg (nfc -> dma_ecc_sg .sgl , sg , eccsteps , s ) {
907- sg_set_buf (sg , p , nfc -> dma_ecc_len );
908- p += nfc -> dma_ecc_len ;
909- }
910-
911- ret = dma_map_sg (nfc -> dev , nfc -> dma_ecc_sg .sgl ,
912- eccsteps , dma_data_dir );
913- if (!ret ) {
914- ret = - EIO ;
915- goto err_unmap_data ;
907+ sg_dma_address (sg ) = nfc -> dma_ecc_addr +
908+ s * nfc -> dma_ecc_len ;
909+ sg_dma_len (sg ) = nfc -> dma_ecc_len ;
916910 }
917911
918912 desc_ecc = dmaengine_prep_slave_sg (nfc -> dma_ecc_ch ,
@@ -921,15 +915,15 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
921915 DMA_PREP_INTERRUPT );
922916 if (!desc_ecc ) {
923917 ret = - ENOMEM ;
924- goto err_unmap_ecc ;
918+ goto err_unmap_data ;
925919 }
926920
927921 reinit_completion (& nfc -> dma_ecc_complete );
928922 desc_ecc -> callback = stm32_fmc2_nfc_dma_callback ;
929923 desc_ecc -> callback_param = & nfc -> dma_ecc_complete ;
930924 ret = dma_submit_error (dmaengine_submit (desc_ecc ));
931925 if (ret )
932- goto err_unmap_ecc ;
926+ goto err_unmap_data ;
933927
934928 dma_async_issue_pending (nfc -> dma_ecc_ch );
935929 }
@@ -949,7 +943,7 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
949943 if (!write_data && !raw )
950944 dmaengine_terminate_all (nfc -> dma_ecc_ch );
951945 ret = - ETIMEDOUT ;
952- goto err_unmap_ecc ;
946+ goto err_unmap_data ;
953947 }
954948
955949 /* Wait DMA data transfer completion */
@@ -969,11 +963,6 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
969963 }
970964 }
971965
972- err_unmap_ecc :
973- if (!write_data && !raw )
974- dma_unmap_sg (nfc -> dev , nfc -> dma_ecc_sg .sgl ,
975- eccsteps , dma_data_dir );
976-
977966err_unmap_data :
978967 dma_unmap_sg (nfc -> dev , nfc -> dma_data_sg .sgl , eccsteps , dma_data_dir );
979968
@@ -1610,7 +1599,8 @@ static int stm32_fmc2_nfc_dma_setup(struct stm32_fmc2_nfc *nfc)
16101599 return ret ;
16111600
16121601 /* Allocate a buffer to store ECC status registers */
1613- nfc -> ecc_buf = devm_kzalloc (nfc -> dev , FMC2_MAX_ECC_BUF_LEN , GFP_KERNEL );
1602+ nfc -> ecc_buf = dmam_alloc_coherent (nfc -> dev , FMC2_MAX_ECC_BUF_LEN ,
1603+ & nfc -> dma_ecc_addr , GFP_KERNEL );
16141604 if (!nfc -> ecc_buf )
16151605 return - ENOMEM ;
16161606
0 commit comments