summaryrefslogtreecommitdiffstats
path: root/src/build/utils/base_ppe_header.S
blob: c99cc08f0d536f58b9f9f93b4eefe5b0fc79d382 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/build/utils/base_ppe_header.S $                           */
/*                                                                        */
/* OpenPOWER sbe Project                                                  */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2016                             */
/*                                                                        */
/*                                                                        */
/* Licensed under the Apache License, Version 2.0 (the "License");        */
/* you may not use this file except in compliance with the License.       */
/* You may obtain a copy of the License at                                */
/*                                                                        */
/*     http://www.apache.org/licenses/LICENSE-2.0                         */
/*                                                                        */
/* Unless required by applicable law or agreed to in writing, software    */
/* distributed under the License is distributed on an "AS IS" BASIS,      */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
/* implied. See the License for the specific language governing           */
/* permissions and limitations under the License.                         */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
//-----------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2014
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
//-----------------------------------------------------------------------------

/// \file base_ppe_header.S
/// \brief code to create header, toc, strings, fixed and fixed_toc sections
///
/// function P9XipHeader creates header section, function .proc_sbe_fixed
/// creates fixed, fixed_toc sections
#include "p9_xip_image.h"
#include "proc_sbe_fixed.H"


#define IMAGE_SPACE_UNDEFINED 0xffff
#define IMAGE_SPACE_OCI       0x8000
#define IMAGE_SPACE_PNOR      0x800b
#define IMAGE_SPACE_OTPROM    0x0001
#define IMAGE_SPACE_SEEPROM   0x800c
#define IMAGE_SPACE_BASE      0x0008



    .macro    ..checku, x:req, bits:req, err="Unsigned value too large"

    .if    (((\bits) <= 0) || ((\bits) > 63))
    .error    "The number of bits must be in the range 0 < bits < 64"
    .endif

    .iflt    (\x)
    .error  "An unsigned value is required here"
        .endif

    .ifgt    ((\x) - (0xffffffffffffffff >> (64 - (\bits))))
    .error    "\err"
    .endif

    .endm

    .macro  ..check_u16, u16
    ..checku (\u16), 16, "Unsigned immediate is larger than 16 bits"
    .endm


    .macro  ..set_default_space, s
    ..check_u16 (\s)
    .set    _PGAS_DEFAULT_SPACE, (\s)
    .endm

    .macro    ..check_default_space
    .if    (_PGAS_DEFAULT_SPACE == IMAGE_SPACE_UNDEFINED)
    .error    "The PGAS default address space has not been defined"
    .endif
    .endm


    .macro    .quada, offset:req
    ..check_default_space
    .long   _PGAS_DEFAULT_SPACE
    .long    (\offset)
    .endm


    .macro    P9XipHeader, magic, link_address, entry_point, image_size

    .section .header, "a", @progbits


    //////////////////////////////////////////////////////////////////////
    // Identification - 8-byte aligned; 8 Entries; TOC-Indexed
    //////////////////////////////////////////////////////////////////////

__magic:
    .quad    (\magic)
__L1_LoaderAddr:
    .quad    0
__L2_LoaderAddr:
    .quad    0
__kernelAddr:
    .quad   0
__link_address:
    .quada    (\link_address)
__header_64_reserved:
    .quad    0, 0, 0

    .xip_toc magic, P9_XIP_UINT64, __magic
    .xip_toc L1_LoaderAddr, P9_XIP_UINT64, __L1_LoaderAddr
    .xip_toc L2_LoaderAddr, P9_XIP_UINT64, __L2_LoaderAddr
    .xip_toc kernelAddr, P9_XIP_UINT64, __kernelAddr
    .xip_toc link_address, P9_XIP_UINT64, __link_address

        //////////////////////////////////////////////////////////////////////
        // Section Table - Not TOC-Indexed
        //////////////////////////////////////////////////////////////////////

        .xip_section header
        .xip_section fixed,                8
        .xip_section fixed_toc,            8
        .xip_section toc,                  4
        .xip_section strings
        .xip_section loader_text,          4
        .xip_section loader_data,          8, empty=1
        .xip_section text,                 4
        .xip_section data,                 8, empty=1
        .xip_section base,                 4
        .xip_section baseloader,           8, empty=1
        .xip_section overrides,            8, empty=1
        .xip_section rings,                8, empty=1
        .xip_section overlay,              8, empty=1
        .xip_section hbbl,                 8, empty=1


        //////////////////////////////////////////////////////////////////////
        // Other Information - 4-byte aligned; 8 entries; TOC-Indexed
        //////////////////////////////////////////////////////////////////////

__image_size:
    .long    (\image_size)
__build_date:
    .long    0
__build_time:
    .long    0
__header_32_reserved:
    .long    0, 0, 0, 0, 0

    .xip_toc image_size, P9_XIP_UINT32, __image_size
    .xip_toc build_date, P9_XIP_UINT32, __build_date
    .xip_toc build_time, P9_XIP_UINT32, __build_time


        //////////////////////////////////////////////////////////////////////
        // Other Information - 1-byte aligned; 8 entries; TOC-Indexed
        //////////////////////////////////////////////////////////////////////

__header_version:
    .byte    P9_XIP_HEADER_VERSION
__toc_normalized:
    .byte    0
__toc_sorted:
    .byte    0
__header_8_reserved:
    .byte    0, 0, 0, 0, 0

    .xip_toc header_version, P9_XIP_UINT8, __header_version
    .xip_toc toc_normalized, P9_XIP_UINT8, __toc_normalized
    .xip_toc toc_sorted, P9_XIP_UINT8, __toc_sorted


        //////////////////////////////////////////////////////////////////////
        // Strings; 64 characters allocated; TOC-Indexed
        //////////////////////////////////////////////////////////////////////

__build_user:
    .asciz    "unknown        "         # 16 Characters allocated
__build_host:
    .asciz    "unknown                " # 24 characters allocated
__header_string_reserved:
    .space    24, 0

    .xip_toc build_user, P9_XIP_STRING, __build_user
    .xip_toc build_host, P9_XIP_STRING, __build_host


    .endm


    .section .fixed, "a", @progbits
    .section .fixed_toc, "a", @progbits
    .section .loader_data, "a", @progbits
    .section .loader_text, "a", @progbits

    .section .toc, "a", @progbits
    .section .strings, "aS", @progbits
    .section .base, "a", @progbits

    ..set_default_space IMAGE_SPACE_SEEPROM
    P9XipHeader P9_XIP_MAGIC_SEEPROM, 0x80000000, 0x00000000, _sbe_image_size

    // Create the .fixed section
    .proc_sbe_fixed_system
    .proc_sbe_fixed_proc_chip
    .proc_sbe_fixed_perv
    .proc_sbe_fixed_core
    .proc_sbe_fixed_ex
    .proc_sbe_fixed_eq
OpenPOWER on IntegriCloud