19b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney/** @file 29b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael KinneyDeclaration of IO handling routines. 39b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 49b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael KinneyCopyright (c) 2013-2015 Intel Corporation. 59b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 69b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael KinneyThis program and the accompanying materials 79b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyare licensed and made available under the terms and conditions of the BSD License 89b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneywhich accompanies this distribution. The full text of the license may be found at 99b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyhttp://opensource.org/licenses/bsd-license.php 109b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 119b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael KinneyTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 129b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael KinneyWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 139b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 149b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney**/ 159b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#ifndef __IO_H 169b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define __IO_H 179b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 189b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#include "core_types.h" 199b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 209b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#include "general_definitions.h" 219b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#include "gen5_iosf_sb_definitions.h" 229b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 239b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Instruction not present on Quark 249b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SFENCE() 259b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 269b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define DEAD_LOOP() for(;;); 279b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 289b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney//// 299b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Define each of the IOSF_SB ports used by MRC 309b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// 319b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 329b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// 339b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Has to be 0 because of emulation static data 349b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// initialisation: 359b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Space_t EmuSpace[ SPACE_COUNT] = {0}; 369b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// 379b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define FREE 0x000 389b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 399b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Pseudo side-band ports for access abstraction 409b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// See Wr32/Rd32 functions 419b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define MEM 0x101 429b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define MMIO 0x102 439b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define DCMD 0x0A0 449b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 459b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Real side-band ports 469b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// See Wr32/Rd32 functions 479b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define MCU 0x001 489b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define HOST_BRIDGE 0x003 499b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define MEMORY_MANAGER 0x005 509b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define HTE 0x011 519b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define DDRPHY 0x012 529b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define FUSE 0x033 539b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 549b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// End of IOSF_SB ports 559b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney//// 569b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 579b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Pciexbar address 589b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define EC_BASE 0xE0000000 599b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 609b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define PCIADDR(bus,dev,fn,reg) ( \ 619b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney (EC_BASE) + \ 629b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney ((bus) << 20) + \ 639b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney ((dev) << 15) + \ 649b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney ((fn) << 12) + \ 659b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney (reg)) 669b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 679b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Various offsets used in the building sideband commands. 689b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_OPCODE_OFFSET 24 699b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_PORT_OFFSET 16 709b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_REG_OFFEST 8 719b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 729b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Sideband opcodes 739b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_REG_READ_OPCODE 0x10 749b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_REG_WRITE_OPCODE 0x11 759b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 769b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_FUSE_REG_READ_OPCODE 0x06 779b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_FUSE_REG_WRITE_OPCODE 0x07 789b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 799b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_DDRIO_REG_READ_OPCODE 0x06 809b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_DDRIO_REG_WRITE_OPCODE 0x07 819b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 829b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_DRAM_CMND_OPCODE 0x68 839b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_WAKE_CMND_OPCODE 0xCA 849b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_SUSPEND_CMND_OPCODE 0xCC 859b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 869b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// Register addresses for sideband command and data. 879b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_PACKET_REG 0x00D0 889b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_DATA_REG 0x00D4 899b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_HADR_REG 0x00D8 909b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 919b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// We always flag all 4 bytes in the register reads/writes as required. 929b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_ALL_BYTES_ENABLED 0xF0 939b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 949b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define SB_COMMAND(Opcode, Port, Reg) \ 959b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney ((Opcode << SB_OPCODE_OFFSET) | \ 969b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney (Port << SB_PORT_OFFSET) | \ 979b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney (Reg << SB_REG_OFFEST) | \ 989b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney SB_ALL_BYTES_ENABLED) 999b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1009b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// iosf 1019b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define isbM32m WrMask32 1029b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define isbW32m Wr32 1039b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#define isbR32m Rd32 1049b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1059b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// pci 1069b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1079b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyvoid pciwrite32( 1089b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t bus, 1099b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t dev, 1109b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t fn, 1119b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t reg, 1129b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t data); 1139b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1149b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyuint32_t pciread32( 1159b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t bus, 1169b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t dev, 1179b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t fn, 1189b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t reg); 1199b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1209b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney// general 1219b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1229b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyuint32_t Rd32( 1239b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t unit, 1249b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t addr); 1259b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1269b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyvoid Wr32( 1279b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t unit, 1289b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t addr, 1299b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t data); 1309b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1319b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinneyvoid WrMask32( 1329b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t unit, 1339b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t addr, 1349b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t data, 1359b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney uint32_t mask); 1369b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1379b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney 1389b6bbcdbfdf5e54c6d1ed538ea8076d0858fb164Michael Kinney#endif 139