sar: Fix semantics of `get_wifi_sar_cbfs_filename()`
Currently, if `get_wifi_sar_cbfs_filename()` returns NULL, then `get_wifi_sar_limits()` assumes that the default filename is used for CBFS SAR file. This prevents a board from supporting different models using the same firmware -- some which require SAR support and some which don't. This change updates the logic in `get_wifi_sar_limits()` to return early if filename is not provided by the mainboard. In order to maintain the same logic as before, current mainboards are updated to return WIFI_SAR_CBFS_DEFAULT_FILENAME instead of NULL in default case. Change-Id: I68b5bdd213767a3cd81fe41ace66540acd68e26a Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/51485 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
31f6320afe
commit
7fe5d3d382
|
@ -41,6 +41,8 @@ struct wifi_sar_limits {
|
||||||
*/
|
*/
|
||||||
int get_wifi_sar_limits(struct wifi_sar_limits *sar_limits);
|
int get_wifi_sar_limits(struct wifi_sar_limits *sar_limits);
|
||||||
|
|
||||||
|
#define WIFI_SAR_CBFS_DEFAULT_FILENAME "wifi_sar_defaults.hex"
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void);
|
const char *get_wifi_sar_cbfs_filename(void);
|
||||||
|
|
||||||
#endif /* _SAR_H_ */
|
#endif /* _SAR_H_ */
|
||||||
|
|
|
@ -6,12 +6,10 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
|
|
||||||
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
||||||
filename = "wifi_sar-drawcia.hex";
|
return "wifi_sar-drawcia.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *mainboard_vbt_filename(void)
|
const char *mainboard_vbt_filename(void)
|
||||||
|
|
|
@ -5,9 +5,7 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
|
|
||||||
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
||||||
filename = "wifi_sar-galtic.hex";
|
return "wifi_sar-galtic.hex";
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,8 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
|
|
||||||
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
||||||
filename = "wifi_sar-madoo.hex";
|
return "wifi_sar-madoo.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,8 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
|
|
||||||
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
if (fw_config_probe(FW_CONFIG(TABLETMODE, TABLETMODE_ENABLED)))
|
||||||
filename = "wifi_sar-magolor.hex";
|
return "wifi_sar-magolor.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = google_chromeec_get_board_sku();
|
uint32_t sku_id = google_chromeec_get_board_sku();
|
||||||
|
|
||||||
switch (sku_id) {
|
switch (sku_id) {
|
||||||
|
@ -15,8 +14,7 @@ const char *get_wifi_sar_cbfs_filename(void)
|
||||||
case SKU_22_DRAGONAIR:
|
case SKU_22_DRAGONAIR:
|
||||||
case SKU_23_DRAGONAIR:
|
case SKU_23_DRAGONAIR:
|
||||||
case SKU_24_DRAGONAIR:
|
case SKU_24_DRAGONAIR:
|
||||||
filename = "wifi_sar-dragonair.hex";
|
return "wifi_sar-dragonair.hex";
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,12 +39,11 @@ void variant_devtree_update(void)
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = google_chromeec_get_board_sku();
|
uint32_t sku_id = google_chromeec_get_board_sku();
|
||||||
|
|
||||||
if (sku_id == 1 || sku_id == 2 || sku_id == 3 || sku_id == 4)
|
if (sku_id == 1 || sku_id == 2 || sku_id == 3 || sku_id == 4)
|
||||||
filename = "wifi_sar-kled.hex";
|
return "wifi_sar-kled.hex";
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *mainboard_vbt_filename(void)
|
const char *mainboard_vbt_filename(void)
|
||||||
|
|
|
@ -28,7 +28,6 @@ enum {
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = google_chromeec_get_board_sku();
|
uint32_t sku_id = google_chromeec_get_board_sku();
|
||||||
|
|
||||||
switch (sku_id) {
|
switch (sku_id) {
|
||||||
|
@ -36,18 +35,16 @@ const char *get_wifi_sar_cbfs_filename(void)
|
||||||
case SKU_34_BLOOG:
|
case SKU_34_BLOOG:
|
||||||
case SKU_35_BLOOG:
|
case SKU_35_BLOOG:
|
||||||
case SKU_36_BLOOG:
|
case SKU_36_BLOOG:
|
||||||
filename = "wifi_sar-bloog.hex";
|
return "wifi_sar-bloog.hex";
|
||||||
break;
|
|
||||||
case SKU_49_BLOOGUARD:
|
case SKU_49_BLOOGUARD:
|
||||||
case SKU_50_BLOOGUARD:
|
case SKU_50_BLOOGUARD:
|
||||||
case SKU_51_BLOOGUARD:
|
case SKU_51_BLOOGUARD:
|
||||||
case SKU_52_BLOOGUARD:
|
case SKU_52_BLOOGUARD:
|
||||||
case SKU_53_BIPSHIP:
|
case SKU_53_BIPSHIP:
|
||||||
case SKU_54_BIPSHIP:
|
case SKU_54_BIPSHIP:
|
||||||
filename = "wifi_sar-blooguard.hex";
|
return "wifi_sar-blooguard.hex";
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *mainboard_vbt_filename(void)
|
const char *mainboard_vbt_filename(void)
|
||||||
|
|
|
@ -18,13 +18,12 @@ enum {
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = google_chromeec_get_board_sku();
|
uint32_t sku_id = google_chromeec_get_board_sku();
|
||||||
|
|
||||||
if (sku_id >= 33 && sku_id <= 44)
|
if (sku_id >= 33 && sku_id <= 44)
|
||||||
filename = "wifi_sar-droid.hex";
|
return "wifi_sar-droid.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
void variant_smi_sleep(u8 slp_typ)
|
void variant_smi_sleep(u8 slp_typ)
|
||||||
|
|
|
@ -8,13 +8,12 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = google_chromeec_get_board_sku();
|
uint32_t sku_id = google_chromeec_get_board_sku();
|
||||||
|
|
||||||
if (sku_id == 2)
|
if (sku_id == 2)
|
||||||
filename = "wifi_sar-bluebird.hex";
|
return "wifi_sar-bluebird.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool variant_ext_usb_status(unsigned int port_type, unsigned int port_id)
|
bool variant_ext_usb_status(unsigned int port_type, unsigned int port_id)
|
||||||
|
|
|
@ -32,12 +32,10 @@ void variant_smi_sleep(u8 slp_typ)
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
|
|
||||||
if (!is_lte_sku())
|
if (!is_lte_sku())
|
||||||
filename = "wifi_sar-fleex.hex";
|
return "wifi_sar-fleex.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
void variant_update_devtree(struct device *dev)
|
void variant_update_devtree(struct device *dev)
|
||||||
|
|
|
@ -25,11 +25,10 @@ void variant_update_devtree(struct device *dev)
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = SKU_UNKNOWN;
|
uint32_t sku_id = SKU_UNKNOWN;
|
||||||
|
|
||||||
sku_id = google_chromeec_get_board_sku();
|
sku_id = google_chromeec_get_board_sku();
|
||||||
if (sku_id == 9)
|
if (sku_id == 9)
|
||||||
filename = "wifi_sar-foob360.hex";
|
return "wifi_sar-foob360.hex";
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id = google_chromeec_get_board_sku();
|
uint32_t sku_id = google_chromeec_get_board_sku();
|
||||||
|
|
||||||
switch (sku_id) {
|
switch (sku_id) {
|
||||||
|
@ -16,16 +15,14 @@ const char *get_wifi_sar_cbfs_filename(void)
|
||||||
case SKU_2_MEEP:
|
case SKU_2_MEEP:
|
||||||
case SKU_3_MEEP:
|
case SKU_3_MEEP:
|
||||||
case SKU_4_MEEP:
|
case SKU_4_MEEP:
|
||||||
filename = "wifi_sar-meep.hex";
|
return "wifi_sar-meep.hex";
|
||||||
break;
|
|
||||||
case SKU_49_VORTININJA:
|
case SKU_49_VORTININJA:
|
||||||
case SKU_50_VORTININJA:
|
case SKU_50_VORTININJA:
|
||||||
case SKU_51_VORTININJA:
|
case SKU_51_VORTININJA:
|
||||||
case SKU_52_VORTININJA:
|
case SKU_52_VORTININJA:
|
||||||
filename = "wifi_sar-vortininja.hex";
|
return "wifi_sar-vortininja.hex";
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *mainboard_vbt_filename(void)
|
const char *mainboard_vbt_filename(void)
|
||||||
|
|
|
@ -6,14 +6,10 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id;
|
uint32_t sku_id;
|
||||||
|
|
||||||
if (google_chromeec_cbi_get_sku_id(&sku_id))
|
if (google_chromeec_cbi_get_sku_id(&sku_id) || (sku_id != 5))
|
||||||
return NULL;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
|
|
||||||
if (sku_id == 5)
|
return "wifi_sar-laser.hex";
|
||||||
filename = "wifi_sar-laser.hex";
|
|
||||||
|
|
||||||
return filename;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,14 +33,13 @@ const char *smbios_system_sku(void)
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
uint32_t sku_id;
|
uint32_t sku_id;
|
||||||
|
|
||||||
sku_id = variant_board_sku();
|
sku_id = variant_board_sku();
|
||||||
if (sku_id & 0x200)
|
if (sku_id & 0x200)
|
||||||
filename = "wifi_sar-shyvana.hex";
|
return "wifi_sar-shyvana.hex";
|
||||||
else
|
else
|
||||||
filename = "wifi_sar-leona.hex";
|
return "wifi_sar-leona.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,10 @@
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
|
|
||||||
if (fw_config_probe(FW_CONFIG(WIFI_SAR_ID, WIFI_SAR_ID_0)))
|
if (fw_config_probe(FW_CONFIG(WIFI_SAR_ID, WIFI_SAR_ID_0)))
|
||||||
filename = "wifi_sar_0.hex";
|
return "wifi_sar_0.hex";
|
||||||
else if (fw_config_probe(FW_CONFIG(WIFI_SAR_ID, WIFI_SAR_ID_1)))
|
else if (fw_config_probe(FW_CONFIG(WIFI_SAR_ID, WIFI_SAR_ID_1)))
|
||||||
filename = "wifi_sar_1.hex";
|
return "wifi_sar_1.hex";
|
||||||
|
|
||||||
return filename;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,29 +60,23 @@ void variant_devtree_update(void)
|
||||||
|
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
const char *filename = NULL;
|
|
||||||
int sar_config;
|
int sar_config;
|
||||||
|
|
||||||
sar_config = variant_gets_sar_config();
|
sar_config = variant_gets_sar_config();
|
||||||
|
|
||||||
switch (sar_config) {
|
switch (sar_config) {
|
||||||
case 1:
|
case 1:
|
||||||
filename = "wifi_sar-vilboz-0.hex";
|
return "wifi_sar-vilboz-0.hex";
|
||||||
break;
|
|
||||||
case 3:
|
case 3:
|
||||||
/*
|
/*
|
||||||
TODO: Set default first. It will be replaced after the
|
TODO: Set default first. It will be replaced after the
|
||||||
new table is generated.
|
new table is generated.
|
||||||
*/
|
*/
|
||||||
filename = "wifi_sar_defaults.hex";
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
break;
|
|
||||||
case 5:
|
case 5:
|
||||||
filename = "wifi_sar-vilboz-1.hex";
|
|
||||||
break;
|
|
||||||
case 7:
|
case 7:
|
||||||
filename = "wifi_sar-vilboz-1.hex";
|
return "wifi_sar-vilboz-1.hex";
|
||||||
break;
|
default:
|
||||||
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
return filename;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
|
|
||||||
#define WIFI_SAR_CBFS_FILENAME "wifi_sar_defaults.hex"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Retrieve WiFi SAR limits data from CBFS and decode it
|
* Retrieve WiFi SAR limits data from CBFS and decode it
|
||||||
* WiFi SAR data is expected in the format: [<WRDD><EWRD>][WGDS]
|
* WiFi SAR data is expected in the format: [<WRDD><EWRD>][WGDS]
|
||||||
|
@ -37,6 +35,12 @@ int get_wifi_sar_limits(struct wifi_sar_limits *sar_limits)
|
||||||
char *sar_str;
|
char *sar_str;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
|
filename = get_wifi_sar_cbfs_filename();
|
||||||
|
if (filename == NULL) {
|
||||||
|
printk(BIOS_DEBUG, "Filename missing for CBFS SAR file!\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If GEO_SAR_ENABLE is not selected, SAR file does not contain
|
* If GEO_SAR_ENABLE is not selected, SAR file does not contain
|
||||||
* delta table settings.
|
* delta table settings.
|
||||||
|
@ -64,10 +68,6 @@ int get_wifi_sar_limits(struct wifi_sar_limits *sar_limits)
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "Checking CBFS for default SAR values\n");
|
printk(BIOS_DEBUG, "Checking CBFS for default SAR values\n");
|
||||||
|
|
||||||
filename = get_wifi_sar_cbfs_filename();
|
|
||||||
if (filename == NULL)
|
|
||||||
filename = WIFI_SAR_CBFS_FILENAME;
|
|
||||||
|
|
||||||
if (cbfs_load(filename, sar_str, sar_str_len) != sar_str_len) {
|
if (cbfs_load(filename, sar_str, sar_str_len) != sar_str_len) {
|
||||||
printk(BIOS_ERR, "%s has bad len in CBFS\n", filename);
|
printk(BIOS_ERR, "%s has bad len in CBFS\n", filename);
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -88,5 +88,5 @@ done:
|
||||||
__weak
|
__weak
|
||||||
const char *get_wifi_sar_cbfs_filename(void)
|
const char *get_wifi_sar_cbfs_filename(void)
|
||||||
{
|
{
|
||||||
return WIFI_SAR_CBFS_FILENAME;
|
return WIFI_SAR_CBFS_DEFAULT_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue