ec/purism: Remove copied code from system76
This code is identical except for some renaming. Change-Id: I93795a6087ce0daca27c0d5038a1febd6ca9c775 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/56522 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
This commit is contained in:
		
				
					committed by
					
						
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							da68c9d378
						
					
				
				
					commit
					08e9a4f812
				
			@@ -1,6 +1,6 @@
 | 
			
		||||
ifeq ($(CONFIG_EC_LIBREM_EC),y)
 | 
			
		||||
 | 
			
		||||
all-y += librem_ec.c
 | 
			
		||||
smm-$(CONFIG_DEBUG_SMI) += librem_ec.c
 | 
			
		||||
all-y += ../../system76/ec/system76_ec.c
 | 
			
		||||
smm-$(CONFIG_DEBUG_SMI) += ../../system76/ec/system76_ec.c
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
			
		||||
 | 
			
		||||
#include <arch/io.h>
 | 
			
		||||
#include <console/system76_ec.h>
 | 
			
		||||
#include <timer.h>
 | 
			
		||||
 | 
			
		||||
// This is the command region for Librem EC firmware. It must be
 | 
			
		||||
// enabled for LPC in the mainboard.
 | 
			
		||||
#define LIBREM_EC_BASE 0x0E00
 | 
			
		||||
#define LIBREM_EC_SIZE 256
 | 
			
		||||
 | 
			
		||||
#define REG_CMD 0
 | 
			
		||||
#define REG_RESULT 1
 | 
			
		||||
 | 
			
		||||
// When command register is 0, command is complete
 | 
			
		||||
#define CMD_FINISHED 0
 | 
			
		||||
 | 
			
		||||
// Print command. Registers are unique for each command
 | 
			
		||||
#define CMD_PRINT 4
 | 
			
		||||
#define CMD_PRINT_REG_FLAGS 2
 | 
			
		||||
#define CMD_PRINT_REG_LEN 3
 | 
			
		||||
#define CMD_PRINT_REG_DATA 4
 | 
			
		||||
 | 
			
		||||
static inline uint8_t system76_ec_read(uint8_t addr)
 | 
			
		||||
{
 | 
			
		||||
	return inb(LIBREM_EC_BASE + (uint16_t)addr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void system76_ec_write(uint8_t addr, uint8_t data)
 | 
			
		||||
{
 | 
			
		||||
	outb(data, LIBREM_EC_BASE + (uint16_t)addr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void system76_ec_init(void)
 | 
			
		||||
{
 | 
			
		||||
	// Clear entire command region
 | 
			
		||||
	for (int i = 0; i < LIBREM_EC_SIZE; i++)
 | 
			
		||||
		system76_ec_write((uint8_t)i, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void system76_ec_flush(void)
 | 
			
		||||
{
 | 
			
		||||
	system76_ec_write(REG_CMD, CMD_PRINT);
 | 
			
		||||
 | 
			
		||||
	// Wait for command completion, for up to 10 milliseconds, with a
 | 
			
		||||
	// test period of 1 microsecond
 | 
			
		||||
	wait_us(10000, system76_ec_read(REG_CMD) == CMD_FINISHED);
 | 
			
		||||
 | 
			
		||||
	system76_ec_write(CMD_PRINT_REG_LEN, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void system76_ec_print(uint8_t byte)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t len = system76_ec_read(CMD_PRINT_REG_LEN);
 | 
			
		||||
	system76_ec_write(CMD_PRINT_REG_DATA + len, byte);
 | 
			
		||||
	system76_ec_write(CMD_PRINT_REG_LEN, len + 1);
 | 
			
		||||
 | 
			
		||||
	// If we hit the end of the buffer, or were given a newline, flush
 | 
			
		||||
	if (byte == '\n' || len >= (LIBREM_EC_SIZE - CMD_PRINT_REG_DATA))
 | 
			
		||||
		system76_ec_flush();
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user