blob: 74c3f61e0d46d98b24dfea005ae231264d9a1efc [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;
62};
63
64void agesa_state_on_entry(struct agesa_state *task, AGESA_STRUCT_NAME func);
65void agesa_state_on_exit(struct agesa_state *task,
66 AMD_CONFIG_PARAMS *StdHeader);
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +020067int agesa_execute_state(struct sysinfo *cb, AGESA_STRUCT_NAME func);
68
69/* AGESA dispatchers */
70
71AGESA_STATUS module_dispatch(AGESA_STRUCT_NAME func, AMD_CONFIG_PARAMS *StdHeader);
72
73void platform_BeforeInitReset(struct sysinfo *cb, AMD_RESET_PARAMS *Reset);
74void board_BeforeInitReset(struct sysinfo *cb, AMD_RESET_PARAMS *Reset);
75
76void platform_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *Early);
77void board_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *Early);
78
79/* Normal boot */
80void platform_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post);
81void board_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post);
82void platform_AfterInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post);
83
84void platform_BeforeInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env);
85void board_BeforeInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env);
86void platform_AfterInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env);
87
88void platform_BeforeInitMid(struct sysinfo *cb, AMD_MID_PARAMS *Mid);
89void board_BeforeInitMid(struct sysinfo *cb, AMD_MID_PARAMS *Mid);
90
91void platform_AfterInitLate(struct sysinfo *cb, AMD_LATE_PARAMS *Late);
92void completion_InitLate(struct sysinfo *cb, AMD_LATE_PARAMS *Late);
93
94/* S3 Resume */
95void platform_BeforeInitResume(struct sysinfo *cb, AMD_RESUME_PARAMS *Resume);
96void platform_AfterInitResume(struct sysinfo *cb, AMD_RESUME_PARAMS *Resume);
97
98void platform_BeforeS3LateRestore(struct sysinfo *cb, AMD_S3LATE_PARAMS *S3Late);
99void platform_AfterS3LateRestore(struct sysinfo *cb, AMD_S3LATE_PARAMS *S3Late);
100
Julius Wernercd49cce2019-03-05 16:53:33 -0800101#if CONFIG(CPU_AMD_PI_00660F01)
Kyösti Mälkki28c4d2f2016-11-25 11:21:02 +0200102typedef void AMD_S3SAVE_PARAMS;
103#endif
104void platform_AfterS3Save(struct sysinfo *cb, AMD_S3SAVE_PARAMS *S3Save);
105
Kyösti Mälkkibf201d52017-03-30 17:26:25 +0300106/* FCH callouts, not used with CIMx. */
107#define HAS_AGESA_FCH_OEM_CALLOUT \
Julius Wernercd49cce2019-03-05 16:53:33 -0800108 CONFIG(SOUTHBRIDGE_AMD_AGESA_HUDSON) || \
109 CONFIG(SOUTHBRIDGE_AMD_AGESA_YANGTZE) || \
110 CONFIG(SOUTHBRIDGE_AMD_PI_AVALON) || \
111 CONFIG(SOUTHBRIDGE_AMD_PI_BOLTON) || \
112 CONFIG(SOUTHBRIDGE_AMD_PI_KERN)
Kyösti Mälkkibf201d52017-03-30 17:26:25 +0300113
114#if HAS_AGESA_FCH_OEM_CALLOUT
115/* FIXME: Structures included here were supposed to be private to AGESA. */
116#include <FchCommonCfg.h>
117void agesa_fch_oem_config(uintptr_t Data, AMD_CONFIG_PARAMS *StdHeader);
118void board_FCH_InitReset(struct sysinfo *cb, FCH_RESET_DATA_BLOCK *FchReset);
119void board_FCH_InitEnv(struct sysinfo *cb, FCH_DATA_BLOCK *FchEnv);
120#endif
121
Kyösti Mälkki967d94d2016-11-22 11:52:14 +0200122#endif /* _STATE_MACHINE_H_ */