blob: 7d9fe9c5efe5be1cc84c5e95ce3c26f497e5ebac [file] [log] [blame]
Kyösti Mälkki967d94d2016-11-22 11:52:14 +02001/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright (C) 2016 Kyösti Mälkki
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#ifndef _STATE_MACHINE_H_
17#define _STATE_MACHINE_H_
18
19#include <stdint.h>
Kyösti Mälkkiacc599b2016-11-24 14:31:07 +020020#include <AGESA.h>
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020021#include <AMD.h>
22
Julius Wernercd49cce2019-03-05 16:53:33 -080023#define HAS_LEGACY_WRAPPER CONFIG(BINARYPI_LEGACY_WRAPPER)
Kyösti Mälkkiacc599b2016-11-24 14:31:07 +020024
25/* eventlog */
Kyösti Mälkkiacc599b2016-11-24 14:31:07 +020026void agesawrapper_trace(AGESA_STATUS ret, AMD_CONFIG_PARAMS *StdHeader, const char *func);
Kyösti Mälkki0a7cab82017-07-29 08:11:52 +030027AGESA_STATUS agesawrapper_amdreadeventlog(UINT8 HeapStatus);
Kyösti Mälkki967d94d2016-11-22 11:52:14 +020028
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020029/* For suspend-to-ram support. */
30
Julius Wernercd49cce2019-03-05 16:53:33 -080031#if !CONFIG(CPU_AMD_PI)
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020032/* TODO: With binaryPI we need different interface. */
33AGESA_STATUS OemInitResume(AMD_S3_PARAMS *dataBlock);
34AGESA_STATUS OemS3LateRestore(AMD_S3_PARAMS *dataBlock);
35AGESA_STATUS OemS3Save(AMD_S3_PARAMS *dataBlock);
36#endif
37
Kyösti Mälkki38aff1a2017-07-26 00:57:30 +030038/* For FCH */
39AGESA_STATUS fchs3earlyrestore(AMD_CONFIG_PARAMS *StdHeader);
40AGESA_STATUS fchs3laterestore(AMD_CONFIG_PARAMS *StdHeader);
41
Kyösti Mälkki967d94d2016-11-22 11:52:14 +020042struct sysinfo
43{
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020044 AMD_CONFIG_PARAMS StdHeader;
45
Kyösti Mälkki967d94d2016-11-22 11:52:14 +020046 int s3resume;
47};
48
Kyösti Mälkkidf7ff312016-11-25 12:02:00 +020049void agesa_main(struct sysinfo *cb);
Kyösti Mälkkiba22e152016-11-23 06:47:15 +020050void agesa_postcar(struct sysinfo *cb);
51
52void board_BeforeAgesa(struct sysinfo *cb);
53void platform_once(struct sysinfo *cb);
Kyösti Mälkkidf7ff312016-11-25 12:02:00 +020054
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020055void agesa_set_interface(struct sysinfo *cb);
Kyösti Mälkkid1d4f932017-09-24 08:21:00 +030056
57struct agesa_state {
58 u8 apic_id;
59
60 AGESA_STRUCT_NAME func;
61 const char *function_name;
Kyösti Mälkki43f6d9d2019-03-14 14:59:31 +020062 uint32_t ts_entry_id;
63 uint32_t ts_exit_id;
Kyösti Mälkkid1d4f932017-09-24 08:21:00 +030064};
65
66void agesa_state_on_entry(struct agesa_state *task, AGESA_STRUCT_NAME func);
67void agesa_state_on_exit(struct agesa_state *task,
68 AMD_CONFIG_PARAMS *StdHeader);
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020069int agesa_execute_state(struct sysinfo *cb, AGESA_STRUCT_NAME func);
70
71/* AGESA dispatchers */
72
73AGESA_STATUS module_dispatch(AGESA_STRUCT_NAME func, AMD_CONFIG_PARAMS *StdHeader);
74
75void platform_BeforeInitReset(struct sysinfo *cb, AMD_RESET_PARAMS *Reset);
76void board_BeforeInitReset(struct sysinfo *cb, AMD_RESET_PARAMS *Reset);
77
78void platform_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *Early);
79void board_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *Early);
80
81/* Normal boot */
82void platform_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post);
83void board_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post);
84void platform_AfterInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post);
85
86void platform_BeforeInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env);
87void board_BeforeInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env);
88void platform_AfterInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env);
89
90void platform_BeforeInitMid(struct sysinfo *cb, AMD_MID_PARAMS *Mid);
91void board_BeforeInitMid(struct sysinfo *cb, AMD_MID_PARAMS *Mid);
92
93void platform_AfterInitLate(struct sysinfo *cb, AMD_LATE_PARAMS *Late);
94void completion_InitLate(struct sysinfo *cb, AMD_LATE_PARAMS *Late);
95
96/* S3 Resume */
97void platform_BeforeInitResume(struct sysinfo *cb, AMD_RESUME_PARAMS *Resume);
98void platform_AfterInitResume(struct sysinfo *cb, AMD_RESUME_PARAMS *Resume);
99
100void platform_BeforeS3LateRestore(struct sysinfo *cb, AMD_S3LATE_PARAMS *S3Late);
101void platform_AfterS3LateRestore(struct sysinfo *cb, AMD_S3LATE_PARAMS *S3Late);
102
Julius Wernercd49cce2019-03-05 16:53:33 -0800103#if CONFIG(CPU_AMD_PI_00660F01)
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +0200104typedef void AMD_S3SAVE_PARAMS;
105#endif
106void platform_AfterS3Save(struct sysinfo *cb, AMD_S3SAVE_PARAMS *S3Save);
107
Kyösti Mälkkibf201d52017-03-30 17:26:25 +0300108/* FCH callouts, not used with CIMx. */
109#define HAS_AGESA_FCH_OEM_CALLOUT \
Julius Wernercd49cce2019-03-05 16:53:33 -0800110 CONFIG(SOUTHBRIDGE_AMD_AGESA_HUDSON) || \
111 CONFIG(SOUTHBRIDGE_AMD_AGESA_YANGTZE) || \
112 CONFIG(SOUTHBRIDGE_AMD_PI_AVALON) || \
113 CONFIG(SOUTHBRIDGE_AMD_PI_BOLTON) || \
114 CONFIG(SOUTHBRIDGE_AMD_PI_KERN)
Kyösti Mälkkibf201d52017-03-30 17:26:25 +0300115
116#if HAS_AGESA_FCH_OEM_CALLOUT
117/* FIXME: Structures included here were supposed to be private to AGESA. */
118#include <FchCommonCfg.h>
119void agesa_fch_oem_config(uintptr_t Data, AMD_CONFIG_PARAMS *StdHeader);
120void board_FCH_InitReset(struct sysinfo *cb, FCH_RESET_DATA_BLOCK *FchReset);
121void board_FCH_InitEnv(struct sysinfo *cb, FCH_DATA_BLOCK *FchEnv);
122#endif
123
Kyösti Mälkki967d94d2016-11-22 11:52:14 +0200124#endif /* _STATE_MACHINE_H_ */