summaryrefslogtreecommitdiff
path: root/chip
diff options
context:
space:
mode:
Diffstat (limited to 'chip')
-rw-r--r--chip/mchp/gpio.c41
-rw-r--r--chip/mchp/registers-mec152x.h1
-rw-r--r--chip/mchp/registers-mec1701.h8
3 files changed, 32 insertions, 18 deletions
diff --git a/chip/mchp/gpio.c b/chip/mchp/gpio.c
index 1de74dafcc..32a9e36c79 100644
--- a/chip/mchp/gpio.c
+++ b/chip/mchp/gpio.c
@@ -38,12 +38,11 @@ struct gpio_int_mapping {
* 4 0200 - 0235 12
* 5 0240 - 0276 26
*/
-static const struct gpio_int_mapping int_map[6] = {
+static const struct gpio_int_mapping int_map[] = {
{ 11, 0 }, { 10, 1 }, { 9, 2 },
{ 8, 3 }, { 12, 4 }, { 26, 5 }
};
-
-
+BUILD_ASSERT(ARRAY_SIZE(int_map) == MCHP_GPIO_MAX_PORT);
/*
* NOTE: GCC __builtin_ffs(val) returns (index + 1) of least significant
@@ -55,6 +54,9 @@ void gpio_set_alternate_function(uint32_t port, uint32_t mask,
int i;
uint32_t val;
+ if (port >= MCHP_GPIO_MAX_PORT)
+ return;
+
while (mask) {
i = __builtin_ffs(mask) - 1;
val = MCHP_GPIO_CTL(port, i);
@@ -98,18 +100,21 @@ void gpio_set_level(enum gpio_signal signal, int value)
/*
* Add support for new #ifdef CONFIG_CMD_GPIO_POWER_DOWN.
- * If GPIO_POWER_DONW flag is set force GPIO Control to
+ * If GPIO_POWER_DOWN flag is set force GPIO Control to
* GPIO input, interrupt detect disabled, power control field
* in bits[3:2]=10b.
* NOTE: if interrupt detect is enabled when pin is powered down
* then a false edge may be detected.
- *
+ * NOTE 2: MEC152x family implements input pad disable (bit[15]=1).
*/
void gpio_set_flags_by_mask(uint32_t port, uint32_t mask, uint32_t flags)
{
int i;
uint32_t val;
+ if (port >= MCHP_GPIO_MAX_PORT)
+ return;
+
while (mask) {
i = GPIO_MASK_TO_NUM(mask);
mask &= ~BIT(i);
@@ -117,15 +122,18 @@ void gpio_set_flags_by_mask(uint32_t port, uint32_t mask, uint32_t flags)
#ifdef CONFIG_GPIO_POWER_DOWN
if (flags & GPIO_POWER_DOWN) {
- val = (MCHP_GPIO_CTRL_PWR_OFF +
- MCHP_GPIO_INTDET_DISABLED);
+ val = (MCHP_GPIO_CTRL_PWR_OFF
+ | MCHP_GPIO_INTDET_DISABLED
+ | MCHP_GPIO_CTRL_DIS_INPUT_BIT);
+
MCHP_GPIO_CTL(port, i) = val;
continue;
}
#endif
- val &= ~(MCHP_GPIO_CTRL_PWR_MASK);
- val |= MCHP_GPIO_CTRL_PWR_VTR;
+ val &= ~(MCHP_GPIO_CTRL_PWR_MASK
+ | MCHP_GPIO_CTRL_DIS_INPUT_BIT);
+ val |= MCHP_GPIO_CTRL_PWR_VTR;
/*
* Select open drain first, so that we don't
* glitch the signal when changing the line to
@@ -190,12 +198,15 @@ void gpio_power_off_by_mask(uint32_t port, uint32_t mask)
{
int i;
+ if (port >= MCHP_GPIO_MAX_PORT)
+ return;
+
while (mask) {
i = GPIO_MASK_TO_NUM(mask);
mask &= ~BIT(i);
-
- MCHP_GPIO_CTL(port, i) = (MCHP_GPIO_CTRL_PWR_OFF +
- MCHP_GPIO_INTDET_DISABLED);
+ MCHP_GPIO_CTL(port, i) = (MCHP_GPIO_CTRL_PWR_OFF
+ | MCHP_GPIO_INTDET_DISABLED
+ | MCHP_GPIO_CTRL_DIS_INPUT_BIT);
}
}
@@ -208,9 +219,9 @@ int gpio_power_off(enum gpio_signal signal)
i = GPIO_MASK_TO_NUM(gpio_list[signal].mask);
port = gpio_list[signal].port;
-
- MCHP_GPIO_CTL(port, i) = (MCHP_GPIO_CTRL_PWR_OFF +
- MCHP_GPIO_INTDET_DISABLED);
+ MCHP_GPIO_CTL(port, i) = (MCHP_GPIO_CTRL_PWR_OFF
+ | MCHP_GPIO_INTDET_DISABLED
+ | MCHP_GPIO_CTRL_DIS_INPUT_BIT);
return EC_SUCCESS;
}
diff --git a/chip/mchp/registers-mec152x.h b/chip/mchp/registers-mec152x.h
index 251a0be1b4..cbea8a2d4e 100644
--- a/chip/mchp/registers-mec152x.h
+++ b/chip/mchp/registers-mec152x.h
@@ -729,6 +729,7 @@
/* MCHP implements 6 GPIO ports */
#define MCHP_GPIO_MAX_PORT 6
+#define UNIMPLEMENTED_GPIO_BANK MCHP_GPIO_MAX_PORT
/*
* In MECxxxx documentation GPIO numbers are octal, each control
diff --git a/chip/mchp/registers-mec1701.h b/chip/mchp/registers-mec1701.h
index 90b2d5ef83..4d8ef775df 100644
--- a/chip/mchp/registers-mec1701.h
+++ b/chip/mchp/registers-mec1701.h
@@ -474,13 +474,12 @@
/* Bit defines for MCHP_PCR_PWR_RST_STS */
#define MCHP_PWR_RST_STS_MASK_RO 0xc8c
-#define MCHP_PWR_RST_STS_MASK_RWC 0x170
+#define MCHP_PWR_RST_STS_MASK_RWC 0x060
#define MCHP_PWR_RST_STS_MASK \
((MCHP_PWR_RST_STS_MASK_RO) | (MCHP_PWR_RST_STS_MASK_RWC))
#define MCHP_PWR_RST_STS_ESPI_CLK_ACT BIT(11) /* RO */
#define MCHP_PWR_RST_STS_32K_ACT BIT(10) /* RO */
-#define MCHP_PWR_RST_STS_WDT BIT(8) /* R/WC */
#define MCHP_PWR_RST_STS_JTAG_RSTN BIT(7) /* RO */
#define MCHP_PWR_RST_STS_SYS BIT(6) /* R/WC */
/* same function, old bit name */
@@ -764,7 +763,7 @@
/* MCHP implements 6 GPIO ports */
#define MCHP_GPIO_MAX_PORT 6
-
+#define UNIMPLEMENTED_GPIO_BANK MCHP_GPIO_MAX_PORT
/*
* In MECxxxx documentation GPIO numbers are octal, each control
* register is located on a 32-bit boundary.
@@ -811,6 +810,9 @@
#define MCHP_GPIO_CTRL_FUNC_2 (2 << 12)
#define MCHP_GPIO_CTRL_FUNC_3 (3 << 12)
#define MCHP_GPIO_CTRL_OUT_LVL BIT(16)
+/* MEC170x reserved read-only 0 bit. Value set to 0 */
+#define MCHP_GPIO_CTRL_DIS_INPUT_BITPOS 15
+#define MCHP_GPIO_CTRL_DIS_INPUT_BIT 0
/*
* GPIO Parallel Input and Output registers.