blob: a4315c360faeac1d5dda4a2e1d3665d606a166b1 [file] [log] [blame]
Angel Pons3ef916f2020-04-02 23:49:13 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauer9aea04a2012-03-30 12:01:06 -07002
3#ifndef __CHROMEOS_H__
4#define __CHROMEOS_H__
5
Aaron Durbin790e3ad2014-01-27 15:08:27 -06006#include <stddef.h>
Aaron Durbinfd795622013-03-01 17:12:26 -06007#include <stdint.h>
Cheng-Yi Chiangcfde82c2019-10-14 12:10:51 +08008#include <types.h>
Aaron Durbinfd795622013-03-01 17:12:26 -06009
Julius Wernercd49cce2019-03-05 16:53:33 -080010#if CONFIG(CHROMEOS)
Julius Werner105f5b72015-01-21 17:39:49 -080011/* functions implemented in watchdog.c */
Julius Wernerc7135942016-03-23 16:08:11 -070012void mark_watchdog_tombstone(void);
Julius Werner105f5b72015-01-21 17:39:49 -080013void reboot_from_watchdog(void);
Kyösti Mälkki662353a2021-02-11 07:18:29 +020014bool reset_watchdog_tombstone(void);
Duncan Laurie203e8ce2014-04-22 10:52:31 -070015#else
Julius Wernerc7135942016-03-23 16:08:11 -070016static inline void mark_watchdog_tombstone(void) { return; }
Julius Werner105f5b72015-01-21 17:39:49 -080017static inline void reboot_from_watchdog(void) { return; }
Duncan Laurie203e8ce2014-04-22 10:52:31 -070018#endif /* CONFIG_CHROMEOS */
Stefan Reinauer9aea04a2012-03-30 12:01:06 -070019
Subrata Banik8e7251c2024-01-02 23:28:49 +053020#define UNDEFINED_FACTORY_CONFIG ~((uint64_t)0)
21
Keith Shorte0f34002019-02-05 16:15:10 -070022/**
23 * Perform any platform specific actions required prior to resetting the Cr50.
24 * Defined as weak function in cr50_enable_update.c
25 */
26void mainboard_prepare_cr50_reset(void);
Duncan Laurief131fc72019-01-23 15:01:21 -080027
Vadim Bendebury318708d2014-10-23 16:02:51 -070028void cbmem_add_vpd_calibration_data(void);
Kyösti Mälkki1749b772020-12-19 16:19:44 +020029void chromeos_set_me_hash(u32*, int);
Kyösti Mälkki8a1fcf42021-02-12 18:43:36 +020030void chromeos_set_ramoops(void *ram_oops, size_t size);
Subrata Banik73505f12023-12-27 21:13:25 +053031/*
32 * The factory config space is a one-time programmable info page.
33 * For the unprovisioned one, the read will be 0x0.
Subrata Banik8e7251c2024-01-02 23:28:49 +053034 * Return "UNDEFINED_FACTORY_CONFIG" in case of error.
Subrata Banik73505f12023-12-27 21:13:25 +053035 */
Subrata Banik8e7251c2024-01-02 23:28:49 +053036uint64_t chromeos_get_factory_config(void);
Subrata Banikd968b852023-12-28 23:37:27 +053037/*
38 * Determines whether a ChromeOS device is branded as a Chromebook Plus
39 * based on specific bit flags:
40 *
41 * - Bit 4 (0x10): Indicates whether the device chassis has the
42 * "chromebook-plus" branding.
43 * - Bits 3-0 (0x1): Must be 0x1 to signify compliance with Chromebook Plus
44 * hardware specifications.
45 *
46 * To be considered a Chromebook Plus, either of these conditions needs to be met.
47 */
48bool chromeos_device_branded_plus(void);
Vadim Bendebury318708d2014-10-23 16:02:51 -070049
Aaron Durbinb0f81512016-07-25 21:31:41 -050050/*
Jon Murphyc4e90452022-06-28 10:36:23 -060051 * Declaration for mainboards to use to generate ACPI-specific ChromeOS needs.
Aaron Durbinb0f81512016-07-25 21:31:41 -050052 */
Kyösti Mälkki4fdd84e2021-11-02 10:36:20 +020053void chromeos_acpi_gpio_generate(void);
Aaron Durbinb0f81512016-07-25 21:31:41 -050054
55enum {
56 CROS_GPIO_REC = 1, /* Recovery */
Joel Kitching1d948492019-03-27 18:26:28 +080057 CROS_GPIO_DEPRECATED_DEV = 2, /* Developer;
58 * deprecated (chromium:942901) */
Aaron Durbinb0f81512016-07-25 21:31:41 -050059 CROS_GPIO_WP = 3, /* Write Protect */
Aaron Durbin73deeae2016-12-12 13:57:11 -060060 CROS_GPIO_PE = 4, /* Phase enforcement for final product */
Aaron Durbinb0f81512016-07-25 21:31:41 -050061
62 CROS_GPIO_ACTIVE_LOW = 0,
63 CROS_GPIO_ACTIVE_HIGH = 1,
64
65 CROS_GPIO_VIRTUAL = -1,
66};
67
68struct cros_gpio {
69 int type;
70 int polarity;
71 int gpio_num;
72 const char *device;
73};
74
75#define CROS_GPIO_INITIALIZER(typ, pol, num, dev) \
76 { \
77 .type = (typ), \
78 .polarity = (pol), \
79 .gpio_num = (num), \
80 .device = (dev), \
81 }
82
83#define CROS_GPIO_REC_INITIALIZER(pol, num, dev) \
84 CROS_GPIO_INITIALIZER(CROS_GPIO_REC, pol, num, dev)
85
86#define CROS_GPIO_REC_AL(num, dev) \
87 CROS_GPIO_REC_INITIALIZER(CROS_GPIO_ACTIVE_LOW, num, dev)
88
89#define CROS_GPIO_REC_AH(num, dev) \
90 CROS_GPIO_REC_INITIALIZER(CROS_GPIO_ACTIVE_HIGH, num, dev)
91
Aaron Durbinb0f81512016-07-25 21:31:41 -050092#define CROS_GPIO_WP_INITIALIZER(pol, num, dev) \
93 CROS_GPIO_INITIALIZER(CROS_GPIO_WP, pol, num, dev)
94
95#define CROS_GPIO_WP_AL(num, dev) \
96 CROS_GPIO_WP_INITIALIZER(CROS_GPIO_ACTIVE_LOW, num, dev)
97
98#define CROS_GPIO_WP_AH(num, dev) \
99 CROS_GPIO_WP_INITIALIZER(CROS_GPIO_ACTIVE_HIGH, num, dev)
100
Aaron Durbin73deeae2016-12-12 13:57:11 -0600101#define CROS_GPIO_PE_INITIALIZER(pol, num, dev) \
102 CROS_GPIO_INITIALIZER(CROS_GPIO_PE, pol, num, dev)
103
104#define CROS_GPIO_PE_AL(num, dev) \
105 CROS_GPIO_PE_INITIALIZER(CROS_GPIO_ACTIVE_LOW, num, dev)
106
107#define CROS_GPIO_PE_AH(num, dev) \
108 CROS_GPIO_PE_INITIALIZER(CROS_GPIO_ACTIVE_HIGH, num, dev)
109
Kyösti Mälkki4ff218a2021-11-02 13:03:06 +0200110struct cros_gpio_pack {
111 int count;
112 const struct cros_gpio *gpios;
113};
114
115extern const struct cros_gpio_pack variant_cros_gpio;
116
117#define DECLARE_NO_CROS_GPIOS() \
118 const struct cros_gpio_pack variant_cros_gpio = \
119 { .count = 0, .gpios = NULL }
120
121#define DECLARE_CROS_GPIOS(x) \
122 const struct cros_gpio_pack variant_cros_gpio = \
123 { .count = ARRAY_SIZE(x), .gpios = x }
124
125#define DECLARE_WEAK_CROS_GPIOS(x) \
126 const struct cros_gpio_pack __weak variant_cros_gpio = \
127 { .count = ARRAY_SIZE(x), .gpios = x }
Kyösti Mälkki4fdd84e2021-11-02 10:36:20 +0200128
Daisuke Nojiri742fc8d2014-10-10 10:51:06 -0700129#endif /* __CHROMEOS_H__ */