Merge branch 'master' of https://github.com/system76/ec
This commit is contained in:
		@@ -59,9 +59,15 @@ uint8_t acpi_read(uint8_t addr) {
 | 
			
		||||
        ACPI_16(0x1A, battery_full_capacity);
 | 
			
		||||
        ACPI_16(0x22, battery_design_voltage);
 | 
			
		||||
 | 
			
		||||
        // Bypass status test in ACPI - TODO
 | 
			
		||||
        case 0x26:
 | 
			
		||||
            data |= 1 << 1;
 | 
			
		||||
            // If AC adapter connected
 | 
			
		||||
            if (!gpio_get(&ACIN_N)) {
 | 
			
		||||
                // And battery is not fully charged
 | 
			
		||||
                if (!(battery_status & 0x0020)) {
 | 
			
		||||
                    // Battery is charging
 | 
			
		||||
                    data |= 1 << 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        ACPI_16(0x2A, battery_current);
 | 
			
		||||
 
 | 
			
		||||
@@ -11,10 +11,10 @@ SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
 | 
			
		||||
# 3 - INFO
 | 
			
		||||
# 4 - DEBUG
 | 
			
		||||
# 5 - TRACE
 | 
			
		||||
CFLAGS+=-DLEVEL=2
 | 
			
		||||
CFLAGS+=-DLEVEL=4
 | 
			
		||||
 | 
			
		||||
# Enable I2C debug on 0x76
 | 
			
		||||
CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
CFLAGS+=-DI2C_SMBUS=I2C_0
 | 
			
		||||
@@ -35,6 +35,10 @@ include $(SCRATCH_DIR)/scratch.mk
 | 
			
		||||
CFLAGS+=-I$(BUILD)/include
 | 
			
		||||
INCLUDE+=$(BUILD)/include/scratch.h
 | 
			
		||||
 | 
			
		||||
console:
 | 
			
		||||
	cargo build --manifest-path ecflash/Cargo.toml --example smfi --release
 | 
			
		||||
	sudo ecflash/target/release/examples/smfi
 | 
			
		||||
 | 
			
		||||
flash: $(BUILD)/ec.rom
 | 
			
		||||
	cargo build --manifest-path ecflash/Cargo.toml --example isp --release
 | 
			
		||||
	sudo ecflash/target/release/examples/isp --internal $<
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								src/board/system76/darp5/include/board/smfi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/board/system76/darp5/include/board/smfi.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#ifndef _BOARD_SMFI_H
 | 
			
		||||
#define _BOARD_SMFI_H
 | 
			
		||||
 | 
			
		||||
void smfi_init(void);
 | 
			
		||||
void smfi_event(void);
 | 
			
		||||
void smfi_debug(unsigned char byte);
 | 
			
		||||
 | 
			
		||||
#endif // _BOARD_SMFI_H
 | 
			
		||||
@@ -17,6 +17,7 @@
 | 
			
		||||
#include <board/ps2.h>
 | 
			
		||||
#include <board/pwm.h>
 | 
			
		||||
#include <board/smbus.h>
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
#include <common/version.h>
 | 
			
		||||
@@ -45,6 +46,7 @@ void init(void) {
 | 
			
		||||
    pmc_init();
 | 
			
		||||
    pwm_init();
 | 
			
		||||
    smbus_init();
 | 
			
		||||
    smfi_init();
 | 
			
		||||
 | 
			
		||||
    //TODO: INTC
 | 
			
		||||
}
 | 
			
		||||
@@ -113,7 +115,9 @@ void main(void) {
 | 
			
		||||
        }
 | 
			
		||||
        // Handles ACPI communication
 | 
			
		||||
        pmc_event(&PMC_1);
 | 
			
		||||
        // AP/EC communication over SMFI
 | 
			
		||||
        smfi_event();
 | 
			
		||||
        // Idle until next timer interrupt
 | 
			
		||||
        PCON |= 1;
 | 
			
		||||
        //Disabled until interrupts used: PCON |= 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,12 @@ void pnp_enable() {
 | 
			
		||||
    pnp_write(0x07, 0x05);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 | 
			
		||||
    // Enable SMFI
 | 
			
		||||
    pnp_write(0x07, 0x0F);
 | 
			
		||||
    pnp_write(0xF5, 0x00);
 | 
			
		||||
    pnp_write(0xF6, 0x01);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 | 
			
		||||
    // Enable SWUC
 | 
			
		||||
    pnp_write(0x07, 0x04);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								src/board/system76/darp5/smfi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								src/board/system76/darp5/smfi.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
#include <common/version.h>
 | 
			
		||||
 | 
			
		||||
// Shared memory host semaphore
 | 
			
		||||
volatile uint8_t __xdata __at(0x1022) SMHSR;
 | 
			
		||||
// Host RAM window control
 | 
			
		||||
volatile uint8_t __xdata __at(0x105A) HRAMWC;
 | 
			
		||||
// Host RAM window 0 base address
 | 
			
		||||
volatile uint8_t __xdata __at(0x105B) HRAMW0BA;
 | 
			
		||||
// Host RAM window 1 base address
 | 
			
		||||
volatile uint8_t __xdata __at(0x105C) HRAMW1BA;
 | 
			
		||||
// Host RAM window 0 access allow size
 | 
			
		||||
volatile uint8_t __xdata __at(0x105D) HRAMW0AAS;
 | 
			
		||||
// Host RAM window 1 access allow size
 | 
			
		||||
volatile uint8_t __xdata __at(0x105E) HRAMW1AAS;
 | 
			
		||||
 | 
			
		||||
static volatile uint8_t __xdata __at(0xC00) smfi_cmd[256];
 | 
			
		||||
static volatile uint8_t __xdata __at(0xD00) smfi_dbg[256];
 | 
			
		||||
 | 
			
		||||
enum SmfiCmd {
 | 
			
		||||
    SMFI_CMD_NONE = 0,
 | 
			
		||||
    SMFI_CMD_PROBE = 1,
 | 
			
		||||
    SMFI_CMD_BOARD = 2,
 | 
			
		||||
    SMFI_CMD_VERSION = 3,
 | 
			
		||||
    SMFI_CMD_DEBUG = 4,
 | 
			
		||||
    //TODO
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum SmfiRes {
 | 
			
		||||
    SMFI_RES_OK = 0,
 | 
			
		||||
    SMFI_RES_ERR = 1,
 | 
			
		||||
    //TODO
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void smfi_init(void) {
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    // Clear command region
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(smfi_cmd); i++) {
 | 
			
		||||
        smfi_cmd[i] = 0x00;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Clear debug region
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(smfi_dbg); i++) {
 | 
			
		||||
        smfi_dbg[i] = 0x00;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // H2RAM window 0 address 0xC00 - 0xCFF, read/write
 | 
			
		||||
    HRAMW0BA = 0xC0;
 | 
			
		||||
    HRAMW0AAS = 0x04;
 | 
			
		||||
 | 
			
		||||
    // H2RAM window 1 address 0xD00 - 0xDFF, read/write
 | 
			
		||||
    HRAMW1BA = 0xD0;
 | 
			
		||||
    HRAMW1AAS = 0x04;
 | 
			
		||||
 | 
			
		||||
    // Enable H2RAM window 0 and 1 using LPC I/O
 | 
			
		||||
    HRAMWC |= 0x13;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smfi_event(void) {
 | 
			
		||||
    int i;
 | 
			
		||||
    if (smfi_cmd[0]) {
 | 
			
		||||
        // Default to success
 | 
			
		||||
        smfi_cmd[1] = SMFI_RES_OK;
 | 
			
		||||
 | 
			
		||||
        switch (smfi_cmd[0]) {
 | 
			
		||||
            case SMFI_CMD_PROBE:
 | 
			
		||||
                // Signature
 | 
			
		||||
                smfi_cmd[2] = 0x76;
 | 
			
		||||
                smfi_cmd[3] = 0xEC;
 | 
			
		||||
                // Version
 | 
			
		||||
                smfi_cmd[4] = 0x01;
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_BOARD:
 | 
			
		||||
                strncpy(&smfi_cmd[2], board(), ARRAY_SIZE(smfi_cmd) - 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_VERSION:
 | 
			
		||||
                strncpy(&smfi_cmd[2], version(), ARRAY_SIZE(smfi_cmd) - 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_DEBUG:
 | 
			
		||||
                for (i = 2; i < ARRAY_SIZE(smfi_cmd) - 2; i++) {
 | 
			
		||||
                    uint8_t b = smfi_cmd[i];
 | 
			
		||||
                    if (b == 0) break;
 | 
			
		||||
                    putchar(b);
 | 
			
		||||
                }
 | 
			
		||||
            default:
 | 
			
		||||
                // Command not found
 | 
			
		||||
                smfi_cmd[1] = SMFI_RES_ERR;
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Mark command as finished
 | 
			
		||||
        smfi_cmd[0] = SMFI_CMD_NONE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smfi_debug(unsigned char byte) {
 | 
			
		||||
    int tail = (int)smfi_dbg[0];
 | 
			
		||||
    tail++;
 | 
			
		||||
    if (tail >= ARRAY_SIZE(smfi_dbg)) {
 | 
			
		||||
        tail = 1;
 | 
			
		||||
    }
 | 
			
		||||
    smfi_dbg[tail] = byte;
 | 
			
		||||
    smfi_dbg[0] = (uint8_t)tail;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    #include <mcs51/8051.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -10,6 +12,7 @@
 | 
			
		||||
 | 
			
		||||
int putchar(int c) {
 | 
			
		||||
    unsigned char byte = (unsigned char)c;
 | 
			
		||||
    smfi_debug(byte);
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    SBUF = byte;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -74,9 +74,15 @@ uint8_t acpi_read(uint8_t addr) {
 | 
			
		||||
        ACPI_16(0x1A, battery_full_capacity);
 | 
			
		||||
        ACPI_16(0x22, battery_design_voltage);
 | 
			
		||||
 | 
			
		||||
        // Bypass status test in ACPI - TODO
 | 
			
		||||
        case 0x26:
 | 
			
		||||
            data |= 1 << 1;
 | 
			
		||||
            // If AC adapter connected
 | 
			
		||||
            if (!gpio_get(&ACIN_N)) {
 | 
			
		||||
                // And battery is not fully charged
 | 
			
		||||
                if (!(battery_status & 0x0020)) {
 | 
			
		||||
                    // Battery is charging
 | 
			
		||||
                    data |= 1 << 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        ACPI_16(0x2A, battery_current);
 | 
			
		||||
 
 | 
			
		||||
@@ -11,10 +11,10 @@ SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
 | 
			
		||||
# 3 - INFO
 | 
			
		||||
# 4 - DEBUG
 | 
			
		||||
# 5 - TRACE
 | 
			
		||||
CFLAGS+=-DLEVEL=2
 | 
			
		||||
CFLAGS+=-DLEVEL=4
 | 
			
		||||
 | 
			
		||||
# Enable I2C debug on 0x76
 | 
			
		||||
CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
CFLAGS+=-DI2C_SMBUS=I2C_0
 | 
			
		||||
@@ -35,6 +35,10 @@ include $(SCRATCH_DIR)/scratch.mk
 | 
			
		||||
CFLAGS+=-I$(BUILD)/include
 | 
			
		||||
INCLUDE+=$(BUILD)/include/scratch.h
 | 
			
		||||
 | 
			
		||||
console:
 | 
			
		||||
	cargo build --manifest-path ecflash/Cargo.toml --example smfi --release
 | 
			
		||||
	sudo ecflash/target/release/examples/smfi
 | 
			
		||||
 | 
			
		||||
flash: $(BUILD)/ec.rom
 | 
			
		||||
	cargo build --manifest-path ecflash/Cargo.toml --example isp --release
 | 
			
		||||
	sudo ecflash/target/release/examples/isp --internal $<
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								src/board/system76/galp3-c/include/board/smfi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/board/system76/galp3-c/include/board/smfi.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#ifndef _BOARD_SMFI_H
 | 
			
		||||
#define _BOARD_SMFI_H
 | 
			
		||||
 | 
			
		||||
void smfi_init(void);
 | 
			
		||||
void smfi_event(void);
 | 
			
		||||
void smfi_debug(unsigned char byte);
 | 
			
		||||
 | 
			
		||||
#endif // _BOARD_SMFI_H
 | 
			
		||||
@@ -18,6 +18,7 @@
 | 
			
		||||
#include <board/ps2.h>
 | 
			
		||||
#include <board/pwm.h>
 | 
			
		||||
#include <board/smbus.h>
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
#include <common/version.h>
 | 
			
		||||
@@ -47,6 +48,7 @@ void init(void) {
 | 
			
		||||
    pmc_init();
 | 
			
		||||
    pwm_init();
 | 
			
		||||
    smbus_init();
 | 
			
		||||
    smfi_init();
 | 
			
		||||
 | 
			
		||||
    //TODO: INTC
 | 
			
		||||
}
 | 
			
		||||
@@ -115,7 +117,9 @@ void main(void) {
 | 
			
		||||
        }
 | 
			
		||||
        // Handles ACPI communication
 | 
			
		||||
        pmc_event(&PMC_1);
 | 
			
		||||
        // AP/EC communication over SMFI
 | 
			
		||||
        smfi_event();
 | 
			
		||||
        // Idle until next timer interrupt
 | 
			
		||||
        PCON |= 1;
 | 
			
		||||
        //Disabled until interrupts used: PCON |= 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,12 @@ void pnp_enable() {
 | 
			
		||||
    pnp_write(0x07, 0x05);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 | 
			
		||||
    // Enable SMFI
 | 
			
		||||
    pnp_write(0x07, 0x0F);
 | 
			
		||||
    pnp_write(0xF5, 0x00);
 | 
			
		||||
    pnp_write(0xF6, 0x01);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 | 
			
		||||
    // Enable SWUC
 | 
			
		||||
    pnp_write(0x07, 0x04);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								src/board/system76/galp3-c/smfi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								src/board/system76/galp3-c/smfi.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
#include <common/version.h>
 | 
			
		||||
 | 
			
		||||
// Shared memory host semaphore
 | 
			
		||||
volatile uint8_t __xdata __at(0x1022) SMHSR;
 | 
			
		||||
// Host RAM window control
 | 
			
		||||
volatile uint8_t __xdata __at(0x105A) HRAMWC;
 | 
			
		||||
// Host RAM window 0 base address
 | 
			
		||||
volatile uint8_t __xdata __at(0x105B) HRAMW0BA;
 | 
			
		||||
// Host RAM window 1 base address
 | 
			
		||||
volatile uint8_t __xdata __at(0x105C) HRAMW1BA;
 | 
			
		||||
// Host RAM window 0 access allow size
 | 
			
		||||
volatile uint8_t __xdata __at(0x105D) HRAMW0AAS;
 | 
			
		||||
// Host RAM window 1 access allow size
 | 
			
		||||
volatile uint8_t __xdata __at(0x105E) HRAMW1AAS;
 | 
			
		||||
 | 
			
		||||
static volatile uint8_t __xdata __at(0xC00) smfi_cmd[256];
 | 
			
		||||
static volatile uint8_t __xdata __at(0xD00) smfi_dbg[256];
 | 
			
		||||
 | 
			
		||||
enum SmfiCmd {
 | 
			
		||||
    SMFI_CMD_NONE = 0,
 | 
			
		||||
    SMFI_CMD_PROBE = 1,
 | 
			
		||||
    SMFI_CMD_BOARD = 2,
 | 
			
		||||
    SMFI_CMD_VERSION = 3,
 | 
			
		||||
    SMFI_CMD_DEBUG = 4,
 | 
			
		||||
    //TODO
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum SmfiRes {
 | 
			
		||||
    SMFI_RES_OK = 0,
 | 
			
		||||
    SMFI_RES_ERR = 1,
 | 
			
		||||
    //TODO
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void smfi_init(void) {
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    // Clear command region
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(smfi_cmd); i++) {
 | 
			
		||||
        smfi_cmd[i] = 0x00;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Clear debug region
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(smfi_dbg); i++) {
 | 
			
		||||
        smfi_dbg[i] = 0x00;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // H2RAM window 0 address 0xC00 - 0xCFF, read/write
 | 
			
		||||
    HRAMW0BA = 0xC0;
 | 
			
		||||
    HRAMW0AAS = 0x04;
 | 
			
		||||
 | 
			
		||||
    // H2RAM window 1 address 0xD00 - 0xDFF, read/write
 | 
			
		||||
    HRAMW1BA = 0xD0;
 | 
			
		||||
    HRAMW1AAS = 0x04;
 | 
			
		||||
 | 
			
		||||
    // Enable H2RAM window 0 and 1 using LPC I/O
 | 
			
		||||
    HRAMWC |= 0x13;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smfi_event(void) {
 | 
			
		||||
    int i;
 | 
			
		||||
    if (smfi_cmd[0]) {
 | 
			
		||||
        // Default to success
 | 
			
		||||
        smfi_cmd[1] = SMFI_RES_OK;
 | 
			
		||||
 | 
			
		||||
        switch (smfi_cmd[0]) {
 | 
			
		||||
            case SMFI_CMD_PROBE:
 | 
			
		||||
                // Signature
 | 
			
		||||
                smfi_cmd[2] = 0x76;
 | 
			
		||||
                smfi_cmd[3] = 0xEC;
 | 
			
		||||
                // Version
 | 
			
		||||
                smfi_cmd[4] = 0x01;
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_BOARD:
 | 
			
		||||
                strncpy(&smfi_cmd[2], board(), ARRAY_SIZE(smfi_cmd) - 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_VERSION:
 | 
			
		||||
                strncpy(&smfi_cmd[2], version(), ARRAY_SIZE(smfi_cmd) - 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_DEBUG:
 | 
			
		||||
                for (i = 2; i < ARRAY_SIZE(smfi_cmd) - 2; i++) {
 | 
			
		||||
                    uint8_t b = smfi_cmd[i];
 | 
			
		||||
                    if (b == 0) break;
 | 
			
		||||
                    putchar(b);
 | 
			
		||||
                }
 | 
			
		||||
            default:
 | 
			
		||||
                // Command not found
 | 
			
		||||
                smfi_cmd[1] = SMFI_RES_ERR;
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Mark command as finished
 | 
			
		||||
        smfi_cmd[0] = SMFI_CMD_NONE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smfi_debug(unsigned char byte) {
 | 
			
		||||
    int tail = (int)smfi_dbg[0];
 | 
			
		||||
    tail++;
 | 
			
		||||
    if (tail >= ARRAY_SIZE(smfi_dbg)) {
 | 
			
		||||
        tail = 1;
 | 
			
		||||
    }
 | 
			
		||||
    smfi_dbg[tail] = byte;
 | 
			
		||||
    smfi_dbg[0] = (uint8_t)tail;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    #include <mcs51/8051.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -10,6 +12,7 @@
 | 
			
		||||
 | 
			
		||||
int putchar(int c) {
 | 
			
		||||
    unsigned char byte = (unsigned char)c;
 | 
			
		||||
    smfi_debug(byte);
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    SBUF = byte;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -74,9 +74,15 @@ uint8_t acpi_read(uint8_t addr) {
 | 
			
		||||
        ACPI_16(0x1A, battery_full_capacity);
 | 
			
		||||
        ACPI_16(0x22, battery_design_voltage);
 | 
			
		||||
 | 
			
		||||
        // Bypass status test in ACPI - TODO
 | 
			
		||||
        case 0x26:
 | 
			
		||||
            data |= 1 << 1;
 | 
			
		||||
            // If AC adapter connected
 | 
			
		||||
            if (!gpio_get(&ACIN_N)) {
 | 
			
		||||
                // And battery is not fully charged
 | 
			
		||||
                if (!(battery_status & 0x0020)) {
 | 
			
		||||
                    // Battery is charging
 | 
			
		||||
                    data |= 1 << 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        ACPI_16(0x2A, battery_current);
 | 
			
		||||
 
 | 
			
		||||
@@ -11,10 +11,10 @@ SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
 | 
			
		||||
# 3 - INFO
 | 
			
		||||
# 4 - DEBUG
 | 
			
		||||
# 5 - TRACE
 | 
			
		||||
CFLAGS+=-DLEVEL=2
 | 
			
		||||
CFLAGS+=-DLEVEL=4
 | 
			
		||||
 | 
			
		||||
# Enable I2C debug on 0x76
 | 
			
		||||
CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
CFLAGS+=-DI2C_SMBUS=I2C_4
 | 
			
		||||
@@ -38,6 +38,10 @@ include $(SCRATCH_DIR)/scratch.mk
 | 
			
		||||
CFLAGS+=-I$(BUILD)/include
 | 
			
		||||
INCLUDE+=$(BUILD)/include/scratch.h
 | 
			
		||||
 | 
			
		||||
console:
 | 
			
		||||
	cargo build --manifest-path ecflash/Cargo.toml --example smfi --release
 | 
			
		||||
	sudo ecflash/target/release/examples/smfi
 | 
			
		||||
 | 
			
		||||
flash: $(BUILD)/ec.rom
 | 
			
		||||
	cargo build --manifest-path ecflash/Cargo.toml --example isp --release
 | 
			
		||||
	sudo ecflash/target/release/examples/isp --internal $<
 | 
			
		||||
 
 | 
			
		||||
@@ -3,5 +3,6 @@
 | 
			
		||||
 | 
			
		||||
void smfi_init(void);
 | 
			
		||||
void smfi_event(void);
 | 
			
		||||
void smfi_debug(unsigned char byte);
 | 
			
		||||
 | 
			
		||||
#endif // _BOARD_SMFI_H
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
#include <common/version.h>
 | 
			
		||||
 | 
			
		||||
@@ -26,6 +27,7 @@ enum SmfiCmd {
 | 
			
		||||
    SMFI_CMD_PROBE = 1,
 | 
			
		||||
    SMFI_CMD_BOARD = 2,
 | 
			
		||||
    SMFI_CMD_VERSION = 3,
 | 
			
		||||
    SMFI_CMD_DEBUG = 4,
 | 
			
		||||
    //TODO
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -62,6 +64,7 @@ void smfi_init(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smfi_event(void) {
 | 
			
		||||
    int i;
 | 
			
		||||
    if (smfi_cmd[0]) {
 | 
			
		||||
        // Default to success
 | 
			
		||||
        smfi_cmd[1] = SMFI_RES_OK;
 | 
			
		||||
@@ -80,19 +83,29 @@ void smfi_event(void) {
 | 
			
		||||
            case SMFI_CMD_VERSION:
 | 
			
		||||
                strncpy(&smfi_cmd[2], version(), ARRAY_SIZE(smfi_cmd) - 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SMFI_CMD_DEBUG:
 | 
			
		||||
                for (i = 2; i < ARRAY_SIZE(smfi_cmd) - 2; i++) {
 | 
			
		||||
                    uint8_t b = smfi_cmd[i];
 | 
			
		||||
                    if (b == 0) break;
 | 
			
		||||
                    putchar(b);
 | 
			
		||||
                }
 | 
			
		||||
            default:
 | 
			
		||||
                // Command not found
 | 
			
		||||
                smfi_cmd[1] = SMFI_RES_ERR;
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Mark command as finished
 | 
			
		||||
        smfi_cmd[0] = SMFI_CMD_NONE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (smfi_dbg[0]) {
 | 
			
		||||
        int i;
 | 
			
		||||
        for(i = 1; (i <= (int)smfi_dbg[0]) && (i < ARRAY_SIZE(smfi_dbg)); i++) {
 | 
			
		||||
            putchar(smfi_dbg[i]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Mark debug transaction as complete
 | 
			
		||||
        smfi_dbg[0] = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smfi_debug(unsigned char byte) {
 | 
			
		||||
    int tail = (int)smfi_dbg[0];
 | 
			
		||||
    tail++;
 | 
			
		||||
    if (tail >= ARRAY_SIZE(smfi_dbg)) {
 | 
			
		||||
        tail = 1;
 | 
			
		||||
    }
 | 
			
		||||
    smfi_dbg[tail] = byte;
 | 
			
		||||
    smfi_dbg[0] = (uint8_t)tail;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/smfi.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    #include <mcs51/8051.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -10,6 +12,7 @@
 | 
			
		||||
 | 
			
		||||
int putchar(int c) {
 | 
			
		||||
    unsigned char byte = (unsigned char)c;
 | 
			
		||||
    smfi_debug(byte);
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    SBUF = byte;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user