This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

there must be something wrong with the mcbsp_test.c from TI

Recently I test the mcbsp_test.c found there is something wrong,I am amazing because the source code is from ti without any change.

Sourcr code path: ti-dvsdk_omapl138-evm_4_01_00_09\psp\linux-driver-examples-psp03.20.00.13\mcbsp\mcbsp_test.c

My order: insmod mcbsp_test.ko device_id=1 buf_size=1024 buf_fmt=0 num_pkts=100 word_len=32 frame_len=2 freq=48000 dlb=1 numevt=0 mc_mode=0 master=1 tx_rx=3
 
Every time I test 100 times (num_pkts=100),sometime it will be no error,but sometime dose,the appearance of error is random.
  
But the error has same rule: "Error found at Byte 4 location",I think there must be something wrong but i can't find the reason,so please give me a hand and show me how to deal with this problem
 
The error result example 1


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
davinci-mcbsp davinci-mcbsp.1: Clock rate is 150000000, Freq is 48000
davinci-mcbsp davinci-mcbsp.1: The divider  value is 47(0x2f)
davinci-mcbsp davinci-mcbsp.1: value written to SRGR is 303f002f
davinci-mcbsp davinci-mcbsp.1: WFIFO value 00000001
davinci-mcbsp davinci-mcbsp.1: RFIFO value 00000001
davinci-mcbsp davinci-mcbsp.1: Max TX A:1, B:0
davinci-mcbsp davinci-mcbsp.1: Max RX A:1, B:0
Setting DLB mode
Transmitting Packet 65
Starting McBSP TX
davinci-mcbsp davinci-mcbsp.1: Configuring TX master mode
Starting McBSP RX
davinci-mcbsp davinci-mcbsp.1: Configuring RX in master mode
McBSP started
Receving data...
EDMA: EER0 00000000
davinci-mcbsp davinci-mcbsp.1: RX buffer interleaved format
EDMA: ER0 00000020
EDMA: EER0 00000010
davinci-mcbsp davinci-mcbsp.1: Triggering the receiver
davinci-mcbsp davinci-mcbsp.1: Configuring RX in master mode
Transmitting data...
EDMA: EER0 00000010
davinci-mcbsp davinci-mcbsp.1: TX interleaved buffer format
EDMA: ER0 00000000
EDMA: EER0 00000030
davinci-mcbsp davinci-mcbsp.1: Configuring TX in master mode
edma edma: dma_ccerr_handler
edma edma: EMR0 00000030
davinci-mcbsp davinci-mcbsp.1: RX DMA callback with status 2
davinci-mcbsp davinci-mcbsp.1: TX DMA callback with status 2
edma edma: dma_irq_handler
edma edma: IPR0 00000030
davinci-mcbsp davinci-mcbsp.1: RX DMA callback with status 1
EDMA: EER0 00000020
davinci-mcbsp davinci-mcbsp.1: TX DMA callback with status 1
EDMA: EER0 00000000
...TX complete
...RX complete
EDMA: EMR0 00000000
TX stopped
EDMA: EMR0 00000000
RX stopped
Testing data integrity for Packet 65:
bufdest[0]: 64  65      66            68      69      70      71      72      73
bufdest[10]: 74 75      76      77      78      79      80      81      82      83
bufdest[20]: 84 85      86      87      88      89      90      91      92      93
bufdest[30]: 94 95      96      97      98      99      100     101     102     103
bufdest[40]: 104        105     106     107     108     109     110     111     112     113
bufdest[50]: 114        115     116     117     118     119     120     121     122     123
bufdest[60]: 124        125     126     127     128     129     130     131     132     133
bufdest[70]: 134        135     136     137     138     139     140     141     142     143
bufdest[80]: 144        145     146     147     148     149     150     151     152     153
bufdest[90]: 154        155     156     157     158     159     160     161     162     163
bufdest[100]: 164       165     166     167     168     169     170     171     172     173
bufdest[110]: 174       175     176     177     178     179     180     181     182     183
bufdest[120]: 184       185     186     187     188     189     190     191     192     193
bufdest[130]: 194       195     196     197     198     199     200     201     202     203
bufdest[140]: 204       205     206     207     208     209     210     211     212     213
bufdest[150]: 214       215     216     217     218     219     220     221     222     223
bufdest[160]: 224       225     226     227     228     229     230     231     232     233
bufdest[170]: 234       235     236     237     238     239     240     241     242     243
bufdest[180]: 244       245     246     247     248     249     250     251     252     253
bufdest[190]: 254       255     0       1       2       3       4       5       6       7
bufdest[200]: 8 9       10      11      12      13      14      15      16      17
bufdest[210]: 18        19      20      21      22      23      24      25      26      27
bufdest[220]: 28        29      30      31      32      33      34      35      36      37
bufdest[230]: 38        39      40      41      42      43      44      45      46      47
bufdest[240]: 48        49      50      51      52      53      54      55      56      57
bufdest[250]: 58        59      60      61      62      63      64      65      66      67
bufdest[260]: 68        69      70      71      72      73      74      75      76      77
bufdest[270]: 78        79      80      81      82      83      84      85      86      87
bufdest[280]: 88        89      90      91      92      93      94      95      96      97
bufdest[290]: 98        99      100     101     102     103     104     105     106     107
bufdest[300]: 108       109     110     111     112     113     114     115     116     117
bufdest[310]: 118       119     120     121     122     123     124     125     126     127
bufdest[320]: 128       129     130     131     132     133     134     135     136     137
bufdest[330]: 138       139     140     141     142     143     144     145     146     147
bufdest[340]: 148       149     150     151     152     153     154     155     156     157
bufdest[350]: 158       159     160     161     162     163     164     165     166     167
bufdest[360]: 168       169     170     171     172     173     174     175     176     177
bufdest[370]: 178       179     180     181     182     183     184     185     186     187
bufdest[380]: 188       189     190     191     192     193     194     195     196     197
bufdest[390]: 198       199     200     201     202     203     204     205     206     207
bufdest[400]: 208       209     210     211     212     213     214     215     216     217
bufdest[410]: 218       219     220     221     222     223     224     225     226     227
bufdest[420]: 228       229     230     231     232     233     234     235     236     237
bufdest[430]: 238       239     240     241     242     243     244     245     246     247
bufdest[440]: 248       249     250     251     252     253     254     255     0       1
bufdest[450]: 2 3       4       5       6       7       8       9       10      11
bufdest[460]: 12        13      14      15      16      17      18      19      20      21
bufdest[470]: 22        23      24      25      26      27      28      29      30      31
bufdest[480]: 32        33      34      35      36      37      38      39      40      41
bufdest[490]: 42        43      44      45      46      47      48      49      50      51
bufdest[500]: 52        53      54      55      56      57      58      59      60      61
bufdest[510]: 62        63      64      65      66      67      68      69      70      71
bufdest[520]: 72        73      74      75      76      77      78      79      80      81
bufdest[530]: 82        83      84      85      86      87      88      89      90      91
bufdest[540]: 92        93      94      95      96      97      98      99      100     101
bufdest[550]: 102       103     104     105     106     107     108     109     110     111
bufdest[560]: 112       113     114     115     116     117     118     119     120     121
bufdest[570]: 122       123     124     125     126     127     128     129     130     131
bufdest[580]: 132       133     134     135     136     137     138     139     140     141
bufdest[590]: 142       143     144     145     146     147     148     149     150     151
bufdest[600]: 152       153     154     155     156     157     158     159     160     161
bufdest[610]: 162       163     164     165     166     167     168     169     170     171
bufdest[620]: 172       173     174     175     176     177     178     179     180     181
bufdest[630]: 182       183     184     185     186     187     188     189     190     191
bufdest[640]: 192       193     194     195     196     197     198     199     200     201
bufdest[650]: 202       203     204     205     206     207     208     209     210     211
bufdest[660]: 212       213     214     215     216     217     218     219     220     221
bufdest[670]: 222       223     224     225     226     227     228     229     230     231
bufdest[680]: 232       233     234     235     236     237     238     239     240     241
bufdest[690]: 242       243     244     245     246     247     248     249     250     251
bufdest[700]: 252       253     254     255     0       1       2       3       4       5
bufdest[710]: 6 7       8       9       10      11      12      13      14      15
bufdest[720]: 16        17      18      19      20      21      22      23      24      25
bufdest[730]: 26        27      28      29      30      31      32      33      34      35
bufdest[740]: 36        37      38      39      40      41      42      43      44      45
bufdest[750]: 46        47      48      49      50      51      52      53      54      55
bufdest[760]: 56        57      58      59      60      61      62      63      64      65
bufdest[770]: 66        67      68      69      70      71      72      73      74      75
bufdest[780]: 76        77      78      79      80      81      82      83      84      85
bufdest[790]: 86        87      88      89      90      91      92      93      94      95
bufdest[800]: 96        97      98      99      100     101     102     103     104     105
bufdest[810]: 106       107     108     109     110     111     112     113     114     115
bufdest[820]: 116       117     118     119     120     121     122     123     124     125
bufdest[830]: 126       127     128     129     130     131     132     133     134     135
bufdest[840]: 136       137     138     139     140     141     142     143     144     145
bufdest[850]: 146       147     148     149     150     151     152     153     154     155
bufdest[860]: 156       157     158     159     160     161     162     163     164     165
bufdest[870]: 166       167     168     169     170     171     172     173     174     175
bufdest[880]: 176       177     178     179     180     181     182     183     184     185
bufdest[890]: 186       187     188     189     190     191     192     193     194     195
bufdest[900]: 196       197     198     199     200     201     202     203     204     205
bufdest[910]: 206       207     208     209     210     211     212     213     214     215
bufdest[920]: 216       217     218     219     220     221     222     223     224     225
bufdest[930]: 226       227     228     229     230     231     232     233     234     235
bufdest[940]: 236       237     238     239     240     241     242     243     244     245
bufdest[950]: 246       247     248     249     250     251     252     253     254     255
bufdest[960]: 0 1       2       3       4       5       6       7       8       9
bufdest[970]: 10        11      12      13      14      15      16      17      18      19
bufdest[980]: 20        21      22      23      24      25      26      27      28      29
bufdest[990]: 30        31      32      33      34      35      36      37      38      39
bufdest[1000]: 40       41      42      43      44      45      46      47      48      49
bufdest[1010]: 50       51      52      53      54      55      56      57      58      59
bufdest[1020]: 60       61      62      63
Error found at Byte 4 location
davinci-mcbsp davinci-mcbsp.1: ------ McBSP1 regs -----
davinci-mcbsp davinci-mcbsp.1: DRR:  0x00000000
davinci-mcbsp davinci-mcbsp.1: DXR:  0x3f3e3d3c
davinci-mcbsp davinci-mcbsp.1: SPCR: 0x00008000
davinci-mcbsp davinci-mcbsp.1: RCR:  0x00a001a0
davinci-mcbsp davinci-mcbsp.1: XCR:  0x00a001a0
davinci-mcbsp davinci-mcbsp.1: SRGR: 0x303f002f
davinci-mcbsp davinci-mcbsp.1: MCR: 0x00000000
davinci-mcbsp davinci-mcbsp.1: RCER0:  0x55555555
davinci-mcbsp davinci-mcbsp.1: XCER0:  0x55555555
davinci-mcbsp davinci-mcbsp.1: PCR:  0x00000f00
davinci-mcbsp davinci-mcbsp.1: RCER1:  0x00000000
davinci-mcbsp davinci-mcbsp.1: XCER1:  0x00000000
davinci-mcbsp davinci-mcbsp.1: RCER2:  0x00000000
davinci-mcbsp davinci-mcbsp.1: XCER2:  0x00000000
davinci-mcbsp davinci-mcbsp.1: RCER3:  0x00000000
davinci-mcbsp davinci-mcbsp.1: XCER3:  0x00000000
davinci-mcbsp davinci-mcbsp.1: WFIFOCTL:  0x00000001
davinci-mcbsp davinci-mcbsp.1: WFIFOSTS:  0x00000000
davinci-mcbsp davinci-mcbsp.1: RFIFOCTL:  0x00000001
davinci-mcbsp davinci-mcbsp.1: RFIFOSTS:  0x00000000
davinci-mcbsp davinci-mcbsp.1: -------------------------

 

 

