soc/intel/cnl and mainboards: Drop cnl_configure_pads()

CB:31250 ("soc/intel/cannonlake: Configure GPIOs again after FSP-S is
done") introduced a workaround in coreboot for `soc/intel/cannonlake`
platforms to save and restore GPIO configuration performed by
mainboard across call to FSP Silicon Init (FSP-S). This workaround was
required because FSP-S was configuring GPIOs differently than
mainboard resulting in boot and runtime issues because of
misconfigured GPIOs.

This issue has since been fixed in FSP (verified with FSP v1263 on
hatch). However, there were still 4 boards in coreboot using
`cnl_configure_pads()`. As part of RFC CB:50829, librem_cnl, clevo/cml-u
and system76/lemp9 were tested to ensure that this workaround is no
longer required.

This change drops the workaround using `cnl_configure_pads()` and
updates all mainboards to use `gpio_configure_pads()` instead.

Signed-off-by: Furquan Shaikh <furquan@google.com>
Tested-by: Angel Pons <th3fanbus@gmail.com>
(Tested purism/librem_cnl)
Tested-by: Michael Niewöhner <foss@mniewoehner.de>
(Tested clevo/cml-u which is similar to system76/lemp9)
Change-Id: I7a4facbf23fc81707cb111859600e641fde34fc4
Reviewed-on: https://review.coreboot.org/c/coreboot/+/52248
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Michael Niewöhner <foss@mniewoehner.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Furquan Shaikh 2021-04-11 12:06:26 -07:00 committed by Patrick Georgi
parent e794312882
commit e206e2e7ff
6 changed files with 5 additions and 37 deletions

View file

@ -2,7 +2,6 @@
#include <acpi/acpi.h>
#include <smbios.h>
#include <soc/gpio.h>
#include <soc/ramstage.h>
#include <variant/gpio.h>
#include <vendorcode/google/chromeos/chromeos.h>
@ -30,7 +29,7 @@ static void mainboard_init(void *chip_info)
size_t num_gpios;
gpio_table = variant_gpio_table(&num_gpios);
cnl_configure_pads(gpio_table, num_gpios);
gpio_configure_pads(gpio_table, num_gpios);
}
static void mainboard_enable(struct device *dev)

View file

@ -39,7 +39,7 @@ static void mainboard_init(void *chip_info)
size_t num_gpios;
gpio_table = variant_gpio_table(&num_gpios);
cnl_configure_pads(gpio_table, num_gpios);
gpio_configure_pads(gpio_table, num_gpios);
/* Disable unused pads for devices with board ID > 2 */
if (board_id() > 2)

View file

@ -9,5 +9,5 @@ void mainboard_silicon_init_params(FSPS_UPD *supd)
* dependencies during hardware initialization. */
size_t num_gpios;
const struct pad_config *gpio_table = variant_gpio_table(&num_gpios);
cnl_configure_pads(gpio_table, num_gpios);
gpio_configure_pads(gpio_table, num_gpios);
}

View file

@ -7,5 +7,5 @@ void mainboard_silicon_init_params(FSPS_UPD *supd)
{
/* Configure pads prior to SiliconInit() in case there's any
* dependencies during hardware initialization. */
cnl_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
}

View file

@ -11,7 +11,6 @@
#include <intelblocks/pcie_rp.h>
#include <intelblocks/xdci.h>
#include <soc/intel/common/vbt.h>
#include <soc/gpio.h>
#include <soc/pci_devs.h>
#include <soc/ramstage.h>
@ -140,33 +139,6 @@ const char *soc_acpi_name(const struct device *dev)
}
#endif
/*
* TODO(furquan): Get rid of this workaround once FSP is fixed. Currently, FSP-S
* configures GPIOs when it should not and this results in coreboot GPIO
* configuration being overwritten. Until FSP is fixed, maintain the reference
* of GPIO config table from mainboard and use that to re-configure GPIOs after
* FSP-S is done.
*/
void cnl_configure_pads(const struct pad_config *cfg, size_t num_pads)
{
static const struct pad_config *g_cfg;
static size_t g_num_pads;
/*
* If cfg and num_pads are passed in from mainboard, maintain a
* reference to the GPIO table.
*/
if ((cfg == NULL) || (num_pads == 0)) {
cfg = g_cfg;
num_pads = g_num_pads;
} else {
g_cfg = cfg;
g_num_pads = num_pads;
}
gpio_configure_pads(cfg, num_pads);
}
void soc_init_pre_device(void *chip_info)
{
/* Perform silicon specific init. */
@ -175,9 +147,6 @@ void soc_init_pre_device(void *chip_info)
/* Display FIRMWARE_VERSION_INFO_HOB */
fsp_display_fvi_version_hob();
/* TODO(furquan): Get rid of this workaround once FSP is fixed. */
cnl_configure_pads(NULL, 0);
soc_gpio_pm_configuration();
/* swap enabled PCI ports in device tree if needed */

View file

@ -19,7 +19,7 @@
#ifndef __ACPI__
struct pad_config;
void cnl_configure_pads(const struct pad_config *cfg, size_t num_pads);
/*
* Routine to perform below operations:
* 1. SoC routine to fill GPIO PM mask and value for GPIO_MISCCFG register