Ejemplo n.º 1
0
int mainboard_smi_apmc(u8 apmc)
{
	ec_set_ports(EC_MAILBOX_PORT, EC_MAILBOX_PORT+1);

	switch (apmc) {
	case 0xe1: /* ACPI ENABLE */
		send_ec_command(EC_SMI_DISABLE);
		send_ec_command(EC_ACPI_ENABLE);
		break;

	case 0x1e: /* ACPI DISABLE */
		send_ec_command(EC_SMI_ENABLE);
		send_ec_command(EC_ACPI_DISABLE);
		break;

	case APMC_FINALIZE:
		if (mainboard_finalized) {
			printk(BIOS_DEBUG, "SMI#: Already finalized\n");
			return 0;
		}

		intel_me_finalize_smm();
		intel_pch_finalize_smm();
		intel_sandybridge_finalize_smm();
		intel_model_206ax_finalize_smm();

		mainboard_finalized = 1;
		break;
	}
	return 0;
}
Ejemplo n.º 2
0
void mainboard_suspend_resume(void)
{
	/* Call SMM finalize() handlers before resume */
	outb(0xcb, 0xb2);

	/* Enable EC ACPI mode for the OS before resume */
	send_ec_command(EC_SMI_DISABLE);
	send_ec_command(EC_ACPI_ENABLE);
}
Ejemplo n.º 3
0
int ec_ext_write(uint16_t addr, uint8_t data)
{
	send_ec_command(WR_EC);
	send_ec_data(0x02);
	send_ec_data(addr & 0xff);
	send_ec_command(WX_EC);
	send_ec_data(addr >> 8);

	return send_ec_data(data);
}
Ejemplo n.º 4
0
uint8_t ec_ext_read(uint16_t addr)
{
	send_ec_command(WR_EC);
	send_ec_data(0x02);
	send_ec_data(addr & 0xff);
	send_ec_command(RX_EC);
	send_ec_data(addr >> 8);

	return recv_ec_data();
}
Ejemplo n.º 5
0
static void ec_setup(void)
{
	/* Thermal limits?  Values are from ectool's ram dump. */
	ec_write(0xd1, 0x57); /* CPUH */
	ec_write(0xd2, 0xc9); /* CPUL */
	ec_write(0xd4, 0x64); /* SYSH */
	ec_write(0xd5, 0xc9); /* SYSL */

	send_ec_command(0x04); /* Set_SMI_Enable */
	send_ec_command(0xab); /* Set_ACPI_Disable */
	send_ec_command(0xac); /* Clr_SYS_Flag? well, why not? */
	send_ec_command(0xad); /* Set_Thml_Value */
}
Ejemplo n.º 6
0
void mainboard_smi_gpi(u16 gpi_sts)
{
	if (gpi_sts & (1 << EC_SMI_GPI)) {
		/* Process all pending EC requests */
		ec_set_ports(EC_MAILBOX_PORT, EC_MAILBOX_PORT+1);
		while (mainboard_smi_ec() != 0xff);

		/* The EC may keep asserting SMI# for some
		 * period unless we kick it here.
		 */
		send_ec_command(EC_SMI_DISABLE);
		send_ec_command(EC_SMI_ENABLE);
	}
}
Ejemplo n.º 7
0
int mainboard_smi_apmc(u8 apmc)
{
    switch (apmc) {
    case APM_CNT_ACPI_ENABLE:
        send_ec_command(0x05); /* Set_SMI_Disable */
        send_ec_command(0xaa); /* Set_ACPI_Enable */
        break;

    case APM_CNT_ACPI_DISABLE:
        send_ec_command(0x04); /* Set_SMI_Enable */
        send_ec_command(0xab); /* Set_ACPI_Disable */
        break;
    }
    return 0;
}
Ejemplo n.º 8
0
uint8_t ec_read(uint8_t addr)
{
	send_ec_command(RD_EC);
	send_ec_data(addr);

	return recv_ec_data();
}
Ejemplo n.º 9
0
Archivo: ec.c Proyecto: jaanek/coreboot
u8 ec_read(u8 addr)
{
	send_ec_command(0x80);
	send_ec_data(addr);

	return recv_ec_data();
}
Ejemplo n.º 10
0
int ec_write(uint8_t addr, uint8_t data)
{
	send_ec_command(WR_EC);
	send_ec_data(addr);

	return send_ec_data(data);
}
Ejemplo n.º 11
0
Archivo: ec.c Proyecto: 0ida/coreboot
/**
 * Sets the PWM rate of a fan in IT8516E_MODE_PWM
 *
 * @param idx Selects the fan; 0: CPU, 1: System
 * @param pwm PWM rate measured in 255ths
 */
static void it8516e_set_fan_pwm(const u8 idx, const u8 pwm)
{
	if (send_ec_command(IT8516E_CMD_SET_FAN_PWM))
		return;
	if (send_ec_data(idx))
		return;
	send_ec_data(pwm);
}
Ejemplo n.º 12
0
Archivo: ec.c Proyecto: 0ida/coreboot
/**
 * Sets the operating mode of a fan
 *
 * @param idx Selects the fan; 0: CPU, 1: System
 * @param mode Mode to set
 */
