coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
dptf.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <acpi/acpigen.h>
4 #include <acpi/acpigen_pci.h>
5 #include <console/console.h>
6 #include <device/device.h>
7 #include <intelblocks/pmc_ipc.h>
8 #include <soc/pci_devs.h>
9 #include "chip.h"
10 #include "dptf.h"
11 
12 /* Generic DPTF participants have a PTYP field to distinguish them */
19 };
20 
21 #define DEFAULT_CHARGER_STR "Battery Charger"
22 #define DEFAULT_TPCH_STR "Intel PCH FIVR Participant"
23 #define DEFAULT_POWER_STR "Power Participant"
24 #define DEFAULT_BATTERY_STR "Battery Participant"
25 
26 #define PMC_IPC_COMMAND_FIVR_SIZE 0x8
27 
28 /*
29  * Helper method to determine if a device is "used" (called out anywhere as a source or a target
30  * of any policies, and therefore should be included in the ACPI tables.
31  */
33  enum dptf_participant participant)
34 {
35  int i;
36 
37  /* Active? */
38  for (i = 0; i < DPTF_MAX_ACTIVE_POLICIES; ++i)
39  if (config->policies.active[i].target == participant)
40  return true;
41 
42  /* Passive? */
43  for (i = 0; i < DPTF_MAX_PASSIVE_POLICIES; ++i)
44  if (config->policies.passive[i].source == participant ||
45  config->policies.passive[i].target == participant)
46  return true;
47 
48  /* Critical? */
49  for (i = 0; i < DPTF_MAX_CRITICAL_POLICIES; ++i)
50  if (config->policies.critical[i].source == participant)
51  return true;
52 
53  /* Check fan as well (its use is implicit in the Active policy) */
54  if (participant == DPTF_FAN && config->policies.active[0].target != DPTF_NONE)
55  return true;
56 
57  return false;
58 }
59 
60 static const char *dptf_acpi_name(const struct device *dev)
61 {
62  return "DPTF";
63 }
64 
66  enum dptf_participant participant)
67 {
68  return is_participant_used(config, participant) ?
71 }
72 
73 static void dptf_write_hid(bool is_eisa, const char *hid)
74 {
75  if (is_eisa)
77  else
79 }
80 
81 /* Devices with GENERIC _HID (distinguished by PTYP) */
82 static void dptf_write_generic_participant(const char *name,
84  const char *str, int sta_val,
85  const struct dptf_platform_info *platform_info)
86 {
87  /* Auto-incrementing UID for generic participants */
88  static int generic_uid = 0;
89 
91  acpigen_write_name("_HID");
92  dptf_write_hid(platform_info->use_eisa_hids, platform_info->generic_hid);
93 
94  acpigen_write_name_integer("_UID", generic_uid++);
95  acpigen_write_STA(sta_val);
96 
97  if (str)
98  acpigen_write_name_string("_STR", str);
99 
100  acpigen_write_name_integer("PTYP", ptype);
101 
102  acpigen_pop_len(); /* Device */
103 }
104 
105 /* \_SB.PCI0.TCPU */
106 static void write_tcpu(const struct device *pci_dev,
107  const struct drivers_intel_dptf_config *config)
108 {
109  /* DPTF CPU device - \_SB.PCI0.TCPU */
111  acpigen_write_device("TCPU");
114  acpigen_pop_len(); /* Device */
115  acpigen_pop_len(); /* TCPU Scope */
116 }
117 
118 /* \_SB.DPTF.TFN1 */
119 static void write_fan(const struct drivers_intel_dptf_config *config,
120  const struct dptf_platform_info *platform_info)
121 {
122  acpigen_write_device("TFN1");
123  acpigen_write_name("_HID");
124  dptf_write_hid(platform_info->use_eisa_hids, platform_info->fan_hid);
125  acpigen_write_name_integer("_UID", 0);
127  acpigen_pop_len(); /* Device */
128 }
129 
130 /* \_SB.DPTF */
131 static void write_imok(void)
132 {
133  acpigen_write_method("IMOK", 1);
134  /* Return (Arg0) */
138 }
139 /* \_SB.DPTF */
141 {
142  int i;
143 
144  acpigen_write_name("ODVX");
146  for (i = 0; i < DPTF_OEM_VARIABLE_COUNT; i++)
147  acpigen_write_dword(config->oem_data.oem_variables[i]);
149 
150  /*
151  * Method (ODUP, 2)
152  * Arg0 = Index of ODVX to update
153  * Arg1 = Value to place in ODVX[Arg0]
154  */
156  /* ODVX[Arg0] = Arg1 */
160  acpigen_emit_namestring("ODVX");
162  acpigen_emit_byte(ZERO_OP); /* Ignore Index() Destination */
164 
165  /*
166  * Method (ODGT, 1)
167  * Arg0 = Index of ODVX to get
168  */
170  /* Return (ODVX[Arg0]) */
174  acpigen_emit_namestring("ODVX");
176  acpigen_emit_byte(ZERO_OP); /* Ignore Index() Destination */
178 
179  /* Method (ODVP) { Return (ODVX) } */
182  acpigen_emit_namestring("ODVX");
184 }
185 
186 /* \_SB.DPTF.xxxx */
188  const struct dptf_platform_info *platform_info)
189 {
190  enum dptf_participant participant;
192  int i;
193 
197  platform_info);
198 
199  for (i = 0, participant = DPTF_TEMP_SENSOR_0; i < DPTF_MAX_TSR; ++i, ++participant) {
200  snprintf(name, sizeof(name), "TSR%1d", i);
202  NULL, get_STA_value(config, participant),
203  platform_info);
204  }
205 }
206 
207 static const char *get_pmc_ipcs_method(void)
208 {
209  const char *method = acpi_device_path_join(
211  if (!method) {
212  printk(BIOS_ERR, "%s: Unable to find PMC device IPCS method\n", __func__);
213  return NULL;
214  }
215  return method;
216 }
217 
218 static void write_tpch_write_method(const char *tpch_write_method_name,
219  unsigned int ipc_subcmd_ctrl_value)
220 {
221  /* Get IPCS method from the PMC device */
222  const char *ipcs = get_pmc_ipcs_method();
223  acpigen_write_method_serialized(tpch_write_method_name, 1);
228  acpigen_write_integer(ipc_subcmd_ctrl_value);
232  /* The reason for returning a value here is a W/A for the ESIF shell */
238 }
239 
240 static void write_ppkg_package(const uint8_t i)
241 {
249  acpigen_emit_namestring("PPKG");
252 }
253 
254 /*
255  * Truncate Package received from IPC
256  * Arguments:
257  * Arg0: Package returned from the IPCS read call from the Pmc
258  * Return Value:
259  * Return Package with just the Status and ReadBuf0
260  * Status returns 0 for success and 2 for device error
261  */
262 static void write_pkgc_method(void)
263 {
265  acpigen_write_name("PPKG");
270 
273 
276 }
277 
278 static void write_tpch_read_method(const char *tpch_read_method_name,
279  unsigned int ipc_subcmd_ctrl_value)
280 {
281  /* Get IPCS method from the PMC device */
282  const char *ipcs = get_pmc_ipcs_method();
283  acpigen_write_method_serialized(tpch_read_method_name, 0);
289  acpigen_write_integer(ipc_subcmd_ctrl_value);
294 
296  acpigen_emit_namestring("PKGC");
299 
303 }
304 
305 static void write_create_tpch(const struct dptf_platform_info *platform_info)
306 {
307  acpigen_write_device("TPCH");
308  acpigen_write_name("_HID");
309  dptf_write_hid(platform_info->use_eisa_hids, platform_info->tpch_device_hid);
313 }
314 
315 static void write_tpch_methods(const struct dptf_platform_info *platform_info)
316 {
317  write_create_tpch(platform_info);
318 
319  const struct {
320  enum { READ, WRITE } type;
321  const char *method_name;
322  unsigned int subcommand;
323  } tpch_methods[] = {
324  { .type = WRITE,
325  .method_name =
327  .subcommand = PMC_IPC_SUBCMD_RFI_CTRL0_LOGIC
328  },
329  { .type = WRITE,
330  .method_name =
332  .subcommand = PMC_IPC_SUBCMD_RFI_CTRL4_LOGIC
333  },
334  { .type = READ,
335  .method_name =
337  .subcommand = PMC_IPC_SUBCMD_RFI_CTRL0_LOGIC
338  },
339  { .type = READ,
340  .method_name =
342  .subcommand = PMC_IPC_SUBCMD_RFI_CTRL4_LOGIC
343  },
344  { .type = READ,
345  .method_name =
346  platform_info->tpch_method_names.get_fivr_ssc_method,
347  .subcommand = PMC_IPC_SUBCMD_EMI_CTRL0_LOGIC
348  },
349  { .type = READ,
350  .method_name =
353  },
354  { .type = READ,
355  .method_name =
357  .subcommand = PMC_IPC_SUBCMD_FFFC_RFI_STATUS
358  },
359  };
360 
362  for (size_t i = 0; i < ARRAY_SIZE(tpch_methods); i++) {
363  if (tpch_methods[i].type == READ) {
364  write_tpch_read_method(tpch_methods[i].method_name,
365  tpch_methods[i].subcommand);
366  } else if (tpch_methods[i].type == WRITE) {
367  write_tpch_write_method(tpch_methods[i].method_name,
368  tpch_methods[i].subcommand);
369  }
370  }
371 
372  acpigen_write_device_end(); /* TPCH Device */
373 }
374 
376  const struct dptf_platform_info *platform_info)
377 {
378  acpigen_write_device("TPWR");
379  acpigen_write_name("_HID");
380  if (platform_info->tpwr_device_hid != NULL)
381  dptf_write_hid(platform_info->use_eisa_hids, platform_info->tpwr_device_hid);
382  acpigen_write_name_string("_UID", "TPWR");
386 
387  /* PROP method */
388  if(config->prop != 0) {
392  acpigen_pop_len(); /* Method PROP */
393  }
394  acpigen_write_device_end(); /* TPWR Power Participant Device */
395 }
396 
398  const struct dptf_platform_info *platform_info)
399 {
400  write_create_tpwr(config, platform_info);
401 }
402 
403 static void write_create_tbat(const struct dptf_platform_info *platform_info)
404 {
405  acpigen_write_device("TBAT");
406  acpigen_write_name("_HID");
407  if (platform_info->tbat_device_hid != NULL)
408  dptf_write_hid(platform_info->use_eisa_hids, platform_info->tbat_device_hid);
409  acpigen_write_name_string("_UID", "TBAT");
413  acpigen_write_device_end(); /* TBAT Battery Participant Device */
414 }
415 
416 
417 static void write_tbat_methods(const struct dptf_platform_info *platform_info)
418 {
419  write_create_tbat(platform_info);
420 }
421 
422 
423 /* \_SB.DPTF - note: leaves the Scope open for child devices */
424 static void write_open_dptf_device(const struct device *dev,
425  const struct dptf_platform_info *platform_info)
426 {
427  acpigen_write_scope("\\_SB");
429  acpigen_write_name("_HID");
430  dptf_write_hid(platform_info->use_eisa_hids, platform_info->dptf_device_hid);
431  acpigen_write_name_integer("_UID", 0);
433 }
434 
435 /* Add minimal definitions of DPTF devices into the SSDT */
436 static void write_device_definitions(const struct device *dev)
437 {
438  const struct dptf_platform_info *platform_info = get_dptf_platform_info();
439  const struct drivers_intel_dptf_config *config;
440  struct device *parent;
441 
442  /* The CPU device gets an _ADR that matches the ACPI PCI address for 00:04.00 */
443  parent = dev && dev->bus ? dev->bus->dev : NULL;
444  if (!parent || parent->path.type != DEVICE_PATH_PCI) {
445  printk(BIOS_ERR, "%s: DPTF objects must live under 00:04.0 PCI device\n",
446  __func__);
447  return;
448  }
449 
450  config = config_of(dev);
451  write_tcpu(parent, config);
452  write_open_dptf_device(dev, platform_info);
453  write_fan(config, platform_info);
455  write_imok();
456  write_generic_devices(config, platform_info);
457 
458  if (CONFIG(DRIVERS_INTEL_DPTF_SUPPORTS_TPCH))
459  write_tpch_methods(platform_info);
460 
461  if (CONFIG(DRIVERS_INTEL_DPTF_SUPPORTS_TPWR))
462  write_tpwr_methods(config, platform_info);
463 
464  if (CONFIG(DRIVERS_INTEL_DPTF_SUPPORTS_TBAT))
465  write_tbat_methods(platform_info);
466 
467  acpigen_pop_len(); /* DPTF Device (write_open_dptf_device) */
468  acpigen_pop_len(); /* Scope */
469 }
470 
471 /* Emites policy definitions for each policy type */
473 {
475  config->policies.passive, DPTF_MAX_PASSIVE_POLICIES,
476  config->policies.critical, DPTF_MAX_CRITICAL_POLICIES);
477 
478  dptf_write_active_policies(config->policies.active,
480 
481  dptf_write_passive_policies(config->policies.passive,
483 
484  dptf_write_critical_policies(config->policies.critical,
486 }
487 
488 /* Writes other static tables that are used by DPTF */
490 {
493  dptf_write_power_limits(&config->controls.power_limits);
494 }
495 
496 /* Options to control the behavior of devices */
498 {
499  enum dptf_participant p;
500  int i;
501 
502  /* Fan options */
504  dptf_write_fan_options(config->options.fan.fine_grained_control,
505  config->options.fan.step_size,
506  config->options.fan.low_speed_notify);
507  acpigen_pop_len(); /* Scope */
508 
509  /* TSR options */
510  for (p = DPTF_TEMP_SENSOR_0, i = 0; p <= DPTF_TEMP_SENSOR_4; ++p, ++i) {
511  if (is_participant_used(config, p) && (config->options.tsr[i].hysteresis ||
512  config->options.tsr[i].desc)) {
513  dptf_write_scope(p);
514  dptf_write_tsr_hysteresis(config->options.tsr[i].hysteresis);
515  dptf_write_STR(config->options.tsr[i].desc);
516  acpigen_pop_len(); /* Scope */
517  }
518  }
519 }
520 
521 /* Add custom tables and methods to SSDT */
522 static void dptf_fill_ssdt(const struct device *dev)
523 {
525 
530 
531  printk(BIOS_INFO, DPTF_DEVICE_PATH ": %s at %s\n", dev->chip_ops->name, dev_path(dev));
532 }
533 
534 static struct device_operations dptf_ops = {
536  .set_resources = noop_set_resources,
537  .acpi_name = dptf_acpi_name,
538  .acpi_fill_ssdt = dptf_fill_ssdt,
539 };
540 
541 static void dptf_enable_dev(struct device *dev)
542 {
543  dev->ops = &dptf_ops;
544 }
545 
547  CHIP_NAME("Intel DPTF")
548  .enable_dev = dptf_enable_dev,
549 };
const char * acpi_device_path_join(const struct device *dev, const char *name)
Definition: device.c:172
const char * acpi_device_name(const struct device *dev)
Definition: device.c:49
void acpigen_write_dword(unsigned int data)
Definition: acpigen.c:108
void acpigen_emit_namestring(const char *namepath)
Definition: acpigen.c:275
void acpigen_write_store(void)
Definition: acpigen.c:1333
void acpigen_write_integer(uint64_t data)
Definition: acpigen.c:136
void acpigen_pop_len(void)
Definition: acpigen.c:37
void acpigen_write_scope(const char *name)
Definition: acpigen.c:326
void acpigen_write_zero(void)
Definition: acpigen.c:121
void acpigen_write_method_serialized(const char *name, int nargs)
Definition: acpigen.c:764
char * acpigen_write_package(int nr_el)
Definition: acpigen.c:86
void acpigen_write_name_integer(const char *name, uint64_t val)
Definition: acpigen.c:170
void acpigen_write_STA(uint8_t status)
Definition: acpigen.c:783
void acpigen_emit_byte(unsigned char b)
Definition: acpigen.c:61
void acpigen_emit_eisaid(const char *eisaid)
Definition: acpigen.c:1242
void acpigen_write_device(const char *name)
Definition: acpigen.c:769
void acpigen_write_string(const char *string)
Definition: acpigen.c:210
void acpigen_write_return_namestr(const char *arg)
Definition: acpigen.c:1589
void acpigen_write_method(const char *name, int nargs)
Definition: acpigen.c:758
void acpigen_write_name(const char *name)
Definition: acpigen.c:320
void acpigen_write_name_string(const char *name, const char *string)
Definition: acpigen.c:176
void dptf_write_enabled_policies(const struct dptf_active_policy *active_policies, int active_count, const struct dptf_passive_policy *passive_policies, int passive_count, const struct dptf_critical_policy *critical_policies, int critical_count)
Definition: acpigen_dptf.c:463
void dptf_write_active_policies(const struct dptf_active_policy *policies, int max_count)
Definition: acpigen_dptf.c:208
void dptf_write_STR(const char *str)
Definition: acpigen_dptf.c:435
void dptf_write_fan_options(bool fine_grained, int step_size, bool low_speed_notify)
Definition: acpigen_dptf.c:443
void dptf_write_passive_policies(const struct dptf_passive_policy *policies, int max_count)
Definition: acpigen_dptf.c:292
void dptf_write_tsr_hysteresis(uint8_t hysteresis)
Definition: acpigen_dptf.c:455
void dptf_write_fan_perf(const struct dptf_fan_perf *states, int max_count)
Definition: acpigen_dptf.c:355
void dptf_write_power_limits(const struct dptf_power_limits *limits)
Definition: acpigen_dptf.c:392
void dptf_write_scope(enum dptf_participant participant)
Definition: acpigen_dptf.c:114
void dptf_write_charger_perf(const struct dptf_charger_perf *states, int max_count)
Definition: acpigen_dptf.c:316
void dptf_write_critical_policies(const struct dptf_critical_policy *policies, int max_count)
Definition: acpigen_dptf.c:298
@ DPTF_MAX_CRITICAL_POLICIES
Definition: acpigen_dptf.h:40
@ DPTF_MAX_TSR
Definition: acpigen_dptf.h:50
@ DPTF_MAX_CHARGER_PERF_STATES
Definition: acpigen_dptf.h:43
@ DPTF_MAX_FAN_PERF_STATES
Definition: acpigen_dptf.h:44
@ DPTF_MAX_PASSIVE_POLICIES
Definition: acpigen_dptf.h:39
@ DPTF_MAX_ACTIVE_POLICIES
Definition: acpigen_dptf.h:38
dptf_participant
Definition: acpigen_dptf.h:18
@ DPTF_TEMP_SENSOR_0
Definition: acpigen_dptf.h:23
@ DPTF_TEMP_SENSOR_4
Definition: acpigen_dptf.h:27
@ DPTF_CHARGER
Definition: acpigen_dptf.h:21
@ DPTF_NONE
Definition: acpigen_dptf.h:19
@ DPTF_FAN
Definition: acpigen_dptf.h:22
@ DPTF_CPU
Definition: acpigen_dptf.h:20
#define TCPU_SCOPE
Definition: acpigen_dptf.h:15
#define DPTF_DEVICE_PATH
Definition: acpigen_dptf.h:14
void acpigen_write_ADR_pci_device(const struct device *dev)
Definition: acpigen_pci.c:22
const char * name
Definition: mmu.c:92
#define pci_dev
#define ARRAY_SIZE(a)
Definition: helpers.h:12
#define printk(level,...)
Definition: stdlib.h:16
DEVTREE_CONST struct device * pcidev_path_on_root(pci_devfn_t devfn)
Definition: device_const.c:255
const char * dev_path(const struct device *dev)
Definition: device_util.c:149
#define DPTF_OEM_VARIABLE_COUNT
Definition: chip.h:16
static void write_options(const struct drivers_intel_dptf_config *config)
Definition: dptf.c:497
static const char * dptf_acpi_name(const struct device *dev)
Definition: dptf.c:60
static void write_tpch_read_method(const char *tpch_read_method_name, unsigned int ipc_subcmd_ctrl_value)
Definition: dptf.c:278
static void write_imok(void)
Definition: dptf.c:131
#define PMC_IPC_COMMAND_FIVR_SIZE
Definition: dptf.c:26
#define DEFAULT_POWER_STR
Definition: dptf.c:23
static void write_create_tpwr(const struct drivers_intel_dptf_config *config, const struct dptf_platform_info *platform_info)
Definition: dptf.c:375
static void write_policies(const struct drivers_intel_dptf_config *config)
Definition: dptf.c:472
static void write_tpch_methods(const struct dptf_platform_info *platform_info)
Definition: dptf.c:315
static void write_tbat_methods(const struct dptf_platform_info *platform_info)
Definition: dptf.c:417
static void dptf_fill_ssdt(const struct device *dev)
Definition: dptf.c:522
static void write_tcpu(const struct device *pci_dev, const struct drivers_intel_dptf_config *config)
Definition: dptf.c:106
static void dptf_write_generic_participant(const char *name, enum dptf_generic_participant_type ptype, const char *str, int sta_val, const struct dptf_platform_info *platform_info)
Definition: dptf.c:82
static void write_create_tbat(const struct dptf_platform_info *platform_info)
Definition: dptf.c:403
static void write_pkgc_method(void)
Definition: dptf.c:262
static int get_STA_value(const struct drivers_intel_dptf_config *config, enum dptf_participant participant)
Definition: dptf.c:65
struct chip_operations drivers_intel_dptf_ops
Definition: dptf.c:546
static void write_ppkg_package(const uint8_t i)
Definition: dptf.c:240
static void dptf_enable_dev(struct device *dev)
Definition: dptf.c:541
static const char * get_pmc_ipcs_method(void)
Definition: dptf.c:207
static struct device_operations dptf_ops
Definition: dptf.c:534
dptf_generic_participant_type
Definition: dptf.c:13
@ DPTF_GENERIC_PARTICIPANT_TYPE_TPCH
Definition: dptf.c:15
@ DPTF_GENERIC_PARTICIPANT_TYPE_CHARGER
Definition: dptf.c:16
@ DPTF_GENERIC_PARTICIPANT_TYPE_BATTERY
Definition: dptf.c:17
@ DPTF_GENERIC_PARTICIPANT_TYPE_POWER
Definition: dptf.c:18
@ DPTF_GENERIC_PARTICIPANT_TYPE_TSR
Definition: dptf.c:14
static void write_tpch_write_method(const char *tpch_write_method_name, unsigned int ipc_subcmd_ctrl_value)
Definition: dptf.c:218
static void write_fan(const struct drivers_intel_dptf_config *config, const struct dptf_platform_info *platform_info)
Definition: dptf.c:119
static void write_create_tpch(const struct dptf_platform_info *platform_info)
Definition: dptf.c:305
static void write_controls(const struct drivers_intel_dptf_config *config)
Definition: dptf.c:489
static void write_oem_variables(const struct drivers_intel_dptf_config *config)
Definition: dptf.c:140
static void write_device_definitions(const struct device *dev)
Definition: dptf.c:436
static void write_open_dptf_device(const struct device *dev, const struct dptf_platform_info *platform_info)
Definition: dptf.c:424
static void dptf_write_hid(bool is_eisa, const char *hid)
Definition: dptf.c:73
static void write_tpwr_methods(const struct drivers_intel_dptf_config *config, const struct dptf_platform_info *platform_info)
Definition: dptf.c:397
static bool is_participant_used(const struct drivers_intel_dptf_config *config, enum dptf_participant participant)
Definition: dptf.c:32
#define DEFAULT_BATTERY_STR
Definition: dptf.c:24
static void write_generic_devices(const struct drivers_intel_dptf_config *config, const struct dptf_platform_info *platform_info)
Definition: dptf.c:187
#define DEFAULT_CHARGER_STR
Definition: dptf.c:21
#define DEFAULT_TPCH_STR
Definition: dptf.c:22
@ CONFIG
Definition: dsi_common.h:201
#define ACPI_NAME_BUFFER_SIZE
Definition: acpi.h:59
#define ACPI_STATUS_DEVICE_ALL_ON
Definition: acpigen.h:20
@ ARG0_OP
Definition: acpigen.h:89
@ ARG1_OP
Definition: acpigen.h:90
@ INDEX_OP
Definition: acpigen.h:120
@ LOCAL1_OP
Definition: acpigen.h:82
@ LOCAL0_OP
Definition: acpigen.h:81
@ RETURN_OP
Definition: acpigen.h:146
@ ZERO_OP
Definition: acpigen.h:30
@ DEREF_OP
Definition: acpigen.h:115
void acpigen_write_device_end(void)
Definition: acpigen.h:354
void acpigen_write_package_end(void)
Definition: acpigen.h:313
void acpigen_write_method_end(void)
Definition: acpigen.h:349
#define ACPI_STATUS_DEVICE_ALL_OFF
Definition: acpigen.h:19
#define CHIP_NAME(X)
Definition: device.h:32
static void noop_read_resources(struct device *dev)
Standard device operations function pointers shims.
Definition: device.h:73
static void noop_set_resources(struct device *dev)
Definition: device.h:74
static DEVTREE_CONST void * config_of(const struct device *dev)
Definition: device.h:382
unsigned int type
Definition: edid.c:57
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
enum board_config config
Definition: memory.c:448
@ DEVICE_PATH_PCI
Definition: path.h:9
#define PMC_IPC_CMD_COMMAND_FIVR
Definition: pmc_ipc.h:20
#define PMC_IPC_SUBCMD_RFI_CTRL0_LOGIC
Definition: pmc_ipc.h:26
#define PMC_IPC_SUBCMD_FFFC_FAULT_STATUS
Definition: pmc_ipc.h:32
#define PMC_IPC_SUBCMD_EMI_CTRL0_LOGIC
Definition: pmc_ipc.h:30
#define PMC_IPC_SUBCMD_FFFC_RFI_STATUS
Definition: pmc_ipc.h:34
#define PMC_IPC_CMD_CMD_ID_FIVR_READ
Definition: pmc_ipc.h:22
#define PMC_IPC_SUBCMD_RFI_CTRL4_LOGIC
Definition: pmc_ipc.h:28
#define PMC_IPC_CMD_CMD_ID_FIVR_WRITE
Definition: pmc_ipc.h:24
const struct dptf_platform_info * get_dptf_platform_info(void)
Definition: dptf.c:31
#define PCH_DEVFN_PMC
Definition: pci_devs.h:217
#define NULL
Definition: stddef.h:19
unsigned char uint8_t
Definition: stdint.h:8
DEVTREE_CONST struct device * dev
Definition: device.h:78
const char * name
Definition: device.h:29
void(* read_resources)(struct device *dev)
Definition: device.h:39
enum device_path_type type
Definition: path.h:114
Definition: device.h:107
struct chip_operations * chip_ops
Definition: device.h:144
struct device_path path
Definition: device.h:115
struct device_operations * ops
Definition: device.h:143
DEVTREE_CONST struct bus * bus
Definition: device.h:108
const char * get_fivr_high_clock_method
Definition: dptf.h:24
const char * get_fivr_ssc_method
Definition: dptf.h:25
bool use_eisa_hids
Definition: dptf.h:13
const char * fan_hid
Definition: dptf.h:16
const char * dptf_device_hid
Definition: dptf.h:14
const char * set_fivr_low_clock_method
Definition: dptf.h:21
const char * get_fivr_switching_fault_status
Definition: dptf.h:26
const char * get_fivr_switching_freq_mhz
Definition: dptf.h:27
const char * tpwr_device_hid
Definition: dptf.h:18
const char * set_fivr_high_clock_method
Definition: dptf.h:22
const char * generic_hid
Definition: dptf.h:15
const char * tbat_device_hid
Definition: dptf.h:19
struct dptf_platform_info::@65 tpch_method_names
const char * tpch_device_hid
Definition: dptf.h:17
const char * get_fivr_low_clock_method
Definition: dptf.h:23
int snprintf(char *buf, size_t size, const char *fmt,...)
Note: This file is only for POSIX compatibility, and is meant to be chain-included via string....
Definition: vsprintf.c:35