/** * Write a PCIe config space register indirectly. This is used for * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???. * * @pcie_port: PCIe port to write to * @cfg_offset: Address to write * @val: Value to write */ static void cvmx_pcie_cfgx_write(int pcie_port, uint32_t cfg_offset, uint32_t val) { union cvmx_pescx_cfg_wr pescx_cfg_wr; pescx_cfg_wr.u64 = 0; pescx_cfg_wr.s.addr = cfg_offset; pescx_cfg_wr.s.data = val; cvmx_write_csr(CVMX_PESCX_CFG_WR(pcie_port), pescx_cfg_wr.u64); }
/** * Write a PCIe config space register indirectly. This is used for * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???. * * @pcie_port: PCIe port to write to * @cfg_offset: Address to write * @val: Value to write */ static void cvmx_pcie_cfgx_write(int pcie_port, uint32_t cfg_offset, uint32_t val) { if (octeon_has_feature(OCTEON_FEATURE_NPEI)) { union cvmx_pescx_cfg_wr pescx_cfg_wr; pescx_cfg_wr.u64 = 0; pescx_cfg_wr.s.addr = cfg_offset; pescx_cfg_wr.s.data = val; cvmx_write_csr(CVMX_PESCX_CFG_WR(pcie_port), pescx_cfg_wr.u64); } else { union cvmx_pemx_cfg_wr pemx_cfg_wr; pemx_cfg_wr.u64 = 0; pemx_cfg_wr.s.addr = cfg_offset; pemx_cfg_wr.s.data = val; cvmx_write_csr(CVMX_PEMX_CFG_WR(pcie_port), pemx_cfg_wr.u64); } }