blob: a833fc63d1d1b77ae41ff1f125150c9f5ce4fd4b (
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
|
/* Copyright 2017 IBM Corp.
*
* 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.
*/
#ifndef HW_UTILS_H
#define HW_UTILS_H
#include "types_t.h"
#include "sha512.h"
#define ECID_SIZE 16
#define HOST_RESET_VECTOR 0x100
#define TEST_SYSTEM_MEMORY (64*1024*1024)
#define TRUSTED_MEMORY_BASE (8*1024*1024) // should be 256MB
#define TOTAL_TEST_MEMORY (TEST_SYSTEM_MEMORY+4*1024)
#define CACHE_LINE 128
#define MEMORY_MASK 0x0fffffffffffffffull
#define CACHE_MASK 0x0fffffffffffff80ull // 128B cache line aligned
#define STACK_MASK 0x0ffffffffffff000ull // 4KB page aligned
#define HRMOR_MASK 0x0ffffffffff00000ull // 1MB aligned
#define HRMOR_IGNORE 0x8000000000000000ull
#define XSCOM_MASK 0x0ffffff800000000ull // 32GB aligned
#define HRMOR_RELATIVE(_a) ((_a)&~HRMOR_IGNORE)
#define ABSOLUTE_ADDR(_a) ((_a)|HRMOR_IGNORE)
#define PHYSICAL(_a) ((_a)&MEMORY_MASK)
typedef struct {
uint64_t GPR[32];
uint64_t SPRG7;
uint64_t HRMOR;
uint64_t SCRATCH_0;
struct {
uint64_t value;
uint64_t mask;
} FSP_BAR;
uint8_t ECID[ECID_SIZE];
uint8_t OTP_HW_KEY_HASH[SHA512_DIGEST_SIZE];
uint8_t* data; // 64M+4K malloc/mmap
uint8_t* memory; // 64M (4K aligned)
int mfd;
} hw_settings;
extern hw_settings HW;
#define r1 HW.GPR[1]
#define r2 HW.GPR[2]
#define r30 HW.GPR[30]
extern void HW_Init (void);
extern void HW_Free (void);
extern void Log (uint64_t code);
extern void Error (uint64_t code);
extern void Check_Stop (char* msg);
extern void Error_Stop (uint64_t code, char* msg);
extern void assem_DCBI (uint64_t addr);
extern void assem_DCBZ (uint64_t addr);
extern void assem_DCBST (uint8_t* addr);
extern void assem_ICBI (uint8_t* addr);
extern void assem_SYNC (void);
extern void assem_ISYNC (void);
extern void mtspr_SPRG7 (uint64_t addr);
extern uint64_t mfspr_SPRG7 (void);
extern void mtspr_HRMOR (uint64_t addr);
extern uint64_t mfspr_HRMOR (void);
extern void mtspr_SCRATCH_0 (uint64_t addr);
extern uint64_t mfspr_SCRATCH_0 (void);
extern uint64_t getscom_FSP_BAR_value (uint64_t base);
extern uint64_t getscom_FSP_BAR_mask (uint64_t base);
extern void getscom_HW_ECID (uint64_t base, uint8_t* buf);
extern void getscom_OTP_HW_Key_Hash (uint64_t base, uint8_t* buf);
extern uint64_t physical_addr (uint64_t addr);
extern uint8_t* Convert_Mem_Addr (uint64_t);
extern uint64_t Convert_Mem_Offset (uint8_t*);
#endif
|