summaryrefslogtreecommitdiffstats
path: root/src/soc/intel/quark/romstage/car_stage_entry.S
blob: d51587143b96d05591d55ab05c9a989fc1736fa7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * This file is part of the coreboot project.
 *
 * Copyright (C) 2000,2007 Ronald G. Minnich <rminnich@gmail.com>
 * Copyright (C) 2007-2008 coresystems GmbH
 * Copyright (C) 2013-2014 Sage Electronic Engineering, LLC.
 * Copyright (C) 2015-2016 Intel Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * Replacement for cache_as_ram.inc when using the C environment boot block.
 */

#include <rules.h>
#include <soc/sd.h>

	.section ".text"
	.global car_stage_entry

car_stage_entry:

	/* Enter the C code */
	call	car_stage_c_entry

#if CONFIG(PLATFORM_USES_FSP1_1)
#if !ENV_VERSTAGE
#include "src/drivers/intel/fsp1_1/after_raminit.S"
#endif
#endif

	/* The code should never reach this point */
	movb	$0x69, %ah
	jmp	.Lhlt

#----------------------------------------------------------------------------
#
# Procedure:	.Lhlt
#
# Input:	ah - Upper 8-bits of POST code
#		al - Lower 8-bits of POST code
#
# Description:
#		Infinite loop displaying alternating POST code values
#
#----------------------------------------------------------------------------

#define FLASH_DELAY	0x1000	/* I/O delay between post codes on failure */
#define POST_DELAY	0x50

.Lhlt:
	xchg	%al, %ah
	mov	$POST_DELAY, %dh
#if CONFIG(POST_IO)
	outb	%al, $CONFIG_POST_IO_PORT
#else
	post_code(POST_DEAD_CODE)
#endif
.flash_setup:
	movl	$FLASH_DELAY, %ecx
.flash_delay:
	outb	%al, $0xED
	loop	.flash_delay
#if CONFIG(ENABLE_DEBUG_LED)
	movl	$SD_HOST_CTRL, %ebx
	movb	0(%ebx), %dl
	xorb	$1, %dl
	movb	%dl, 0(%ebx)
#endif /* CONFIG_ENABLE_DEBUG_LED */
	decb	%dh
	jnz	.flash_setup
	jmp	.Lhlt