static void it8516e_set_fan_mode(const u8 idx, const u8 mode)
{
	if (send_ec_command(IT8516E_CMD_SET_FAN_MODE))
		return;
	if (send_ec_data(idx))
		return;
	send_ec_data(mode);
}
Ejemplo n.º 13
0
Archivo: ec.c Proyecto: 0ida/coreboot
/**
 * Sets the minimum and maximum PWM rate of a fan in IT8516E_MODE_THERMAL
 *
 * @param idx Selects the fan; 0: CPU, 1: System
 * @param min Minimum PWM rate in %
 * @param max Maximum PWM rate in %
 */
static void it8516e_set_fan_limits(const u8 idx, const u8 min, const u8 max)
{
	if (send_ec_command(IT8516E_CMD_SET_FAN_LIMITS))
		return;
	if (send_ec_data(idx))
		return;
	if (send_ec_data(min))
		return;
	send_ec_data(max);
}
Ejemplo n.º 14
0
Archivo: ec.c Proyecto: 0ida/coreboot
/**
 * Sets the target speed in RPM for a fan in IT8516E_MODE_SPEED
 *
 * @param idx Selects the fan; 0: CPU, 1: System
 * @param speed Speed in RPM
 */
static void it8516e_set_fan_speed(const u8 idx, const u16 speed)
{
	if (send_ec_command(IT8516E_CMD_SET_FAN_SPEED))
		return;
	if (send_ec_data(idx))
		return;
	if (send_ec_data(speed & 0xff))
		return;
	send_ec_data(speed >> 8);
}
Ejemplo n.º 15
0
Archivo: ec.c Proyecto: 0ida/coreboot
/**
 * Sets the target temperature for a fan in IT8516E_MODE_THERMAL
 *
 * @param idx Selects the fan; 0: CPU, 1: System
 * @param temp Temperature in 64ths degree C
 */
static void it8516e_set_fan_temperature(const u8 idx, const u16 temp)
{
	if (send_ec_command(IT8516E_CMD_SET_FAN_TEMP))
		return;
	if (send_ec_data(idx))
		return;
	if (send_ec_data(temp & 0xff))
		return;
	send_ec_data(temp >> 8);
}
Ejemplo n.º 16
0
/*
 * Get Board ID via EC I/O port write/read
 */
int get_board_id(void)
{
	uint8_t buffer[2];
	uint8_t index;
	if (send_ec_command(EC_FAB_ID_CMD) == 0) {
		for (index = 0; index < sizeof(buffer); index++)
			buffer[index] = recv_ec_data();
		return (buffer[1] << 8) | buffer[0];
	}
	return -1;
}
Ejemplo n.º 17
0
void lumpy_ec_init(void)
{
	printk(BIOS_DEBUG, "lumpy_ec_init\n");

	if (acpi_slp_type == 3)
		return;

	/*
	 * Enable EC control of fan speed.
	 *
	 * This will be changed to OS control in ACPI EC _REG
	 * method when the OS is ready to control the fan.
	 */
	ec_write(EC_FAN_SPEED, 0);

	send_ec_command_data(EC_BATTERY_MODE, EC_BATTERY_MODE_NORMAL);
	send_ec_command_data(EC_POWER_BUTTON_MODE, EC_POWER_BUTTON_MODE_OS);
	send_ec_command(EC_SMI_DISABLE);
	send_ec_command(EC_ACPI_ENABLE);
	send_ec_command(EC_BACKLIGHT_ON);
}
Ejemplo n.º 18
0
/* Get Board ID via EC I/O port write/read */
int get_board_id(void)
{
	MAYBE_STATIC int id = -1;

	if (id < 0) {
		if (CONFIG(EC_GOOGLE_CHROMEEC))
			id = get_board_id_via_ext_ec();
		else{
			uint8_t buffer[2];
			uint8_t index;
			if (send_ec_command(EC_FAB_ID_CMD) == 0) {
				for (index = 0; index < sizeof(buffer); index++)
					buffer[index] = recv_ec_data();
				id = (buffer[0] << 8) | buffer[1];
			}
		}
	}

	return id;
}
Ejemplo n.º 19
0
u8 read_ec_command_byte(u8 command)
{
	send_ec_command(command);
	return __ec_read(EC_MAILBOX_DATA);
}
Ejemplo n.º 20
0
Archivo: ec.c Proyecto: 0ida/coreboot
/**
 * Sets the type of the external temperature sensor used
 *
 * @param type Type of sensor to set
 */
static void it8516e_set_systemp_type(const u8 type)
{
	if (send_ec_command(IT8516E_CMD_SET_SYSTEMP_TYPE))
		return;
	send_ec_data(type);
}
Ejemplo n.º 21
0
void mainboard_suspend_resume(void)
{
	/* Enable EC ACPI mode for the OS before resume */
	send_ec_command(EC_SMI_DISABLE);
	send_ec_command(EC_ACPI_ENABLE);
}
Ejemplo n.º 22
0
Archivo: ec.c Proyecto: jaanek/coreboot
int ec_write(u8 addr, u8 data)
{
	send_ec_command(0x81);
	send_ec_data(addr);
	return send_ec_data(data);
}
Ejemplo n.º 23
0
Archivo: ec.c Proyecto: XVilka/coreboot
u8 ec_query(void)
{
	send_ec_command(0x84);
	return recv_ec_data();
}
Ejemplo n.º 24
0
uint8_t ec_query(void)
{
	send_ec_command(QR_EC);
	return recv_ec_data();
}