Lines Matching +full:firmware +full:- +full:initialised
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * DSP firmware management
12 #include <linux/firmware.h>
54 return -EBUSY; in mixart_wait_nice_for_register_value()
89 static int mixart_load_elf(struct mixart_mgr *mgr, const struct firmware *dsp ) in mixart_load_elf()
95 elf_header = (struct snd_mixart_elf32_ehdr *)dsp->data; in mixart_load_elf()
97 if ( elf32_magic_number[i] != elf_header->e_ident[i] ) in mixart_load_elf()
98 return -EINVAL; in mixart_load_elf()
100 if( elf_header->e_phoff != 0 ) { in mixart_load_elf()
103 for( i=0; i < be16_to_cpu(elf_header->e_phnum); i++ ) { in mixart_load_elf()
104 u32 pos = be32_to_cpu(elf_header->e_phoff) + (u32)(i * be16_to_cpu(elf_header->e_phentsize)); in mixart_load_elf()
106 memcpy( &elf_programheader, dsp->data + pos, sizeof(elf_programheader) ); in mixart_load_elf()
111 dsp->data + be32_to_cpu( elf_programheader.p_offset ), in mixart_load_elf()
141 err = -ENOMEM; in mixart_enum_connectors()
145 audio_info_req->line_max_level = MIXART_FLOAT_P_22_0_TO_HEX; in mixart_enum_connectors()
146 audio_info_req->micro_max_level = MIXART_FLOAT_M_20_0_TO_HEX; in mixart_enum_connectors()
147 audio_info_req->cd_max_level = MIXART_FLOAT____0_0_TO_HEX; in mixart_enum_connectors()
155 if((err < 0) || (connector->error_code) || (connector->uid_count > MIXART_MAX_PHYS_CONNECTORS)) { in mixart_enum_connectors()
156 dev_err(&mgr->pci->dev, in mixart_enum_connectors()
158 err = -EINVAL; in mixart_enum_connectors()
162 for(k=0; k < connector->uid_count; k++) { in mixart_enum_connectors()
166 pipe = &mgr->chip[k/2]->pipe_out_ana; in mixart_enum_connectors()
168 pipe = &mgr->chip[(k-MIXART_FIRST_DIG_AUDIO_ID)/2]->pipe_out_dig; in mixart_enum_connectors()
171 pipe->uid_right_connector = connector->uid[k]; /* odd */ in mixart_enum_connectors()
173 pipe->uid_left_connector = connector->uid[k]; /* even */ in mixart_enum_connectors()
176 …/* dev_dbg(&mgr->pci->dev, "playback connector[%d].object_id = %x\n", k, connector->uid[k].object_… in mixart_enum_connectors()
180 request.uid = connector->uid[k]; in mixart_enum_connectors()
186 dev_err(&mgr->pci->dev, in mixart_enum_connectors()
190 …/*dev_dbg(&mgr->pci->dev, "play analog_info.analog_level_present = %x\n", audio_info->info.analog… in mixart_enum_connectors()
199 if((err < 0) || (connector->error_code) || (connector->uid_count > MIXART_MAX_PHYS_CONNECTORS)) { in mixart_enum_connectors()
200 dev_err(&mgr->pci->dev, in mixart_enum_connectors()
202 err = -EINVAL; in mixart_enum_connectors()
206 for(k=0; k < connector->uid_count; k++) { in mixart_enum_connectors()
210 pipe = &mgr->chip[k/2]->pipe_in_ana; in mixart_enum_connectors()
212 pipe = &mgr->chip[(k-MIXART_FIRST_DIG_AUDIO_ID)/2]->pipe_in_dig; in mixart_enum_connectors()
215 pipe->uid_right_connector = connector->uid[k]; /* odd */ in mixart_enum_connectors()
217 pipe->uid_left_connector = connector->uid[k]; /* even */ in mixart_enum_connectors()
220 …/* dev_dbg(&mgr->pci->dev, "capture connector[%d].object_id = %x\n", k, connector->uid[k].object_i… in mixart_enum_connectors()
224 request.uid = connector->uid[k]; in mixart_enum_connectors()
230 dev_err(&mgr->pci->dev, in mixart_enum_connectors()
234 …/*dev_dbg(&mgr->pci->dev, "rec analog_info.analog_level_present = %x\n", audio_info->info.analog_… in mixart_enum_connectors()
267 dev_dbg(&mgr->pci->dev, in mixart_enum_physio()
270 return -EINVAL; in mixart_enum_physio()
274 mgr->uid_console_manager = console_mgr.uid; in mixart_enum_physio()
283 dev_err(&mgr->pci->dev, in mixart_enum_physio()
286 return -EINVAL; in mixart_enum_physio()
291 return -EINVAL; in mixart_enum_physio()
293 for(k=0; k<mgr->num_cards; k++) { in mixart_enum_physio()
294 mgr->chip[k]->uid_in_analog_physio = phys_io.uid[k]; in mixart_enum_physio()
295 mgr->chip[k]->uid_out_analog_physio = phys_io.uid[phys_io.nb_uid/2 + k]; in mixart_enum_physio()
321 dev_err(&mgr->pci->dev, "error MSG_SYSTEM_SEND_SYNCHRO_CMD\n"); in mixart_first_init()
322 return err == 0 ? -EINVAL : err; in mixart_first_init()
329 /* firmware base addresses (when hard coded) */
332 static int mixart_dsp_load(struct mixart_mgr* mgr, int index, const struct firmware *dsp) in mixart_dsp_load()
347 dev_err(&mgr->pci->dev, "miXart is resetting !\n"); in mixart_dsp_load()
348 return -EAGAIN; /* try again later */ in mixart_dsp_load()
356 dev_dbg(&mgr->pci->dev, "xilinx is already loaded !\n"); in mixart_dsp_load()
361 dev_err(&mgr->pci->dev, in mixart_dsp_load()
364 return -EIO; /* modprob -r may help ? */ in mixart_dsp_load()
368 if (((u32*)(dsp->data))[0] == 0xffffffff) in mixart_dsp_load()
369 return -EINVAL; in mixart_dsp_load()
370 if (dsp->size % 4) in mixart_dsp_load()
371 return -EINVAL; in mixart_dsp_load()
379 writel_be( dsp->size, MIXART_MEM( mgr, MIXART_PSEUDOREG_MXLX_SIZE_OFFSET )); in mixart_dsp_load()
382 memcpy_toio( MIXART_MEM( mgr, MIXART_MOTHERBOARD_XLX_BASE_ADDRESS), dsp->data, dsp->size); in mixart_dsp_load()
393 dev_dbg(&mgr->pci->dev, "elf file already loaded !\n"); in mixart_dsp_load()
399 dev_err(&mgr->pci->dev, in mixart_dsp_load()
402 return -EIO; /* modprob -r may help ? */ in mixart_dsp_load()
408 dev_err(&mgr->pci->dev, "xilinx was not loaded or " in mixart_dsp_load()
430 dev_err(&mgr->pci->dev, "elf could not be started\n"); in mixart_dsp_load()
435 …writel_be( (u32)mgr->flowinfo.addr, MIXART_MEM( mgr, MIXART_FLOWTABLE_PTR ) ); /* give pointer of … in mixart_dsp_load()
444 dev_err(&mgr->pci->dev, "xilinx or elf not " in mixart_dsp_load()
446 return -EIO; /* modprob -r may help ? */ in mixart_dsp_load()
452 dev_err(&mgr->pci->dev, "error starting elf file\n"); in mixart_dsp_load()
457 …mgr->board_type = (DAUGHTER_TYPE_MASK & readl_be( MIXART_MEM( mgr, MIXART_PSEUDOREG_DBRD_TYPE_OFFS… in mixart_dsp_load()
459 if (mgr->board_type == MIXART_DAUGHTER_TYPE_NONE) in mixart_dsp_load()
463 if (mgr->board_type != MIXART_DAUGHTER_TYPE_AES ) in mixart_dsp_load()
464 return -EINVAL; in mixart_dsp_load()
468 dev_err(&mgr->pci->dev, in mixart_dsp_load()
471 return -EIO; /* modprob -r may help ? */ in mixart_dsp_load()
475 if (((u32*)(dsp->data))[0] == 0xffffffff) in mixart_dsp_load()
476 return -EINVAL; in mixart_dsp_load()
477 if (dsp->size % 4) in mixart_dsp_load()
478 return -EINVAL; in mixart_dsp_load()
481 writel_be( dsp->size, MIXART_MEM( mgr, MIXART_PSEUDOREG_DXLX_SIZE_OFFSET )); in mixart_dsp_load()
489 dev_err(&mgr->pci->dev, "daughter board load error\n"); in mixart_dsp_load()
496 return -EINVAL; in mixart_dsp_load()
499 memcpy_toio( MIXART_MEM( mgr, val), dsp->data, dsp->size); in mixart_dsp_load()
511 dev_err(&mgr->pci->dev, in mixart_dsp_load()
512 "daughter board could not be initialised\n"); in mixart_dsp_load()
522 dev_err(&mgr->pci->dev, "miXart could not be set up\n"); in mixart_dsp_load()
527 for (card_index = 0; card_index < mgr->num_cards; card_index++) { in mixart_dsp_load()
528 struct snd_mixart *chip = mgr->chip[card_index]; in mixart_dsp_load()
534 if ((err = snd_mixart_create_mixer(chip->mgr)) < 0) in mixart_dsp_load()
538 if ((err = snd_card_register(chip->card)) < 0) in mixart_dsp_load()
542 dev_dbg(&mgr->pci->dev, in mixart_dsp_load()
543 "miXart firmware downloaded and successfully set up\n"); in mixart_dsp_load()
556 const struct firmware *fw_entry; in snd_mixart_setup_firmware()
561 if (request_firmware(&fw_entry, path, &mgr->pci->dev)) { in snd_mixart_setup_firmware()
562 dev_err(&mgr->pci->dev, in snd_mixart_setup_firmware()
563 "miXart: can't load firmware %s\n", path); in snd_mixart_setup_firmware()
564 return -ENOENT; in snd_mixart_setup_firmware()
571 mgr->dsp_loaded |= 1 << i; in snd_mixart_setup_firmware()