summaryrefslogtreecommitdiffstats
path: root/import/chips/p9/common/pmlib/occlib/occhw_shared_data.h
blob: f781f25ade0029805b6ec6c71cefd5d5d60d76f8 (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
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: import/chips/p9/common/pmlib/occlib/occhw_shared_data.h $     */
/*                                                                        */
/* OpenPOWER HCODE Project                                                */
/*                                                                        */
/* COPYRIGHT 2015,2018                                                    */
/* [+] International Business Machines 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.                         */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
#ifndef __OCCHW_OSD_H__
#define __OCCHW_OSD_H__

/// \file occhw_osd.h
/// \brief Common header for shared data within the OCC complex
///

#include "kernel.h"
#include "ipc_structs.h"
#include "occhw_scom_cmd.h"

/// Hardcoded address for the location of the OCC shared data segment
/// This is placed in the non-cacheable aliased region of SRAM space
#ifndef OSD_ADDR
    #define OSD_ADDR 0xf7f00000
#endif

/// Total space of the OCC shared data segment
#define OSD_TOTAL_SHARED_DATA_BYTES 4096

/// Reserve space for IPC data in case it needs to grow
#define OSD_IPC_RESERVED_BYTES 2048

/// Reserve space for Debug
#define OSD_DEBUG_RESERVED_BYTES 512

#define OSD_GPE_SCOM_ADDR (OSD_ADDR + OSD_IPC_RESERVED_BYTES + OSD_DEBUG_RESERVED_BYTES)

#define OSD_GPE_SCOM_RESERVED_BYTES 32

#define OSD_RESERVED_BYTES  1184

#define OSD_OCC_COMPLEX_SHARED_DATA_RESERVED_BYTES  320

#define OSD_OCC_COMPLEX_SHARED_DATA_ADDR  (OSD_ADDR + OSD_TOTAL_SHARED_DATA_BYTES - OSD_OCC_COMPLEX_SHARED_DATA_RESERVED_BYTES)

#ifndef __ASSEMBLER__

//GPE2 knowledge of OCC SRAM region for GPE2
typedef struct gpe2_occ_sram_region_data
{
    uint32_t gpe2_sram_region_start; //GPE2 sram region starting address
    uint32_t gpe2_image_header_addr;
    uint32_t gpe2_debug_header_addr;
    uint8_t  reserved[52];
} gpe2_occ_sram_region_data_t;

//GPE3 knowledge of OCC SRAM region for GPE3
typedef struct gpe3_occ_sram_region_data
{
    uint32_t gpe3_sram_region_start; //GPE3 sram region starting address
    uint32_t gpe3_image_header_addr;
    uint32_t gpe3_debug_header_addr;
    uint8_t  reserved[44];
    uint32_t aux_region_start;
    uint32_t aux_region_length;
} gpe3_occ_sram_region_data_t;

//OCC Complex Shared Data.
typedef struct occ_comp_shr_data
{
    uint8_t  reserved[128]; //reserved
    gpe2_occ_sram_region_data_t gpe2_data; //written by GPE2
    gpe3_occ_sram_region_data_t gpe3_data; //written by GPE3
    uint8_t  reserved1[64]; //reserved
} occ_comp_shr_data_t;

typedef union
{
    struct
    {
        union
        {
            ipc_shared_data_t   ipc_data;   //880 bytes
            uint8_t             ipc_reserved[OSD_IPC_RESERVED_BYTES];
        };
        union
        {
            //debug_shared_data_t debug_data;
            uint8_t             debug_reserved[OSD_DEBUG_RESERVED_BYTES];
        };
        union
        {
            occhw_scom_cmd_t    scom_cmd;
            uint8_t             gpe_scom_reserved[OSD_GPE_SCOM_RESERVED_BYTES];
        };

        union
        {
            uint8_t             reserved[OSD_RESERVED_BYTES];
        };
        union
        {
            occ_comp_shr_data_t occ_comp_shr_data;
            uint8_t             occ_comp_shr_sram[OSD_OCC_COMPLEX_SHARED_DATA_RESERVED_BYTES];
        };
    };
    uint8_t total_reserved[OSD_TOTAL_SHARED_DATA_BYTES];
} occhw_osd_t;

// Fail to compile if ipc_shared_data exceeds the reserved space
KERN_STATIC_ASSERT((sizeof(ipc_shared_data_t) <= OSD_IPC_RESERVED_BYTES));

/// Hardcoded pointer for the location of the OCC shared data segment
#define OSD_PTR ((occhw_osd_t*) OSD_ADDR)

#endif /*__ASSEMBLER__*/

#endif  /* __OCCHW_OSD_H__ */
OpenPOWER on IntegriCloud