21
21
#include <sound/soc.h>
22
22
#include <sound/tlv.h>
23
23
#include <sound/tas2781.h>
24
-
24
+ #include <asm/unaligned.h>
25
25
26
26
#define ERROR_PRAM_CRCCHK 0x0000000
27
27
#define ERROR_YRAM_CRCCHK 0x0000001
@@ -187,8 +187,7 @@ static struct tasdevice_config_info *tasdevice_add_config(
187
187
/* convert data[offset], data[offset + 1], data[offset + 2] and
188
188
* data[offset + 3] into host
189
189
*/
190
- cfg_info -> nblocks =
191
- be32_to_cpup ((__be32 * )& config_data [config_offset ]);
190
+ cfg_info -> nblocks = get_unaligned_be32 (& config_data [config_offset ]);
192
191
config_offset += 4 ;
193
192
194
193
/* Several kinds of dsp/algorithm firmwares can run on tas2781,
@@ -232,14 +231,14 @@ static struct tasdevice_config_info *tasdevice_add_config(
232
231
233
232
}
234
233
bk_da [i ]-> yram_checksum =
235
- be16_to_cpup (( __be16 * ) & config_data [config_offset ]);
234
+ get_unaligned_be16 ( & config_data [config_offset ]);
236
235
config_offset += 2 ;
237
236
bk_da [i ]-> block_size =
238
- be32_to_cpup (( __be32 * ) & config_data [config_offset ]);
237
+ get_unaligned_be32 ( & config_data [config_offset ]);
239
238
config_offset += 4 ;
240
239
241
240
bk_da [i ]-> n_subblks =
242
- be32_to_cpup (( __be32 * ) & config_data [config_offset ]);
241
+ get_unaligned_be32 ( & config_data [config_offset ]);
243
242
244
243
config_offset += 4 ;
245
244
@@ -289,7 +288,7 @@ int tasdevice_rca_parser(void *context, const struct firmware *fmw)
289
288
}
290
289
buf = (unsigned char * )fmw -> data ;
291
290
292
- fw_hdr -> img_sz = be32_to_cpup (( __be32 * ) & buf [offset ]);
291
+ fw_hdr -> img_sz = get_unaligned_be32 ( & buf [offset ]);
293
292
offset += 4 ;
294
293
if (fw_hdr -> img_sz != fmw -> size ) {
295
294
dev_err (tas_priv -> dev ,
@@ -300,9 +299,9 @@ int tasdevice_rca_parser(void *context, const struct firmware *fmw)
300
299
goto out ;
301
300
}
302
301
303
- fw_hdr -> checksum = be32_to_cpup (( __be32 * ) & buf [offset ]);
302
+ fw_hdr -> checksum = get_unaligned_be32 ( & buf [offset ]);
304
303
offset += 4 ;
305
- fw_hdr -> binary_version_num = be32_to_cpup (( __be32 * ) & buf [offset ]);
304
+ fw_hdr -> binary_version_num = get_unaligned_be32 ( & buf [offset ]);
306
305
if (fw_hdr -> binary_version_num < 0x103 ) {
307
306
dev_err (tas_priv -> dev , "File version 0x%04x is too low" ,
308
307
fw_hdr -> binary_version_num );
@@ -311,7 +310,7 @@ int tasdevice_rca_parser(void *context, const struct firmware *fmw)
311
310
goto out ;
312
311
}
313
312
offset += 4 ;
314
- fw_hdr -> drv_fw_version = be32_to_cpup (( __be32 * ) & buf [offset ]);
313
+ fw_hdr -> drv_fw_version = get_unaligned_be32 ( & buf [offset ]);
315
314
offset += 8 ;
316
315
fw_hdr -> plat_type = buf [offset ];
317
316
offset += 1 ;
@@ -339,11 +338,11 @@ int tasdevice_rca_parser(void *context, const struct firmware *fmw)
339
338
for (i = 0 ; i < TASDEVICE_DEVICE_SUM ; i ++ , offset ++ )
340
339
fw_hdr -> devs [i ] = buf [offset ];
341
340
342
- fw_hdr -> nconfig = be32_to_cpup (( __be32 * ) & buf [offset ]);
341
+ fw_hdr -> nconfig = get_unaligned_be32 ( & buf [offset ]);
343
342
offset += 4 ;
344
343
345
344
for (i = 0 ; i < TASDEVICE_CONFIG_SUM ; i ++ ) {
346
- fw_hdr -> config_size [i ] = be32_to_cpup (( __be32 * ) & buf [offset ]);
345
+ fw_hdr -> config_size [i ] = get_unaligned_be32 ( & buf [offset ]);
347
346
offset += 4 ;
348
347
total_config_sz += fw_hdr -> config_size [i ];
349
348
}
@@ -423,7 +422,7 @@ static int fw_parse_block_data_kernel(struct tasdevice_fw *tas_fmw,
423
422
/* convert data[offset], data[offset + 1], data[offset + 2] and
424
423
* data[offset + 3] into host
425
424
*/
426
- block -> type = be32_to_cpup (( __be32 * ) & data [offset ]);
425
+ block -> type = get_unaligned_be32 ( & data [offset ]);
427
426
offset += 4 ;
428
427
429
428
block -> is_pchksum_present = data [offset ];
@@ -438,10 +437,10 @@ static int fw_parse_block_data_kernel(struct tasdevice_fw *tas_fmw,
438
437
block -> ychksum = data [offset ];
439
438
offset ++ ;
440
439
441
- block -> blk_size = be32_to_cpup (( __be32 * ) & data [offset ]);
440
+ block -> blk_size = get_unaligned_be32 ( & data [offset ]);
442
441
offset += 4 ;
443
442
444
- block -> nr_subblocks = be32_to_cpup (( __be32 * ) & data [offset ]);
443
+ block -> nr_subblocks = get_unaligned_be32 ( & data [offset ]);
445
444
offset += 4 ;
446
445
447
446
/* fixed m68k compiling issue:
@@ -482,7 +481,7 @@ static int fw_parse_data_kernel(struct tasdevice_fw *tas_fmw,
482
481
offset = - EINVAL ;
483
482
goto out ;
484
483
}
485
- img_data -> nr_blk = be32_to_cpup (( __be32 * ) & data [offset ]);
484
+ img_data -> nr_blk = get_unaligned_be32 ( & data [offset ]);
486
485
offset += 4 ;
487
486
488
487
img_data -> dev_blks = kcalloc (img_data -> nr_blk ,
@@ -578,14 +577,14 @@ static int fw_parse_variable_header_kernel(
578
577
offset = - EINVAL ;
579
578
goto out ;
580
579
}
581
- fw_hdr -> device_family = be16_to_cpup (( __be16 * ) & buf [offset ]);
580
+ fw_hdr -> device_family = get_unaligned_be16 ( & buf [offset ]);
582
581
if (fw_hdr -> device_family != 0 ) {
583
582
dev_err (tas_priv -> dev , "%s:not TAS device\n" , __func__ );
584
583
offset = - EINVAL ;
585
584
goto out ;
586
585
}
587
586
offset += 2 ;
588
- fw_hdr -> device = be16_to_cpup (( __be16 * ) & buf [offset ]);
587
+ fw_hdr -> device = get_unaligned_be16 ( & buf [offset ]);
589
588
if (fw_hdr -> device >= TASDEVICE_DSP_TAS_MAX_DEVICE ||
590
589
fw_hdr -> device == 6 ) {
591
590
dev_err (tas_priv -> dev , "Unsupported dev %d\n" , fw_hdr -> device );
@@ -603,7 +602,7 @@ static int fw_parse_variable_header_kernel(
603
602
goto out ;
604
603
}
605
604
606
- tas_fmw -> nr_programs = be32_to_cpup (( __be32 * ) & buf [offset ]);
605
+ tas_fmw -> nr_programs = get_unaligned_be32 ( & buf [offset ]);
607
606
offset += 4 ;
608
607
609
608
if (tas_fmw -> nr_programs == 0 || tas_fmw -> nr_programs >
@@ -622,14 +621,14 @@ static int fw_parse_variable_header_kernel(
622
621
623
622
for (i = 0 ; i < tas_fmw -> nr_programs ; i ++ ) {
624
623
program = & (tas_fmw -> programs [i ]);
625
- program -> prog_size = be32_to_cpup (( __be32 * ) & buf [offset ]);
624
+ program -> prog_size = get_unaligned_be32 ( & buf [offset ]);
626
625
offset += 4 ;
627
626
}
628
627
629
628
/* Skip the unused prog_size */
630
629
offset += 4 * (TASDEVICE_MAXPROGRAM_NUM_KERNEL - tas_fmw -> nr_programs );
631
630
632
- tas_fmw -> nr_configurations = be32_to_cpup (( __be32 * ) & buf [offset ]);
631
+ tas_fmw -> nr_configurations = get_unaligned_be32 ( & buf [offset ]);
633
632
offset += 4 ;
634
633
635
634
/* The max number of config in firmware greater than 4 pieces of
@@ -661,7 +660,7 @@ static int fw_parse_variable_header_kernel(
661
660
662
661
for (i = 0 ; i < tas_fmw -> nr_programs ; i ++ ) {
663
662
config = & (tas_fmw -> configs [i ]);
664
- config -> cfg_size = be32_to_cpup (( __be32 * ) & buf [offset ]);
663
+ config -> cfg_size = get_unaligned_be32 ( & buf [offset ]);
665
664
offset += 4 ;
666
665
}
667
666
@@ -699,7 +698,7 @@ static int tasdevice_process_block(void *context, unsigned char *data,
699
698
switch (subblk_typ ) {
700
699
case TASDEVICE_CMD_SING_W : {
701
700
int i ;
702
- unsigned short len = be16_to_cpup (( __be16 * ) & data [2 ]);
701
+ unsigned short len = get_unaligned_be16 ( & data [2 ]);
703
702
704
703
subblk_offset += 2 ;
705
704
if (subblk_offset + 4 * len > sublocksize ) {
@@ -725,7 +724,7 @@ static int tasdevice_process_block(void *context, unsigned char *data,
725
724
}
726
725
break ;
727
726
case TASDEVICE_CMD_BURST : {
728
- unsigned short len = be16_to_cpup (( __be16 * ) & data [2 ]);
727
+ unsigned short len = get_unaligned_be16 ( & data [2 ]);
729
728
730
729
subblk_offset += 2 ;
731
730
if (subblk_offset + 4 + len > sublocksize ) {
@@ -766,7 +765,7 @@ static int tasdevice_process_block(void *context, unsigned char *data,
766
765
is_err = true;
767
766
break ;
768
767
}
769
- sleep_time = be16_to_cpup (( __be16 * ) & data [2 ]) * 1000 ;
768
+ sleep_time = get_unaligned_be16 ( & data [2 ]) * 1000 ;
770
769
usleep_range (sleep_time , sleep_time + 50 );
771
770
subblk_offset += 2 ;
772
771
}
@@ -910,15 +909,15 @@ static int fw_parse_variable_hdr(struct tasdevice_priv
910
909
911
910
offset += len ;
912
911
913
- fw_hdr -> device_family = be32_to_cpup (( __be32 * ) & buf [offset ]);
912
+ fw_hdr -> device_family = get_unaligned_be32 ( & buf [offset ]);
914
913
if (fw_hdr -> device_family != 0 ) {
915
914
dev_err (tas_priv -> dev , "%s: not TAS device\n" , __func__ );
916
915
offset = - EINVAL ;
917
916
goto out ;
918
917
}
919
918
offset += 4 ;
920
919
921
- fw_hdr -> device = be32_to_cpup (( __be32 * ) & buf [offset ]);
920
+ fw_hdr -> device = get_unaligned_be32 ( & buf [offset ]);
922
921
if (fw_hdr -> device >= TASDEVICE_DSP_TAS_MAX_DEVICE ||
923
922
fw_hdr -> device == 6 ) {
924
923
dev_err (tas_priv -> dev , "Unsupported dev %d\n" , fw_hdr -> device );
@@ -963,7 +962,7 @@ static int fw_parse_block_data(struct tasdevice_fw *tas_fmw,
963
962
offset = - EINVAL ;
964
963
goto out ;
965
964
}
966
- block -> type = be32_to_cpup (( __be32 * ) & data [offset ]);
965
+ block -> type = get_unaligned_be32 ( & data [offset ]);
967
966
offset += 4 ;
968
967
969
968
if (tas_fmw -> fw_hdr .fixed_hdr .drv_ver >= PPC_DRIVER_CRCCHK ) {
@@ -988,7 +987,7 @@ static int fw_parse_block_data(struct tasdevice_fw *tas_fmw,
988
987
block -> is_ychksum_present = 0 ;
989
988
}
990
989
991
- block -> nr_cmds = be32_to_cpup (( __be32 * ) & data [offset ]);
990
+ block -> nr_cmds = get_unaligned_be32 ( & data [offset ]);
992
991
offset += 4 ;
993
992
994
993
n = block -> nr_cmds * 4 ;
@@ -1039,7 +1038,7 @@ static int fw_parse_data(struct tasdevice_fw *tas_fmw,
1039
1038
goto out ;
1040
1039
}
1041
1040
offset += n ;
1042
- img_data -> nr_blk = be16_to_cpup (( __be16 * ) & data [offset ]);
1041
+ img_data -> nr_blk = get_unaligned_be16 ( & data [offset ]);
1043
1042
offset += 2 ;
1044
1043
1045
1044
img_data -> dev_blks = kcalloc (img_data -> nr_blk ,
@@ -1076,7 +1075,7 @@ static int fw_parse_program_data(struct tasdevice_priv *tas_priv,
1076
1075
offset = - EINVAL ;
1077
1076
goto out ;
1078
1077
}
1079
- tas_fmw -> nr_programs = be16_to_cpup (( __be16 * ) & buf [offset ]);
1078
+ tas_fmw -> nr_programs = get_unaligned_be16 ( & buf [offset ]);
1080
1079
offset += 2 ;
1081
1080
1082
1081
if (tas_fmw -> nr_programs == 0 ) {
@@ -1143,7 +1142,7 @@ static int fw_parse_configuration_data(
1143
1142
offset = - EINVAL ;
1144
1143
goto out ;
1145
1144
}
1146
- tas_fmw -> nr_configurations = be16_to_cpup (( __be16 * ) & data [offset ]);
1145
+ tas_fmw -> nr_configurations = get_unaligned_be16 ( & data [offset ]);
1147
1146
offset += 2 ;
1148
1147
1149
1148
if (tas_fmw -> nr_configurations == 0 ) {
@@ -1775,7 +1774,7 @@ static int fw_parse_header(struct tasdevice_priv *tas_priv,
1775
1774
/* Convert data[offset], data[offset + 1], data[offset + 2] and
1776
1775
* data[offset + 3] into host
1777
1776
*/
1778
- fw_fixed_hdr -> fwsize = be32_to_cpup (( __be32 * ) & buf [offset ]);
1777
+ fw_fixed_hdr -> fwsize = get_unaligned_be32 ( & buf [offset ]);
1779
1778
offset += 4 ;
1780
1779
if (fw_fixed_hdr -> fwsize != fmw -> size ) {
1781
1780
dev_err (tas_priv -> dev , "File size not match, %lu %u" ,
@@ -1784,9 +1783,9 @@ static int fw_parse_header(struct tasdevice_priv *tas_priv,
1784
1783
goto out ;
1785
1784
}
1786
1785
offset += 4 ;
1787
- fw_fixed_hdr -> ppcver = be32_to_cpup (( __be32 * ) & buf [offset ]);
1786
+ fw_fixed_hdr -> ppcver = get_unaligned_be32 ( & buf [offset ]);
1788
1787
offset += 8 ;
1789
- fw_fixed_hdr -> drv_ver = be32_to_cpup (( __be32 * ) & buf [offset ]);
1788
+ fw_fixed_hdr -> drv_ver = get_unaligned_be32 ( & buf [offset ]);
1790
1789
offset += 72 ;
1791
1790
1792
1791
out :
@@ -1828,7 +1827,7 @@ static int fw_parse_calibration_data(struct tasdevice_priv *tas_priv,
1828
1827
offset = - EINVAL ;
1829
1828
goto out ;
1830
1829
}
1831
- tas_fmw -> nr_calibrations = be16_to_cpup (( __be16 * ) & data [offset ]);
1830
+ tas_fmw -> nr_calibrations = get_unaligned_be16 ( & data [offset ]);
1832
1831
offset += 2 ;
1833
1832
1834
1833
if (tas_fmw -> nr_calibrations != 1 ) {
0 commit comments