10c0eeff6SMatt Spinler #pragma once 20c0eeff6SMatt Spinler 30c0eeff6SMatt Spinler #include "targeting.hpp" 40c0eeff6SMatt Spinler 5*f78d9042SPatrick Venture #include <memory> 6*f78d9042SPatrick Venture 70c0eeff6SMatt Spinler namespace openpower 80c0eeff6SMatt Spinler { 90c0eeff6SMatt Spinler namespace cfam 100c0eeff6SMatt Spinler { 110c0eeff6SMatt Spinler namespace access 120c0eeff6SMatt Spinler { 130c0eeff6SMatt Spinler 140c0eeff6SMatt Spinler using cfam_address_t = uint16_t; 150c0eeff6SMatt Spinler using cfam_data_t = uint32_t; 160c0eeff6SMatt Spinler using cfam_mask_t = uint32_t; 170c0eeff6SMatt Spinler 180c0eeff6SMatt Spinler /** 190c0eeff6SMatt Spinler * @brief Writes a CFAM (Common FRU Access Macro) register in a P9. 200c0eeff6SMatt Spinler * 210c0eeff6SMatt Spinler * Throws an exception on error. 220c0eeff6SMatt Spinler * 230c0eeff6SMatt Spinler * @param[in] target - The Target to perform the operation on 240c0eeff6SMatt Spinler * @param[in] address - The register address to write to 250c0eeff6SMatt Spinler * @param[in] data - The data to write 260c0eeff6SMatt Spinler */ 270c0eeff6SMatt Spinler void writeReg(const std::unique_ptr<openpower::targeting::Target>& target, 28*f78d9042SPatrick Venture cfam_address_t address, cfam_data_t data); 290c0eeff6SMatt Spinler 300c0eeff6SMatt Spinler /** 310c0eeff6SMatt Spinler * @brief Reads a CFAM (Common FRU Access Macro) register in a P9. 320c0eeff6SMatt Spinler * 330c0eeff6SMatt Spinler * Throws an exception on error. 340c0eeff6SMatt Spinler * 350c0eeff6SMatt Spinler * @param[in] target - The Target to perform the operation on 360c0eeff6SMatt Spinler * @param[in] address - The register address to read 370c0eeff6SMatt Spinler * @return - The register data 380c0eeff6SMatt Spinler */ 39*f78d9042SPatrick Venture cfam_data_t readReg(const std::unique_ptr<openpower::targeting::Target>& target, 400c0eeff6SMatt Spinler cfam_address_t address); 410c0eeff6SMatt Spinler 420c0eeff6SMatt Spinler /** 430c0eeff6SMatt Spinler * @brief Writes a CFAM (Common FRU Access Macro) register in a P9 440c0eeff6SMatt Spinler * using a mask to specify the bits the modify. 450c0eeff6SMatt Spinler * 460c0eeff6SMatt Spinler * Only bits that are set in the mask parameter will be modified. 470c0eeff6SMatt Spinler * 480c0eeff6SMatt Spinler * Throws an exception on error. 490c0eeff6SMatt Spinler * 500c0eeff6SMatt Spinler * @param[in] target - The Target to perform the operation on 510c0eeff6SMatt Spinler * @param[in] address - The register address to write to 520c0eeff6SMatt Spinler * @param[in] data - The data to write 530c0eeff6SMatt Spinler * @param[in] mask - The mask 540c0eeff6SMatt Spinler */ 550c0eeff6SMatt Spinler void writeRegWithMask( 560c0eeff6SMatt Spinler const std::unique_ptr<openpower::targeting::Target>& target, 57*f78d9042SPatrick Venture cfam_address_t address, cfam_data_t data, cfam_mask_t mask); 58*f78d9042SPatrick Venture } // namespace access 59*f78d9042SPatrick Venture } // namespace cfam 60*f78d9042SPatrick Venture } // namespace openpower 61