Port scratch changes to IT8587 platforms
This commit is contained in:
		@@ -19,6 +19,11 @@ CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
CFLAGS+=-DI2C_SMBUS=I2C_0
 | 
			
		||||
 | 
			
		||||
# Set scratch ROM parameters
 | 
			
		||||
SCRATCH_OFFSET=1024
 | 
			
		||||
SCRATCH_SIZE=1024
 | 
			
		||||
CFLAGS+=-DSCRATCH_OFFSET=$(SCRATCH_OFFSET) -DSCRATCH_SIZE=$(SCRATCH_SIZE)
 | 
			
		||||
 | 
			
		||||
# Add scratch ROM source
 | 
			
		||||
SCRATCH_DIR=$(BOARD_DIR)/scratch
 | 
			
		||||
SCRATCH_SRC=$(wildcard $(SCRATCH_DIR)/*.c)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,95 +1,28 @@
 | 
			
		||||
#include <8051.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
 | 
			
		||||
// Include scratch ROM, must be less than 4096 bytes, controlled by makefile
 | 
			
		||||
uint8_t __code scratch_rom[] = {
 | 
			
		||||
// Include scratch ROM
 | 
			
		||||
uint8_t __code __at(SCRATCH_OFFSET) scratch_rom[] = {
 | 
			
		||||
    #include <scratch.h>
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Scratch RAM 0, 1, 2, 3, and 4 are 4096 bytes total, located at 0x0000 bytes
 | 
			
		||||
volatile uint8_t __xdata __at(0x0000) scratch_ram[4096];
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1040) SCAR0L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1041) SCAR0M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1042) SCAR0H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1043) SCAR1L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1044) SCAR1M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1045) SCAR1H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1046) SCAR2L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1047) SCAR2M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1048) SCAR2H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1049) SCAR3L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104A) SCAR3M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104B) SCAR3H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x104C) SCAR4L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104D) SCAR4M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104E) SCAR4H;
 | 
			
		||||
 | 
			
		||||
// Create new segment located at 0x1000, after scratch ROM mapping
 | 
			
		||||
static void scratch_start(void) __naked {
 | 
			
		||||
	__asm
 | 
			
		||||
		.area SCRATCH (ABS,CODE)
 | 
			
		||||
	__endasm;
 | 
			
		||||
	__asm
 | 
			
		||||
		.org 0x1000
 | 
			
		||||
	__endasm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Enter or exit scratch ROM
 | 
			
		||||
void scratch_trampoline(void) {
 | 
			
		||||
    // Uses SCAR0, 1, 2, 3, and 4 which are mapped at 0x0000 in data space and are
 | 
			
		||||
    // 4096 bytes in size.
 | 
			
		||||
 | 
			
		||||
    // Disable interrupts
 | 
			
		||||
    EA = 0;
 | 
			
		||||
 | 
			
		||||
    // Ensure pdata is not used!
 | 
			
		||||
    int __data i;
 | 
			
		||||
    // Copy scratch ROM
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(scratch_rom) && i < ARRAY_SIZE(scratch_ram); i++) {
 | 
			
		||||
        scratch_ram[i] = scratch_rom[i];
 | 
			
		||||
    }
 | 
			
		||||
    // Use DMA mapping to copy flash data
 | 
			
		||||
    SCAR0H = 0x80;
 | 
			
		||||
    SCAR0L = (uint8_t)(SCRATCH_OFFSET);
 | 
			
		||||
    SCAR0M = (uint8_t)(SCRATCH_OFFSET >> 8);
 | 
			
		||||
    SCAR0H = 0;
 | 
			
		||||
 | 
			
		||||
    // Fill the rest with nop
 | 
			
		||||
    for (; i < ARRAY_SIZE(scratch_ram); i++) {
 | 
			
		||||
        scratch_ram[i] = 0x00;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Set scratch RAM 0 mapping at 0x0000 and enable
 | 
			
		||||
    SCAR0L = 0x00;
 | 
			
		||||
    SCAR0M = 0x00;
 | 
			
		||||
    SCAR0H = 0x00;
 | 
			
		||||
    // Set scratch RAM 1 mapping at 0x0800 and enable
 | 
			
		||||
    SCAR1L = 0x00;
 | 
			
		||||
    SCAR1M = 0x08;
 | 
			
		||||
    SCAR1H = 0x00;
 | 
			
		||||
    // Set scratch RAM 2 mapping at 0x0C00 and enable
 | 
			
		||||
    SCAR2L = 0x00;
 | 
			
		||||
    SCAR2M = 0x0C;
 | 
			
		||||
    SCAR2H = 0x00;
 | 
			
		||||
    // Set scratch RAM 3 mapping at 0x0E00 and enable
 | 
			
		||||
    SCAR3L = 0x00;
 | 
			
		||||
    SCAR3M = 0x0E;
 | 
			
		||||
    SCAR3H = 0x00;
 | 
			
		||||
    // Set scratch RAM 4 mapping at 0x0F00 and enable
 | 
			
		||||
    SCAR4L = 0x00;
 | 
			
		||||
    SCAR4M = 0x0F;
 | 
			
		||||
    SCAR4H = 0x00;
 | 
			
		||||
 | 
			
		||||
    // Jump to reset function
 | 
			
		||||
    __asm__("ljmp 0");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Finish segment located at 0x1000
 | 
			
		||||
static void scratch_end(void) __naked {
 | 
			
		||||
	__asm
 | 
			
		||||
		.area CSEG (REL,CODE)
 | 
			
		||||
	__endasm;
 | 
			
		||||
    // Jump to scratch reset function
 | 
			
		||||
    __asm__("ljmp " xstr(SCRATCH_OFFSET));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,11 +15,7 @@ struct Pmc {
 | 
			
		||||
    volatile uint8_t * control;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern struct Pmc __code PMC_1;
 | 
			
		||||
extern struct Pmc __code PMC_2;
 | 
			
		||||
extern struct Pmc __code PMC_3;
 | 
			
		||||
extern struct Pmc __code PMC_4;
 | 
			
		||||
extern struct Pmc __code PMC_5;
 | 
			
		||||
 | 
			
		||||
#define PMC_STS_OBF (1 << 0)
 | 
			
		||||
#define PMC_STS_IBF (1 << 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include <scratch/pmc.h>
 | 
			
		||||
@@ -81,22 +80,12 @@ void pmc_event(struct Pmc * pmc) {
 | 
			
		||||
                state = PMC_STATE_ACPI_WRITE;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xEC:
 | 
			
		||||
                printf_tiny("RESET\n");
 | 
			
		||||
                // Attempt to trigger watchdog reset
 | 
			
		||||
                ETWCFG |= (1 << 5);
 | 
			
		||||
                EWDKEYR = 0;
 | 
			
		||||
                // Clear processor caches
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                // Exit scratch ROM by going through trampoline
 | 
			
		||||
                __asm__("ljmp 0x1000");
 | 
			
		||||
               break;
 | 
			
		||||
                for (;;) {
 | 
			
		||||
                    // Attempt to trigger watchdog reset
 | 
			
		||||
                    ETWCFG |= (1 << 5);
 | 
			
		||||
                    EWDKEYR = 0;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            switch (state) {
 | 
			
		||||
@@ -123,7 +112,6 @@ void pmc_event(struct Pmc * pmc) {
 | 
			
		||||
 | 
			
		||||
// Main program while running in scratch ROM
 | 
			
		||||
void main(void) {
 | 
			
		||||
    printf_tiny("SCRATCH\n");
 | 
			
		||||
	for (;;) {
 | 
			
		||||
        pmc_event(&PMC_3);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,7 @@
 | 
			
		||||
    .control = &PM ## NUM ## CTL, \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct Pmc __code PMC_1 = PMC(1);
 | 
			
		||||
struct Pmc __code PMC_2 = PMC(2);
 | 
			
		||||
struct Pmc __code PMC_3 = PMC(3);
 | 
			
		||||
struct Pmc __code PMC_4 = PMC(4);
 | 
			
		||||
struct Pmc __code PMC_5 = PMC(5);
 | 
			
		||||
 | 
			
		||||
uint8_t pmc_status(struct Pmc * pmc) {
 | 
			
		||||
    return *(pmc->status);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +1,17 @@
 | 
			
		||||
# Enable I2C debugging
 | 
			
		||||
SCRATCH_SRC+=\
 | 
			
		||||
	src/common/i2c.c \
 | 
			
		||||
	src/ec/$(EC)/i2c.c
 | 
			
		||||
SCRATCH_INCLUDE+=\
 | 
			
		||||
	src/common/include/common/*.h \
 | 
			
		||||
	src/ec/$(EC)/include/ec/*.h
 | 
			
		||||
SCRATCH_CFLAGS+=\
 | 
			
		||||
	-Isrc/common/include \
 | 
			
		||||
	-Isrc/ec/$(EC)/include
 | 
			
		||||
 | 
			
		||||
# Enable I2C debug on 0x76
 | 
			
		||||
SCRATCH_CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
SCRATCH_CFLAGS+=-DI2C_SMBUS=I2C_0
 | 
			
		||||
 | 
			
		||||
SCRATCH_BUILD=$(BUILD)/scratch
 | 
			
		||||
SCRATCH_OBJ=$(patsubst src/%.c,$(SCRATCH_BUILD)/%.rel,$(SCRATCH_SRC))
 | 
			
		||||
SCRATCH_CC=\
 | 
			
		||||
	sdcc \
 | 
			
		||||
	-mmcs51 \
 | 
			
		||||
	--model-small \
 | 
			
		||||
	--code-size 4096 \
 | 
			
		||||
	--code-loc $(SCRATCH_OFFSET) \
 | 
			
		||||
	--code-size $(SCRATCH_SIZE) \
 | 
			
		||||
	--Werror
 | 
			
		||||
 | 
			
		||||
# Convert from binary file to C header
 | 
			
		||||
$(BUILD)/include/scratch.h: $(SCRATCH_BUILD)/scratch.rom
 | 
			
		||||
	@mkdir -p $(@D)
 | 
			
		||||
	xxd --include < $< > $@
 | 
			
		||||
	xxd -s $(SCRATCH_OFFSET) --include < $< > $@
 | 
			
		||||
 | 
			
		||||
# Convert from Intel Hex file to binary file
 | 
			
		||||
$(SCRATCH_BUILD)/scratch.rom: $(SCRATCH_BUILD)/scratch.ihx
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    #include <mcs51/8051.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef I2C_DEBUGGER
 | 
			
		||||
    #include <ec/i2c.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int putchar(int c) {
 | 
			
		||||
    unsigned char byte = (unsigned char)c;
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    SBUF = byte;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef I2C_DEBUGGER
 | 
			
		||||
    i2c_send(&I2C_SMBUS, I2C_DEBUGGER, &byte, 1);
 | 
			
		||||
#endif
 | 
			
		||||
    return (int)byte;
 | 
			
		||||
}
 | 
			
		||||
@@ -19,6 +19,11 @@ CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
CFLAGS+=-DI2C_SMBUS=I2C_0
 | 
			
		||||
 | 
			
		||||
# Set scratch ROM parameters
 | 
			
		||||
SCRATCH_OFFSET=1024
 | 
			
		||||
SCRATCH_SIZE=1024
 | 
			
		||||
CFLAGS+=-DSCRATCH_OFFSET=$(SCRATCH_OFFSET) -DSCRATCH_SIZE=$(SCRATCH_SIZE)
 | 
			
		||||
 | 
			
		||||
# Add scratch ROM source
 | 
			
		||||
SCRATCH_DIR=$(BOARD_DIR)/scratch
 | 
			
		||||
SCRATCH_SRC=$(wildcard $(SCRATCH_DIR)/*.c)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,95 +1,28 @@
 | 
			
		||||
#include <8051.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
 | 
			
		||||
// Include scratch ROM, must be less than 4096 bytes, controlled by makefile
 | 
			
		||||
uint8_t __code scratch_rom[] = {
 | 
			
		||||
// Include scratch ROM
 | 
			
		||||
uint8_t __code __at(SCRATCH_OFFSET) scratch_rom[] = {
 | 
			
		||||
    #include <scratch.h>
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Scratch RAM 0, 1, 2, 3, and 4 are 4096 bytes total, located at 0x0000 bytes
 | 
			
		||||
volatile uint8_t __xdata __at(0x0000) scratch_ram[4096];
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1040) SCAR0L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1041) SCAR0M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1042) SCAR0H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1043) SCAR1L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1044) SCAR1M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1045) SCAR1H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1046) SCAR2L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1047) SCAR2M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x1048) SCAR2H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x1049) SCAR3L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104A) SCAR3M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104B) SCAR3H;
 | 
			
		||||
 | 
			
		||||
volatile uint8_t __xdata __at(0x104C) SCAR4L;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104D) SCAR4M;
 | 
			
		||||
volatile uint8_t __xdata __at(0x104E) SCAR4H;
 | 
			
		||||
 | 
			
		||||
// Create new segment located at 0x1000, after scratch ROM mapping
 | 
			
		||||
static void scratch_start(void) __naked {
 | 
			
		||||
	__asm
 | 
			
		||||
		.area SCRATCH (ABS,CODE)
 | 
			
		||||
	__endasm;
 | 
			
		||||
	__asm
 | 
			
		||||
		.org 0x1000
 | 
			
		||||
	__endasm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Enter or exit scratch ROM
 | 
			
		||||
void scratch_trampoline(void) {
 | 
			
		||||
    // Uses SCAR0, 1, 2, 3, and 4 which are mapped at 0x0000 in data space and are
 | 
			
		||||
    // 4096 bytes in size.
 | 
			
		||||
 | 
			
		||||
    // Disable interrupts
 | 
			
		||||
    EA = 0;
 | 
			
		||||
 | 
			
		||||
    // Ensure pdata is not used!
 | 
			
		||||
    int __data i;
 | 
			
		||||
    // Copy scratch ROM
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(scratch_rom) && i < ARRAY_SIZE(scratch_ram); i++) {
 | 
			
		||||
        scratch_ram[i] = scratch_rom[i];
 | 
			
		||||
    }
 | 
			
		||||
    // Use DMA mapping to copy flash data
 | 
			
		||||
    SCAR0H = 0x80;
 | 
			
		||||
    SCAR0L = (uint8_t)(SCRATCH_OFFSET);
 | 
			
		||||
    SCAR0M = (uint8_t)(SCRATCH_OFFSET >> 8);
 | 
			
		||||
    SCAR0H = 0;
 | 
			
		||||
 | 
			
		||||
    // Fill the rest with nop
 | 
			
		||||
    for (; i < ARRAY_SIZE(scratch_ram); i++) {
 | 
			
		||||
        scratch_ram[i] = 0x00;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Set scratch RAM 0 mapping at 0x0000 and enable
 | 
			
		||||
    SCAR0L = 0x00;
 | 
			
		||||
    SCAR0M = 0x00;
 | 
			
		||||
    SCAR0H = 0x00;
 | 
			
		||||
    // Set scratch RAM 1 mapping at 0x0800 and enable
 | 
			
		||||
    SCAR1L = 0x00;
 | 
			
		||||
    SCAR1M = 0x08;
 | 
			
		||||
    SCAR1H = 0x00;
 | 
			
		||||
    // Set scratch RAM 2 mapping at 0x0C00 and enable
 | 
			
		||||
    SCAR2L = 0x00;
 | 
			
		||||
    SCAR2M = 0x0C;
 | 
			
		||||
    SCAR2H = 0x00;
 | 
			
		||||
    // Set scratch RAM 3 mapping at 0x0E00 and enable
 | 
			
		||||
    SCAR3L = 0x00;
 | 
			
		||||
    SCAR3M = 0x0E;
 | 
			
		||||
    SCAR3H = 0x00;
 | 
			
		||||
    // Set scratch RAM 4 mapping at 0x0F00 and enable
 | 
			
		||||
    SCAR4L = 0x00;
 | 
			
		||||
    SCAR4M = 0x0F;
 | 
			
		||||
    SCAR4H = 0x00;
 | 
			
		||||
 | 
			
		||||
    // Jump to reset function
 | 
			
		||||
    __asm__("ljmp 0");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Finish segment located at 0x1000
 | 
			
		||||
static void scratch_end(void) __naked {
 | 
			
		||||
	__asm
 | 
			
		||||
		.area CSEG (REL,CODE)
 | 
			
		||||
	__endasm;
 | 
			
		||||
    // Jump to scratch reset function
 | 
			
		||||
    __asm__("ljmp " xstr(SCRATCH_OFFSET));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,11 +15,7 @@ struct Pmc {
 | 
			
		||||
    volatile uint8_t * control;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern struct Pmc __code PMC_1;
 | 
			
		||||
extern struct Pmc __code PMC_2;
 | 
			
		||||
extern struct Pmc __code PMC_3;
 | 
			
		||||
extern struct Pmc __code PMC_4;
 | 
			
		||||
extern struct Pmc __code PMC_5;
 | 
			
		||||
 | 
			
		||||
#define PMC_STS_OBF (1 << 0)
 | 
			
		||||
#define PMC_STS_IBF (1 << 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include <scratch/pmc.h>
 | 
			
		||||
@@ -81,22 +80,12 @@ void pmc_event(struct Pmc * pmc) {
 | 
			
		||||
                state = PMC_STATE_ACPI_WRITE;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xEC:
 | 
			
		||||
                printf_tiny("RESET\n");
 | 
			
		||||
                // Attempt to trigger watchdog reset
 | 
			
		||||
                ETWCFG |= (1 << 5);
 | 
			
		||||
                EWDKEYR = 0;
 | 
			
		||||
                // Clear processor caches
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                __asm__("mov 0xf7, #1");
 | 
			
		||||
                __asm__("nop");
 | 
			
		||||
                // Exit scratch ROM by going through trampoline
 | 
			
		||||
                __asm__("ljmp 0x1000");
 | 
			
		||||
               break;
 | 
			
		||||
                for (;;) {
 | 
			
		||||
                    // Attempt to trigger watchdog reset
 | 
			
		||||
                    ETWCFG |= (1 << 5);
 | 
			
		||||
                    EWDKEYR = 0;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            switch (state) {
 | 
			
		||||
@@ -123,7 +112,6 @@ void pmc_event(struct Pmc * pmc) {
 | 
			
		||||
 | 
			
		||||
// Main program while running in scratch ROM
 | 
			
		||||
void main(void) {
 | 
			
		||||
    printf_tiny("SCRATCH\n");
 | 
			
		||||
	for (;;) {
 | 
			
		||||
        pmc_event(&PMC_3);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,7 @@
 | 
			
		||||
    .control = &PM ## NUM ## CTL, \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct Pmc __code PMC_1 = PMC(1);
 | 
			
		||||
struct Pmc __code PMC_2 = PMC(2);
 | 
			
		||||
struct Pmc __code PMC_3 = PMC(3);
 | 
			
		||||
struct Pmc __code PMC_4 = PMC(4);
 | 
			
		||||
struct Pmc __code PMC_5 = PMC(5);
 | 
			
		||||
 | 
			
		||||
uint8_t pmc_status(struct Pmc * pmc) {
 | 
			
		||||
    return *(pmc->status);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +1,17 @@
 | 
			
		||||
# Enable I2C debugging
 | 
			
		||||
SCRATCH_SRC+=\
 | 
			
		||||
	src/common/i2c.c \
 | 
			
		||||
	src/ec/$(EC)/i2c.c
 | 
			
		||||
SCRATCH_INCLUDE+=\
 | 
			
		||||
	src/common/include/common/*.h \
 | 
			
		||||
	src/ec/$(EC)/include/ec/*.h
 | 
			
		||||
SCRATCH_CFLAGS+=\
 | 
			
		||||
	-Isrc/common/include \
 | 
			
		||||
	-Isrc/ec/$(EC)/include
 | 
			
		||||
 | 
			
		||||
# Enable I2C debug on 0x76
 | 
			
		||||
SCRATCH_CFLAGS+=-DI2C_DEBUGGER=0x76
 | 
			
		||||
 | 
			
		||||
# Set battery I2C bus
 | 
			
		||||
SCRATCH_CFLAGS+=-DI2C_SMBUS=I2C_0
 | 
			
		||||
 | 
			
		||||
SCRATCH_BUILD=$(BUILD)/scratch
 | 
			
		||||
SCRATCH_OBJ=$(patsubst src/%.c,$(SCRATCH_BUILD)/%.rel,$(SCRATCH_SRC))
 | 
			
		||||
SCRATCH_CC=\
 | 
			
		||||
	sdcc \
 | 
			
		||||
	-mmcs51 \
 | 
			
		||||
	--model-small \
 | 
			
		||||
	--code-size 4096 \
 | 
			
		||||
	--code-loc $(SCRATCH_OFFSET) \
 | 
			
		||||
	--code-size $(SCRATCH_SIZE) \
 | 
			
		||||
	--Werror
 | 
			
		||||
 | 
			
		||||
# Convert from binary file to C header
 | 
			
		||||
$(BUILD)/include/scratch.h: $(SCRATCH_BUILD)/scratch.rom
 | 
			
		||||
	@mkdir -p $(@D)
 | 
			
		||||
	xxd --include < $< > $@
 | 
			
		||||
	xxd -s $(SCRATCH_OFFSET) --include < $< > $@
 | 
			
		||||
 | 
			
		||||
# Convert from Intel Hex file to binary file
 | 
			
		||||
$(SCRATCH_BUILD)/scratch.rom: $(SCRATCH_BUILD)/scratch.ihx
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    #include <mcs51/8051.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef I2C_DEBUGGER
 | 
			
		||||
    #include <ec/i2c.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int putchar(int c) {
 | 
			
		||||
    unsigned char byte = (unsigned char)c;
 | 
			
		||||
#ifdef SERIAL_DEBUGGER
 | 
			
		||||
    SBUF = byte;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef I2C_DEBUGGER
 | 
			
		||||
    i2c_send(&I2C_SMBUS, I2C_DEBUGGER, &byte, 1);
 | 
			
		||||
#endif
 | 
			
		||||
    return (int)byte;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user