The error result example 2
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
davinci-mcbsp davinci-mcbsp.1: Clock rate is 150000000, Freq is 48000
davinci-mcbsp davinci-mcbsp.1: The divider  value is 47(0x2f)
davinci-mcbsp davinci-mcbsp.1: value written to SRGR is 303f002f
davinci-mcbsp davinci-mcbsp.1: WFIFO value 00000001
davinci-mcbsp davinci-mcbsp.1: RFIFO value 00000001
davinci-mcbsp davinci-mcbsp.1: Max TX A:1, B:0
davinci-mcbsp davinci-mcbsp.1: Max RX A:1, B:0
Setting DLB mode
Transmitting Packet 62
Starting McBSP TX
davinci-mcbsp davinci-mcbsp.1: Configuring TX master mode
Starting McBSP RX
davinci-mcbsp davinci-mcbsp.1: Configuring RX in master mode
McBSP started
Receving data...
EDMA: EER0 00000000
davinci-mcbsp davinci-mcbsp.1: RX buffer interleaved format
EDMA: ER0 00000020
EDMA: EER0 00000010
davinci-mcbsp davinci-mcbsp.1: Triggering the receiver
davinci-mcbsp davinci-mcbsp.1: Configuring RX in master mode
Transmitting data...
EDMA: EER0 00000010
davinci-mcbsp davinci-mcbsp.1: TX interleaved buffer format
EDMA: ER0 00000000
EDMA: EER0 00000030
davinci-mcbsp davinci-mcbsp.1: Configuring TX in master mode
edma edma: dma_ccerr_handler
edma edma: EMR0 00000030
davinci-mcbsp davinci-mcbsp.1: RX DMA callback with status 2
davinci-mcbsp davinci-mcbsp.1: TX DMA callback with status 2
edma edma: dma_irq_handler
edma edma: IPR0 00000030
davinci-mcbsp davinci-mcbsp.1: RX DMA callback with status 1
EDMA: EER0 00000020
davinci-mcbsp davinci-mcbsp.1: TX DMA callback with status 1
EDMA: EER0 00000000
...TX complete
...RX complete
EDMA: EMR0 00000000
TX stopped
EDMA: EMR0 00000000
RX stopped
Testing data integrity for Packet 62:
bufdest[0]: 61  62      63            65      66      67      68      69      70
bufdest[10]: 71 72      73      74      75      76      77      78      79      80
bufdest[20]: 81 82      83      84      85      86      87      88      89      90
bufdest[30]: 91 92      93      94      95      96      97      98      99      100
bufdest[40]: 101        102     103     104     105     106     107     108     109     110
bufdest[50]: 111        112     113     114     115     116     117     118     119     120
bufdest[60]: 121        122     123     124     125     126     127     128     129     130
bufdest[70]: 131        132     133     134     135     136     137     138     139     140
bufdest[80]: 141        142     143     144     145     146     147     148     149     150
bufdest[90]: 151        152     153     154     155     156     157     158     159     160
bufdest[100]: 161       162     163     164     165     166     167     168     169     170
bufdest[110]: 171       172     173     174     175     176     177     178     179     180
bufdest[120]: 181       182     183     184     185     186     187     188     189     190
bufdest[130]: 191       192     193     194     195     196     197     198     199     200
bufdest[140]: 201       202     203     204     205     206     207     208     209     210
bufdest[150]: 211       212     213     214     215     216     217     218     219     220
bufdest[160]: 221       222     223     224     225     226     227     228     229     230
bufdest[170]: 231       232     233     234     235     236     237     238     239     240
bufdest[180]: 241       242     243     244     245     246     247     248     249     250
bufdest[190]: 251       252     253     254     255     0       1       2       3       4
bufdest[200]: 5 6       7       8       9       10      11      12      13      14
bufdest[210]: 15        16      17      18      19      20      21      22      23      24
bufdest[220]: 25        26      27      28      29      30      31      32      33      34
bufdest[230]: 35        36      37      38      39      40      41      42      43      44
bufdest[240]: 45        46      47      48      49      50      51      52      53      54
bufdest[250]: 55        56      57      58      59      60      61      62      63      64
bufdest[260]: 65        66      67      68      69      70      71      72      73      74
bufdest[270]: 75        76      77      78      79      80      81      82      83      84
bufdest[280]: 85        86      87      88      89      90      91      92      93      94
bufdest[290]: 95        96      97      98      99      100     101     102     103     104
bufdest[300]: 105       106     107     108     109     110     111     112     113     114
bufdest[310]: 115       116     117     118     119     120     121     122     123     124
bufdest[320]: 125       126     127     128     129     130     131     132     133     134
bufdest[330]: 135       136     137     138     139     140     141     142     143     144
bufdest[340]: 145       146     147     148     149     150     151     152     153     154
bufdest[350]: 155       156     157     158     159     160     161     162     163     164
bufdest[360]: 165       166     167     168     169     170     171     172     173     174
bufdest[370]: 175       176     177     178     179     180     181     182     183     184
bufdest[380]: 185       186     187     188     189     190     191     192     193     194
bufdest[390]: 195       196     197     198     199     200     201     202     203     204
bufdest[400]: 205       206     207     208     209     210     211     212     213     214
bufdest[410]: 215       216     217     218     219     220     221     222     223     224
bufdest[420]: 225       226     227     228     229     230     231     232     233     234
bufdest[430]: 235       236     237     238     239     240     241     242     243     244
bufdest[440]: 245       246     247     248     249     250     251     252     253     254
bufdest[450]: 255       0       1       2       3       4       5       6       7       8
bufdest[460]: 9 10      11      12      13      14      15      16      17      18
bufdest[470]: 19        20      21      22      23      24      25      26      27      28
bufdest[480]: 29        30      31      32      33      34      35      36      37      38
bufdest[490]: 39        40      41      42      43      44      45      46      47      48
bufdest[500]: 49        50      51      52      53      54      55      56      57      58
bufdest[510]: 59        60      61      62      63      64      65      66      67      68
bufdest[520]: 69        70      71      72      73      74      75      76      77      78
bufdest[530]: 79        80      81      82      83      84      85      86      87      88
bufdest[540]: 89        90      91      92      93      94      95      96      97      98
bufdest[550]: 99        100     101     102     103     104     105     106     107     108
bufdest[560]: 109       110     111     112     113     114     115     116     117     118
bufdest[570]: 119       120     121     122     123     124     125     126     127     128
bufdest[580]: 129       130     131     132     133     134     135     136     137     138
bufdest[590]: 139       140     141     142     143     144     145     146     147     148
bufdest[600]: 149       150     151     152     153     154     155     156     157     158
bufdest[610]: 159       160     161     162     163     164     165     166     167     168
bufdest[620]: 169       170     171     172     173     174     175     176     177     178
bufdest[630]: 179       180     181     182     183     184     185     186     187     188
bufdest[640]: 189       190     191     192     193     194     195     196     197     198
bufdest[650]: 199       200     201     202     203     204     205     206     207     208
bufdest[660]: 209       210     211     212     213     214     215     216     217     218
bufdest[670]: 219       220     221     222     223     224     225     226     227     228
bufdest[680]: 229       230     231     232     233     234     235     236     237     238
bufdest[690]: 239       240     241     242     243     244     245     246     247     248
bufdest[700]: 249       250     251     252     253     254     255     0       1       2
bufdest[710]: 3 4       5       6       7       8       9       10      11      12
bufdest[720]: 13        14      15      16      17      18      19      20      21      22
bufdest[730]: 23        24      25      26      27      28      29      30      31      32
bufdest[740]: 33        34      35      36      37      38      39      40      41      42
bufdest[750]: 43        44      45      46      47      48      49      50      51      52
bufdest[760]: 53        54      55      56      57      58      59      60      61      62
bufdest[770]: 63        64      65      66      67      68      69      70      71      72
bufdest[780]: 73        74      75      76      77      78      79      80      81      82
bufdest[790]: 83        84      85      86      87      88      89      90      91      92
bufdest[800]: 93        94      95      96      97      98      99      100     101     102
bufdest[810]: 103       104     105     106     107     108     109     110     111     112
bufdest[820]: 113       114     115     116     117     118     119     120     121     122
bufdest[830]: 123       124     125     126     127     128     129     130     131     132
bufdest[840]: 133       134     135     136     137     138     139     140     141     142
bufdest[850]: 143       144     145     146     147     148     149     150     151     152
bufdest[860]: 153       154     155     156     157     158     159     160     161     162
bufdest[870]: 163       164     165     166     167     168     169     170     171     172
bufdest[880]: 173       174     175     176     177     178     179     180     181     182
bufdest[890]: 183       184     185     186     187     188     189     190     191     192
bufdest[900]: 193       194     195     196     197     198     199     200     201     202
bufdest[910]: 203       204     205     206     207     208     209     210     211     212
bufdest[920]: 213       214     215     216     217     218     219     220     221     222
bufdest[930]: 223       224     225     226     227     228     229     230     231     232
bufdest[940]: 233       234     235     236     237     238     239     240     241     242
bufdest[950]: 243       244     245     246     247     248     249     250     251     252
bufdest[960]: 253       254     255     0       1       2       3       4       5       6
bufdest[970]: 7 8       9       10      11      12      13      14      15      16
bufdest[980]: 17        18      19      20      21      22      23      24      25      26
bufdest[990]: 27        28      29      30      31      32      33      34      35      36
bufdest[1000]: 37       38      39      40      41      42      43      44      45      46
bufdest[1010]: 47       48      49      50      51      52      53      54      55      56
bufdest[1020]: 57       58      59      60
Error found at Byte 4 location
davinci-mcbsp davinci-mcbsp.1: ------ McBSP1 regs -----
davinci-mcbsp davinci-mcbsp.1: DRR:  0x00000000
davinci-mcbsp davinci-mcbsp.1: DXR:  0x3c3b3a39
davinci-mcbsp davinci-mcbsp.1: SPCR: 0x00008000
davinci-mcbsp davinci-mcbsp.1: RCR:  0x00a001a0
davinci-mcbsp davinci-mcbsp.1: XCR:  0x00a001a0
davinci-mcbsp davinci-mcbsp.1: SRGR: 0x303f002f
davinci-mcbsp davinci-mcbsp.1: MCR: 0x00000000
davinci-mcbsp davinci-mcbsp.1: RCER0:  0x55555555
davinci-mcbsp davinci-mcbsp.1: XCER0:  0x55555555
davinci-mcbsp davinci-mcbsp.1: PCR:  0x00000f00
davinci-mcbsp davinci-mcbsp.1: RCER1:  0x00000000
davinci-mcbsp davinci-mcbsp.1: XCER1:  0x00000000
davinci-mcbsp davinci-mcbsp.1: RCER2:  0x00000000
davinci-mcbsp davinci-mcbsp.1: XCER2:  0x00000000
davinci-mcbsp davinci-mcbsp.1: RCER3:  0x00000000
davinci-mcbsp davinci-mcbsp.1: XCER3:  0x00000000
davinci-mcbsp davinci-mcbsp.1: WFIFOCTL:  0x00000001
davinci-mcbsp davinci-mcbsp.1: WFIFOSTS:  0x00000000
davinci-mcbsp davinci-mcbsp.1: RFIFOCTL:  0x00000001
davinci-mcbsp davinci-mcbsp.1: RFIFOSTS:  0x00000000
davinci-mcbsp davinci-mcbsp.1: -------------------------

 

