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;
|
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)
|
u32 azalia_find_verb(const u32 *verb_table, u32 verb_table_bytes, u32 viddid, const u32 **verb)
|
||||||
{
|
{
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
|
@ -91,51 +91,6 @@ static int hda_wait_for_valid(u8 *base)
|
||||||
return -1;
|
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 hda_codec_write(u8 *base, u32 size, const u32 *data)
|
||||||
{
|
{
|
||||||
int i;
|
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);
|
reg32 = read32(base + HDA_IR_REG);
|
||||||
printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
|
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) {
|
if (!size) {
|
||||||
printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
|
printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -79,51 +79,6 @@ static int hda_wait_for_valid(u8 *base)
|
||||||
return -1;
|
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 hda_codec_write(u8 *base, u32 size, const u32 *data)
|
||||||
{
|
{
|
||||||
int i;
|
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);
|
reg32 = read32(base + HDA_IR_REG);
|
||||||
printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
|
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) {
|
if (!size) {
|
||||||
printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
|
printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue