azalia: Replace `hda_find_verb` uses
This function is equivalent to `azalia_find_verb` in its current form, so replace them. Also, adapt and move the function description comment. Change-Id: I40d1e634c31b00bd7808a651990d9bd6f0d054e9 Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/48351 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
d425ddd105
commit
d3f7028993
|
@ -85,6 +85,31 @@ no_codec:
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a specific entry within a verb table
|
||||
*
|
||||
* @param verb_table: verb table data
|
||||
* @param verb_table_bytes: verb table size in bytes
|
||||
* @param viddid: vendor/device to search for
|
||||
* @param verb: pointer to entry within table
|
||||
*
|
||||
* Returns size of the entry within the verb table,
|
||||
* Returns 0 if the entry is not found
|
||||
*
|
||||
* The HDA verb table is composed of dwords. A set of 4 dwords is
|
||||
* grouped together to form a "jack" descriptor.
|
||||
* Bits 31:28 - Codec Address
|
||||
* Bits 27:20 - NID
|
||||
* Bits 19:8 - Verb ID
|
||||
* Bits 7:0 - Payload
|
||||
*
|
||||
* coreboot groups different codec verb tables into a single table
|
||||
* and prefixes each with a specific header consisting of 3
|
||||
* dword entries:
|
||||
* 1 - Codec Vendor/Device ID
|
||||
* 2 - Subsystem ID
|
||||
* 3 - Number of jacks (groups of 4 dwords) for this codec
|
||||
*/
|
||||
u32 azalia_find_verb(const u32 *verb_table, u32 verb_table_bytes, u32 viddid, const u32 **verb)
|
||||
{
|
||||
int idx = 0;
|
||||
|
|
|
@ -91,51 +91,6 @@ static int hda_wait_for_valid(u8 *base)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a specific entry within a verb table
|
||||
*
|
||||
* @param verb_table_bytes: verb table size in bytes
|
||||
* @param verb_table_data: verb table data
|
||||
* @param viddid: vendor/device to search for
|
||||
* @param verb: pointer to entry within table
|
||||
*
|
||||
* Returns size of the entry within the verb table,
|
||||
* Returns 0 if the entry is not found
|
||||
*
|
||||
* The HDA verb table is composed of dwords. A set of 4 dwords is
|
||||
* grouped together to form a "jack" descriptor.
|
||||
* Bits 31:28 - Codec Address
|
||||
* Bits 27:20 - NID
|
||||
* Bits 19:8 - Verb ID
|
||||
* Bits 7:0 - Payload
|
||||
*
|
||||
* coreboot groups different codec verb tables into a single table
|
||||
* and prefixes each with a specific header consisting of 3
|
||||
* dword entries:
|
||||
* 1 - Codec Vendor/Device ID
|
||||
* 2 - Subsystem ID
|
||||
* 3 - Number of jacks (groups of 4 dwords) for this codec
|
||||
*/
|
||||
static u32 hda_find_verb(u32 verb_table_bytes,
|
||||
const u32 *verb_table_data,
|
||||
u32 viddid, const u32 **verb)
|
||||
{
|
||||
int idx = 0;
|
||||
|
||||
while (idx < (verb_table_bytes / sizeof(u32))) {
|
||||
u32 verb_size = 4 * verb_table_data[idx+2]; // in u32
|
||||
if (verb_table_data[idx] != viddid) {
|
||||
idx += verb_size + 3; // skip verb + header
|
||||
continue;
|
||||
}
|
||||
*verb = &verb_table_data[idx+3];
|
||||
return verb_size;
|
||||
}
|
||||
|
||||
/* Not all codecs need to load another verb */
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hda_codec_write(u8 *base, u32 size, const u32 *data)
|
||||
{
|
||||
int i;
|
||||
|
@ -184,7 +139,7 @@ int hda_codec_init(u8 *base, int addr, int verb_size, const u32 *verb_data)
|
|||
reg32 = read32(base + HDA_IR_REG);
|
||||
printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
|
||||
|
||||
size = hda_find_verb(verb_size, verb_data, reg32, &verb);
|
||||
size = azalia_find_verb(verb_data, verb_size, reg32, &verb);
|
||||
if (!size) {
|
||||
printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
|
||||
return -1;
|
||||
|
|
|
@ -79,51 +79,6 @@ static int hda_wait_for_valid(u8 *base)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a specific entry within a verb table
|
||||
*
|
||||
* @param verb_table_bytes: verb table size in bytes
|
||||
* @param verb_table_data: verb table data
|
||||
* @param viddid: vendor/device to search for
|
||||
* @param **verb: pointer to entry within table
|
||||
*
|
||||
* Returns size of the entry within the verb table,
|
||||
* Returns 0 if the entry is not found
|
||||
*
|
||||
* The HDA verb table is composed of dwords. A set of 4 dwords is
|
||||
* grouped together to form a "jack" descriptor.
|
||||
* Bits 31:28 - Codec Address
|
||||
* Bits 27:20 - NID
|
||||
* Bits 19:8 - Verb ID
|
||||
* Bits 7:0 - Payload
|
||||
*
|
||||
* coreboot groups different codec verb tables into a single table
|
||||
* and prefixes each with a specific header consisting of 3
|
||||
* dword entries:
|
||||
* 1 - Codec Vendor/Device ID
|
||||
* 2 - Subsystem ID
|
||||
* 3 - Number of jacks (groups of 4 dwords) for this codec
|
||||
*/
|
||||
static u32 hda_find_verb(u32 verb_table_bytes,
|
||||
const u32 *verb_table_data,
|
||||
u32 viddid, const u32 **verb)
|
||||
{
|
||||
int idx = 0;
|
||||
|
||||
while (idx < (verb_table_bytes / sizeof(u32))) {
|
||||
u32 verb_size = 4 * verb_table_data[idx+2]; // in u32
|
||||
if (verb_table_data[idx] != viddid) {
|
||||
idx += verb_size + 3; // skip verb + header
|
||||
continue;
|
||||
}
|
||||
*verb = &verb_table_data[idx+3];
|
||||
return verb_size;
|
||||
}
|
||||
|
||||
/* Not all codecs need to load another verb */
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hda_codec_write(u8 *base, u32 size, const u32 *data)
|
||||
{
|
||||
int i;
|
||||
|
@ -172,7 +127,7 @@ int hda_codec_init(u8 *base, int addr, int verb_size, const u32 *verb_data)
|
|||
reg32 = read32(base + HDA_IR_REG);
|
||||
printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
|
||||
|
||||
size = hda_find_verb(verb_size, verb_data, reg32, &verb);
|
||||
size = azalia_find_verb(verb_data, verb_size, reg32, &verb);
|
||||
if (!size) {
|
||||
printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue