coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
chip.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <assert.h>
4 #include <device/device.h>
5 #include <soc/ramstage.h>
6 #include <soc/reg_access.h>
7 
8 /* Cat Trip Clear value must be less than Cat Trip Set value */
9 #define PLATFORM_CATASTROPHIC_TRIP_CELSIUS 105
10 #define PLATFORM_CATASTROPHIC_CLEAR_CELSIUS 65
11 
12 static const struct reg_script thermal_init_script[] = {
13 
14  /* Setup RMU Thermal sensor registers for Ratiometric mode. */
31 
42 
50 
55 
56  /* Enable RMU Thermal sensor with a Catastrophic Trip point. */
57 
58  /* Set up Catastrophic Trip point.
59  *
60  * Trip Register fields are 8-bit temperature values of granularity 1
61  * degree C where 0x00 corresponds to -50 degrees C and 0xFF corresponds
62  * to 205 degrees C.
63  *
64  * Add 50 to Celsius values to get values for register fields.
65  */
72 
73  /* To enable the TS do the following:
74  * 1) Take the TS out of reset by setting itsrst to 0x0.
75  * 2) Enable the TS using RMU Thermal sensor mode register.
76  */
80 
81  /* Lock all RMU Thermal sensor control & trip point registers. */
85 };
86 
87 static void chip_init(void *chip_info)
88 {
89  /* Validate the temperature settings */
93 
94  /* Set the temperature settings */
96 
97  /* Verify that the thermal configuration is locked */
103 
104  /* Perform silicon specific init. */
106 }
107 
108 static struct device_operations pci_domain_ops = {
110  .set_resources = pci_domain_set_resources,
111  .scan_bus = pci_domain_scan_bus,
112 };
113 
114 static void chip_enable_dev(struct device *dev)
115 {
116 
117  /* Set the operations if it is a special bus type */
118  if (dev->path.type == DEVICE_PATH_DOMAIN)
119  dev->ops = &pci_domain_ops;
120 }
121 
123  CHIP_NAME("Intel Quark")
124  .init = &chip_init,
125  .enable_dev = chip_enable_dev,
126 };
#define V_TSCGF1_CONFIG_IBGEN_RATIO_MODE
#define V_TSCGF2_CONFIG2_ICALCOARSETUNE_RATIO_MODE
#define V_TSCGF2_CONFIG2_ICALCONFIGSEL_RATIO_MODE
#define V_TSCGF2_CONFIG_IDSCONTROL_RATIO_MODE
#define V_TSCGF2_CONFIG2_ISPARECTRL_RATIO_MODE
#define V_TSCGF1_CONFIG_ISNSCHOPSEL_RATIO_MODE
#define V_TSCGF3_CONFIG_ITSGAMMACOEFF_RATIO_MODE
#define V_TSCGF1_CONFIG_ISNSCURRENTSEL_RATIO_MODE
#define V_TSCGF2_CONFIG_IDSTIMING_RATIO_MODE
#define V_TSCGF1_CONFIG_ISNSINTERNALVREFEN_RATIO_MODE
#define V_TSCGF1_CONFIG_IBGCHOPEN_RATIO_MODE
#define B_TSCGF2_CONFIG2_ICALCOARSETUNE_BP
Definition: QuarkNcSocId.h:353
#define QUARK_SCSS_SOC_UNIT_TSCGF3_CONFIG
Definition: QuarkNcSocId.h:355
#define B_TSCGF2_CONFIG_IDSCONTROL_BP
Definition: QuarkNcSocId.h:343
#define TS_CAT_TRIP_SET_THOLD_MASK
Definition: QuarkNcSocId.h:201
#define B_TSCGF3_CONFIG_ITSGAMMACOEFF_MASK
Definition: QuarkNcSocId.h:358
#define B_TSCGF1_CONFIG_ISNSINTERNALVREFEN
Definition: QuarkNcSocId.h:338
#define B_TSCGF2_CONFIG_IDSTIMING_BP
Definition: QuarkNcSocId.h:345
#define QUARK_NC_RMU_REG_CONFIG
Definition: QuarkNcSocId.h:172
#define QUARK_NC_RMU_REG_TS_TRIP
Definition: QuarkNcSocId.h:192
#define B_TSCGF1_CONFIG_ISNSCURRENTSEL_MASK
Definition: QuarkNcSocId.h:329
#define TS_CAT_TRIP_SET_THOLD_BP
Definition: QuarkNcSocId.h:200
#define QUARK_SCSS_SOC_UNIT_TSCGF1_CONFIG
Definition: QuarkNcSocId.h:328
#define B_TSCGF2_CONFIG2_ICALCOARSETUNE_MASK
Definition: QuarkNcSocId.h:352
#define B_TSCGF2_CONFIG2_ISPARECTRL_BP
Definition: QuarkNcSocId.h:349
#define B_TSCGF1_CONFIG_ISNSCHOPSEL_MASK
Definition: QuarkNcSocId.h:331
#define B_TSCGF2_CONFIG2_ICALCONFIGSEL_MASK
Definition: QuarkNcSocId.h:350
#define B_TSCGF2_CONFIG_IDSTIMING_MASK
Definition: QuarkNcSocId.h:344
#define QUARK_NC_RMU_REG_TS_MODE
Definition: QuarkNcSocId.h:190
#define TS_LOCK_THRM_CTRL_REGS_ENABLE
Definition: QuarkNcSocId.h:174
#define QUARK_SCSS_SOC_UNIT_TSCGF2_CONFIG2
Definition: QuarkNcSocId.h:347
#define B_TSCGF1_CONFIG_ISNSINTERNALVREFEN_BP
Definition: QuarkNcSocId.h:339
#define TS_LOCK_AUX_TRIP_PT_REGS_ENABLE
Definition: QuarkNcSocId.h:173
#define B_TSCGF2_CONFIG2_ICALCONFIGSEL_BP
Definition: QuarkNcSocId.h:351
#define B_TSCGF3_CONFIG_ITSGAMMACOEFF_BP
Definition: QuarkNcSocId.h:357
#define TS_CAT_TRIP_CLEAR_THOLD_MASK
Definition: QuarkNcSocId.h:197
#define QUARK_SCSS_SOC_UNIT_TSCGF2_CONFIG
Definition: QuarkNcSocId.h:341
#define TS_CAT_TRIP_CLEAR_THOLD_BP
Definition: QuarkNcSocId.h:196
#define B_TSCGF2_CONFIG_IDSCONTROL_MASK
Definition: QuarkNcSocId.h:342
#define B_TSCGF1_CONFIG_ISNSCURRENTSEL_BP
Definition: QuarkNcSocId.h:330
#define B_TSCGF1_CONFIG_ISNSCHOPSEL_BP
Definition: QuarkNcSocId.h:333
#define B_TSCGF1_CONFIG_IBGCHOPEN
Definition: QuarkNcSocId.h:336
#define B_TSCGF1_CONFIG_IBGCHOPEN_BP
Definition: QuarkNcSocId.h:337
#define B_TSCGF1_CONFIG_IBGEN
Definition: QuarkNcSocId.h:334
#define B_TSCGF1_CONFIG_IBGEN_BP
Definition: QuarkNcSocId.h:335
#define B_TSCGF2_CONFIG2_ISPARECTRL_MASK
Definition: QuarkNcSocId.h:348
#define B_TSCGF3_CONFIG_ITSRST
Definition: QuarkNcSocId.h:356
#define ASSERT(x)
Definition: assert.h:44
void fsp_silicon_init(void)
Definition: silicon_init.c:242
#define CHIP_NAME(X)
Definition: device.h:32
@ DEVICE_PATH_DOMAIN
Definition: path.h:13
void pci_domain_read_resources(struct device *dev)
Definition: pci_device.c:547
void pci_domain_set_resources(struct device *dev)
Definition: pci_device.c:564
void pci_domain_scan_bus(struct device *dev)
Scan a PCI domain.
Definition: pci_device.c:1610
void reg_script_run(const struct reg_script *script)
Definition: reg_script.c:700
#define REG_SCRIPT_END
Definition: reg_script.h:427
@ TS_ENABLE
Definition: rtc.h:9
static struct device_operations pci_domain_ops
Definition: chip.c:108
static const struct reg_script thermal_init_script[]
Definition: chip.c:12
#define PLATFORM_CATASTROPHIC_CLEAR_CELSIUS
Definition: chip.c:10
static void chip_init(void *chip_info)
Definition: chip.c:87
struct chip_operations soc_intel_quark_ops
Definition: chip.c:122
static void chip_enable_dev(struct device *dev)
Definition: chip.c:114
#define PLATFORM_CATASTROPHIC_TRIP_CELSIUS
Definition: chip.c:9
#define REG_RMU_TEMP_RMW(reg_, mask_, value_)
Definition: reg_access.h:176
#define REG_RMU_TEMP_OR(reg_, value_)
Definition: reg_access.h:180
#define REG_SOC_UNIT_AND(reg_, value_)
Definition: reg_access.h:195
#define REG_SOC_UNIT_RMW(reg_, mask_, value_)
Definition: reg_access.h:197
uint32_t reg_rmu_temp_read(uint32_t reg_address)
Definition: reg_access.c:238
void(* read_resources)(struct device *dev)
Definition: device.h:39
enum device_path_type type
Definition: path.h:114
Definition: device.h:107
struct device_path path
Definition: device.h:115
struct device_operations * ops
Definition: device.h:143