DataHoarder
f5ce6a92ce
All checks were successful
continuous-integration/drone/push Build is passing
193 lines
8.1 KiB
C++
193 lines
8.1 KiB
C++
/*****************************************************************************
|
|
* Copyright (c) 2020, rrcSmall FM10K-Documentation Contributors
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of the copyright holder nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*****************************************************************************/
|
|
|
|
#include <iostream>
|
|
#include <sstream>
|
|
#include <iomanip>
|
|
#include "Registers.h"
|
|
|
|
|
|
std::string getRegisterName(KnownRegisters addr) {
|
|
if ((uint32_t) addr >= (uint32_t) KnownRegisters::BSM_SCRATCH_START &&
|
|
(uint32_t) addr <= (uint32_t) KnownRegisters::BSM_SCRATCH_END) {
|
|
std::stringstream s;
|
|
s << "BSM_SCRATCH[0x" << std::hex << std::setw(3) << std::setfill('0')
|
|
<< (((uint32_t) addr) - (uint32_t) KnownRegisters::BSM_SCRATCH_START) << "]";
|
|
return s.str();
|
|
}
|
|
switch (addr) {
|
|
case KnownRegisters::FATAL_CODE:
|
|
return "FATAL_CODE";
|
|
case KnownRegisters::LAST_FATAL_CODE:
|
|
return "LAST_FATAL_CODE";
|
|
case KnownRegisters::SOFT_RESET:
|
|
return "SOFT_RESET";
|
|
case KnownRegisters::DEVICE_CFG:
|
|
return "DEVICE_CFG";
|
|
case KnownRegisters::RESET_CFG:
|
|
return "RESET_CFG";
|
|
case KnownRegisters::WATCHDOG_CFG:
|
|
return "WATCHDOG_CFG";
|
|
case KnownRegisters::MGMT_SCRATCH_0:
|
|
return "MGMT_SCRATCH[0]";
|
|
case KnownRegisters::MGMT_SCRATCH_1:
|
|
return "MGMT_SCRATCH[1]";
|
|
case KnownRegisters::VITAL_PRODUCT_DATA:
|
|
return "VITAL_PRODUCT_DATA";
|
|
case KnownRegisters::GLOBAL_INTERRUPT_DETECT:
|
|
return "GLOBAL_INTERRUPT_DETECT";
|
|
case KnownRegisters::INTERRUPT_MASK_BSM:
|
|
return "INTERRUPT_MASK_BSM";
|
|
case KnownRegisters::CHIP_VERSION:
|
|
return "CHIP_VERSION";
|
|
case KnownRegisters::BSM_CTRL:
|
|
return "BSM_CTRL";
|
|
case KnownRegisters::BSM_ARGS:
|
|
return "BSM_ARGS";
|
|
case KnownRegisters::BSM_ADDR_OFFSET_0:
|
|
return "BSM_ADDR_OFFSET[0]";
|
|
case KnownRegisters::BSM_ADDR_OFFSET_1:
|
|
return "BSM_ADDR_OFFSET[1]";
|
|
case KnownRegisters::BSM_ADDR_OFFSET_2:
|
|
return "BSM_ADDR_OFFSET[2]";
|
|
case KnownRegisters::BSM_ADDR_OFFSET_3:
|
|
return "BSM_ADDR_OFFSET[3]";
|
|
case KnownRegisters::BSM_COUNTER_0:
|
|
return "BSM_COUNTER[0]";
|
|
case KnownRegisters::BSM_COUNTER_1:
|
|
return "BSM_COUNTER[1]";
|
|
case KnownRegisters::PLL_PCIE_CTRL:
|
|
return "PLL_PCIE_CTRL";
|
|
case KnownRegisters::PLL_PCIE_STAT:
|
|
return "PLL_PCIE_STAT";
|
|
case KnownRegisters::PCIE_XPLL_CTRL:
|
|
return "PCIE_XPLL_CTRL";
|
|
case KnownRegisters::PCIE_CLK_CTRL:
|
|
return "PCIE_CLK_CTRL";
|
|
case KnownRegisters::PCIE_CLK_CTRL_2:
|
|
return "PCIE_CLK_CTRL_2";
|
|
case KnownRegisters::PLL_EPL_CTRL:
|
|
return "PLL_EPL_CTRL";
|
|
case KnownRegisters::PLL_EPL_STAT:
|
|
return "PLL_EPL_STAT";
|
|
case KnownRegisters::PLL_FABRIC_CTRL:
|
|
return "PLL_FABRIC_CTRL";
|
|
case KnownRegisters::PLL_FABRIC_STAT:
|
|
return "PLL_FABRIC_STAT";
|
|
case KnownRegisters::PLL_FABRIC_LOCK:
|
|
return "PLL_FABRIC_LOCK";
|
|
case KnownRegisters::SBUS_EPL_CFG:
|
|
return "SBUS_EPL_CFG";
|
|
case KnownRegisters::SBUS_EPL_COMMAND:
|
|
return "SBUS_EPL_COMMAND";
|
|
case KnownRegisters::SBUS_EPL_REQUEST:
|
|
return "SBUS_EPL_REQUEST";
|
|
case KnownRegisters::SBUS_EPL_RESPONSE:
|
|
return "SBUS_EPL_RESPONSE";
|
|
case KnownRegisters::SBUS_EPL_SPICO_IN:
|
|
return "SBUS_EPL_SPICO_IN";
|
|
case KnownRegisters::SBUS_EPL_SPICO_OUT:
|
|
return "SBUS_EPL_SPICO_OUT";
|
|
case KnownRegisters::SBUS_EPL_IP:
|
|
return "SBUS_EPL_IP";
|
|
case KnownRegisters::SBUS_EPL_IM:
|
|
return "SBUS_EPL_IM";
|
|
case KnownRegisters::PM_CLKOBS_CTRL:
|
|
return "PM_CLKOBS_CTRL";
|
|
case KnownRegisters::GPIO_CFG:
|
|
return "GPIO_CFG";
|
|
case KnownRegisters::GPIO_DATA:
|
|
return "GPIO_DATA";
|
|
case KnownRegisters::GPIO_IP:
|
|
return "GPIO_IP";
|
|
case KnownRegisters::GPIO_IM:
|
|
return "GPIO_IM";
|
|
case KnownRegisters::SBUS_PCIE_CFG:
|
|
return "SBUS_PCIE_CFG";
|
|
case KnownRegisters::SBUS_PCIE_COMMAND:
|
|
return "SBUS_PCIE_COMMAND";
|
|
case KnownRegisters::SBUS_PCIE_REQUEST:
|
|
return "SBUS_PCIE_REQUEST";
|
|
case KnownRegisters::SBUS_PCIE_RESPONSE:
|
|
return "SBUS_PCIE_RESPONSE";
|
|
case KnownRegisters::SBUS_PCIE_SPICO_IN:
|
|
return "SBUS_PCIE_SPICO_IN";
|
|
case KnownRegisters::SBUS_PCIE_SPICO_OUT:
|
|
return "SBUS_PCIE_SPICO_OUT";
|
|
case KnownRegisters::SBUS_PCIE_IP:
|
|
return "SBUS_PCIE_IP";
|
|
case KnownRegisters::SBUS_PCIE_IM:
|
|
return "SBUS_PCIE_IM";
|
|
case KnownRegisters::REI_CTRL:
|
|
return "REI_CTRL";
|
|
case KnownRegisters::REI_STAT:
|
|
return "REI_STAT";
|
|
case KnownRegisters::BIST_CTRL_0:
|
|
return "BIST_CTRL[0]";
|
|
case KnownRegisters::BIST_CTRL_1:
|
|
return "BIST_CTRL[1]";
|
|
case KnownRegisters::PCIE_CLKMON_RATIO_CFG:
|
|
return "PCIE_CLKMON_RATIO_CFG";
|
|
case KnownRegisters::PCIE_CLKMON_TOLERANCE_CFG:
|
|
return "PCIE_CLKMON_TOLERANCE_CFG";
|
|
case KnownRegisters::PCIE_CLKMON_DEADLINES_CFG:
|
|
return "PCIE_CLKMON_DEADLINES_CFG";
|
|
case KnownRegisters::PCIE_CLK_STAT:
|
|
return "PCIE_CLK_STAT";
|
|
case KnownRegisters::PCIE_CLK_IP:
|
|
return "PCIE_CLK_IP";
|
|
case KnownRegisters::PCIE_CLK_IM:
|
|
return "PCIE_CLK_IM";
|
|
case KnownRegisters::PCIE_WARM_RESET_DELAY:
|
|
return "PCIE_WARM_RESET_DELAY";
|
|
default:
|
|
break;
|
|
|
|
}
|
|
std::stringstream s;
|
|
s << "register[0x" << std::hex << std::setw(6) << std::setfill('0') << (uint32_t) addr << "]";
|
|
return s.str();
|
|
}
|
|
|
|
std::string getAddressRegisterName(uint32_t addr, uint8_t offset) {
|
|
std::stringstream s;
|
|
if (offset) {
|
|
s << getRegisterName(static_cast<KnownRegisters>((uint32_t) KnownRegisters::BSM_ADDR_OFFSET_0 + offset))
|
|
<< " + " << "0x" << std::hex << std::setw(6) << std::setfill('0') << addr;
|
|
} else {
|
|
s << getRegisterName(static_cast<KnownRegisters>(addr));
|
|
}
|
|
return s.str();
|
|
}
|
|
|
|
std::string getAddressRegisterName(const Instruction::AddressWithOffset &address) {
|
|
return getAddressRegisterName(address.address, address.offset);
|
|
}
|
|
|
|
KnownRegisters getScratchRegister(uint32_t offset) {
|
|
return static_cast<KnownRegisters>((uint32_t) KnownRegisters::BSM_SCRATCH_START + offset);
|
|
} |