coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
f71808a_hwm.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <console/console.h>
4 #include <device/device.h>
5 #include <device/pnp.h>
6 #include "fintek_internal.h"
7 #include "chip.h"
8 
9 /* Intel Ibex Peak/PECI/AMD TSI */
10 #define HWM_PECI_TSI_CTRL_REG 0x0a
11 #define HWM_DOMAIN1_EN 0x0b
12 #define HWM_TCC_TEMPERATURE_REG 0x0c
13 
14 /* Fan 1 control */
15 #define HWM_FAN1_SEG1_SPEED_REG 0xaa
16 #define HWM_FAN1_SEG2_SPEED_REG 0xab
17 #define HWM_FAN1_SEG3_SPEED_REG 0xac
18 #define HWM_FAN1_SEG4_SPEED_REG 0xad
19 #define HWM_FAN1_SEG5_SPEED_REG 0xae
20 #define HWM_FAN1_TEMP_SRC_REG 0xaf
21 
22 #define HWM_FAN1_BOUNDARY_HYSTERESIS 0x98
23 #define HWM_VT1_BOUNDARY_1_TEMPERATURE 0xa6
24 #define HWM_VT1_BOUNDARY_2_TEMPERATURE 0xa7
25 #define HWM_VT1_BOUNDARY_3_TEMPERATURE 0xa8
26 #define HWM_VT1_BOUNDARY_4_TEMPERATURE 0xa9
27 
28 /* Fan 2 control */
29 #define HWM_FAN2_SEG1_SPEED_REG 0xba
30 #define HWM_FAN2_SEG2_SPEED_REG 0xbb
31 #define HWM_FAN2_SEG3_SPEED_REG 0xbc
32 #define HWM_FAN2_SEG4_SPEED_REG 0xbd
33 #define HWM_FAN2_SEG5_SPEED_REG 0xbe
34 #define HWM_FAN2_TEMP_SRC_REG 0xbf
35 
36 void f71808a_hwm_init(struct device *dev)
37 {
38  struct resource *res = probe_resource(dev, PNP_IDX_IO0);
39 
40  if (!res) {
41  printk(BIOS_WARNING, "Super I/O HWM: No HWM resource found.\n");
42  return;
43  }
44 
45  const struct superio_fintek_f71808a_config *reg = dev->chip_info;
46  u16 port = res->base;
47 
49 
62  reg->hwm_domain1_en);
63  }
64 
67 
69  reg->hwm_fan1_seg1_speed);
71  reg->hwm_fan1_seg2_speed);
73  reg->hwm_fan1_seg3_speed);
75  reg->hwm_fan1_seg4_speed);
77  reg->hwm_fan1_seg5_speed);
79 
81  reg->hwm_fan2_seg1_speed);
83  reg->hwm_fan2_seg2_speed);
85  reg->hwm_fan2_seg3_speed);
87  reg->hwm_fan2_seg4_speed);
89  reg->hwm_fan2_seg5_speed);
91 
92  pnp_exit_conf_mode(dev);
93 }
#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_TEMP_SRC_REG
Definition: f71808a_hwm.c:34
#define HWM_FAN1_SEG1_SPEED_REG
Definition: f71808a_hwm.c:15
void f71808a_hwm_init(struct device *dev)
Definition: f71808a_hwm.c:36
#define HWM_VT1_BOUNDARY_3_TEMPERATURE
Definition: f71808a_hwm.c:25
#define HWM_FAN1_BOUNDARY_HYSTERESIS
Definition: f71808a_hwm.c:22
#define HWM_FAN1_SEG4_SPEED_REG
Definition: f71808a_hwm.c:18
#define HWM_FAN1_SEG5_SPEED_REG
Definition: f71808a_hwm.c:19
#define HWM_FAN2_SEG1_SPEED_REG
Definition: f71808a_hwm.c:29
#define HWM_FAN2_SEG4_SPEED_REG
Definition: f71808a_hwm.c:32
#define HWM_FAN2_SEG5_SPEED_REG
Definition: f71808a_hwm.c:33
#define HWM_VT1_BOUNDARY_1_TEMPERATURE
Definition: f71808a_hwm.c:23
#define HWM_DOMAIN1_EN
Definition: f71808a_hwm.c:11
#define HWM_FAN1_SEG3_SPEED_REG
Definition: f71808a_hwm.c:17
#define HWM_FAN1_SEG2_SPEED_REG
Definition: f71808a_hwm.c:16
#define HWM_TCC_TEMPERATURE_REG
Definition: f71808a_hwm.c:12
#define HWM_FAN2_SEG2_SPEED_REG
Definition: f71808a_hwm.c:30
#define HWM_FAN1_TEMP_SRC_REG
Definition: f71808a_hwm.c:20
#define HWM_VT1_BOUNDARY_4_TEMPERATURE
Definition: f71808a_hwm.c:26
#define HWM_FAN2_SEG3_SPEED_REG
Definition: f71808a_hwm.c:31
#define HWM_PECI_TSI_CTRL_REG
Definition: f71808a_hwm.c:10
#define HWM_VT1_BOUNDARY_2_TEMPERATURE
Definition: f71808a_hwm.c:24
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_vt1_boundary_2_temperature
Definition: chip.h:11
uint8_t hwm_vt1_boundary_3_temperature
Definition: chip.h:12
uint8_t hwm_vt1_boundary_1_temperature
Definition: chip.h:10
uint8_t hwm_fan1_boundary_hysteresis
Definition: chip.h:14
uint8_t hwm_vt1_boundary_4_temperature
Definition: chip.h:13