The mcbsp_test.c from ti:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/moduleparam.h>
#include <linux/sysctl.h>
#include <linux/mm.h>
#include <linux/dma-mapping.h>
#include <linux/delay.h>

#include <mach/memory.h>
#include <mach/hardware.h>
#include <mach/irqs.h>
#include <mach/edma.h>
#include <mach/mcbsp.h>

static dma_addr_t physsrc = 0;
static char *bufsrc = NULL;
static dma_addr_t physdest = 0;
static char *bufdest = NULL;

static int device_id = 1;
static int buf_size = (1 * 1024);
static int buf_fmt = 0;
static int num_pkts = 1;
static int word_len = 8;
static int frame_len = 32;
static int freq = 48000;
static bool dlb = 1;
static int numevt = 0;
static int mc_mode = 0;
static int master = 1;
static int tx_rx = 3;

module_param(device_id, int, S_IRUGO);
module_param(buf_size, int, S_IRUGO);
module_param(buf_fmt, int, S_IRUGO);
module_param(num_pkts, int, S_IRUGO);
module_param(word_len, int, S_IRUGO);
module_param(frame_len, int, S_IRUGO);
module_param(freq, int, S_IRUGO);
module_param(dlb, bool, S_IRUGO);
module_param(numevt, int, S_IRUGO);
module_param(mc_mode, int, S_IRUGO);
module_param(master, int, S_IRUGO);
module_param(tx_rx, int, S_IRUGO);

