1*7603eab4SNishad Kamdar /* SPDX-License-Identifier: GPL-2.0+ */ 26a794a27SBenjamin Herrenschmidt #ifndef __CF_FSI_FW_H 36a794a27SBenjamin Herrenschmidt #define __CF_FSI_FW_H 46a794a27SBenjamin Herrenschmidt 56a794a27SBenjamin Herrenschmidt /* 66a794a27SBenjamin Herrenschmidt * uCode file layout 76a794a27SBenjamin Herrenschmidt * 86a794a27SBenjamin Herrenschmidt * 0000...03ff : m68k exception vectors 96a794a27SBenjamin Herrenschmidt * 0400...04ff : Header info & boot config block 106a794a27SBenjamin Herrenschmidt * 0500....... : Code & stack 116a794a27SBenjamin Herrenschmidt */ 126a794a27SBenjamin Herrenschmidt 136a794a27SBenjamin Herrenschmidt /* 146a794a27SBenjamin Herrenschmidt * Header info & boot config area 156a794a27SBenjamin Herrenschmidt * 166a794a27SBenjamin Herrenschmidt * The Header info is built into the ucode and provide version and 176a794a27SBenjamin Herrenschmidt * platform information. 186a794a27SBenjamin Herrenschmidt * 196a794a27SBenjamin Herrenschmidt * the Boot config needs to be adjusted by the ARM prior to starting 206a794a27SBenjamin Herrenschmidt * the ucode if the Command/Status area isn't at 0x320000 in CF space 216a794a27SBenjamin Herrenschmidt * (ie. beginning of SRAM). 226a794a27SBenjamin Herrenschmidt */ 236a794a27SBenjamin Herrenschmidt 246a794a27SBenjamin Herrenschmidt #define HDR_OFFSET 0x400 256a794a27SBenjamin Herrenschmidt 266a794a27SBenjamin Herrenschmidt /* Info: Signature & version */ 276a794a27SBenjamin Herrenschmidt #define HDR_SYS_SIG 0x00 /* 2 bytes system signature */ 286a794a27SBenjamin Herrenschmidt #define SYS_SIG_SHARED 0x5348 296a794a27SBenjamin Herrenschmidt #define SYS_SIG_SPLIT 0x5350 306a794a27SBenjamin Herrenschmidt #define HDR_FW_VERS 0x02 /* 2 bytes Major.Minor */ 316a794a27SBenjamin Herrenschmidt #define HDR_API_VERS 0x04 /* 2 bytes Major.Minor */ 326a794a27SBenjamin Herrenschmidt #define API_VERSION_MAJ 2 /* Current version */ 336a794a27SBenjamin Herrenschmidt #define API_VERSION_MIN 1 346a794a27SBenjamin Herrenschmidt #define HDR_FW_OPTIONS 0x08 /* 4 bytes option flags */ 356a794a27SBenjamin Herrenschmidt #define FW_OPTION_TRACE_EN 0x00000001 /* FW tracing enabled */ 366a794a27SBenjamin Herrenschmidt #define FW_OPTION_CONT_CLOCK 0x00000002 /* Continuous clocking supported */ 376a794a27SBenjamin Herrenschmidt #define HDR_FW_SIZE 0x10 /* 4 bytes size for combo image */ 386a794a27SBenjamin Herrenschmidt 396a794a27SBenjamin Herrenschmidt /* Boot Config: Address of Command/Status area */ 406a794a27SBenjamin Herrenschmidt #define HDR_CMD_STAT_AREA 0x80 /* 4 bytes CF address */ 416a794a27SBenjamin Herrenschmidt #define HDR_FW_CONTROL 0x84 /* 4 bytes control flags */ 426a794a27SBenjamin Herrenschmidt #define FW_CONTROL_CONT_CLOCK 0x00000002 /* Continuous clocking enabled */ 436a794a27SBenjamin Herrenschmidt #define FW_CONTROL_DUMMY_RD 0x00000004 /* Extra dummy read (AST2400) */ 446a794a27SBenjamin Herrenschmidt #define FW_CONTROL_USE_STOP 0x00000008 /* Use STOP instructions */ 456a794a27SBenjamin Herrenschmidt #define HDR_CLOCK_GPIO_VADDR 0x90 /* 2 bytes offset from GPIO base */ 466a794a27SBenjamin Herrenschmidt #define HDR_CLOCK_GPIO_DADDR 0x92 /* 2 bytes offset from GPIO base */ 476a794a27SBenjamin Herrenschmidt #define HDR_DATA_GPIO_VADDR 0x94 /* 2 bytes offset from GPIO base */ 486a794a27SBenjamin Herrenschmidt #define HDR_DATA_GPIO_DADDR 0x96 /* 2 bytes offset from GPIO base */ 496a794a27SBenjamin Herrenschmidt #define HDR_TRANS_GPIO_VADDR 0x98 /* 2 bytes offset from GPIO base */ 506a794a27SBenjamin Herrenschmidt #define HDR_TRANS_GPIO_DADDR 0x9a /* 2 bytes offset from GPIO base */ 516a794a27SBenjamin Herrenschmidt #define HDR_CLOCK_GPIO_BIT 0x9c /* 1 byte bit number */ 526a794a27SBenjamin Herrenschmidt #define HDR_DATA_GPIO_BIT 0x9d /* 1 byte bit number */ 536a794a27SBenjamin Herrenschmidt #define HDR_TRANS_GPIO_BIT 0x9e /* 1 byte bit number */ 546a794a27SBenjamin Herrenschmidt 556a794a27SBenjamin Herrenschmidt /* 566a794a27SBenjamin Herrenschmidt * Command/Status area layout: Main part 576a794a27SBenjamin Herrenschmidt */ 586a794a27SBenjamin Herrenschmidt 596a794a27SBenjamin Herrenschmidt /* Command/Status register: 606a794a27SBenjamin Herrenschmidt * 616a794a27SBenjamin Herrenschmidt * +---------------------------+ 626a794a27SBenjamin Herrenschmidt * | STAT | RLEN | CLEN | CMD | 636a794a27SBenjamin Herrenschmidt * | 8 | 8 | 8 | 8 | 646a794a27SBenjamin Herrenschmidt * +---------------------------+ 656a794a27SBenjamin Herrenschmidt * | | | | 666a794a27SBenjamin Herrenschmidt * status | | | 676a794a27SBenjamin Herrenschmidt * Response len | | 686a794a27SBenjamin Herrenschmidt * (in bits) | | 696a794a27SBenjamin Herrenschmidt * | | 706a794a27SBenjamin Herrenschmidt * Command len | 716a794a27SBenjamin Herrenschmidt * (in bits) | 726a794a27SBenjamin Herrenschmidt * | 736a794a27SBenjamin Herrenschmidt * Command code 746a794a27SBenjamin Herrenschmidt * 756a794a27SBenjamin Herrenschmidt * Due to the big endian layout, that means that a byte read will 766a794a27SBenjamin Herrenschmidt * return the status byte 776a794a27SBenjamin Herrenschmidt */ 786a794a27SBenjamin Herrenschmidt #define CMD_STAT_REG 0x00 796a794a27SBenjamin Herrenschmidt #define CMD_REG_CMD_MASK 0x000000ff 806a794a27SBenjamin Herrenschmidt #define CMD_REG_CMD_SHIFT 0 816a794a27SBenjamin Herrenschmidt #define CMD_NONE 0x00 826a794a27SBenjamin Herrenschmidt #define CMD_COMMAND 0x01 836a794a27SBenjamin Herrenschmidt #define CMD_BREAK 0x02 846a794a27SBenjamin Herrenschmidt #define CMD_IDLE_CLOCKS 0x03 /* clen = #clocks */ 856a794a27SBenjamin Herrenschmidt #define CMD_INVALID 0xff 866a794a27SBenjamin Herrenschmidt #define CMD_REG_CLEN_MASK 0x0000ff00 876a794a27SBenjamin Herrenschmidt #define CMD_REG_CLEN_SHIFT 8 886a794a27SBenjamin Herrenschmidt #define CMD_REG_RLEN_MASK 0x00ff0000 896a794a27SBenjamin Herrenschmidt #define CMD_REG_RLEN_SHIFT 16 906a794a27SBenjamin Herrenschmidt #define CMD_REG_STAT_MASK 0xff000000 916a794a27SBenjamin Herrenschmidt #define CMD_REG_STAT_SHIFT 24 926a794a27SBenjamin Herrenschmidt #define STAT_WORKING 0x00 936a794a27SBenjamin Herrenschmidt #define STAT_COMPLETE 0x01 946a794a27SBenjamin Herrenschmidt #define STAT_ERR_INVAL_CMD 0x80 956a794a27SBenjamin Herrenschmidt #define STAT_ERR_INVAL_IRQ 0x81 966a794a27SBenjamin Herrenschmidt #define STAT_ERR_MTOE 0x82 976a794a27SBenjamin Herrenschmidt 986a794a27SBenjamin Herrenschmidt /* Response tag & CRC */ 996a794a27SBenjamin Herrenschmidt #define STAT_RTAG 0x04 1006a794a27SBenjamin Herrenschmidt 1016a794a27SBenjamin Herrenschmidt /* Response CRC */ 1026a794a27SBenjamin Herrenschmidt #define STAT_RCRC 0x05 1036a794a27SBenjamin Herrenschmidt 1046a794a27SBenjamin Herrenschmidt /* Echo and Send delay */ 1056a794a27SBenjamin Herrenschmidt #define ECHO_DLY_REG 0x08 1066a794a27SBenjamin Herrenschmidt #define SEND_DLY_REG 0x09 1076a794a27SBenjamin Herrenschmidt 1086a794a27SBenjamin Herrenschmidt /* Command data area 1096a794a27SBenjamin Herrenschmidt * 1106a794a27SBenjamin Herrenschmidt * Last byte of message must be left aligned 1116a794a27SBenjamin Herrenschmidt */ 1126a794a27SBenjamin Herrenschmidt #define CMD_DATA 0x10 /* 64 bit of data */ 1136a794a27SBenjamin Herrenschmidt 1146a794a27SBenjamin Herrenschmidt /* Response data area, right aligned, unused top bits are 1 */ 1156a794a27SBenjamin Herrenschmidt #define RSP_DATA 0x20 /* 32 bit of data */ 1166a794a27SBenjamin Herrenschmidt 1176a794a27SBenjamin Herrenschmidt /* Misc */ 1186a794a27SBenjamin Herrenschmidt #define INT_CNT 0x30 /* 32-bit interrupt count */ 1196a794a27SBenjamin Herrenschmidt #define BAD_INT_VEC 0x34 /* 32-bit bad interrupt vector # */ 1206a794a27SBenjamin Herrenschmidt #define CF_STARTED 0x38 /* byte, set to -1 when copro started */ 1216a794a27SBenjamin Herrenschmidt #define CLK_CNT 0x3c /* 32-bit, clock count (debug only) */ 1226a794a27SBenjamin Herrenschmidt 1236a794a27SBenjamin Herrenschmidt /* 1246a794a27SBenjamin Herrenschmidt * SRAM layout: GPIO arbitration part 1256a794a27SBenjamin Herrenschmidt */ 1266a794a27SBenjamin Herrenschmidt #define ARB_REG 0x40 1276a794a27SBenjamin Herrenschmidt #define ARB_ARM_REQ 0x01 1286a794a27SBenjamin Herrenschmidt #define ARB_ARM_ACK 0x02 1296a794a27SBenjamin Herrenschmidt 1306a794a27SBenjamin Herrenschmidt /* Misc2 */ 1316a794a27SBenjamin Herrenschmidt #define CF_RESET_D0 0x50 1326a794a27SBenjamin Herrenschmidt #define CF_RESET_D1 0x54 1336a794a27SBenjamin Herrenschmidt #define BAD_INT_S0 0x58 1346a794a27SBenjamin Herrenschmidt #define BAD_INT_S1 0x5c 1356a794a27SBenjamin Herrenschmidt #define STOP_CNT 0x60 1366a794a27SBenjamin Herrenschmidt 1376a794a27SBenjamin Herrenschmidt /* Internal */ 1386a794a27SBenjamin Herrenschmidt 1396a794a27SBenjamin Herrenschmidt /* 1406a794a27SBenjamin Herrenschmidt * SRAM layout: Trace buffer (debug builds only) 1416a794a27SBenjamin Herrenschmidt */ 1426a794a27SBenjamin Herrenschmidt #define TRACEBUF 0x100 1436a794a27SBenjamin Herrenschmidt #define TR_CLKOBIT0 0xc0 1446a794a27SBenjamin Herrenschmidt #define TR_CLKOBIT1 0xc1 1456a794a27SBenjamin Herrenschmidt #define TR_CLKOSTART 0x82 1466a794a27SBenjamin Herrenschmidt #define TR_OLEN 0x83 /* + len */ 1476a794a27SBenjamin Herrenschmidt #define TR_CLKZ 0x84 /* + count */ 1486a794a27SBenjamin Herrenschmidt #define TR_CLKWSTART 0x85 1496a794a27SBenjamin Herrenschmidt #define TR_CLKTAG 0x86 /* + tag */ 1506a794a27SBenjamin Herrenschmidt #define TR_CLKDATA 0x87 /* + len */ 1516a794a27SBenjamin Herrenschmidt #define TR_CLKCRC 0x88 /* + raw crc */ 1526a794a27SBenjamin Herrenschmidt #define TR_CLKIBIT0 0x90 1536a794a27SBenjamin Herrenschmidt #define TR_CLKIBIT1 0x91 1546a794a27SBenjamin Herrenschmidt #define TR_END 0xff 1556a794a27SBenjamin Herrenschmidt 1566a794a27SBenjamin Herrenschmidt #endif /* __CF_FSI_FW_H */ 1576a794a27SBenjamin Herrenschmidt 158