blob: 0c5e4f7daf899e7ecf82f53587171eefa52ab833 [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
Keith Shorte0f34002019-02-05 16:15:10 -070020/**
21 * Perform any platform specific actions required prior to resetting the Cr50.
22 * Defined as weak function in cr50_enable_update.c
23 */
24void mainboard_prepare_cr50_reset(void);
Duncan Laurief131fc72019-01-23 15:01:21 -080025
Vadim Bendebury318708d2014-10-23 16:02:51 -070026void cbmem_add_vpd_calibration_data(void);
Kyösti Mälkki1749b772020-12-19 16:19:44 +020027void chromeos_set_me_hash(u32*, int);
Kyösti Mälkki8a1fcf42021-02-12 18:43:36 +020028void chromeos_set_ramoops(void *ram_oops, size_t size);
Subrata Banik73505f12023-12-27 21:13:25 +053029/*
30 * The factory config space is a one-time programmable info page.
31 * For the unprovisioned one, the read will be 0x0.
32 * Return `-1` in case of error.
33 */
34int64_t chromeos_get_factory_config(void);
Subrata Banikd968b852023-12-28 23:37:27 +053035/*
36 * Determines whether a ChromeOS device is branded as a Chromebook Plus
37 * based on specific bit flags:
38 *
39 * - Bit 4 (0x10): Indicates whether the device chassis has the
40 * "chromebook-plus" branding.
41 * - Bits 3-0 (0x1): Must be 0x1 to signify compliance with Chromebook Plus
42 * hardware specifications.
43 *
44 * To be considered a Chromebook Plus, either of these conditions needs to be met.
45 */
46bool chromeos_device_branded_plus(void);
Vadim Bendebury318708d2014-10-23 16:02:51 -070047
Aaron Durbinb0f81512016-07-25 21:31:41 -050048/*
Jon Murphyc4e90452022-06-28 10:36:23 -060049 * Declaration for mainboards to use to generate ACPI-specific ChromeOS needs.
Aaron Durbinb0f81512016-07-25 21:31:41 -050050 */
Kyösti Mälkki4fdd84e2021-11-02 10:36:20 +020051void chromeos_acpi_gpio_generate(void);
Aaron Durbinb0f81512016-07-25 21:31:41 -050052
53enum {
54 CROS_GPIO_REC = 1, /* Recovery */
Joel Kitching1d948492019-03-27 18:26:28 +080055 CROS_GPIO_DEPRECATED_DEV = 2, /* Developer;
56 * deprecated (chromium:942901) */
Aaron Durbinb0f81512016-07-25 21:31:41 -050057 CROS_GPIO_WP = 3, /* Write Protect */
Aaron Durbin73deeae2016-12-12 13:57:11 -060058 CROS_GPIO_PE = 4, /* Phase enforcement for final product */
Aaron Durbinb0f81512016-07-25 21:31:41 -050059
60 CROS_GPIO_ACTIVE_LOW = 0,
61 CROS_GPIO_ACTIVE_HIGH = 1,
62
63 CROS_GPIO_VIRTUAL = -1,
64};
65
66struct cros_gpio {
67 int type;
68 int polarity;
69 int gpio_num;
70 const char *device;
71};
72
73#define CROS_GPIO_INITIALIZER(typ, pol, num, dev) \
74 { \
75 .type = (typ), \
76 .polarity = (pol), \
77 .gpio_num = (num), \
78 .device = (dev), \
79 }
80
81#define CROS_GPIO_REC_INITIALIZER(pol, num, dev) \
82 CROS_GPIO_INITIALIZER(CROS_GPIO_REC, pol, num, dev)
83
84#define CROS_GPIO_REC_AL(num, dev) \
85 CROS_GPIO_REC_INITIALIZER(CROS_GPIO_ACTIVE_LOW, num, dev)
86
87#define CROS_GPIO_REC_AH(num, dev) \
88 CROS_GPIO_REC_INITIALIZER(CROS_GPIO_ACTIVE_HIGH, num, dev)
89
Aaron Durbinb0f81512016-07-25 21:31:41 -050090#define CROS_GPIO_WP_INITIALIZER(pol, num, dev) \
91 CROS_GPIO_INITIALIZER(CROS_GPIO_WP, pol, num, dev)
92
93#define CROS_GPIO_WP_AL(num, dev) \
94 CROS_GPIO_WP_INITIALIZER(CROS_GPIO_ACTIVE_LOW, num, dev)
95
96#define CROS_GPIO_WP_AH(num, dev) \
97 CROS_GPIO_WP_INITIALIZER(CROS_GPIO_ACTIVE_HIGH, num, dev)
98
Aaron Durbin73deeae2016-12-12 13:57:11 -060099#define CROS_GPIO_PE_INITIALIZER(pol, num, dev) \
100 CROS_GPIO_INITIALIZER(CROS_GPIO_PE, pol, num, dev)
101
102#define CROS_GPIO_PE_AL(num, dev) \
103 CROS_GPIO_PE_INITIALIZER(CROS_GPIO_ACTIVE_LOW, num, dev)
104
105#define CROS_GPIO_PE_AH(num, dev) \
106 CROS_GPIO_PE_INITIALIZER(CROS_GPIO_ACTIVE_HIGH, num, dev)
107
Kyösti Mälkki4ff218a2021-11-02 13:03:06 +0200108struct cros_gpio_pack {
109 int count;
110 const struct cros_gpio *gpios;
111};
112
113extern const struct cros_gpio_pack variant_cros_gpio;
114
115#define DECLARE_NO_CROS_GPIOS() \
116 const struct cros_gpio_pack variant_cros_gpio = \
117 { .count = 0, .gpios = NULL }
118
119#define DECLARE_CROS_GPIOS(x) \
120 const struct cros_gpio_pack variant_cros_gpio = \
121 { .count = ARRAY_SIZE(x), .gpios = x }
122
123#define DECLARE_WEAK_CROS_GPIOS(x) \
124 const struct cros_gpio_pack __weak variant_cros_gpio = \
125 { .count = ARRAY_SIZE(x), .gpios = x }
Kyösti Mälkki4fdd84e2021-11-02 10:36:20 +0200126
Daisuke Nojiri742fc8d2014-10-10 10:51:06 -0700127#endif /* __CHROMEOS_H__ */