@@ -263,6 +263,7 @@ struct stm32_fmc2_nfc {
263
263
struct sg_table dma_data_sg ;
264
264
struct sg_table dma_ecc_sg ;
265
265
u8 * ecc_buf ;
266
+ dma_addr_t dma_ecc_addr ;
266
267
int dma_ecc_len ;
267
268
268
269
struct completion complete ;
@@ -885,17 +886,10 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
885
886
886
887
if (!write_data && !raw ) {
887
888
/* Configure DMA ECC status */
888
- p = nfc -> ecc_buf ;
889
889
for_each_sg (nfc -> dma_ecc_sg .sgl , sg , eccsteps , s ) {
890
- sg_set_buf (sg , p , nfc -> dma_ecc_len );
891
- p += nfc -> dma_ecc_len ;
892
- }
893
-
894
- ret = dma_map_sg (nfc -> dev , nfc -> dma_ecc_sg .sgl ,
895
- eccsteps , dma_data_dir );
896
- if (!ret ) {
897
- ret = - EIO ;
898
- goto err_unmap_data ;
890
+ sg_dma_address (sg ) = nfc -> dma_ecc_addr +
891
+ s * nfc -> dma_ecc_len ;
892
+ sg_dma_len (sg ) = nfc -> dma_ecc_len ;
899
893
}
900
894
901
895
desc_ecc = dmaengine_prep_slave_sg (nfc -> dma_ecc_ch ,
@@ -904,15 +898,15 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
904
898
DMA_PREP_INTERRUPT );
905
899
if (!desc_ecc ) {
906
900
ret = - ENOMEM ;
907
- goto err_unmap_ecc ;
901
+ goto err_unmap_data ;
908
902
}
909
903
910
904
reinit_completion (& nfc -> dma_ecc_complete );
911
905
desc_ecc -> callback = stm32_fmc2_nfc_dma_callback ;
912
906
desc_ecc -> callback_param = & nfc -> dma_ecc_complete ;
913
907
ret = dma_submit_error (dmaengine_submit (desc_ecc ));
914
908
if (ret )
915
- goto err_unmap_ecc ;
909
+ goto err_unmap_data ;
916
910
917
911
dma_async_issue_pending (nfc -> dma_ecc_ch );
918
912
}
@@ -932,7 +926,7 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
932
926
if (!write_data && !raw )
933
927
dmaengine_terminate_all (nfc -> dma_ecc_ch );
934
928
ret = - ETIMEDOUT ;
935
- goto err_unmap_ecc ;
929
+ goto err_unmap_data ;
936
930
}
937
931
938
932
/* Wait DMA data transfer completion */
@@ -952,11 +946,6 @@ static int stm32_fmc2_nfc_xfer(struct nand_chip *chip, const u8 *buf,
952
946
}
953
947
}
954
948
955
- err_unmap_ecc :
956
- if (!write_data && !raw )
957
- dma_unmap_sg (nfc -> dev , nfc -> dma_ecc_sg .sgl ,
958
- eccsteps , dma_data_dir );
959
-
960
949
err_unmap_data :
961
950
dma_unmap_sg (nfc -> dev , nfc -> dma_data_sg .sgl , eccsteps , dma_data_dir );
962
951
@@ -1582,7 +1571,8 @@ static int stm32_fmc2_nfc_dma_setup(struct stm32_fmc2_nfc *nfc)
1582
1571
return ret ;
1583
1572
1584
1573
/* Allocate a buffer to store ECC status registers */
1585
- nfc -> ecc_buf = devm_kzalloc (nfc -> dev , FMC2_MAX_ECC_BUF_LEN , GFP_KERNEL );
1574
+ nfc -> ecc_buf = dmam_alloc_coherent (nfc -> dev , FMC2_MAX_ECC_BUF_LEN ,
1575
+ & nfc -> dma_ecc_addr , GFP_KERNEL );
1586
1576
if (!nfc -> ecc_buf )
1587
1577
return - ENOMEM ;
1588
1578
0 commit comments