1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Copyright (C) 1999,2001 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Author: J.E.J.Bottomley@HansenPartnership.com 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Standard include definitions for the NCR Voyager system */ 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#undef VOYAGER_DEBUG 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#undef VOYAGER_CAT_DEBUG 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef VOYAGER_DEBUG 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VDEBUG(x) printk x 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VDEBUG(x) 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* There are three levels of voyager machine: 3,4 and 5. The rule is 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * if it's less than 3435 it's a Level 3 except for a 3360 which is 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * a level 4. A 3435 or above is a Level 5 */ 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_LEVEL5_AND_ABOVE 0x3435 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_LEVEL4 0x3360 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* The L4 DINO ASIC */ 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_DINO 0x43 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* voyager ports in standard I/O space */ 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MC_SETUP 0x96 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_CONFIG_PORT 0x97 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VOYAGER_CAT_DESELECT 0xff 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SSPB_RELOCATION_PORT 0x98 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Valid CAT controller commands */ 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* start instruction register cycle */ 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_IRCYC 0x01 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* start data register cycle */ 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_DRCYC 0x02 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* move to execute state */ 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_RUN 0x0F 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* end operation */ 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_END 0x80 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* hold in idle state */ 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_HOLD 0x90 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* single step an "intest" vector */ 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_STEP 0xE0 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* return cat controller to CLEMSON mode */ 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_CLEMSON 0xFF 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the default cat command header */ 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_HEADER 0x7F 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the range of possible CAT module ids in the system */ 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MIN_MODULE 0x10 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MAX_MODULE 0x1f 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* The voyager registers per asic */ 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_ASIC_ID_REG 0x00 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_ASIC_TYPE_REG 0x01 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the sub address registers can be made auto incrementing on reads */ 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_AUTO_INC_REG 0x02 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VOYAGER_AUTO_INC 0x04 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VOYAGER_NO_AUTO_INC 0xfb 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBADDRDATA 0x03 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SCANPATH 0x05 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VOYAGER_CONNECT_ASIC 0x01 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VOYAGER_DISCONNECT_ASIC 0xfe 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBADDRLO 0x06 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBADDRHI 0x07 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBMODSELECT 0x08 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBMODPRESENT 0x09 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBADDR_LO 0xff 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUBADDR_HI 0xffff 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the maximum size of a scan path -- used to form instructions */ 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MAX_SCAN_PATH 0x100 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the biggest possible register size (in bytes) */ 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MAX_REG_SIZE 4 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Total number of possible modules (including submodules) */ 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MAX_MODULES 16 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Largest number of asics per module */ 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MAX_ASICS_PER_MODULE 7 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the CAT asic of each module is always the first one */ 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_CAT_ID 0 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI 0x1a 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* voyager instruction operations and registers */ 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_READ_CONFIG 0x1 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WRITE_CONFIG 0x2 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_BYPASS 0xff 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct voyager_asic 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 asic_addr; /* ASIC address; Level 4 */ 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 asic_type; /* ASIC type */ 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 asic_id; /* ASIC id */ 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 jtag_id[4]; /* JTAG id */ 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 asic_location; /* Location within scan path; start w/ 0 */ 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bit_location; /* Location within bit stream; start w/ 0 */ 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 ireg_length; /* Instruction register length */ 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 subaddr; /* Amount of sub address space */ 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct voyager_asic *next; /* Next asic in linked list */ 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} voyager_asic_t; 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct voyager_module { 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 module_addr; /* Module address */ 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 scan_path_connected; /* Scan path connected */ 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 ee_size; /* Size of the EEPROM */ 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 num_asics; /* Number of Asics */ 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 inst_bits; /* Instruction bits in the scan path */ 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 largest_reg; /* Largest register in the scan path */ 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 smallest_reg; /* Smallest register in the scan path */ 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru voyager_asic_t *asic; /* First ASIC in scan path (CAT_I) */ 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct voyager_module *submodule; /* Submodule pointer */ 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct voyager_module *next; /* Next module in linked list */ 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} voyager_module_t; 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct voyager_eeprom_hdr { 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 module_id[4]; 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 version_id; 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 config_id; 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 boundry_id; /* boundary scan id */ 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 ee_size; /* size of EEPROM */ 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 assembly[11]; /* assembly # */ 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 assembly_rev; /* assembly rev */ 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 tracer[4]; /* tracer number */ 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 assembly_cksum; /* asm checksum */ 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 power_consump; /* pwr requirements */ 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 num_asics; /* number of asics */ 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 bist_time; /* min. bist time */ 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 err_log_offset; /* error log offset */ 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 scan_path_offset;/* scan path offset */ 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 cct_offset; 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 log_length; /* length of err log */ 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 xsum_end; /* offset to end of 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru checksum */ 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 reserved[4]; 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 sflag; /* starting sentinal */ 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 part_number[13]; /* prom part number */ 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 version[10]; /* version number */ 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 signature[8]; 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 eeprom_chksum; 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 data_stamp_offset; 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 eflag ; /* ending sentinal */ 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)) voyager_eprom_hdr_t; 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_EPROM_SIZE_OFFSET ((__u16)(&(((voyager_eprom_hdr_t *)0)->ee_size))) 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_XSUM_END_OFFSET 0x2a 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the following three definitions are for internal table layouts 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * in the module EPROMs. We really only care about the IDs and 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * offsets */ 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct voyager_sp_table { 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 asic_id; 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bypass_flag; 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 asic_data_offset; 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 config_data_offset; 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)) voyager_sp_table_t; 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct voyager_jtag_table { 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 icode[4]; 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 runbist[4]; 167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 intest[4]; 168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 samp_preld[4]; 169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 ireg_len; 170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)) voyager_jtt_t; 171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct voyager_asic_data_table { 173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 jtag_id[4]; 174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 length_bsr; 175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 length_bist_reg; 176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 bist_clk; 177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 subaddr_bits; 178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 seed_bits; 179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 sig_bits; 180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 jtag_offset; 181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)) voyager_at_t; 182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Voyager Interrupt Controller (VIC) registers */ 184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Base to add to Cross Processor Interrupts (CPIs) when triggering 186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the CPU IRQ line */ 187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* register defines for the WCBICs (one per processor) */ 188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC0 0x41 /* bus A node P1 processor 0 */ 189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC1 0x49 /* bus A node P1 processor 1 */ 190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC2 0x51 /* bus A node P2 processor 0 */ 191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC3 0x59 /* bus A node P2 processor 1 */ 192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC4 0x61 /* bus B node P1 processor 0 */ 193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC5 0x69 /* bus B node P1 processor 1 */ 194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC6 0x71 /* bus B node P2 processor 0 */ 195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC7 0x79 /* bus B node P2 processor 1 */ 196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* top of memory registers */ 199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC_TOM_L 0x4 200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_WCBIC_TOM_H 0x5 201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* register defines for Voyager Memory Contol (VMC) 203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * these are present on L4 machines only */ 204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_VMC1 0x81 205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_VMC2 0x91 206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_VMC3 0xa1 207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_VMC4 0xb1 208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* VMC Ports */ 210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_VMC_MEMORY_SETUP 0x9 211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_Interleaving 0x01 212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_4Way 0x02 213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_EvenCacheLines 0x04 214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_HighLine 0x08 215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_Start0_Enable 0x20 216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_Start1_Enable 0x40 217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_Vremap 0x80 218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_VMC_BANK_DENSITY 0xa 219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK_EMPTY 0 220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK_4MB 1 221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK_16MB 2 222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK_64MB 3 223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK0_MASK 0x03 224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK1_MASK 0x0C 225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK2_MASK 0x30 226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VMC_BANK3_MASK 0xC0 227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 228c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Magellan Memory Controller (MMC) defines - present on L5 */ 229c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MMC_ASIC_ID 1 230c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the two memory modules corresponding to memory cards in the system */ 231c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MMC_MEMORY0_MODULE 0x14 232c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MMC_MEMORY1_MODULE 0x15 233c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the Magellan Memory Address (MMA) defines */ 234c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MMA_ASIC_ID 2 235c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 236c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Submodule number for the Quad Baseboard */ 237c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_QUAD_BASEBOARD 1 238c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 239c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* ASIC defines for the Quad Baseboard */ 240c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_QUAD_QDATA0 1 241c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_QUAD_QDATA1 2 242c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_QUAD_QABC 3 243c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 244c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Useful areas in extended CMOS */ 245c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PROCESSOR_PRESENT_MASK 0x88a 246c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MEMORY_CLICKMAP 0xa23 247c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_DUMP_LOCATION 0xb1a 248c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 249c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* SUS In Control bit - used to tell SUS that we don't need to be 250c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * babysat anymore */ 251c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUS_IN_CONTROL_PORT 0x3ff 252c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define VOYAGER_IN_CONTROL_FLAG 0x80 253c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 254c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Voyager PSI defines */ 255c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_STATUS_REG 0x08 256c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_DC_FAIL 0x01 257c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_MON 0x02 258c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_FAULT 0x04 259c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_ALARM 0x08 260c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CURRENT 0x10 261c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_DVM 0x20 262c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_PSCFAULT 0x40 263c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_STAT_CHG 0x80 264c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 265c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_SUPPLY_REG 0x8000 266c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* read */ 267c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_FAIL_DC 0x01 268c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_FAIL_AC 0x02 269c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_MON_INT 0x04 270c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SWITCH_OFF 0x08 271c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_HX_OFF 0x10 272c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SECURITY 0x20 273c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CMOS_BATT_LOW 0x40 274c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CMOS_BATT_FAIL 0x80 275c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* write */ 276c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CLR_SWITCH_OFF 0x13 277c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CLR_HX_OFF 0x14 278c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CLR_CMOS_BATT_FAIL 0x17 279c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 280c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_MASK 0x8001 281c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_MASK_MASK 0x10 282c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 283c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_AC_FAIL_REG 0x8004 284c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AC_FAIL_STAT_CHANGE 0x80 285c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 286c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_GENERAL_REG 0x8007 287c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* read */ 288c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SWITCH_ON 0x01 289c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SWITCH_ENABLED 0x02 290c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_ALARM_ENABLED 0x08 291c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SECURE_ENABLED 0x10 292c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_COLD_RESET 0x20 293c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_COLD_START 0x80 294c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* write */ 295c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_POWER_DOWN 0x10 296c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SWITCH_DISABLE 0x01 297c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SWITCH_ENABLE 0x11 298c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CLEAR 0x12 299c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_ALARM_DISABLE 0x03 300c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_ALARM_ENABLE 0x13 301c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CLEAR_COLD_RESET 0x05 302c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SET_COLD_RESET 0x15 303c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_CLEAR_COLD_START 0x07 304c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define PSI_SET_COLD_START 0x17 305c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 306c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 307c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 308c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_bios_info { 309c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 len; 310c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 major; 311c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 minor; 312c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 debug; 313c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 num_classes; 314c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 class_1; 315c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 class_2; 316c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 317c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 318c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* The following structures and definitions are for the Kernel/SUS 319c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * interface these are needed to find out how SUS initialised any Quad 320c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * boards in the system */ 321c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 322c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NUMBER_OF_MC_BUSSES 2 323c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SLOTS_PER_MC_BUS 8 324c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MAX_CPUS 16 /* 16 way CPU system */ 325c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MAX_PROCESSOR_BOARDS 4 /* 4 processor slot system */ 326c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MAX_CACHE_LEVELS 4 /* # of cache levels supported */ 327c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MAX_SHARED_CPUS 4 /* # of CPUs that can share a LARC */ 328c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NUMBER_OF_POS_REGS 8 329c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 330c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct { 331c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 MC_Slot; 332c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 POS_Values[NUMBER_OF_POS_REGS]; 333c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)) MC_SlotInformation_t; 334c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 335c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct QuadDescription { 336c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Type; /* for type 0 (DYADIC or MONADIC) all fields 337c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * will be zero except for slot */ 338c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 StructureVersion; 339c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 CPI_BaseAddress; 340c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 LARC_BankSize; 341c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 LocalMemoryStateBits; 342c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Slot; /* Processor slots 1 - 4 */ 343c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 344c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 345c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct ProcBoardInfo { 346c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Type; 347c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 StructureVersion; 348c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 NumberOfBoards; 349c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS]; 350c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 351c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 352c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct CacheDescription { 353c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Level; 354c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 TotalSize; 355c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 LineSize; 356c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Associativity; 357c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 CacheType; 358c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 WriteType; 359c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Number_CPUs_SharedBy; 360c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS]; 361c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 362c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 363c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 364c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct CPU_Description { 365c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 CPU_HardwareId; 366c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char *FRU_String; 367c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 NumberOfCacheLevels; 368c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS]; 369c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 370c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 371c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct CPU_Info { 372c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Type; 373c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 StructureVersion; 374c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 NumberOf_CPUs; 375c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct CPU_Description CPU_Data[MAX_CPUS]; 376c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 377c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 378c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 379c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 380c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This structure will be used by SUS and the OS. 381c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * The assumption about this structure is that no blank space is 382c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * packed in it by our friend the compiler. 383c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 384c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct { 385c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Mailbox_SUS; /* Written to by SUS to give commands/response to the OS */ 386c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 Mailbox_OS; /* Written to by the OS to give commands/response to SUS */ 387c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 SUS_MailboxVersion; /* Tells the OS which iteration of the interface SUS supports */ 388c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 OS_MailboxVersion; /* Tells SUS which iteration of the interface the OS supports */ 389c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 OS_Flags; /* Flags set by the OS as info for SUS */ 390c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 SUS_Flags; /* Flags set by SUS as info for the OS */ 391c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 WatchDogPeriod; /* Watchdog period (in seconds) which the DP uses to see if the OS is dead */ 392c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 WatchDogCount; /* Updated by the OS on every tic. */ 393c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 MemoryFor_SUS_ErrorLog; /* Flat 32 bit address which tells SUS where to stuff the SUS error log on a dump */ 394c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru MC_SlotInformation_t MC_SlotInfo[NUMBER_OF_MC_BUSSES*SLOTS_PER_MC_BUS]; /* Storage for MCA POS data */ 395c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* All new SECOND_PASS_INTERFACE fields added from this point */ 396c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct ProcBoardInfo *BoardData; 397c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct CPU_Info *CPU_Data; 398c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* All new fields must be added from this point */ 399c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} Voyager_KernelSUS_Mbox_t; 400c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 401c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* structure for finding the right memory address to send a QIC CPI to */ 402c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_qic_cpi { 403c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* Each cache line (32 bytes) can trigger a cpi. The cpi 404c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * read/write may occur anywhere in the cache line---pick the 405c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * middle to be safe */ 406c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct { 407c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 pad1[3]; 408c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 cpi; 409c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 pad2[4]; 410c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru } qic_cpi[8]; 411c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 412c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 413c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_status { 414c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 power_fail:1; 415c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 switch_off:1; 416c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 request_from_kernel:1; 417c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 418c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 419c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_psi_regs { 420c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 cat_id; 421c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 cat_dev; 422c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 cat_control; 423c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 subaddr; 424c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 dummy4; 425c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 checkbit; 426c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 subaddr_low; 427c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 subaddr_high; 428c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 intstatus; 429c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 stat1; 430c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 stat3; 431c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 fault; 432c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 tms; 433c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 gen; 434c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 sysconf; 435c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 dummy15; 436c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 437c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 438c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_psi_subregs { 439c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 supply; 440c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 mask; 441c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 present; 442c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 DCfail; 443c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 ACfail; 444c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 fail; 445c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 UPSfail; 446c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 genstatus; 447c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 448c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 449c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_psi { 450c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct voyager_psi_regs regs; 451c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct voyager_psi_subregs subregs; 452c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 453c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 454c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct voyager_SUS { 455c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_DUMP_BUTTON_NMI 0x1 456c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUS_VALID 0x2 457c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SYSINT_COMPLETE 0x3 458c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 SUS_mbox; 459c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_NO_COMMAND 0x0 460c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_IGNORE_DUMP 0x1 461c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_DO_DUMP 0x2 462c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SYSINT_HANDSHAKE 0x3 463c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_DO_MEM_DUMP 0x4 464c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SYSINT_WAS_RECOVERED 0x5 465c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 kernel_mbox; 466c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_MAILBOX_VERSION 0x10 467c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 SUS_version; 468c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 kernel_version; 469c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_OS_HAS_SYSINT 0x1 470c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_OS_IN_PROGRESS 0x2 471c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_UPDATING_WDPERIOD 0x4 472c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 kernel_flags; 473c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUS_BOOTING 0x1 474c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_SUS_IN_PROGRESS 0x2 475c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 SUS_flags; 476c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 watchdog_period; 477c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 watchdog_count; 478c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 SUS_errorlog; 479c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* lots of system configuration stuff under here */ 480c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 481c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 482c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Variables exported by voyager_smp */ 483c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __u32 voyager_extended_vic_processors; 484c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __u32 voyager_allowed_boot_processors; 485c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __u32 voyager_quad_processors; 486c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS]; 487c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct voyager_SUS *voyager_SUS; 488c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 489c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* variables exported always */ 490c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct task_struct *voyager_thread; 491c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int voyager_level; 492c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct voyager_status voyager_status; 493c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 494c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* functions exported by the voyager and voyager_smp modules */ 495c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int voyager_cat_readb(__u8 module, __u8 asic, int reg); 496c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_cat_init(void); 497c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_detect(struct voyager_bios_info *); 498c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_trap_init(void); 499c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_setup_irqs(void); 500c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int voyager_memory_detect(int region, __u32 *addr, __u32 *length); 501c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_smp_intr_init(void); 502c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __u8 voyager_extended_cmos_read(__u16 cmos_address); 503c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_smp_dump(void); 504c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_timer_interrupt(void); 505c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void smp_local_timer_interrupt(void); 506c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_power_off(void); 507c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void smp_voyager_power_off(void *dummy); 508c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_restart(void); 509c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_cat_power_off(void); 510c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_cat_do_common_interrupt(void); 511c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_handle_nmi(void); 512c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Commands for the following are */ 513c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_READ 0 514c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_WRITE 1 515c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_SUBREAD 2 516c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define VOYAGER_PSI_SUBWRITE 3 517c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void voyager_cat_psi(__u8, __u16, __u8 *); 518