1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef _PPC_PNV_XSCOM_H
20#define _PPC_PNV_XSCOM_H
21
22#include "qom/object.h"
23
24typedef struct PnvXScomInterface {
25 Object parent;
26} PnvXScomInterface;
27
28#define TYPE_PNV_XSCOM_INTERFACE "pnv-xscom-interface"
29#define PNV_XSCOM_INTERFACE(obj) \
30 OBJECT_CHECK(PnvXScomInterface, (obj), TYPE_PNV_XSCOM_INTERFACE)
31#define PNV_XSCOM_INTERFACE_CLASS(klass) \
32 OBJECT_CLASS_CHECK(PnvXScomInterfaceClass, (klass), \
33 TYPE_PNV_XSCOM_INTERFACE)
34#define PNV_XSCOM_INTERFACE_GET_CLASS(obj) \
35 OBJECT_GET_CLASS(PnvXScomInterfaceClass, (obj), TYPE_PNV_XSCOM_INTERFACE)
36
37typedef struct PnvXScomInterfaceClass {
38 InterfaceClass parent;
39 int (*dt_xscom)(PnvXScomInterface *dev, void *fdt, int offset);
40} PnvXScomInterfaceClass;
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57#define PNV_XSCOM_EX_CORE_BASE 0x10000000ull
58
59#define PNV_XSCOM_EX_BASE(core) \
60 (PNV_XSCOM_EX_CORE_BASE | ((uint64_t)(core) << 24))
61#define PNV_XSCOM_EX_SIZE 0x100000
62
63#define PNV_XSCOM_P9_EC_BASE(core) \
64 ((uint64_t)(((core) & 0x1F) + 0x20) << 24)
65#define PNV_XSCOM_P9_EC_SIZE 0x100000
66
67#define PNV_XSCOM_LPC_BASE 0xb0020
68#define PNV_XSCOM_LPC_SIZE 0x4
69
70#define PNV_XSCOM_PSIHB_BASE 0x2010900
71#define PNV_XSCOM_PSIHB_SIZE 0x20
72
73#define PNV_XSCOM_OCC_BASE 0x0066000
74#define PNV_XSCOM_OCC_SIZE 0x6000
75
76extern void pnv_xscom_realize(PnvChip *chip, Error **errp);
77extern int pnv_dt_xscom(PnvChip *chip, void *fdt, int offset);
78
79extern void pnv_xscom_add_subregion(PnvChip *chip, hwaddr offset,
80 MemoryRegion *mr);
81extern void pnv_xscom_region_init(MemoryRegion *mr,
82 struct Object *owner,
83 const MemoryRegionOps *ops,
84 void *opaque,
85 const char *name,
86 uint64_t size);
87
88#endif
89