1e65e175bSOded Gabbay /* SPDX-License-Identifier: GPL-2.0 2e65e175bSOded Gabbay * 3e65e175bSOded Gabbay * Copyright 2018-2020 HabanaLabs, Ltd. 4e65e175bSOded Gabbay * All Rights Reserved. 5e65e175bSOded Gabbay * 6e65e175bSOded Gabbay */ 7e65e175bSOded Gabbay 8e65e175bSOded Gabbay #ifndef HL_BOOT_IF_H 9e65e175bSOded Gabbay #define HL_BOOT_IF_H 10e65e175bSOded Gabbay 11e65e175bSOded Gabbay #define LKD_HARD_RESET_MAGIC 0xED7BD694 /* deprecated - do not use */ 12e65e175bSOded Gabbay #define HL_POWER9_HOST_MAGIC 0x1DA30009 13e65e175bSOded Gabbay 14e65e175bSOded Gabbay #define BOOT_FIT_SRAM_OFFSET 0x200000 15e65e175bSOded Gabbay 16e65e175bSOded Gabbay #define VERSION_MAX_LEN 128 17e65e175bSOded Gabbay 18e65e175bSOded Gabbay enum cpu_boot_err { 19e65e175bSOded Gabbay CPU_BOOT_ERR_DRAM_INIT_FAIL = 0, 20e65e175bSOded Gabbay CPU_BOOT_ERR_FIT_CORRUPTED = 1, 21e65e175bSOded Gabbay CPU_BOOT_ERR_TS_INIT_FAIL = 2, 22e65e175bSOded Gabbay CPU_BOOT_ERR_DRAM_SKIPPED = 3, 23e65e175bSOded Gabbay CPU_BOOT_ERR_BMC_WAIT_SKIPPED = 4, 24e65e175bSOded Gabbay CPU_BOOT_ERR_NIC_DATA_NOT_RDY = 5, 25e65e175bSOded Gabbay CPU_BOOT_ERR_NIC_FW_FAIL = 6, 26e65e175bSOded Gabbay CPU_BOOT_ERR_SECURITY_NOT_RDY = 7, 27e65e175bSOded Gabbay CPU_BOOT_ERR_SECURITY_FAIL = 8, 28e65e175bSOded Gabbay CPU_BOOT_ERR_EFUSE_FAIL = 9, 29e65e175bSOded Gabbay CPU_BOOT_ERR_PRI_IMG_VER_FAIL = 10, 30e65e175bSOded Gabbay CPU_BOOT_ERR_SEC_IMG_VER_FAIL = 11, 31e65e175bSOded Gabbay CPU_BOOT_ERR_PLL_FAIL = 12, 32e65e175bSOded Gabbay CPU_BOOT_ERR_DEVICE_UNUSABLE_FAIL = 13, 33e65e175bSOded Gabbay CPU_BOOT_ERR_BOOT_FW_CRIT_ERR = 18, 34e65e175bSOded Gabbay CPU_BOOT_ERR_BINNING_FAIL = 19, 35e65e175bSOded Gabbay CPU_BOOT_ERR_TPM_FAIL = 20, 36e65e175bSOded Gabbay CPU_BOOT_ERR_TMP_THRESH_INIT_FAIL = 21, 37e65e175bSOded Gabbay CPU_BOOT_ERR_EEPROM_FAIL = 22, 38e65e175bSOded Gabbay CPU_BOOT_ERR_ENG_ARC_MEM_SCRUB_FAIL = 23, 39e65e175bSOded Gabbay CPU_BOOT_ERR_ENABLED = 31, 40e65e175bSOded Gabbay CPU_BOOT_ERR_SCND_EN = 63, 41e65e175bSOded Gabbay CPU_BOOT_ERR_LAST = 64 /* we have 2 registers of 32 bits */ 42e65e175bSOded Gabbay }; 43e65e175bSOded Gabbay 44139dad04SOded Gabbay /* 45139dad04SOded Gabbay * Mask for fatal failures 46139dad04SOded Gabbay * This mask contains all possible fatal failures, and a dynamic code 47139dad04SOded Gabbay * will clear the non-relevant ones. 48139dad04SOded Gabbay */ 49139dad04SOded Gabbay #define CPU_BOOT_ERR_FATAL_MASK \ 50139dad04SOded Gabbay ((1 << CPU_BOOT_ERR_DRAM_INIT_FAIL) | \ 51139dad04SOded Gabbay (1 << CPU_BOOT_ERR_PLL_FAIL) | \ 52139dad04SOded Gabbay (1 << CPU_BOOT_ERR_DEVICE_UNUSABLE_FAIL) | \ 53139dad04SOded Gabbay (1 << CPU_BOOT_ERR_BINNING_FAIL) | \ 54139dad04SOded Gabbay (1 << CPU_BOOT_ERR_DRAM_SKIPPED) | \ 55139dad04SOded Gabbay (1 << CPU_BOOT_ERR_ENG_ARC_MEM_SCRUB_FAIL) | \ 56139dad04SOded Gabbay (1 << CPU_BOOT_ERR_EEPROM_FAIL)) 57e65e175bSOded Gabbay 58e65e175bSOded Gabbay /* 59e65e175bSOded Gabbay * CPU error bits in BOOT_ERROR registers 60e65e175bSOded Gabbay * 61e65e175bSOded Gabbay * CPU_BOOT_ERR0_DRAM_INIT_FAIL DRAM initialization failed. 62e65e175bSOded Gabbay * DRAM is not reliable to use. 63e65e175bSOded Gabbay * 64e65e175bSOded Gabbay * CPU_BOOT_ERR0_FIT_CORRUPTED FIT data integrity verification of the 65e65e175bSOded Gabbay * image provided by the host has failed. 66e65e175bSOded Gabbay * 67e65e175bSOded Gabbay * CPU_BOOT_ERR0_TS_INIT_FAIL Thermal Sensor initialization failed. 68e65e175bSOded Gabbay * Boot continues as usual, but keep in 69e65e175bSOded Gabbay * mind this is a warning. 70e65e175bSOded Gabbay * 71e65e175bSOded Gabbay * CPU_BOOT_ERR0_DRAM_SKIPPED DRAM initialization has been skipped. 72e65e175bSOded Gabbay * Skipping DRAM initialization has been 73e65e175bSOded Gabbay * requested (e.g. strap, command, etc.) 74e65e175bSOded Gabbay * and FW skipped the DRAM initialization. 75e65e175bSOded Gabbay * Host can initialize the DRAM. 76e65e175bSOded Gabbay * 77e65e175bSOded Gabbay * CPU_BOOT_ERR0_BMC_WAIT_SKIPPED Waiting for BMC data will be skipped. 78e65e175bSOded Gabbay * Meaning the BMC data might not be 79e65e175bSOded Gabbay * available until reset. 80e65e175bSOded Gabbay * 81e65e175bSOded Gabbay * CPU_BOOT_ERR0_NIC_DATA_NOT_RDY NIC data from BMC is not ready. 82e65e175bSOded Gabbay * BMC has not provided the NIC data yet. 83e65e175bSOded Gabbay * Once provided this bit will be cleared. 84e65e175bSOded Gabbay * 85e65e175bSOded Gabbay * CPU_BOOT_ERR0_NIC_FW_FAIL NIC FW loading failed. 86e65e175bSOded Gabbay * The NIC FW loading and initialization 87e65e175bSOded Gabbay * failed. This means NICs are not usable. 88e65e175bSOded Gabbay * 89e65e175bSOded Gabbay * CPU_BOOT_ERR0_SECURITY_NOT_RDY Chip security initialization has been 90e65e175bSOded Gabbay * started, but is not ready yet - chip 91e65e175bSOded Gabbay * cannot be accessed. 92e65e175bSOded Gabbay * 93e65e175bSOded Gabbay * CPU_BOOT_ERR0_SECURITY_FAIL Security related tasks have failed. 94e65e175bSOded Gabbay * The tasks are security init (root of 95e65e175bSOded Gabbay * trust), boot authentication (chain of 96e65e175bSOded Gabbay * trust), data packets authentication. 97e65e175bSOded Gabbay * 98e65e175bSOded Gabbay * CPU_BOOT_ERR0_EFUSE_FAIL Reading from eFuse failed. 99e65e175bSOded Gabbay * The PCI device ID might be wrong. 100e65e175bSOded Gabbay * 101e65e175bSOded Gabbay * CPU_BOOT_ERR0_PRI_IMG_VER_FAIL Verification of primary image failed. 102e65e175bSOded Gabbay * It mean that ppboot checksum 103e65e175bSOded Gabbay * verification for the preboot primary 104e65e175bSOded Gabbay * image has failed to match expected 105e65e175bSOded Gabbay * checksum. Trying to program image again 106e65e175bSOded Gabbay * might solve this. 107e65e175bSOded Gabbay * 108e65e175bSOded Gabbay * CPU_BOOT_ERR0_SEC_IMG_VER_FAIL Verification of secondary image failed. 109e65e175bSOded Gabbay * It mean that ppboot checksum 110e65e175bSOded Gabbay * verification for the preboot secondary 111e65e175bSOded Gabbay * image has failed to match expected 112e65e175bSOded Gabbay * checksum. Trying to program image again 113e65e175bSOded Gabbay * might solve this. 114e65e175bSOded Gabbay * 115e65e175bSOded Gabbay * CPU_BOOT_ERR0_PLL_FAIL PLL settings failed, meaning that one 116e65e175bSOded Gabbay * of the PLLs remains in REF_CLK 117e65e175bSOded Gabbay * 118e65e175bSOded Gabbay * CPU_BOOT_ERR0_DEVICE_UNUSABLE_FAIL Device is unusable and customer support 119e65e175bSOded Gabbay * should be contacted. 120e65e175bSOded Gabbay * 121e65e175bSOded Gabbay * CPU_BOOT_ERR0_BOOT_FW_CRIT_ERR Critical error was detected during 122e65e175bSOded Gabbay * the execution of ppboot or preboot. 123e65e175bSOded Gabbay * for example: stack overflow. 124e65e175bSOded Gabbay * 125e65e175bSOded Gabbay * CPU_BOOT_ERR0_BINNING_FAIL Binning settings failed, meaning 126e65e175bSOded Gabbay * malfunctioning components might still be 127e65e175bSOded Gabbay * in use. 128e65e175bSOded Gabbay * 129e65e175bSOded Gabbay * CPU_BOOT_ERR0_TPM_FAIL TPM verification flow failed. 130e65e175bSOded Gabbay * 131e65e175bSOded Gabbay * CPU_BOOT_ERR0_TMP_THRESH_INIT_FAIL Failed to set threshold for tmperature 132e65e175bSOded Gabbay * sensor. 133e65e175bSOded Gabbay * 134e65e175bSOded Gabbay * CPU_BOOT_ERR_EEPROM_FAIL Failed reading EEPROM data. Defaults 135e65e175bSOded Gabbay * are used. 136e65e175bSOded Gabbay * 137e65e175bSOded Gabbay * CPU_BOOT_ERR_ENG_ARC_MEM_SCRUB_FAIL Failed scrubbing the Engines/ARCFarm 138e65e175bSOded Gabbay * memories. Boot disabled until reset. 139e65e175bSOded Gabbay * 140e65e175bSOded Gabbay * CPU_BOOT_ERR0_ENABLED Error registers enabled. 141e65e175bSOded Gabbay * This is a main indication that the 142e65e175bSOded Gabbay * running FW populates the error 143e65e175bSOded Gabbay * registers. Meaning the error bits are 144e65e175bSOded Gabbay * not garbage, but actual error statuses. 145e65e175bSOded Gabbay */ 146e65e175bSOded Gabbay #define CPU_BOOT_ERR0_DRAM_INIT_FAIL (1 << CPU_BOOT_ERR_DRAM_INIT_FAIL) 147e65e175bSOded Gabbay #define CPU_BOOT_ERR0_FIT_CORRUPTED (1 << CPU_BOOT_ERR_FIT_CORRUPTED) 148e65e175bSOded Gabbay #define CPU_BOOT_ERR0_TS_INIT_FAIL (1 << CPU_BOOT_ERR_TS_INIT_FAIL) 149e65e175bSOded Gabbay #define CPU_BOOT_ERR0_DRAM_SKIPPED (1 << CPU_BOOT_ERR_DRAM_SKIPPED) 150e65e175bSOded Gabbay #define CPU_BOOT_ERR0_BMC_WAIT_SKIPPED (1 << CPU_BOOT_ERR_BMC_WAIT_SKIPPED) 151e65e175bSOded Gabbay #define CPU_BOOT_ERR0_NIC_DATA_NOT_RDY (1 << CPU_BOOT_ERR_NIC_DATA_NOT_RDY) 152e65e175bSOded Gabbay #define CPU_BOOT_ERR0_NIC_FW_FAIL (1 << CPU_BOOT_ERR_NIC_FW_FAIL) 153e65e175bSOded Gabbay #define CPU_BOOT_ERR0_SECURITY_NOT_RDY (1 << CPU_BOOT_ERR_SECURITY_NOT_RDY) 154e65e175bSOded Gabbay #define CPU_BOOT_ERR0_SECURITY_FAIL (1 << CPU_BOOT_ERR_SECURITY_FAIL) 155e65e175bSOded Gabbay #define CPU_BOOT_ERR0_EFUSE_FAIL (1 << CPU_BOOT_ERR_EFUSE_FAIL) 156e65e175bSOded Gabbay #define CPU_BOOT_ERR0_PRI_IMG_VER_FAIL (1 << CPU_BOOT_ERR_PRI_IMG_VER_FAIL) 157e65e175bSOded Gabbay #define CPU_BOOT_ERR0_SEC_IMG_VER_FAIL (1 << CPU_BOOT_ERR_SEC_IMG_VER_FAIL) 158e65e175bSOded Gabbay #define CPU_BOOT_ERR0_PLL_FAIL (1 << CPU_BOOT_ERR_PLL_FAIL) 159e65e175bSOded Gabbay #define CPU_BOOT_ERR0_DEVICE_UNUSABLE_FAIL (1 << CPU_BOOT_ERR_DEVICE_UNUSABLE_FAIL) 160e65e175bSOded Gabbay #define CPU_BOOT_ERR0_BOOT_FW_CRIT_ERR (1 << CPU_BOOT_ERR_BOOT_FW_CRIT_ERR) 161e65e175bSOded Gabbay #define CPU_BOOT_ERR0_BINNING_FAIL (1 << CPU_BOOT_ERR_BINNING_FAIL) 162e65e175bSOded Gabbay #define CPU_BOOT_ERR0_TPM_FAIL (1 << CPU_BOOT_ERR_TPM_FAIL) 163e65e175bSOded Gabbay #define CPU_BOOT_ERR0_TMP_THRESH_INIT_FAIL (1 << CPU_BOOT_ERR_TMP_THRESH_INIT_FAIL) 164e65e175bSOded Gabbay #define CPU_BOOT_ERR0_EEPROM_FAIL (1 << CPU_BOOT_ERR_EEPROM_FAIL) 165e65e175bSOded Gabbay #define CPU_BOOT_ERR0_ENG_ARC_MEM_SCRUB_FAIL (1 << CPU_BOOT_ERR_ENG_ARC_MEM_SCRUB_FAIL) 166e65e175bSOded Gabbay #define CPU_BOOT_ERR0_ENABLED (1 << CPU_BOOT_ERR_ENABLED) 167e65e175bSOded Gabbay #define CPU_BOOT_ERR1_ENABLED (1 << CPU_BOOT_ERR_ENABLED) 168e65e175bSOded Gabbay 169e65e175bSOded Gabbay enum cpu_boot_dev_sts { 170e65e175bSOded Gabbay CPU_BOOT_DEV_STS_SECURITY_EN = 0, 171e65e175bSOded Gabbay CPU_BOOT_DEV_STS_DEBUG_EN = 1, 172e65e175bSOded Gabbay CPU_BOOT_DEV_STS_WATCHDOG_EN = 2, 173e65e175bSOded Gabbay CPU_BOOT_DEV_STS_DRAM_INIT_EN = 3, 174e65e175bSOded Gabbay CPU_BOOT_DEV_STS_BMC_WAIT_EN = 4, 175e65e175bSOded Gabbay CPU_BOOT_DEV_STS_E2E_CRED_EN = 5, 176e65e175bSOded Gabbay CPU_BOOT_DEV_STS_HBM_CRED_EN = 6, 177e65e175bSOded Gabbay CPU_BOOT_DEV_STS_RL_EN = 7, 178e65e175bSOded Gabbay CPU_BOOT_DEV_STS_SRAM_SCR_EN = 8, 179e65e175bSOded Gabbay CPU_BOOT_DEV_STS_DRAM_SCR_EN = 9, 180e65e175bSOded Gabbay CPU_BOOT_DEV_STS_FW_HARD_RST_EN = 10, 181e65e175bSOded Gabbay CPU_BOOT_DEV_STS_PLL_INFO_EN = 11, 182e65e175bSOded Gabbay CPU_BOOT_DEV_STS_SP_SRAM_EN = 12, 183e65e175bSOded Gabbay CPU_BOOT_DEV_STS_CLK_GATE_EN = 13, 184e65e175bSOded Gabbay CPU_BOOT_DEV_STS_HBM_ECC_EN = 14, 185e65e175bSOded Gabbay CPU_BOOT_DEV_STS_PKT_PI_ACK_EN = 15, 186e65e175bSOded Gabbay CPU_BOOT_DEV_STS_FW_LD_COM_EN = 16, 187e65e175bSOded Gabbay CPU_BOOT_DEV_STS_FW_IATU_CONF_EN = 17, 188e65e175bSOded Gabbay CPU_BOOT_DEV_STS_FW_NIC_MAC_EN = 18, 189e65e175bSOded Gabbay CPU_BOOT_DEV_STS_DYN_PLL_EN = 19, 190e65e175bSOded Gabbay CPU_BOOT_DEV_STS_GIC_PRIVILEGED_EN = 20, 191e65e175bSOded Gabbay CPU_BOOT_DEV_STS_EQ_INDEX_EN = 21, 192e65e175bSOded Gabbay CPU_BOOT_DEV_STS_MULTI_IRQ_POLL_EN = 22, 193e65e175bSOded Gabbay CPU_BOOT_DEV_STS_FW_NIC_STAT_XPCS91_EN = 23, 194e65e175bSOded Gabbay CPU_BOOT_DEV_STS_FW_NIC_STAT_EXT_EN = 24, 195e65e175bSOded Gabbay CPU_BOOT_DEV_STS_IS_IDLE_CHECK_EN = 25, 196e65e175bSOded Gabbay CPU_BOOT_DEV_STS_MAP_HWMON_EN = 26, 197e65e175bSOded Gabbay CPU_BOOT_DEV_STS_ENABLED = 31, 198e65e175bSOded Gabbay CPU_BOOT_DEV_STS_SCND_EN = 63, 199e65e175bSOded Gabbay CPU_BOOT_DEV_STS_LAST = 64 /* we have 2 registers of 32 bits */ 200e65e175bSOded Gabbay }; 201e65e175bSOded Gabbay 202e65e175bSOded Gabbay /* 203e65e175bSOded Gabbay * BOOT DEVICE STATUS bits in BOOT_DEVICE_STS registers 204e65e175bSOded Gabbay * 205e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_SECURITY_EN Security is Enabled. 206e65e175bSOded Gabbay * This is an indication for security 207e65e175bSOded Gabbay * enabled in FW, which means that 208e65e175bSOded Gabbay * all conditions for security are met: 209e65e175bSOded Gabbay * device is indicated as security enabled, 210e65e175bSOded Gabbay * registers are protected, and device 211e65e175bSOded Gabbay * uses keys for image verification. 212e65e175bSOded Gabbay * Initialized in: preboot 213e65e175bSOded Gabbay * 214e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_DEBUG_EN Debug is enabled. 215e65e175bSOded Gabbay * Enabled when JTAG or DEBUG is enabled 216e65e175bSOded Gabbay * in FW. 217e65e175bSOded Gabbay * Initialized in: preboot 218e65e175bSOded Gabbay * 219e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_WATCHDOG_EN Watchdog is enabled. 220e65e175bSOded Gabbay * Watchdog is enabled in FW. 221e65e175bSOded Gabbay * Initialized in: preboot 222e65e175bSOded Gabbay * 223e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_DRAM_INIT_EN DRAM initialization is enabled. 224e65e175bSOded Gabbay * DRAM initialization has been done in FW. 225e65e175bSOded Gabbay * Initialized in: u-boot 226e65e175bSOded Gabbay * 227e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_BMC_WAIT_EN Waiting for BMC data enabled. 228e65e175bSOded Gabbay * If set, it means that during boot, 229e65e175bSOded Gabbay * FW waited for BMC data. 230e65e175bSOded Gabbay * Initialized in: u-boot 231e65e175bSOded Gabbay * 232e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_E2E_CRED_EN E2E credits initialized. 233e65e175bSOded Gabbay * FW initialized E2E credits. 234e65e175bSOded Gabbay * Initialized in: u-boot 235e65e175bSOded Gabbay * 236e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_HBM_CRED_EN HBM credits initialized. 237e65e175bSOded Gabbay * FW initialized HBM credits. 238e65e175bSOded Gabbay * Initialized in: u-boot 239e65e175bSOded Gabbay * 240e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_RL_EN Rate limiter initialized. 241e65e175bSOded Gabbay * FW initialized rate limiter. 242e65e175bSOded Gabbay * Initialized in: u-boot 243e65e175bSOded Gabbay * 244e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_SRAM_SCR_EN SRAM scrambler enabled. 245e65e175bSOded Gabbay * FW initialized SRAM scrambler. 246e65e175bSOded Gabbay * Initialized in: linux 247e65e175bSOded Gabbay * 248e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_DRAM_SCR_EN DRAM scrambler enabled. 249e65e175bSOded Gabbay * FW initialized DRAM scrambler. 250e65e175bSOded Gabbay * Initialized in: u-boot 251e65e175bSOded Gabbay * 252e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_FW_HARD_RST_EN FW hard reset procedure is enabled. 253e65e175bSOded Gabbay * FW has the hard reset procedure 254e65e175bSOded Gabbay * implemented. This means that FW will 255e65e175bSOded Gabbay * perform hard reset procedure on 256e65e175bSOded Gabbay * receiving the halt-machine event. 257e65e175bSOded Gabbay * Initialized in: preboot, u-boot, linux 258e65e175bSOded Gabbay * 259e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_PLL_INFO_EN FW retrieval of PLL info is enabled. 260e65e175bSOded Gabbay * Initialized in: linux 261e65e175bSOded Gabbay * 262e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_SP_SRAM_EN SP SRAM is initialized and available 263e65e175bSOded Gabbay * for use. 264e65e175bSOded Gabbay * Initialized in: preboot 265e65e175bSOded Gabbay * 266e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_CLK_GATE_EN Clock Gating enabled. 267e65e175bSOded Gabbay * FW initialized Clock Gating. 268e65e175bSOded Gabbay * Initialized in: preboot 269e65e175bSOded Gabbay * 270e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_HBM_ECC_EN HBM ECC handling Enabled. 271e65e175bSOded Gabbay * FW handles HBM ECC indications. 272e65e175bSOded Gabbay * Initialized in: linux 273e65e175bSOded Gabbay * 274e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_PKT_PI_ACK_EN Packets ack value used in the armcpd 275e65e175bSOded Gabbay * is set to the PI counter. 276e65e175bSOded Gabbay * Initialized in: linux 277e65e175bSOded Gabbay * 278e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_FW_LD_COM_EN Flexible FW loading communication 279e65e175bSOded Gabbay * protocol is enabled. 280e65e175bSOded Gabbay * Initialized in: preboot 281e65e175bSOded Gabbay * 282e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_FW_IATU_CONF_EN FW iATU configuration is enabled. 283e65e175bSOded Gabbay * This bit if set, means the iATU has been 284e65e175bSOded Gabbay * configured and is ready for use. 285e65e175bSOded Gabbay * Initialized in: ppboot 286e65e175bSOded Gabbay * 287e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_FW_NIC_MAC_EN NIC MAC channels init is done by FW and 288e65e175bSOded Gabbay * any access to them is done via the FW. 289e65e175bSOded Gabbay * Initialized in: linux 290e65e175bSOded Gabbay * 291e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_DYN_PLL_EN Dynamic PLL configuration is enabled. 292e65e175bSOded Gabbay * FW sends to host a bitmap of supported 293e65e175bSOded Gabbay * PLLs. 294e65e175bSOded Gabbay * Initialized in: linux 295e65e175bSOded Gabbay * 296e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_GIC_PRIVILEGED_EN GIC access permission only from 297e65e175bSOded Gabbay * previleged entity. FW sets this status 298e65e175bSOded Gabbay * bit for host. If this bit is set then 299e65e175bSOded Gabbay * GIC can not be accessed from host. 300e65e175bSOded Gabbay * Initialized in: linux 301e65e175bSOded Gabbay * 302e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_EQ_INDEX_EN Event Queue (EQ) index is a running 303e65e175bSOded Gabbay * index for each new event sent to host. 304e65e175bSOded Gabbay * This is used as a method in host to 305e65e175bSOded Gabbay * identify that the waiting event in 306e65e175bSOded Gabbay * queue is actually a new event which 307e65e175bSOded Gabbay * was not served before. 308e65e175bSOded Gabbay * Initialized in: linux 309e65e175bSOded Gabbay * 310e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_MULTI_IRQ_POLL_EN Use multiple scratchpad interfaces to 311e65e175bSOded Gabbay * prevent IRQs overriding each other. 312e65e175bSOded Gabbay * Initialized in: linux 313e65e175bSOded Gabbay * 314e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_FW_NIC_STAT_XPCS91_EN 315e65e175bSOded Gabbay * NIC STAT and XPCS91 access is restricted 316e65e175bSOded Gabbay * and is done via FW only. 317e65e175bSOded Gabbay * Initialized in: linux 318e65e175bSOded Gabbay * 319e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_FW_NIC_STAT_EXT_EN 320e65e175bSOded Gabbay * NIC STAT get all is supported. 321e65e175bSOded Gabbay * Initialized in: linux 322e65e175bSOded Gabbay * 323e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_IS_IDLE_CHECK_EN 324e65e175bSOded Gabbay * F/W checks if the device is idle by reading defined set 325e65e175bSOded Gabbay * of registers. It returns a bitmask of all the engines, 326e65e175bSOded Gabbay * where a bit is set if the engine is not idle. 327e65e175bSOded Gabbay * Initialized in: linux 328e65e175bSOded Gabbay * 329e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_MAP_HWMON_EN 330e65e175bSOded Gabbay * If set, means f/w supports proprietary 331e65e175bSOded Gabbay * HWMON enum mapping to cpucp enums. 332e65e175bSOded Gabbay * Initialized in: linux 333e65e175bSOded Gabbay * 334e65e175bSOded Gabbay * CPU_BOOT_DEV_STS0_ENABLED Device status register enabled. 335e65e175bSOded Gabbay * This is a main indication that the 336e65e175bSOded Gabbay * running FW populates the device status 337e65e175bSOded Gabbay * register. Meaning the device status 338e65e175bSOded Gabbay * bits are not garbage, but actual 339e65e175bSOded Gabbay * statuses. 340e65e175bSOded Gabbay * Initialized in: preboot 341e65e175bSOded Gabbay * 342e65e175bSOded Gabbay */ 343e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_SECURITY_EN (1 << CPU_BOOT_DEV_STS_SECURITY_EN) 344e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_DEBUG_EN (1 << CPU_BOOT_DEV_STS_DEBUG_EN) 345e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_WATCHDOG_EN (1 << CPU_BOOT_DEV_STS_WATCHDOG_EN) 346e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_DRAM_INIT_EN (1 << CPU_BOOT_DEV_STS_DRAM_INIT_EN) 347e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_BMC_WAIT_EN (1 << CPU_BOOT_DEV_STS_BMC_WAIT_EN) 348e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_E2E_CRED_EN (1 << CPU_BOOT_DEV_STS_E2E_CRED_EN) 349e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_HBM_CRED_EN (1 << CPU_BOOT_DEV_STS_HBM_CRED_EN) 350e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_RL_EN (1 << CPU_BOOT_DEV_STS_RL_EN) 351e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_SRAM_SCR_EN (1 << CPU_BOOT_DEV_STS_SRAM_SCR_EN) 352e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_DRAM_SCR_EN (1 << CPU_BOOT_DEV_STS_DRAM_SCR_EN) 353e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_FW_HARD_RST_EN (1 << CPU_BOOT_DEV_STS_FW_HARD_RST_EN) 354e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_PLL_INFO_EN (1 << CPU_BOOT_DEV_STS_PLL_INFO_EN) 355e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_SP_SRAM_EN (1 << CPU_BOOT_DEV_STS_SP_SRAM_EN) 356e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_CLK_GATE_EN (1 << CPU_BOOT_DEV_STS_CLK_GATE_EN) 357e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_HBM_ECC_EN (1 << CPU_BOOT_DEV_STS_HBM_ECC_EN) 358e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_PKT_PI_ACK_EN (1 << CPU_BOOT_DEV_STS_PKT_PI_ACK_EN) 359e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_FW_LD_COM_EN (1 << CPU_BOOT_DEV_STS_FW_LD_COM_EN) 360e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_FW_IATU_CONF_EN (1 << CPU_BOOT_DEV_STS_FW_IATU_CONF_EN) 361e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_FW_NIC_MAC_EN (1 << CPU_BOOT_DEV_STS_FW_NIC_MAC_EN) 362e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_DYN_PLL_EN (1 << CPU_BOOT_DEV_STS_DYN_PLL_EN) 363e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_GIC_PRIVILEGED_EN (1 << CPU_BOOT_DEV_STS_GIC_PRIVILEGED_EN) 364e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_EQ_INDEX_EN (1 << CPU_BOOT_DEV_STS_EQ_INDEX_EN) 365e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_MULTI_IRQ_POLL_EN (1 << CPU_BOOT_DEV_STS_MULTI_IRQ_POLL_EN) 366e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_FW_NIC_STAT_XPCS91_EN (1 << CPU_BOOT_DEV_STS_FW_NIC_STAT_XPCS91_EN) 367e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_FW_NIC_STAT_EXT_EN (1 << CPU_BOOT_DEV_STS_FW_NIC_STAT_EXT_EN) 368e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_IS_IDLE_CHECK_EN (1 << CPU_BOOT_DEV_STS_IS_IDLE_CHECK_EN) 369e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_MAP_HWMON_EN (1 << CPU_BOOT_DEV_STS_MAP_HWMON_EN) 370e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS0_ENABLED (1 << CPU_BOOT_DEV_STS_ENABLED) 371e65e175bSOded Gabbay #define CPU_BOOT_DEV_STS1_ENABLED (1 << CPU_BOOT_DEV_STS_ENABLED) 372e65e175bSOded Gabbay 373e65e175bSOded Gabbay enum cpu_boot_status { 374e65e175bSOded Gabbay CPU_BOOT_STATUS_NA = 0, /* Default value after reset of chip */ 375e65e175bSOded Gabbay CPU_BOOT_STATUS_IN_WFE = 1, 376e65e175bSOded Gabbay CPU_BOOT_STATUS_DRAM_RDY = 2, 377e65e175bSOded Gabbay CPU_BOOT_STATUS_SRAM_AVAIL = 3, 378e65e175bSOded Gabbay CPU_BOOT_STATUS_IN_BTL = 4, /* BTL is H/W FSM */ 379e65e175bSOded Gabbay CPU_BOOT_STATUS_IN_PREBOOT = 5, 380e65e175bSOded Gabbay CPU_BOOT_STATUS_IN_SPL, /* deprecated - not reported */ 381e65e175bSOded Gabbay CPU_BOOT_STATUS_IN_UBOOT = 7, 382e65e175bSOded Gabbay CPU_BOOT_STATUS_DRAM_INIT_FAIL, /* deprecated - will be removed */ 383e65e175bSOded Gabbay CPU_BOOT_STATUS_FIT_CORRUPTED, /* deprecated - will be removed */ 384e65e175bSOded Gabbay /* U-Boot console prompt activated, commands are not processed */ 385e65e175bSOded Gabbay CPU_BOOT_STATUS_UBOOT_NOT_READY = 10, 386e65e175bSOded Gabbay /* Finished NICs init, reported after DRAM and NICs */ 387e65e175bSOded Gabbay CPU_BOOT_STATUS_NIC_FW_RDY = 11, 388e65e175bSOded Gabbay CPU_BOOT_STATUS_TS_INIT_FAIL, /* deprecated - will be removed */ 389e65e175bSOded Gabbay CPU_BOOT_STATUS_DRAM_SKIPPED, /* deprecated - will be removed */ 390e65e175bSOded Gabbay CPU_BOOT_STATUS_BMC_WAITING_SKIPPED, /* deprecated - will be removed */ 391e65e175bSOded Gabbay /* Last boot loader progress status, ready to receive commands */ 392e65e175bSOded Gabbay CPU_BOOT_STATUS_READY_TO_BOOT = 15, 393e65e175bSOded Gabbay /* Internal Boot finished, ready for boot-fit */ 394e65e175bSOded Gabbay CPU_BOOT_STATUS_WAITING_FOR_BOOT_FIT = 16, 395e65e175bSOded Gabbay /* Internal Security has been initialized, device can be accessed */ 396e65e175bSOded Gabbay CPU_BOOT_STATUS_SECURITY_READY = 17, 397e65e175bSOded Gabbay }; 398e65e175bSOded Gabbay 399e65e175bSOded Gabbay enum kmd_msg { 400e65e175bSOded Gabbay KMD_MSG_NA = 0, 401e65e175bSOded Gabbay KMD_MSG_GOTO_WFE, 402e65e175bSOded Gabbay KMD_MSG_FIT_RDY, 403e65e175bSOded Gabbay KMD_MSG_SKIP_BMC, 404e65e175bSOded Gabbay RESERVED, 405e65e175bSOded Gabbay KMD_MSG_RST_DEV, 406e65e175bSOded Gabbay KMD_MSG_LAST 407e65e175bSOded Gabbay }; 408e65e175bSOded Gabbay 409e65e175bSOded Gabbay enum cpu_msg_status { 410e65e175bSOded Gabbay CPU_MSG_CLR = 0, 411e65e175bSOded Gabbay CPU_MSG_OK, 412e65e175bSOded Gabbay CPU_MSG_ERR, 413e65e175bSOded Gabbay }; 414e65e175bSOded Gabbay 415e65e175bSOded Gabbay /* communication registers mapping - consider ABI when changing */ 416e65e175bSOded Gabbay struct cpu_dyn_regs { 417e65e175bSOded Gabbay __le32 cpu_pq_base_addr_low; 418e65e175bSOded Gabbay __le32 cpu_pq_base_addr_high; 419e65e175bSOded Gabbay __le32 cpu_pq_length; 420e65e175bSOded Gabbay __le32 cpu_pq_init_status; 421e65e175bSOded Gabbay __le32 cpu_eq_base_addr_low; 422e65e175bSOded Gabbay __le32 cpu_eq_base_addr_high; 423e65e175bSOded Gabbay __le32 cpu_eq_length; 424e65e175bSOded Gabbay __le32 cpu_eq_ci; 425e65e175bSOded Gabbay __le32 cpu_cq_base_addr_low; 426e65e175bSOded Gabbay __le32 cpu_cq_base_addr_high; 427e65e175bSOded Gabbay __le32 cpu_cq_length; 428e65e175bSOded Gabbay __le32 cpu_pf_pq_pi; 429e65e175bSOded Gabbay __le32 cpu_boot_dev_sts0; 430e65e175bSOded Gabbay __le32 cpu_boot_dev_sts1; 431e65e175bSOded Gabbay __le32 cpu_boot_err0; 432e65e175bSOded Gabbay __le32 cpu_boot_err1; 433e65e175bSOded Gabbay __le32 cpu_boot_status; 434e65e175bSOded Gabbay __le32 fw_upd_sts; 435e65e175bSOded Gabbay __le32 fw_upd_cmd; 436e65e175bSOded Gabbay __le32 fw_upd_pending_sts; 437e65e175bSOded Gabbay __le32 fuse_ver_offset; 438e65e175bSOded Gabbay __le32 preboot_ver_offset; 439e65e175bSOded Gabbay __le32 uboot_ver_offset; 440e65e175bSOded Gabbay __le32 hw_state; 441e65e175bSOded Gabbay __le32 kmd_msg_to_cpu; 442e65e175bSOded Gabbay __le32 cpu_cmd_status_to_host; 443e65e175bSOded Gabbay __le32 gic_host_pi_upd_irq; 444e65e175bSOded Gabbay __le32 gic_tpc_qm_irq_ctrl; 445e65e175bSOded Gabbay __le32 gic_mme_qm_irq_ctrl; 446e65e175bSOded Gabbay __le32 gic_dma_qm_irq_ctrl; 447e65e175bSOded Gabbay __le32 gic_nic_qm_irq_ctrl; 448e65e175bSOded Gabbay __le32 gic_dma_core_irq_ctrl; 449e65e175bSOded Gabbay __le32 gic_host_halt_irq; 450e65e175bSOded Gabbay __le32 gic_host_ints_irq; 451e65e175bSOded Gabbay __le32 gic_host_soft_rst_irq; 452e65e175bSOded Gabbay __le32 gic_rot_qm_irq_ctrl; 453e65e175bSOded Gabbay __le32 cpu_rst_status; 454e65e175bSOded Gabbay __le32 eng_arc_irq_ctrl; 455e65e175bSOded Gabbay __le32 reserved1[20]; /* reserve for future use */ 456e65e175bSOded Gabbay }; 457e65e175bSOded Gabbay 458e65e175bSOded Gabbay /* TODO: remove the desc magic after the code is updated to use message */ 459e65e175bSOded Gabbay /* HCDM - Habana Communications Descriptor Magic */ 460e65e175bSOded Gabbay #define HL_COMMS_DESC_MAGIC 0x4843444D 461e65e175bSOded Gabbay #define HL_COMMS_DESC_VER 3 462e65e175bSOded Gabbay 463e65e175bSOded Gabbay /* HCMv - Habana Communications Message + header version */ 464e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_VALUE 0x48434D00 465e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_MASK 0xFFFFFF00 466e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_VER_MASK 0xFF 467e65e175bSOded Gabbay 468e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_VER(ver) (HL_COMMS_MSG_MAGIC_VALUE | \ 469e65e175bSOded Gabbay ((ver) & HL_COMMS_MSG_MAGIC_VER_MASK)) 470e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_V0 HL_COMMS_DESC_MAGIC 471e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_V1 HL_COMMS_MSG_MAGIC_VER(1) 472e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_V2 HL_COMMS_MSG_MAGIC_VER(2) 473e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_V3 HL_COMMS_MSG_MAGIC_VER(3) 474e65e175bSOded Gabbay 475e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC HL_COMMS_MSG_MAGIC_V3 476e65e175bSOded Gabbay 477e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_VALIDATE_MAGIC(magic) \ 478e65e175bSOded Gabbay (((magic) & HL_COMMS_MSG_MAGIC_MASK) == \ 479e65e175bSOded Gabbay HL_COMMS_MSG_MAGIC_VALUE) 480e65e175bSOded Gabbay 481e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_VALIDATE_VERSION(magic, ver) \ 482e65e175bSOded Gabbay (((magic) & HL_COMMS_MSG_MAGIC_VER_MASK) >= \ 483e65e175bSOded Gabbay ((ver) & HL_COMMS_MSG_MAGIC_VER_MASK)) 484e65e175bSOded Gabbay 485e65e175bSOded Gabbay #define HL_COMMS_MSG_MAGIC_VALIDATE(magic, ver) \ 486e65e175bSOded Gabbay (HL_COMMS_MSG_MAGIC_VALIDATE_MAGIC((magic)) && \ 487e65e175bSOded Gabbay HL_COMMS_MSG_MAGIC_VALIDATE_VERSION((magic), (ver))) 488e65e175bSOded Gabbay 489e65e175bSOded Gabbay enum comms_msg_type { 490e65e175bSOded Gabbay HL_COMMS_DESC_TYPE = 0, 491e65e175bSOded Gabbay HL_COMMS_RESET_CAUSE_TYPE = 1, 492e65e175bSOded Gabbay HL_COMMS_FW_CFG_SKIP_TYPE = 2, 493e65e175bSOded Gabbay HL_COMMS_BINNING_CONF_TYPE = 3, 494e65e175bSOded Gabbay }; 495e65e175bSOded Gabbay 496e65e175bSOded Gabbay /* 497e65e175bSOded Gabbay * Binning information shared between LKD and FW 498e65e175bSOded Gabbay * @tpc_mask_l - TPC binning information lower 64 bit 499e65e175bSOded Gabbay * @dec_mask - Decoder binning information 500e65e175bSOded Gabbay * @dram_mask - DRAM binning information 501e65e175bSOded Gabbay * @edma_mask - EDMA binning information 502e65e175bSOded Gabbay * @mme_mask_l - MME binning information lower 32 503e65e175bSOded Gabbay * @mme_mask_h - MME binning information upper 32 504e65e175bSOded Gabbay * @rot_mask - Rotator binning information 505e65e175bSOded Gabbay * @xbar_mask - xBAR binning information 506e65e175bSOded Gabbay * @reserved - reserved field for future binning info w/o ABI change 507e65e175bSOded Gabbay * @tpc_mask_h - TPC binning information upper 64 bit 508e65e175bSOded Gabbay * @nic_mask - NIC binning information 509e65e175bSOded Gabbay */ 510e65e175bSOded Gabbay struct lkd_fw_binning_info { 511e65e175bSOded Gabbay __le64 tpc_mask_l; 512e65e175bSOded Gabbay __le32 dec_mask; 513e65e175bSOded Gabbay __le32 dram_mask; 514e65e175bSOded Gabbay __le32 edma_mask; 515e65e175bSOded Gabbay __le32 mme_mask_l; 516e65e175bSOded Gabbay __le32 mme_mask_h; 517e65e175bSOded Gabbay __le32 rot_mask; 518e65e175bSOded Gabbay __le32 xbar_mask; 519e65e175bSOded Gabbay __le32 reserved0; 520e65e175bSOded Gabbay __le64 tpc_mask_h; 521e65e175bSOded Gabbay __le64 nic_mask; 522e65e175bSOded Gabbay __le32 reserved1[8]; 523e65e175bSOded Gabbay }; 524e65e175bSOded Gabbay 525e65e175bSOded Gabbay /* TODO: remove this struct after the code is updated to use message */ 526e65e175bSOded Gabbay /* this is the comms descriptor header - meta data */ 527e65e175bSOded Gabbay struct comms_desc_header { 528e65e175bSOded Gabbay __le32 magic; /* magic for validation */ 529e65e175bSOded Gabbay __le32 crc32; /* CRC32 of the descriptor w/o header */ 530e65e175bSOded Gabbay __le16 size; /* size of the descriptor w/o header */ 531e65e175bSOded Gabbay __u8 version; /* descriptor version */ 532e65e175bSOded Gabbay __u8 reserved[5]; /* pad to 64 bit */ 533e65e175bSOded Gabbay }; 534e65e175bSOded Gabbay 535e65e175bSOded Gabbay /* this is the comms message header - meta data */ 536e65e175bSOded Gabbay struct comms_msg_header { 537e65e175bSOded Gabbay __le32 magic; /* magic for validation */ 538e65e175bSOded Gabbay __le32 crc32; /* CRC32 of the message w/o header */ 539e65e175bSOded Gabbay __le16 size; /* size of the message w/o header */ 540e65e175bSOded Gabbay __u8 version; /* message payload version */ 541e65e175bSOded Gabbay __u8 type; /* message type */ 542e65e175bSOded Gabbay __u8 reserved[4]; /* pad to 64 bit */ 543e65e175bSOded Gabbay }; 544e65e175bSOded Gabbay 545e65e175bSOded Gabbay enum lkd_fw_ascii_msg_lvls { 546e65e175bSOded Gabbay LKD_FW_ASCII_MSG_ERR = 0, 547e65e175bSOded Gabbay LKD_FW_ASCII_MSG_WRN = 1, 548e65e175bSOded Gabbay LKD_FW_ASCII_MSG_INF = 2, 549e65e175bSOded Gabbay LKD_FW_ASCII_MSG_DBG = 3, 550e65e175bSOded Gabbay }; 551e65e175bSOded Gabbay 552e65e175bSOded Gabbay #define LKD_FW_ASCII_MSG_MAX_LEN 128 553e65e175bSOded Gabbay #define LKD_FW_ASCII_MSG_MAX 4 /* consider ABI when changing */ 554e65e175bSOded Gabbay 555e65e175bSOded Gabbay struct lkd_fw_ascii_msg { 556e65e175bSOded Gabbay __u8 valid; 557e65e175bSOded Gabbay __u8 msg_lvl; 558e65e175bSOded Gabbay __u8 reserved[6]; 559e65e175bSOded Gabbay char msg[LKD_FW_ASCII_MSG_MAX_LEN]; 560e65e175bSOded Gabbay }; 561e65e175bSOded Gabbay 562e65e175bSOded Gabbay /* this is the main FW descriptor - consider ABI when changing */ 563e65e175bSOded Gabbay struct lkd_fw_comms_desc { 564e65e175bSOded Gabbay struct comms_desc_header header; 565e65e175bSOded Gabbay struct cpu_dyn_regs cpu_dyn_regs; 566e65e175bSOded Gabbay char fuse_ver[VERSION_MAX_LEN]; 567e65e175bSOded Gabbay char cur_fw_ver[VERSION_MAX_LEN]; 568e65e175bSOded Gabbay /* can be used for 1 more version w/o ABI change */ 569e65e175bSOded Gabbay char reserved0[VERSION_MAX_LEN]; 570e65e175bSOded Gabbay __le64 img_addr; /* address for next FW component load */ 571e65e175bSOded Gabbay struct lkd_fw_binning_info binning_info; 572e65e175bSOded Gabbay struct lkd_fw_ascii_msg ascii_msg[LKD_FW_ASCII_MSG_MAX]; 573e65e175bSOded Gabbay }; 574e65e175bSOded Gabbay 575e65e175bSOded Gabbay enum comms_reset_cause { 576e65e175bSOded Gabbay HL_RESET_CAUSE_UNKNOWN = 0, 577e65e175bSOded Gabbay HL_RESET_CAUSE_HEARTBEAT = 1, 578e65e175bSOded Gabbay HL_RESET_CAUSE_TDR = 2, 579e65e175bSOded Gabbay }; 580e65e175bSOded Gabbay 581e65e175bSOded Gabbay /* TODO: remove define after struct name is aligned on all projects */ 582e65e175bSOded Gabbay #define lkd_msg_comms lkd_fw_comms_msg 583e65e175bSOded Gabbay 584e65e175bSOded Gabbay /* this is the comms message descriptor */ 585e65e175bSOded Gabbay struct lkd_fw_comms_msg { 586e65e175bSOded Gabbay struct comms_msg_header header; 587e65e175bSOded Gabbay /* union for future expantions of new messages */ 588e65e175bSOded Gabbay union { 589e65e175bSOded Gabbay struct { 590e65e175bSOded Gabbay struct cpu_dyn_regs cpu_dyn_regs; 591e65e175bSOded Gabbay char fuse_ver[VERSION_MAX_LEN]; 592e65e175bSOded Gabbay char cur_fw_ver[VERSION_MAX_LEN]; 593e65e175bSOded Gabbay /* can be used for 1 more version w/o ABI change */ 594e65e175bSOded Gabbay char reserved0[VERSION_MAX_LEN]; 595e65e175bSOded Gabbay /* address for next FW component load */ 596e65e175bSOded Gabbay __le64 img_addr; 597e65e175bSOded Gabbay struct lkd_fw_binning_info binning_info; 598e65e175bSOded Gabbay struct lkd_fw_ascii_msg ascii_msg[LKD_FW_ASCII_MSG_MAX]; 599e65e175bSOded Gabbay }; 600e65e175bSOded Gabbay struct { 601e65e175bSOded Gabbay __u8 reset_cause; 602e65e175bSOded Gabbay }; 603e65e175bSOded Gabbay struct { 604e65e175bSOded Gabbay __u8 fw_cfg_skip; /* 1 - skip, 0 - don't skip */ 605e65e175bSOded Gabbay }; 606e65e175bSOded Gabbay struct lkd_fw_binning_info binning_conf; 607e65e175bSOded Gabbay }; 608e65e175bSOded Gabbay }; 609e65e175bSOded Gabbay 610e65e175bSOded Gabbay /* 611e65e175bSOded Gabbay * LKD commands: 612e65e175bSOded Gabbay * 613e65e175bSOded Gabbay * COMMS_NOOP Used to clear the command register and no actual 614e65e175bSOded Gabbay * command is send. 615e65e175bSOded Gabbay * 616e65e175bSOded Gabbay * COMMS_CLR_STS Clear status command - FW should clear the 617e65e175bSOded Gabbay * status register. Used for synchronization 618e65e175bSOded Gabbay * between the commands as part of the race free 619e65e175bSOded Gabbay * protocol. 620e65e175bSOded Gabbay * 621e65e175bSOded Gabbay * COMMS_RST_STATE Reset the current communication state which is 622e65e175bSOded Gabbay * kept by FW for proper responses. 623e65e175bSOded Gabbay * Should be used in the beginning of the 624e65e175bSOded Gabbay * communication cycle to clean any leftovers from 625e65e175bSOded Gabbay * previous communication attempts. 626e65e175bSOded Gabbay * 627e65e175bSOded Gabbay * COMMS_PREP_DESC Prepare descriptor for setting up the 628e65e175bSOded Gabbay * communication and other dynamic data: 629e65e175bSOded Gabbay * struct lkd_fw_comms_desc. 630e65e175bSOded Gabbay * This command has a parameter stating the next FW 631e65e175bSOded Gabbay * component size, so the FW can actually prepare a 632e65e175bSOded Gabbay * space for it and in the status response provide 633e65e175bSOded Gabbay * the descriptor offset. The Offset of the next FW 634e65e175bSOded Gabbay * data component is a part of the descriptor 635e65e175bSOded Gabbay * structure. 636e65e175bSOded Gabbay * 637e65e175bSOded Gabbay * COMMS_DATA_RDY The FW data has been uploaded and is ready for 638e65e175bSOded Gabbay * validation. 639e65e175bSOded Gabbay * 640e65e175bSOded Gabbay * COMMS_EXEC Execute the next FW component. 641e65e175bSOded Gabbay * 642e65e175bSOded Gabbay * COMMS_RST_DEV Reset the device. 643e65e175bSOded Gabbay * 644e65e175bSOded Gabbay * COMMS_GOTO_WFE Execute WFE command. Allowed only on non-secure 645e65e175bSOded Gabbay * devices. 646e65e175bSOded Gabbay * 647e65e175bSOded Gabbay * COMMS_SKIP_BMC Perform actions required for BMC-less servers. 648e65e175bSOded Gabbay * Do not wait for BMC response. 649e65e175bSOded Gabbay * 650e65e175bSOded Gabbay * COMMS_PREP_DESC_ELBI Same as COMMS_PREP_DESC only that the memory 651e65e175bSOded Gabbay * space is allocated in a ELBI access only 652e65e175bSOded Gabbay * address range. 653e65e175bSOded Gabbay * 654e65e175bSOded Gabbay */ 655e65e175bSOded Gabbay enum comms_cmd { 656e65e175bSOded Gabbay COMMS_NOOP = 0, 657e65e175bSOded Gabbay COMMS_CLR_STS = 1, 658e65e175bSOded Gabbay COMMS_RST_STATE = 2, 659e65e175bSOded Gabbay COMMS_PREP_DESC = 3, 660e65e175bSOded Gabbay COMMS_DATA_RDY = 4, 661e65e175bSOded Gabbay COMMS_EXEC = 5, 662e65e175bSOded Gabbay COMMS_RST_DEV = 6, 663e65e175bSOded Gabbay COMMS_GOTO_WFE = 7, 664e65e175bSOded Gabbay COMMS_SKIP_BMC = 8, 665e65e175bSOded Gabbay COMMS_PREP_DESC_ELBI = 10, 666e65e175bSOded Gabbay COMMS_INVLD_LAST 667e65e175bSOded Gabbay }; 668e65e175bSOded Gabbay 669e65e175bSOded Gabbay #define COMMS_COMMAND_SIZE_SHIFT 0 670e65e175bSOded Gabbay #define COMMS_COMMAND_SIZE_MASK 0x1FFFFFF 671e65e175bSOded Gabbay #define COMMS_COMMAND_CMD_SHIFT 27 672e65e175bSOded Gabbay #define COMMS_COMMAND_CMD_MASK 0xF8000000 673e65e175bSOded Gabbay 674e65e175bSOded Gabbay /* 675e65e175bSOded Gabbay * LKD command to FW register structure 676e65e175bSOded Gabbay * @size - FW component size 677e65e175bSOded Gabbay * @cmd - command from enum comms_cmd 678e65e175bSOded Gabbay */ 679e65e175bSOded Gabbay struct comms_command { 680e65e175bSOded Gabbay union { /* bit fields are only for FW use */ 681e65e175bSOded Gabbay struct { 682e65e175bSOded Gabbay u32 size :25; /* 32MB max. */ 683e65e175bSOded Gabbay u32 reserved :2; 684e65e175bSOded Gabbay enum comms_cmd cmd :5; /* 32 commands */ 685e65e175bSOded Gabbay }; 686e65e175bSOded Gabbay __le32 val; 687e65e175bSOded Gabbay }; 688e65e175bSOded Gabbay }; 689e65e175bSOded Gabbay 690e65e175bSOded Gabbay /* 691e65e175bSOded Gabbay * FW status 692e65e175bSOded Gabbay * 693e65e175bSOded Gabbay * COMMS_STS_NOOP Used to clear the status register and no actual 694e65e175bSOded Gabbay * status is provided. 695e65e175bSOded Gabbay * 696e65e175bSOded Gabbay * COMMS_STS_ACK Command has been received and recognized. 697e65e175bSOded Gabbay * 698e65e175bSOded Gabbay * COMMS_STS_OK Command execution has finished successfully. 699e65e175bSOded Gabbay * 700e65e175bSOded Gabbay * COMMS_STS_ERR Command execution was unsuccessful and resulted 701e65e175bSOded Gabbay * in error. 702e65e175bSOded Gabbay * 703e65e175bSOded Gabbay * COMMS_STS_VALID_ERR FW validation has failed. 704e65e175bSOded Gabbay * 705e65e175bSOded Gabbay * COMMS_STS_TIMEOUT_ERR Command execution has timed out. 706e65e175bSOded Gabbay */ 707e65e175bSOded Gabbay enum comms_sts { 708e65e175bSOded Gabbay COMMS_STS_NOOP = 0, 709e65e175bSOded Gabbay COMMS_STS_ACK = 1, 710e65e175bSOded Gabbay COMMS_STS_OK = 2, 711e65e175bSOded Gabbay COMMS_STS_ERR = 3, 712e65e175bSOded Gabbay COMMS_STS_VALID_ERR = 4, 713e65e175bSOded Gabbay COMMS_STS_TIMEOUT_ERR = 5, 714e65e175bSOded Gabbay COMMS_STS_INVLD_LAST 715e65e175bSOded Gabbay }; 716e65e175bSOded Gabbay 717e65e175bSOded Gabbay /* RAM types for FW components loading - defines the base address */ 718e65e175bSOded Gabbay enum comms_ram_types { 719e65e175bSOded Gabbay COMMS_SRAM = 0, 720e65e175bSOded Gabbay COMMS_DRAM = 1, 721e65e175bSOded Gabbay }; 722e65e175bSOded Gabbay 723e65e175bSOded Gabbay #define COMMS_STATUS_OFFSET_SHIFT 0 724e65e175bSOded Gabbay #define COMMS_STATUS_OFFSET_MASK 0x03FFFFFF 725e65e175bSOded Gabbay #define COMMS_STATUS_OFFSET_ALIGN_SHIFT 2 726e65e175bSOded Gabbay #define COMMS_STATUS_RAM_TYPE_SHIFT 26 727e65e175bSOded Gabbay #define COMMS_STATUS_RAM_TYPE_MASK 0x0C000000 728e65e175bSOded Gabbay #define COMMS_STATUS_STATUS_SHIFT 28 729e65e175bSOded Gabbay #define COMMS_STATUS_STATUS_MASK 0xF0000000 730e65e175bSOded Gabbay 731e65e175bSOded Gabbay /* 732e65e175bSOded Gabbay * FW status to LKD register structure 733e65e175bSOded Gabbay * @offset - an offset from the base of the ram_type shifted right by 734e65e175bSOded Gabbay * 2 bits (always aligned to 32 bits). 735e65e175bSOded Gabbay * Allows a maximum addressable offset of 256MB from RAM base. 736e65e175bSOded Gabbay * Example: for real offset in RAM of 0x800000 (8MB), the value 737e65e175bSOded Gabbay * in offset field is (0x800000 >> 2) = 0x200000. 738e65e175bSOded Gabbay * @ram_type - the RAM type that should be used for offset from 739e65e175bSOded Gabbay * enum comms_ram_types 740e65e175bSOded Gabbay * @status - status from enum comms_sts 741e65e175bSOded Gabbay */ 742e65e175bSOded Gabbay struct comms_status { 743e65e175bSOded Gabbay union { /* bit fields are only for FW use */ 744e65e175bSOded Gabbay struct { 745e65e175bSOded Gabbay u32 offset :26; 746e65e175bSOded Gabbay enum comms_ram_types ram_type :2; 747139dad04SOded Gabbay enum comms_sts status :4; /* 16 statuses */ 748139dad04SOded Gabbay }; 749139dad04SOded Gabbay __le32 val; 750139dad04SOded Gabbay }; 751139dad04SOded Gabbay }; 752139dad04SOded Gabbay 753139dad04SOded Gabbay #define NAME_MAX_LEN 32 /* bytes */ 754139dad04SOded Gabbay struct hl_module_data { 755139dad04SOded Gabbay __u8 name[NAME_MAX_LEN]; 756139dad04SOded Gabbay __u8 version[VERSION_MAX_LEN]; 757139dad04SOded Gabbay }; 758139dad04SOded Gabbay 759139dad04SOded Gabbay /** 760139dad04SOded Gabbay * struct hl_component_versions - versions associated with hl component. 761139dad04SOded Gabbay * @struct_size: size of all the struct (including dynamic size of modules). 762139dad04SOded Gabbay * @modules_offset: offset of the modules field in this struct. 763139dad04SOded Gabbay * @component: version of the component itself. 764139dad04SOded Gabbay * @fw_os: Firmware OS Version. 765139dad04SOded Gabbay * @comp_name: Name of the component. 766139dad04SOded Gabbay * @modules_counter: number of set bits in modules_mask. 767139dad04SOded Gabbay * @reserved: reserved for future use. 768139dad04SOded Gabbay * @modules: versions of the component's modules. Elborated explanation in 769139dad04SOded Gabbay * struct cpucp_versions. 770139dad04SOded Gabbay */ 771139dad04SOded Gabbay struct hl_component_versions { 772139dad04SOded Gabbay __le16 struct_size; 773*336b78c6SOded Gabbay __le16 modules_offset; 774139dad04SOded Gabbay __u8 component[VERSION_MAX_LEN]; 775139dad04SOded Gabbay __u8 fw_os[VERSION_MAX_LEN]; 776139dad04SOded Gabbay __u8 comp_name[NAME_MAX_LEN]; 777*336b78c6SOded Gabbay __u8 modules_counter; 778*336b78c6SOded Gabbay __u8 reserved[3]; 779*336b78c6SOded Gabbay struct hl_module_data modules[]; 780*336b78c6SOded Gabbay }; 781*336b78c6SOded Gabbay 782*336b78c6SOded Gabbay /* Max size of fit size */ 783139dad04SOded Gabbay #define HL_FW_VERSIONS_FIT_SIZE 4096 784139dad04SOded Gabbay 785139dad04SOded Gabbay #endif /* HL_BOOT_IF_H */ 786139dad04SOded Gabbay