]>
Commit | Line | Data |
---|---|---|
9b6bbcdb MK |
1 | /** @file\r |
2 | Declaration of IO handling routines.\r | |
3 | \r | |
4 | Copyright (c) 2013-2015 Intel Corporation.\r | |
5 | \r | |
c9f231d0 | 6 | SPDX-License-Identifier: BSD-2-Clause-Patent\r |
9b6bbcdb MK |
7 | \r |
8 | **/\r | |
9 | #ifndef __IO_H\r | |
10 | #define __IO_H\r | |
11 | \r | |
12 | #include "core_types.h"\r | |
13 | \r | |
14 | #include "general_definitions.h"\r | |
15 | #include "gen5_iosf_sb_definitions.h"\r | |
16 | \r | |
17 | // Instruction not present on Quark\r | |
18 | #define SFENCE()\r | |
19 | \r | |
20 | #define DEAD_LOOP() for(;;);\r | |
21 | \r | |
22 | ////\r | |
23 | // Define each of the IOSF_SB ports used by MRC\r | |
24 | //\r | |
25 | \r | |
26 | //\r | |
27 | // Has to be 0 because of emulation static data\r | |
28 | // initialisation:\r | |
29 | // Space_t EmuSpace[ SPACE_COUNT] = {0};\r | |
30 | //\r | |
31 | #define FREE 0x000\r | |
32 | \r | |
33 | // Pseudo side-band ports for access abstraction\r | |
34 | // See Wr32/Rd32 functions\r | |
35 | #define MEM 0x101\r | |
36 | #define MMIO 0x102\r | |
37 | #define DCMD 0x0A0\r | |
38 | \r | |
39 | // Real side-band ports\r | |
40 | // See Wr32/Rd32 functions\r | |
41 | #define MCU 0x001\r | |
42 | #define HOST_BRIDGE 0x003\r | |
43 | #define MEMORY_MANAGER 0x005\r | |
44 | #define HTE 0x011\r | |
45 | #define DDRPHY 0x012\r | |
46 | #define FUSE 0x033\r | |
47 | \r | |
48 | // End of IOSF_SB ports\r | |
49 | ////\r | |
50 | \r | |
51 | // Pciexbar address\r | |
52 | #define EC_BASE 0xE0000000\r | |
53 | \r | |
54 | #define PCIADDR(bus,dev,fn,reg) ( \\r | |
55 | (EC_BASE) + \\r | |
56 | ((bus) << 20) + \\r | |
57 | ((dev) << 15) + \\r | |
58 | ((fn) << 12) + \\r | |
59 | (reg))\r | |
60 | \r | |
61 | // Various offsets used in the building sideband commands.\r | |
62 | #define SB_OPCODE_OFFSET 24\r | |
63 | #define SB_PORT_OFFSET 16\r | |
64 | #define SB_REG_OFFEST 8\r | |
65 | \r | |
66 | // Sideband opcodes\r | |
67 | #define SB_REG_READ_OPCODE 0x10\r | |
68 | #define SB_REG_WRITE_OPCODE 0x11\r | |
69 | \r | |
70 | #define SB_FUSE_REG_READ_OPCODE 0x06\r | |
71 | #define SB_FUSE_REG_WRITE_OPCODE 0x07\r | |
72 | \r | |
73 | #define SB_DDRIO_REG_READ_OPCODE 0x06\r | |
74 | #define SB_DDRIO_REG_WRITE_OPCODE 0x07\r | |
75 | \r | |
76 | #define SB_DRAM_CMND_OPCODE 0x68\r | |
77 | #define SB_WAKE_CMND_OPCODE 0xCA\r | |
78 | #define SB_SUSPEND_CMND_OPCODE 0xCC\r | |
79 | \r | |
80 | // Register addresses for sideband command and data.\r | |
81 | #define SB_PACKET_REG 0x00D0\r | |
82 | #define SB_DATA_REG 0x00D4\r | |
83 | #define SB_HADR_REG 0x00D8\r | |
84 | \r | |
85 | // We always flag all 4 bytes in the register reads/writes as required.\r | |
86 | #define SB_ALL_BYTES_ENABLED 0xF0\r | |
87 | \r | |
88 | #define SB_COMMAND(Opcode, Port, Reg) \\r | |
89 | ((Opcode << SB_OPCODE_OFFSET) | \\r | |
90 | (Port << SB_PORT_OFFSET) | \\r | |
91 | (Reg << SB_REG_OFFEST) | \\r | |
92 | SB_ALL_BYTES_ENABLED)\r | |
93 | \r | |
94 | // iosf\r | |
95 | #define isbM32m WrMask32\r | |
96 | #define isbW32m Wr32\r | |
97 | #define isbR32m Rd32\r | |
98 | \r | |
99 | // pci\r | |
100 | \r | |
101 | void pciwrite32(\r | |
102 | uint32_t bus,\r | |
103 | uint32_t dev,\r | |
104 | uint32_t fn,\r | |
105 | uint32_t reg,\r | |
106 | uint32_t data);\r | |
107 | \r | |
108 | uint32_t pciread32(\r | |
109 | uint32_t bus,\r | |
110 | uint32_t dev,\r | |
111 | uint32_t fn,\r | |
112 | uint32_t reg);\r | |
113 | \r | |
114 | // general\r | |
115 | \r | |
116 | uint32_t Rd32(\r | |
117 | uint32_t unit,\r | |
118 | uint32_t addr);\r | |
119 | \r | |
120 | void Wr32(\r | |
121 | uint32_t unit,\r | |
122 | uint32_t addr,\r | |
123 | uint32_t data);\r | |
124 | \r | |
125 | void WrMask32(\r | |
126 | uint32_t unit,\r | |
127 | uint32_t addr,\r | |
128 | uint32_t data,\r | |
129 | uint32_t mask);\r | |
130 | \r | |
131 | \r | |
132 | #endif\r |