MODULE_PARM_DESC(device_id, "McBSP instance (default:1)");
MODULE_PARM_DESC(buf_size, "Buffer Size (default:1KB)");
MODULE_PARM_DESC(buf_fmt, "Buffer format (default:Interleaved)");
MODULE_PARM_DESC(buf_size, "Packet count (default:1)");
MODULE_PARM_DESC(word_len, "Word Length: 8, 16, 24, 32 bits (default:32)");
MODULE_PARM_DESC(frame_len, "Frame Length: 1-128 (default:2)");
MODULE_PARM_DESC(freq, "Sample Frequency (default:48kHz)");
MODULE_PARM_DESC(dlb, "Digital Loopback (default: disabled)");
MODULE_PARM_DESC(numevt, "NUMEVT (default: 0)");
MODULE_PARM_DESC(mc_mode, "Multi-channel mode (default: 0)");
MODULE_PARM_DESC(master, "Master/Slave mode (default: master)");
MODULE_PARM_DESC(tx_rx, "Transmit, Receive or both (default: both)");

static int __init mcbsp_test_init(void)
{
 struct davinci_mcbsp_dev *dev = NULL;
 int i;
 int loopcnt = 0;
 int errcnt;

 if (tx_rx & 0x01) {
  bufsrc = dma_alloc_coherent(NULL, buf_size, &physsrc, 0);
  if (!bufsrc) {
   printk ("dma_alloc_coherent failed for physsrc\n");
   return -ENOMEM;
  }

  for (i = 0; i < buf_size; i++)
   bufsrc[i] = i % 256;
 }

 if (tx_rx & 0x02) {
  bufdest = dma_alloc_coherent(NULL, buf_size, &physdest, 0);
  if (!bufdest) {
   printk ("dma_alloc_coherent failed for physdest\n");
   return -ENOMEM;
  }
 }

 printk("Starting McBSP test\n");
 davinci_mcbsp_request(device_id, &dev);
 do {
  /* configure rcr and xcr */
  dev->tx_params.word_length1 = word_len; /* 32 bits */
  dev->tx_params.frame_length1 = frame_len;

  dev->rx_params.word_length1 = word_len; /* 32 bits */
  dev->rx_params.frame_length1 = frame_len;

  dev->rx_params.buf_fmt = buf_fmt;
  dev->tx_params.buf_fmt = buf_fmt;

  if (mc_mode > 0  && mc_mode < 8) {
   dev->rx_params.intr_mode = 1;
   dev->tx_params.intr_mode = 1;
  }

  davinci_mcbsp_config_params(dev, master);

  /* sample rate generator conifguration */
  davinci_mcbsp_config_clock(dev, freq);

  dev->tx_params.numevt = numevt;
  dev->rx_params.numevt = numevt;
  dev->tx_params.numdma = 1;
  dev->rx_params.numdma = 1;
  davinci_mcbsp_config_fifo(dev);


  dev->tx_params.mc_mode = mc_mode;
  dev->rx_params.mc_mode = mc_mode;

  dev->tx_params.cer[0] = 0x5555;
  dev->tx_params.cer[1] = 0x5555;
  dev->tx_params.cer[2] = 0x5555;
  dev->tx_params.cer[3] = 0x5555;
  dev->tx_params.cer[4] = 0x5555;
  dev->tx_params.cer[5] = 0x5555;
  dev->tx_params.cer[6] = 0x5555;
  dev->tx_params.cer[7] = 0x5555;

  dev->rx_params.cer[0] = 0x5555;
  dev->rx_params.cer[1] = 0x5555;
  dev->rx_params.cer[2] = 0x5555;
  dev->rx_params.cer[3] = 0x5555;
  dev->rx_params.cer[4] = 0x5555;
  dev->rx_params.cer[5] = 0x5555;
  dev->rx_params.cer[6] = 0x5555;
  dev->rx_params.cer[7] = 0x5555;

  davinci_mcbsp_config_multichannel_mode(dev);

  /* DMA Mode */
  dev->op_mode = DAVINCI_MCBSP_DMA_MODE;
  if (dlb) {
   printk("Setting DLB mode \n");
   dev->op_mode |= DAVINCI_MCBSP_DLB_MODE;
  } else {
   printk("No DLB mode \n");
  }

  if (tx_rx & 0x01) {
   printk("Transmitting Packet %d\n", loopcnt + 1);
   for (i = 0; i < buf_size; i++)
    bufsrc[i] = (i + loopcnt) % 256;

   printk("Starting McBSP TX\n");
   davinci_mcbsp_start_tx(dev);
  }

  if (tx_rx & 0x02) {
   printk("Starting McBSP RX\n");
   davinci_mcbsp_start_rx(dev);
  }

  printk("McBSP started\n");
  if (tx_rx & 0x02) {
   printk("Receving data...\n");
   davinci_mcbsp_recv_buf(dev, physdest, buf_size);
  }

  if (tx_rx & 0x01) {
   printk("Transmitting data...\n");
   davinci_mcbsp_xmit_buf(dev, physsrc, buf_size);
  }

  if (dev->op_mode & DAVINCI_MCBSP_DLB_MODE) {
   wait_for_completion(&dev->tx_params.dma_completion);
   printk("...TX complete\n");
   wait_for_completion(&dev->rx_params.dma_completion);
   printk("...RX complete\n");
  }

  if (tx_rx & 0x01) {
   davinci_mcbsp_stop_tx(dev);
   printk("TX stopped\n");
  }

  if (tx_rx & 0x02) {
   davinci_mcbsp_stop_rx(dev);
   printk("RX stopped\n");
  }

  if (tx_rx & 0x02 || (dev->op_mode & DAVINCI_MCBSP_DLB_MODE)) {
   printk("Testing data integrity for Packet %d: ", loopcnt + 1);
   errcnt = 0;
   for (i = 0; i < buf_size; i++) {
    if (bufdest[i] != ((i + loopcnt) % 256)) {
     errcnt = i + 1;
     break;
    }
   }

   if (errcnt) {
#if 1 /* debug */
    for (i = 0; i < buf_size; i++) {
     if (!(i % 10))
      printk("\nbufdest[%d]: ", i);
     printk("%d\t", bufdest[i]);
    }
    printk("\n");
#endif
    printk("Error found at Byte %d location\n", errcnt);
    davinci_mcbsp_dump_reg(dev);

   } else
    printk("Passed\n");

   memset(bufdest, 0 , buf_size);
  } else {
   mdelay(100);
   /* more time to compare data for large buffers */
   if (buf_size > 16 * 1024)
    mdelay(1000);
   if (buf_size >= 32 * 1024)
    mdelay(1000);
  }

  printk("-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.");
  printk("-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.\n");

 } while (++loopcnt < num_pkts);

#if 0 /* debug */
 davinci_mcbsp_dump_reg(dev);
#endif
 return 0;
}

static void mcbsp_test_exit(void)
{
 davinci_mcbsp_free(device_id);
 if (tx_rx & 0x01)
  dma_free_coherent(NULL, buf_size, bufsrc, physsrc);

 if (tx_rx & 0x02)
  dma_free_coherent(NULL, buf_size , bufdest, physdest);

 printk("McBSP test done... exiting\n");
}
module_init(mcbsp_test_init);
module_exit(mcbsp_test_exit);

MODULE_AUTHOR("Texas Instruments");
MODULE_LICENSE("GPL");