coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
f81866d_hwm.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 /* Setup only for Fan2
4  * TODO: Add support for Fan1 and Fan3
5  */
6 
7 #include <console/console.h>
8 #include <device/device.h>
9 #include <device/pnp.h>
10 #include "fintek_internal.h"
11 #include "chip.h"
12 
13 /* Register addresses */
14 // Choose between AMD and Intel
15 #define HWM_AMD_TSI_ADDR 0x08
16 #define HWM_AMD_TSI_CONTROL_REG 0x0A
17 
18 // Set temp sensors type
19 #define TEMP_SENS_TYPE_REG 0x6B
20 
21 // FAN prog sel
22 #define HWM_FAN3_CONTROL 0x9A
23 #define HWM_FAN_SEL 0x94
24 #define HWM_FAN_MODE 0x96
25 #define HWM_FAN2_TEMP_MAP_SEL 0xBF
26 
27 // Fan 2 - 4 Boundaries
28 #define HWM_FAN2_BOUND1 0xB6
29 #define HWM_FAN2_BOUND2 0xB7
30 #define HWM_FAN2_BOUND3 0xB8
31 #define HWM_FAN2_BOUND4 0xB9
32 // Fan 2 - 5 Segment speeds
33 #define HWM_FAN2_SEG1_SPEED_COUNT 0xBA
34 #define HWM_FAN2_SEG2_SPEED_COUNT 0xBB
35 #define HWM_FAN2_SEG3_SPEED_COUNT 0xBC
36 #define HWM_FAN2_SEG4_SPEED_COUNT 0xBD
37 #define HWM_FAN2_SEG5_SPEED_COUNT 0xBE
38 
39 void f81866d_hwm_init(struct device *dev)
40 {
41  struct resource *res = probe_resource(dev, PNP_IDX_IO0);
42 
43  if (!res) {
44  printk(BIOS_WARNING, "Super I/O HWM: No HWM resource found.\n");
45  return;
46  }
47 
48  const struct superio_fintek_f81866d_config *reg = dev->chip_info;
49  u16 port = res->base;
50 
52 
53  /* Use AMD TSI */
56 
57  /* Set temp1 sensor to thermistor */
59 
60  /* Select FAN Type */
62 
63  /* Select FAN Mode*/
65 
66  /* Set Boundaries */
71 
72  /* Set Speed */
78 
79  /* Set Fan control freq */
82 
83  pnp_exit_conf_mode(dev);
84 }
#define printk(level,...)
Definition: stdlib.h:16
struct resource * probe_resource(const struct device *dev, unsigned int index)
See if a resource structure already exists for a given index.
Definition: device_util.c:323
#define HWM_FAN2_SEG4_SPEED_COUNT
Definition: f81866d_hwm.c:36
#define HWM_FAN2_BOUND1
Definition: f81866d_hwm.c:28
#define HWM_AMD_TSI_CONTROL_REG
Definition: f81866d_hwm.c:16
#define HWM_FAN2_SEG5_SPEED_COUNT
Definition: f81866d_hwm.c:37
#define TEMP_SENS_TYPE_REG
Definition: f81866d_hwm.c:19
#define HWM_AMD_TSI_ADDR
Definition: f81866d_hwm.c:15
#define HWM_FAN2_SEG2_SPEED_COUNT
Definition: f81866d_hwm.c:34
#define HWM_FAN2_BOUND4
Definition: f81866d_hwm.c:31
#define HWM_FAN2_BOUND3
Definition: f81866d_hwm.c:30
#define HWM_FAN3_CONTROL
Definition: f81866d_hwm.c:22
#define HWM_FAN_MODE
Definition: f81866d_hwm.c:24
#define HWM_FAN2_SEG3_SPEED_COUNT
Definition: f81866d_hwm.c:35
#define HWM_FAN_SEL
Definition: f81866d_hwm.c:23
void f81866d_hwm_init(struct device *dev)
Definition: f81866d_hwm.c:39
#define HWM_FAN2_BOUND2
Definition: f81866d_hwm.c:29
#define HWM_FAN2_SEG1_SPEED_COUNT
Definition: f81866d_hwm.c:33
#define HWM_FAN2_TEMP_MAP_SEL
Definition: f81866d_hwm.c:25
port
Definition: i915.h:29
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
Definition: loglevel.h:86
static void pnp_write_index(u16 port, u8 reg, u8 value)
Definition: pnp.h:132
#define PNP_IDX_IO0
Definition: pnp_def.h:5
void pnp_exit_conf_mode(struct device *dev)
Definition: pnp_device.c:17
void pnp_enter_conf_mode(struct device *dev)
Definition: pnp_device.c:11
uint16_t u16
Definition: stdint.h:48
Definition: device.h:107
DEVTREE_CONST void * chip_info
Definition: device.h:164
resource_t base
Definition: resource.h:45
uint8_t hwm_fan2_temp_map_select
Definition: chip.h:18