@@ -86,69 +86,6 @@ static int get_cc_info(struct snd_sof_dev *sdev,
8686 return 0 ;
8787}
8888
89- /* parse the extended FW boot data structures from FW boot message */
90- static int snd_sof_fw_parse_ext_data (struct snd_sof_dev * sdev , u32 offset )
91- {
92- struct sof_ipc_ext_data_hdr * ext_hdr ;
93- void * ext_data ;
94- int ret = 0 ;
95-
96- ext_data = kzalloc (PAGE_SIZE , GFP_KERNEL );
97- if (!ext_data )
98- return - ENOMEM ;
99-
100- /* get first header */
101- snd_sof_dsp_block_read (sdev , SOF_FW_BLK_TYPE_SRAM , offset , ext_data ,
102- sizeof (* ext_hdr ));
103- ext_hdr = ext_data ;
104-
105- while (ext_hdr -> hdr .cmd == SOF_IPC_FW_READY ) {
106- /* read in ext structure */
107- snd_sof_dsp_block_read (sdev , SOF_FW_BLK_TYPE_SRAM ,
108- offset + sizeof (* ext_hdr ),
109- (void * )((u8 * )ext_data + sizeof (* ext_hdr )),
110- ext_hdr -> hdr .size - sizeof (* ext_hdr ));
111-
112- dev_dbg (sdev -> dev , "found ext header type %d size 0x%x\n" ,
113- ext_hdr -> type , ext_hdr -> hdr .size );
114-
115- /* process structure data */
116- switch (ext_hdr -> type ) {
117- case SOF_IPC_EXT_WINDOW :
118- ret = get_ext_windows (sdev , ext_hdr );
119- break ;
120- case SOF_IPC_EXT_CC_INFO :
121- ret = get_cc_info (sdev , ext_hdr );
122- break ;
123- case SOF_IPC_EXT_UNUSED :
124- case SOF_IPC_EXT_PROBE_INFO :
125- case SOF_IPC_EXT_USER_ABI_INFO :
126- /* They are supported but we don't do anything here */
127- break ;
128- default :
129- dev_info (sdev -> dev , "unknown ext header type %d size 0x%x\n" ,
130- ext_hdr -> type , ext_hdr -> hdr .size );
131- ret = 0 ;
132- break ;
133- }
134-
135- if (ret < 0 ) {
136- dev_err (sdev -> dev , "error: failed to parse ext data type %d\n" ,
137- ext_hdr -> type );
138- break ;
139- }
140-
141- /* move to next header */
142- offset += ext_hdr -> hdr .size ;
143- snd_sof_dsp_block_read (sdev , SOF_FW_BLK_TYPE_SRAM , offset , ext_data ,
144- sizeof (* ext_hdr ));
145- ext_hdr = ext_data ;
146- }
147-
148- kfree (ext_data );
149- return ret ;
150- }
151-
15289static int ext_man_get_fw_version (struct snd_sof_dev * sdev ,
15390 const struct sof_ext_man_elem_header * hdr )
15491{
@@ -358,170 +295,6 @@ static int snd_sof_fw_ext_man_parse(struct snd_sof_dev *sdev,
358295 return ext_man_size ;
359296}
360297
361- /*
362- * IPC Firmware ready.
363- */
364- static void sof_get_windows (struct snd_sof_dev * sdev )
365- {
366- struct sof_ipc_window_elem * elem ;
367- u32 outbox_offset = 0 ;
368- u32 stream_offset = 0 ;
369- u32 inbox_offset = 0 ;
370- u32 outbox_size = 0 ;
371- u32 stream_size = 0 ;
372- u32 inbox_size = 0 ;
373- u32 debug_size = 0 ;
374- u32 debug_offset = 0 ;
375- int window_offset ;
376- int i ;
377-
378- if (!sdev -> info_window ) {
379- dev_err (sdev -> dev , "error: have no window info\n" );
380- return ;
381- }
382-
383- for (i = 0 ; i < sdev -> info_window -> num_windows ; i ++ ) {
384- elem = & sdev -> info_window -> window [i ];
385-
386- window_offset = snd_sof_dsp_get_window_offset (sdev , elem -> id );
387- if (window_offset < 0 ) {
388- dev_warn (sdev -> dev , "warn: no offset for window %d\n" ,
389- elem -> id );
390- continue ;
391- }
392-
393- switch (elem -> type ) {
394- case SOF_IPC_REGION_UPBOX :
395- inbox_offset = window_offset + elem -> offset ;
396- inbox_size = elem -> size ;
397- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
398- inbox_offset ,
399- elem -> size , "inbox" ,
400- SOF_DEBUGFS_ACCESS_D0_ONLY );
401- break ;
402- case SOF_IPC_REGION_DOWNBOX :
403- outbox_offset = window_offset + elem -> offset ;
404- outbox_size = elem -> size ;
405- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
406- outbox_offset ,
407- elem -> size , "outbox" ,
408- SOF_DEBUGFS_ACCESS_D0_ONLY );
409- break ;
410- case SOF_IPC_REGION_TRACE :
411- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
412- window_offset + elem -> offset ,
413- elem -> size , "etrace" ,
414- SOF_DEBUGFS_ACCESS_D0_ONLY );
415- break ;
416- case SOF_IPC_REGION_DEBUG :
417- debug_offset = window_offset + elem -> offset ;
418- debug_size = elem -> size ;
419- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
420- window_offset + elem -> offset ,
421- elem -> size , "debug" ,
422- SOF_DEBUGFS_ACCESS_D0_ONLY );
423- break ;
424- case SOF_IPC_REGION_STREAM :
425- stream_offset = window_offset + elem -> offset ;
426- stream_size = elem -> size ;
427- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
428- stream_offset ,
429- elem -> size , "stream" ,
430- SOF_DEBUGFS_ACCESS_D0_ONLY );
431- break ;
432- case SOF_IPC_REGION_REGS :
433- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
434- window_offset + elem -> offset ,
435- elem -> size , "regs" ,
436- SOF_DEBUGFS_ACCESS_D0_ONLY );
437- break ;
438- case SOF_IPC_REGION_EXCEPTION :
439- sdev -> dsp_oops_offset = window_offset + elem -> offset ;
440- snd_sof_debugfs_add_region_item (sdev , SOF_FW_BLK_TYPE_SRAM ,
441- window_offset + elem -> offset ,
442- elem -> size , "exception" ,
443- SOF_DEBUGFS_ACCESS_D0_ONLY );
444- break ;
445- default :
446- dev_err (sdev -> dev , "error: get illegal window info\n" );
447- return ;
448- }
449- }
450-
451- if (outbox_size == 0 || inbox_size == 0 ) {
452- dev_err (sdev -> dev , "error: get illegal mailbox window\n" );
453- return ;
454- }
455-
456- sdev -> dsp_box .offset = inbox_offset ;
457- sdev -> dsp_box .size = inbox_size ;
458-
459- sdev -> host_box .offset = outbox_offset ;
460- sdev -> host_box .size = outbox_size ;
461-
462- sdev -> stream_box .offset = stream_offset ;
463- sdev -> stream_box .size = stream_size ;
464-
465- sdev -> debug_box .offset = debug_offset ;
466- sdev -> debug_box .size = debug_size ;
467-
468- dev_dbg (sdev -> dev , " mailbox upstream 0x%x - size 0x%x\n" ,
469- inbox_offset , inbox_size );
470- dev_dbg (sdev -> dev , " mailbox downstream 0x%x - size 0x%x\n" ,
471- outbox_offset , outbox_size );
472- dev_dbg (sdev -> dev , " stream region 0x%x - size 0x%x\n" ,
473- stream_offset , stream_size );
474- dev_dbg (sdev -> dev , " debug region 0x%x - size 0x%x\n" ,
475- debug_offset , debug_size );
476- }
477-
478- /* check for ABI compatibility and create memory windows on first boot */
479- int sof_fw_ready (struct snd_sof_dev * sdev , u32 msg_id )
480- {
481- struct sof_ipc_fw_ready * fw_ready = & sdev -> fw_ready ;
482- int offset ;
483- int ret ;
484-
485- /* mailbox must be on 4k boundary */
486- offset = snd_sof_dsp_get_mailbox_offset (sdev );
487- if (offset < 0 ) {
488- dev_err (sdev -> dev , "error: have no mailbox offset\n" );
489- return offset ;
490- }
491-
492- dev_dbg (sdev -> dev , "ipc: DSP is ready 0x%8.8x offset 0x%x\n" ,
493- msg_id , offset );
494-
495- /* no need to re-check version/ABI for subsequent boots */
496- if (!sdev -> first_boot )
497- return 0 ;
498-
499- /*
500- * copy data from the DSP FW ready offset
501- * Subsequent error handling is not needed for BLK_TYPE_SRAM
502- */
503- ret = snd_sof_dsp_block_read (sdev , SOF_FW_BLK_TYPE_SRAM , offset , fw_ready ,
504- sizeof (* fw_ready ));
505- if (ret ) {
506- dev_err (sdev -> dev ,
507- "error: unable to read fw_ready, read from TYPE_SRAM failed\n" );
508- return ret ;
509- }
510-
511- /* make sure ABI version is compatible */
512- ret = snd_sof_ipc_valid (sdev );
513- if (ret < 0 )
514- return ret ;
515-
516- /* now check for extended data */
517- snd_sof_fw_parse_ext_data (sdev , offset + sizeof (struct sof_ipc_fw_ready ));
518-
519- sof_get_windows (sdev );
520-
521- return sof_ipc_init_msg_memory (sdev );
522- }
523- EXPORT_SYMBOL (sof_fw_ready );
524-
525298/* generic module parser for mmaped DSPs */
526299int snd_sof_parse_module_memcpy (struct snd_sof_dev * sdev ,
527300 struct snd_sof_mod_hdr * module )
0 commit comments