amd/stoneyridge: Set SCI_MAP for SCI enabled GPIOs
By default we use a 1:1 mapping between GEVENT bits and the corresponding SCI_MAP entry. However, we still must program the SCI_MAP entries with the GEVENT number. BUG=b:109759838 TEST=(1) powerd_dbus_suspend (2) move finger on touchpad for ~1 second => system resumes from S3 Change-Id: Ie7be45264f9bfec56efc47a03071fdb924d16b6a Signed-off-by: Daniel Kurtz <djkurtz@chromium.org> Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com> Reviewed-on: https://review.coreboot.org/26930 Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Martin Roth <martinroth@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
1313244ae7
commit
95cb1e72d7
2 changed files with 11 additions and 0 deletions
|
@ -19,6 +19,7 @@
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <gpio.h>
|
#include <gpio.h>
|
||||||
#include <soc/gpio.h>
|
#include <soc/gpio.h>
|
||||||
|
#include <soc/southbridge.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <compiler.h>
|
#include <compiler.h>
|
||||||
|
|
||||||
|
@ -97,6 +98,11 @@ static void program_smi(uint32_t flag, int gevent_num)
|
||||||
SMI_SCI_LVL_LOW);
|
SMI_SCI_LVL_LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void route_sci(uint8_t event)
|
||||||
|
{
|
||||||
|
smi_write8(SMI_SCI_MAP(event), event);
|
||||||
|
}
|
||||||
|
|
||||||
static void get_sci_config_bits(uint32_t flag, uint32_t *edge, uint32_t *level)
|
static void get_sci_config_bits(uint32_t flag, uint32_t *edge, uint32_t *level)
|
||||||
{
|
{
|
||||||
uint32_t trigger;
|
uint32_t trigger;
|
||||||
|
@ -232,6 +238,9 @@ void sb_program_gpios(const struct soc_amd_gpio *gpio_list_ptr, size_t size)
|
||||||
|
|
||||||
mux_ptr = (uint8_t *)(uintptr_t)(gpio + AMD_GPIO_MUX);
|
mux_ptr = (uint8_t *)(uintptr_t)(gpio + AMD_GPIO_MUX);
|
||||||
write8(mux_ptr, mux & AMD_GPIO_MUX_MASK);
|
write8(mux_ptr, mux & AMD_GPIO_MUX_MASK);
|
||||||
|
/* special case if pin 2 is assigned to wake */
|
||||||
|
if ((gpio == 2) && !(mux & AMD_GPIO_MUX_MASK))
|
||||||
|
route_sci(GPIO_2_EVENT);
|
||||||
gpio_ptr = (uint32_t *)gpio_get_address(gpio);
|
gpio_ptr = (uint32_t *)gpio_get_address(gpio);
|
||||||
|
|
||||||
if (control_flags & GPIO_SPECIAL_FLAG) {
|
if (control_flags & GPIO_SPECIAL_FLAG) {
|
||||||
|
@ -267,6 +276,7 @@ void sb_program_gpios(const struct soc_amd_gpio *gpio_list_ptr, size_t size)
|
||||||
edge_level |= bit_edge << gevent_num;
|
edge_level |= bit_edge << gevent_num;
|
||||||
direction |= bit_level << gevent_num;
|
direction |= bit_level << gevent_num;
|
||||||
mask |= (1 << gevent_num);
|
mask |= (1 << gevent_num);
|
||||||
|
route_sci(gevent_num);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(BIOS_WARNING, "Error, flags 0x%08x\n",
|
printk(BIOS_WARNING, "Error, flags 0x%08x\n",
|
||||||
|
|
|
@ -368,6 +368,7 @@ enum {
|
||||||
GEVENT_22,
|
GEVENT_22,
|
||||||
GEVENT_23,
|
GEVENT_23,
|
||||||
};
|
};
|
||||||
|
#define GPIO_2_EVENT GEVENT_8
|
||||||
|
|
||||||
#define GPIO_OUTPUT_OUT_HIGH (GPIO_OUTPUT_ENABLE | GPIO_OUTPUT_VALUE)
|
#define GPIO_OUTPUT_OUT_HIGH (GPIO_OUTPUT_ENABLE | GPIO_OUTPUT_VALUE)
|
||||||
#define GPIO_OUTPUT_OUT_LOW GPIO_OUTPUT_ENABLE
|
#define GPIO_OUTPUT_OUT_LOW GPIO_OUTPUT_ENABLE
|
||||||
|
|
Loading…
Reference in a new issue