From 277ad664a2e9bb045cf0c5a73121727bd8b6163a Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 21 Feb 2020 20:34:29 -0700 Subject: [PATCH] Make PMC handling slightly faster --- src/board/system76/darp5/pmc.c | 27 +++++++++++++++------------ src/board/system76/galp3-c/pmc.c | 27 +++++++++++++++------------ src/board/system76/lemp9/pmc.c | 27 +++++++++++++++------------ 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/src/board/system76/darp5/pmc.c b/src/board/system76/darp5/pmc.c index 9ab446b..0db98f8 100644 --- a/src/board/system76/darp5/pmc.c +++ b/src/board/system76/darp5/pmc.c @@ -58,18 +58,8 @@ void pmc_event(struct Pmc * pmc) { static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); - if (!(sts & PMC_STS_OBF)) { - switch (state) { - case PMC_STATE_WRITE: - DEBUG("pmc write: %02X\n", state_data); - state = PMC_STATE_DEFAULT; - pmc_write(pmc, state_data); - // Send SCI for OBF=1 - pmc_sci_interrupt(); - break; - } - } - + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -146,4 +136,17 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + DEBUG("pmc write: %02X\n", state_data); + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + // Send SCI for OBF=1 + pmc_sci_interrupt(); + break; + } + } } diff --git a/src/board/system76/galp3-c/pmc.c b/src/board/system76/galp3-c/pmc.c index 9ab446b..0db98f8 100644 --- a/src/board/system76/galp3-c/pmc.c +++ b/src/board/system76/galp3-c/pmc.c @@ -58,18 +58,8 @@ void pmc_event(struct Pmc * pmc) { static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); - if (!(sts & PMC_STS_OBF)) { - switch (state) { - case PMC_STATE_WRITE: - DEBUG("pmc write: %02X\n", state_data); - state = PMC_STATE_DEFAULT; - pmc_write(pmc, state_data); - // Send SCI for OBF=1 - pmc_sci_interrupt(); - break; - } - } - + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -146,4 +136,17 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + DEBUG("pmc write: %02X\n", state_data); + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + // Send SCI for OBF=1 + pmc_sci_interrupt(); + break; + } + } } diff --git a/src/board/system76/lemp9/pmc.c b/src/board/system76/lemp9/pmc.c index 9ab446b..0db98f8 100644 --- a/src/board/system76/lemp9/pmc.c +++ b/src/board/system76/lemp9/pmc.c @@ -58,18 +58,8 @@ void pmc_event(struct Pmc * pmc) { static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); - if (!(sts & PMC_STS_OBF)) { - switch (state) { - case PMC_STATE_WRITE: - DEBUG("pmc write: %02X\n", state_data); - state = PMC_STATE_DEFAULT; - pmc_write(pmc, state_data); - // Send SCI for OBF=1 - pmc_sci_interrupt(); - break; - } - } - + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -146,4 +136,17 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + DEBUG("pmc write: %02X\n", state_data); + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + // Send SCI for OBF=1 + pmc_sci_interrupt(); + break; + } + } }