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