Fabian Kunkel (fabi@adv.bruhnspace.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10312
-gerrit
commit 2a6bd42122f983eab5bde9a27bd9050a2d59c0be Author: Fabian Kunkel fabi@adv.bruhnspace.com Date: Tue May 26 15:37:54 2015 +0200
superio/fintek: Add support for Fintek F81866AD-I
This patch adds support for the Fintek F81866AD-I SuperIO, which is very similar to the fintek/f81865f. This code adds some fan control support, inspired by fintek/f71869ad. Furthermore its possible to change the temp sensor type (thermistor or diode). Datasheet: Name: F81866D/A-I, Release Date: Jan 2012, Version: V0.12P Link: http://www.alldatasheet.com/datasheet-pdf/pdf/459085/FINTEK/F81866AD-I.html
Change-Id: Ibb5732f1ef475fe6ef18ad7521d22b977595c3d8 Signed-off-by: Fabian Kunkel fabi@adv.bruhnspace.com --- src/superio/fintek/f81866d/Makefile.inc | 2 +- src/superio/fintek/f81866d/chip.h | 54 ++++++++++++++++++ src/superio/fintek/f81866d/f81866d.h | 4 +- src/superio/fintek/f81866d/f81866d_hwm.c | 71 +++++++++--------------- src/superio/fintek/f81866d/f81866d_temp_sensor.c | 47 ---------------- src/superio/fintek/f81866d/fintek_internal.h | 2 +- src/superio/fintek/f81866d/superio.c | 9 +-- 7 files changed, 88 insertions(+), 101 deletions(-)
diff --git a/src/superio/fintek/f81866d/Makefile.inc b/src/superio/fintek/f81866d/Makefile.inc index dd69894..2023b6c 100644 --- a/src/superio/fintek/f81866d/Makefile.inc +++ b/src/superio/fintek/f81866d/Makefile.inc @@ -1,6 +1,7 @@ ## ## This file is part of the coreboot project. ## +## Copyright (C) 2014 Edward O'Callaghan eocallaghan@alterapraxis.com ## Copyright (C) 2015 BAP - Bruhnspace Advanced Projects ## (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) ## @@ -19,6 +20,5 @@ ## Foundation, Inc. ##
-ramstage-$(CONFIG_SUPERIO_FINTEK_F81866D) += f81866d_temp_sensor.c ramstage-$(CONFIG_SUPERIO_FINTEK_F81866D) += f81866d_hwm.c ramstage-$(CONFIG_SUPERIO_FINTEK_F81866D) += superio.c diff --git a/src/superio/fintek/f81866d/chip.h b/src/superio/fintek/f81866d/chip.h new file mode 100644 index 0000000..9c9e799 --- /dev/null +++ b/src/superio/fintek/f81866d/chip.h @@ -0,0 +1,54 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Edward O'Callaghan eocallaghan@alterapraxis.com + * Copyright (C) 2015 BAP - Bruhnspace Advanced Projects + * (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc. + */ + +#ifndef SUPERIO_FINTEK_F81866D_CHIP_H +#define SUPERIO_FINTEK_F81866D_CHIP_H + +#include <stdint.h> + +struct superio_fintek_f81866d_config { + + /* AMD TSI */ + uint8_t hwm_amd_tsi_addr; + uint8_t hwm_amd_tsi_control; + + /* Fan control */ + uint8_t hwm_fan_select; + uint8_t hwm_fan_mode; + uint8_t hwm_fan3_control; + uint8_t hwm_fan2_temp_map_select; + + uint8_t hwm_fan2_bound1; + uint8_t hwm_fan2_bound2; + uint8_t hwm_fan2_bound3; + uint8_t hwm_fan2_bound4; + uint8_t hwm_fan2_seg1_speed; + uint8_t hwm_fan2_seg2_speed; + uint8_t hwm_fan2_seg3_speed; + uint8_t hwm_fan2_seg4_speed; + uint8_t hwm_fan2_seg5_speed; + + /* Temp sensor type */ + uint8_t hwm_temp_sens_type; +}; + +#endif /* SUPERIO_FINTEK_F81866D_CHIP_H */ diff --git a/src/superio/fintek/f81866d/f81866d.h b/src/superio/fintek/f81866d/f81866d.h index 055bb9e..70a33b6 100644 --- a/src/superio/fintek/f81866d/f81866d.h +++ b/src/superio/fintek/f81866d/f81866d.h @@ -1,6 +1,7 @@ /* * This file is part of the coreboot project. * + * Copyright (C) 2014 Edward O'Callaghan eocallaghan@alterapraxis.com * Copyright (C) 2015 BAP - Bruhnspace Advanced Projects * (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) * @@ -21,7 +22,8 @@
/* * Datasheet: - * - Name: F81866D/A-I + * - Name: F81866D/A-I, Release Date: Jan 2012, Version: V0.12P + * - Link: http://www.alldatasheet.com/datasheet-pdf/pdf/459085/FINTEK/F81866AD-I.html */
#ifndef SUPERIO_FINTEK_F81866_H diff --git a/src/superio/fintek/f81866d/f81866d_hwm.c b/src/superio/fintek/f81866d/f81866d_hwm.c index 073b371..bc24468 100644 --- a/src/superio/fintek/f81866d/f81866d_hwm.c +++ b/src/superio/fintek/f81866d/f81866d_hwm.c @@ -1,6 +1,7 @@ /* * This file is part of the coreboot project. * + * Copyright (C) 2014 Edward O'Callaghan eocallaghan@alterapraxis.com * Copyright (C) 2015 BAP - Bruhnspace Advanced Projects * (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) * @@ -28,9 +29,11 @@ #include <device/device.h> #include <device/pnp.h> #include "fintek_internal.h" +#include "chip.h"
-// Set to AMD +/* Register addresses */ +// Choose between AMD and Intel #define HWM_AMD_TSI_ADDR 0x08 #define HWM_AMD_TSI_CONTROL_REG 0x0A
@@ -41,39 +44,20 @@ #define HWM_FAN3_CONTROL 0x9A #define HWM_FAN_SEL 0x94 #define HWM_FAN_MODE 0x96 -#define HWM_FAN_FAST_FILTER 0x97 - -// Fan expected speed -#define HWM_FAN2_EX_SPEED1 0xB2 -#define HWM_FAN2_EX_SPEED2 0xB3 +#define HWM_FAN2_TEMP_MAP_SEL 0xBF
-// 4 Boundries +// Fan 2 - 4 Boundries #define HWM_FAN2_BOUND1 0xB6 #define HWM_FAN2_BOUND2 0xB7 #define HWM_FAN2_BOUND3 0xB8 #define HWM_FAN2_BOUND4 0xB9 - -// 5 Segment Speeds +// Fan 2 - 5 Segment speeds #define HWM_FAN2_SEG1_SPEED_COUNT 0xBA #define HWM_FAN2_SEG2_SPEED_COUNT 0xBB #define HWM_FAN2_SEG3_SPEED_COUNT 0xBC #define HWM_FAN2_SEG4_SPEED_COUNT 0xBD #define HWM_FAN2_SEG5_SPEED_COUNT 0xBE
-// FAN1 Temp Mapping -#define HWM_FAN2_TEMP_MAP_SEL 0xBF - -/* Defines freq. for fan control */ -#define PWM_220HZ_FAN3_CONTROL 0x20 -#define PWM_5KHZ_FAN3_CONTROL 0x20 -#define PWM_11KHZ_FAN3_CONTROL 0x00 -#define PWM_23KHZ_FAN3_CONTROL 0x00 - -#define PWM_220HZ_FAN2_MAP_SEL 0x3D -#define PWM_5KHZ_FAN2_MAP_SEL 0x1D -#define PWM_11KHZ_FAN2_MAP_SEL 0x3D -#define PWM_23KHZ_FAN2_MAP_SEL 0x1D -
void f81866d_hwm_init(struct device *dev) { @@ -84,41 +68,40 @@ void f81866d_hwm_init(struct device *dev) return; }
+ const struct superio_fintek_f81866d_config *reg = dev->chip_info; u16 port = res->base;
pnp_enter_conf_mode(dev);
/* Use AMD TSI */ - pnp_write_index(port, HWM_AMD_TSI_ADDR, 0x98); - pnp_write_index(port, HWM_AMD_TSI_CONTROL_REG, 0x02); + pnp_write_index(port, HWM_AMD_TSI_ADDR, reg->hwm_amd_tsi_addr); + pnp_write_index(port, HWM_AMD_TSI_CONTROL_REG, reg->hwm_amd_tsi_control);
- // Set temp1 sensor to thermistor - pnp_write_index(port, TEMP_SENS_TYPE_REG, 0x04); + /* Set temp1 sensor to thermistor */ + pnp_write_index(port, TEMP_SENS_TYPE_REG, reg->hwm_temp_sens_type);
/* Select FAN Type */ - pnp_write_index(port, HWM_FAN_SEL, 0xC0); // 0xC0 set FAN2 to PWM + pnp_write_index(port, HWM_FAN_SEL, reg->hwm_fan_select);
/* Select FAN Mode*/ - pnp_write_index(port, HWM_FAN_MODE, 0xD5); // 0xD5 sets FAN1-3 to Auto RPM mode - - pnp_write_index(port, HWM_FAN_FAST_FILTER, 0x02); // Faster fan + pnp_write_index(port, HWM_FAN_MODE, reg->hwm_fan_mode);
/* Set Boundries */ - pnp_write_index(port, HWM_FAN2_BOUND1, 0x3C); //60°C - pnp_write_index(port, HWM_FAN2_BOUND2, 0x32); //50°C - pnp_write_index(port, HWM_FAN2_BOUND3, 0x28); //40°C - pnp_write_index(port, HWM_FAN2_BOUND4, 0x1E); //30°C + pnp_write_index(port, HWM_FAN2_BOUND1, reg->hwm_fan2_bound1); + pnp_write_index(port, HWM_FAN2_BOUND2, reg->hwm_fan2_bound2); + pnp_write_index(port, HWM_FAN2_BOUND3, reg->hwm_fan2_bound3); + pnp_write_index(port, HWM_FAN2_BOUND4, reg->hwm_fan2_bound4);
/* Set Speed */ - pnp_write_index(port, HWM_FAN2_SEG1_SPEED_COUNT, 0xFF); // 100% - pnp_write_index(port, HWM_FAN2_SEG2_SPEED_COUNT, 0xD9); // 85% - pnp_write_index(port, HWM_FAN2_SEG3_SPEED_COUNT, 0xB2); // 70% - pnp_write_index(port, HWM_FAN2_SEG4_SPEED_COUNT, 0x99); // 60% - pnp_write_index(port, HWM_FAN2_SEG5_SPEED_COUNT, 0x80); // 50% - - /* Set temp follows */ - pnp_write_index(port, HWM_FAN3_CONTROL, PWM_220HZ_FAN3_CONTROL); - pnp_write_index(port, HWM_FAN2_TEMP_MAP_SEL, PWM_220HZ_FAN2_MAP_SEL); + pnp_write_index(port, HWM_FAN2_SEG1_SPEED_COUNT, reg->hwm_fan2_seg1_speed); + pnp_write_index(port, HWM_FAN2_SEG2_SPEED_COUNT, reg->hwm_fan2_seg2_speed); + pnp_write_index(port, HWM_FAN2_SEG3_SPEED_COUNT, reg->hwm_fan2_seg3_speed); + pnp_write_index(port, HWM_FAN2_SEG4_SPEED_COUNT, reg->hwm_fan2_seg4_speed); + pnp_write_index(port, HWM_FAN2_SEG5_SPEED_COUNT, reg->hwm_fan2_seg5_speed); + + /* Set Fan control freq */ + pnp_write_index(port, HWM_FAN3_CONTROL, reg->hwm_fan3_control); + pnp_write_index(port, HWM_FAN2_TEMP_MAP_SEL, reg->hwm_fan2_temp_map_select);
pnp_exit_conf_mode(dev); } diff --git a/src/superio/fintek/f81866d/f81866d_temp_sensor.c b/src/superio/fintek/f81866d/f81866d_temp_sensor.c deleted file mode 100644 index aaddd45..0000000 --- a/src/superio/fintek/f81866d/f81866d_temp_sensor.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2015 BAP - Bruhnspace Advanced Projects - * (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc. - */ - -#include <arch/io.h> -#include <device/device.h> -#include <device/pnp.h> -#include <console/console.h> -#include "fintek_internal.h" - -#define TEMP_SENS_TYPE_REG 0x6B - -void f81866d_temp_sensor(struct device *dev) -{ - struct resource *res = find_resource(dev, PNP_IDX_IO0); - - if (!res) { - printk(BIOS_WARNING, "Super I/O HWM: No HWM resource found.\n"); - return; - } - - u16 port = res->base; - - pnp_enter_conf_mode(dev); - - // Set temp1 sensor correct to thermistor - pnp_write_index(port, TEMP_SENS_TYPE_REG, 0x04); - - pnp_exit_conf_mode(dev); -} diff --git a/src/superio/fintek/f81866d/fintek_internal.h b/src/superio/fintek/f81866d/fintek_internal.h index c198421..acd7532 100644 --- a/src/superio/fintek/f81866d/fintek_internal.h +++ b/src/superio/fintek/f81866d/fintek_internal.h @@ -1,6 +1,7 @@ /* * This file is part of the coreboot project. * + * Copyright (C) 2014 Edward O'Callaghan eocallaghan@alterapraxis.com * Copyright (C) 2015 BAP - Bruhnspace Advanced Projects * (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) * @@ -25,7 +26,6 @@ #include <arch/io.h> #include <device/pnp.h>
-void f81866d_temp_sensor(struct device *dev); void f81866d_hwm_init(struct device *dev);
#endif /* SUPERIO_FINTEK_F81866D_INTERNAL_H */ diff --git a/src/superio/fintek/f81866d/superio.c b/src/superio/fintek/f81866d/superio.c index d12d241..a2245a0 100644 --- a/src/superio/fintek/f81866d/superio.c +++ b/src/superio/fintek/f81866d/superio.c @@ -1,6 +1,7 @@ /* * This file is part of the coreboot project. * + * Copyright (C) 2014 Edward O'Callaghan eocallaghan@alterapraxis.com * Copyright (C) 2015 BAP - Bruhnspace Advanced Projects * (Written by Fabian Kunkel fabi@adv.bruhnspace.com for BAP) * @@ -40,14 +41,8 @@ static void f81866d_init(struct device *dev) pc_keyboard_init(); break; case F81866D_HWM: - - #if IS_ENABLED(CONFIG_HUDSON_IMC_FWM) - // Fixing temp sensor readout according data sheet - f81866d_temp_sensor(dev); - #else // Fixing temp sensor read out and init Fan control f81866d_hwm_init(dev); - #endif break; } } @@ -84,6 +79,6 @@ static void enable_dev(struct device *dev) }
struct chip_operations superio_fintek_f81866d_ops = { - CHIP_NAME("Fintek F81866D Super I/O") + CHIP_NAME("Fintek F81866AD-I Super I/O") .enable_dev = enable_dev };