mb/google/octopus: Disable BT before S5 entry

The CNVi wifi/bt module prevents entry into S5 by keeping internal
SoC clocks running. Therefore it's necessary to disable BT prior to
S5 entry.

BUG=b:79606769
TEST= Test if BT device works under following cases:
1. Power-on
2. Press powerbtn before OS entry
3. Power-on from S5 again

Change-Id: Ibc14b4080a27de48d197e16d0eed162603482de2
Signed-off-by: Hannah Williams <hannah.williams@intel.com>
Reviewed-on: https://review.coreboot.org/26238
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Hannah Williams 2018-05-11 19:14:38 -07:00 committed by Furquan Shaikh
parent 5c3452b800
commit 09b883f352
3 changed files with 15 additions and 3 deletions

View File

@ -34,7 +34,7 @@ void mainboard_smi_sleep(u8 slp_typ)
const struct pad_config *pads; const struct pad_config *pads;
size_t num; size_t num;
pads = variant_sleep_gpio_table(&num); pads = variant_sleep_gpio_table(&num, slp_typ);
gpio_configure_pads(pads, num); gpio_configure_pads(pads, num);
chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS, chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS,

View File

@ -13,6 +13,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include <arch/acpi.h>
#include <baseboard/gpio.h> #include <baseboard/gpio.h>
#include <baseboard/variants.h> #include <baseboard/variants.h>
#include <commonlib/helpers.h> #include <commonlib/helpers.h>
@ -300,9 +301,20 @@ variant_early_gpio_table(size_t *num)
static const struct pad_config sleep_gpio_table[] = { static const struct pad_config sleep_gpio_table[] = {
}; };
/* GPIO settings before entering slp_s5. */
static const struct pad_config sleep_s5_gpio_table[] = {
/* BT_DISABLE_L */
PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_109, 0, DEEP, NONE, Tx0RXDCRx1, SAME),
};
const struct pad_config *__weak const struct pad_config *__weak
variant_sleep_gpio_table(size_t *num) variant_sleep_gpio_table(size_t *num, int slp_typ)
{ {
if (slp_typ == ACPI_S5) {
*num = ARRAY_SIZE(sleep_s5_gpio_table);
return sleep_s5_gpio_table;
}
*num = ARRAY_SIZE(sleep_gpio_table); *num = ARRAY_SIZE(sleep_gpio_table);
return sleep_gpio_table; return sleep_gpio_table;
} }

View File

@ -28,7 +28,7 @@ uint8_t variant_board_id(void);
* entries for each table. */ * entries for each table. */
const struct pad_config *variant_gpio_table(size_t *num); const struct pad_config *variant_gpio_table(size_t *num);
const struct pad_config *variant_early_gpio_table(size_t *num); const struct pad_config *variant_early_gpio_table(size_t *num);
const struct pad_config *variant_sleep_gpio_table(size_t *num); const struct pad_config *variant_sleep_gpio_table(size_t *num, int slp_typ);
/* Baseboard default swizzle. Can be reused if swizzle is same. */ /* Baseboard default swizzle. Can be reused if swizzle is same. */
extern const struct lpddr4_swizzle_cfg baseboard_lpddr4_swizzle; extern const struct lpddr4_swizzle_cfg baseboard_lpddr4_swizzle;