diff --git a/src/board/system76/darp5/scratch/main.c b/src/board/system76/darp5/scratch/main.c index 98b94fe..83db410 100644 --- a/src/board/system76/darp5/scratch/main.c +++ b/src/board/system76/darp5/scratch/main.c @@ -58,6 +58,7 @@ void acpi_write(uint8_t addr, uint8_t data) { enum PmcState { PMC_STATE_DEFAULT, + PMC_STATE_WRITE, PMC_STATE_ACPI_READ, PMC_STATE_ACPI_WRITE, PMC_STATE_ACPI_WRITE_ADDR, @@ -65,9 +66,11 @@ enum PmcState { void pmc_event(struct Pmc * pmc) { static enum PmcState state = PMC_STATE_DEFAULT; - static uint8_t state_data[2] = {0, 0}; + static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -90,17 +93,16 @@ void pmc_event(struct Pmc * pmc) { } else { switch (state) { case PMC_STATE_ACPI_READ: - state = PMC_STATE_DEFAULT; - uint8_t value = acpi_read(data); - pmc_write(pmc, value); + state = PMC_STATE_WRITE; + state_data = acpi_read(data); break; case PMC_STATE_ACPI_WRITE: state = PMC_STATE_ACPI_WRITE_ADDR; - state_data[0] = data; + state_data = data; break; case PMC_STATE_ACPI_WRITE_ADDR: state = PMC_STATE_DEFAULT; - acpi_write(state_data[0], data); + acpi_write(state_data, data); break; default: state = PMC_STATE_DEFAULT; @@ -108,6 +110,16 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + break; + } + } } // Main program while running in scratch ROM diff --git a/src/board/system76/darp5/scratch/pmc.c b/src/board/system76/darp5/scratch/pmc.c index 6db6fb5..2cd653a 100644 --- a/src/board/system76/darp5/scratch/pmc.c +++ b/src/board/system76/darp5/scratch/pmc.c @@ -18,7 +18,6 @@ uint8_t pmc_read(struct Pmc * pmc) { } bool pmc_write(struct Pmc * pmc, uint8_t data) { - while (pmc_status(pmc) & PMC_STS_OBF) {} *(pmc->data_out) = data; return true; } diff --git a/src/board/system76/galp3-c/scratch/main.c b/src/board/system76/galp3-c/scratch/main.c index 98b94fe..83db410 100644 --- a/src/board/system76/galp3-c/scratch/main.c +++ b/src/board/system76/galp3-c/scratch/main.c @@ -58,6 +58,7 @@ void acpi_write(uint8_t addr, uint8_t data) { enum PmcState { PMC_STATE_DEFAULT, + PMC_STATE_WRITE, PMC_STATE_ACPI_READ, PMC_STATE_ACPI_WRITE, PMC_STATE_ACPI_WRITE_ADDR, @@ -65,9 +66,11 @@ enum PmcState { void pmc_event(struct Pmc * pmc) { static enum PmcState state = PMC_STATE_DEFAULT; - static uint8_t state_data[2] = {0, 0}; + static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -90,17 +93,16 @@ void pmc_event(struct Pmc * pmc) { } else { switch (state) { case PMC_STATE_ACPI_READ: - state = PMC_STATE_DEFAULT; - uint8_t value = acpi_read(data); - pmc_write(pmc, value); + state = PMC_STATE_WRITE; + state_data = acpi_read(data); break; case PMC_STATE_ACPI_WRITE: state = PMC_STATE_ACPI_WRITE_ADDR; - state_data[0] = data; + state_data = data; break; case PMC_STATE_ACPI_WRITE_ADDR: state = PMC_STATE_DEFAULT; - acpi_write(state_data[0], data); + acpi_write(state_data, data); break; default: state = PMC_STATE_DEFAULT; @@ -108,6 +110,16 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + break; + } + } } // Main program while running in scratch ROM diff --git a/src/board/system76/galp3-c/scratch/pmc.c b/src/board/system76/galp3-c/scratch/pmc.c index 6db6fb5..2cd653a 100644 --- a/src/board/system76/galp3-c/scratch/pmc.c +++ b/src/board/system76/galp3-c/scratch/pmc.c @@ -18,7 +18,6 @@ uint8_t pmc_read(struct Pmc * pmc) { } bool pmc_write(struct Pmc * pmc, uint8_t data) { - while (pmc_status(pmc) & PMC_STS_OBF) {} *(pmc->data_out) = data; return true; } diff --git a/src/board/system76/lemp9/scratch/main.c b/src/board/system76/lemp9/scratch/main.c index 98b94fe..83db410 100644 --- a/src/board/system76/lemp9/scratch/main.c +++ b/src/board/system76/lemp9/scratch/main.c @@ -58,6 +58,7 @@ void acpi_write(uint8_t addr, uint8_t data) { enum PmcState { PMC_STATE_DEFAULT, + PMC_STATE_WRITE, PMC_STATE_ACPI_READ, PMC_STATE_ACPI_WRITE, PMC_STATE_ACPI_WRITE_ADDR, @@ -65,9 +66,11 @@ enum PmcState { void pmc_event(struct Pmc * pmc) { static enum PmcState state = PMC_STATE_DEFAULT; - static uint8_t state_data[2] = {0, 0}; + static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -90,17 +93,16 @@ void pmc_event(struct Pmc * pmc) { } else { switch (state) { case PMC_STATE_ACPI_READ: - state = PMC_STATE_DEFAULT; - uint8_t value = acpi_read(data); - pmc_write(pmc, value); + state = PMC_STATE_WRITE; + state_data = acpi_read(data); break; case PMC_STATE_ACPI_WRITE: state = PMC_STATE_ACPI_WRITE_ADDR; - state_data[0] = data; + state_data = data; break; case PMC_STATE_ACPI_WRITE_ADDR: state = PMC_STATE_DEFAULT; - acpi_write(state_data[0], data); + acpi_write(state_data, data); break; default: state = PMC_STATE_DEFAULT; @@ -108,6 +110,16 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + break; + } + } } // Main program while running in scratch ROM diff --git a/src/board/system76/lemp9/scratch/pmc.c b/src/board/system76/lemp9/scratch/pmc.c index 6db6fb5..2cd653a 100644 --- a/src/board/system76/lemp9/scratch/pmc.c +++ b/src/board/system76/lemp9/scratch/pmc.c @@ -18,7 +18,6 @@ uint8_t pmc_read(struct Pmc * pmc) { } bool pmc_write(struct Pmc * pmc, uint8_t data) { - while (pmc_status(pmc) & PMC_STS_OBF) {} *(pmc->data_out) = data; return true; } diff --git a/tool/src/main.rs b/tool/src/main.rs index 6ba0b8f..e50af69 100644 --- a/tool/src/main.rs +++ b/tool/src/main.rs @@ -100,7 +100,6 @@ unsafe fn flash(path: &str) -> Result<(), Error> { } { - print!("ec version: "); let mut data = [0; 256]; let size = ec.version(&mut data)?;