]> git.proxmox.com Git - mirror_edk2.git/blame - QuarkSocPkg/QuarkNorthCluster/MemoryInit/Pei/io.h
QuarkSocPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / QuarkSocPkg / QuarkNorthCluster / MemoryInit / Pei / io.h
CommitLineData
9b6bbcdb
MK
1/** @file\r
2Declaration of IO handling routines.\r
3\r
4Copyright (c) 2013-2015 Intel Corporation.\r
5\r
c9f231d0 6SPDX-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
101void 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
108uint32_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
116uint32_t Rd32(\r
117 uint32_t unit,\r
118 uint32_t addr);\r
119\r
120void Wr32(\r
121 uint32_t unit,\r
122 uint32_t addr,\r
123 uint32_t data);\r
124\r
125void 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