diff options
author | Aaron Durbin <adurbin@chromium.org> | 2013-10-31 11:58:32 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@google.com> | 2014-02-27 06:35:44 +0100 |
commit | 4a082c669c50e5ccca51069b47a928be20d0f8c0 (patch) | |
tree | 7570b066b3924edf569974a8348363f6db4a8ba9 | |
parent | bc69ae9823e9260bee6f2db557a6d26c683f4ad2 (diff) | |
download | coreboot-4a082c669c50e5ccca51069b47a928be20d0f8c0.tar.xz |
baytrail: use common code for iosf accessors
The same sequence is used regardless of the port
being read or written. Therefore, use the same
implementation for reading or writing to a port.
BUG=None
BRANCH=None
TEST=Built and booted through depthcharge. Dev and recovery
screens still work. Nothing bizarre in console output.
Change-Id: I1a64b54b50472fa7d601e199653eb4a76accf910
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/175441
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: http://review.coreboot.org/4922
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Tested-by: build bot (Jenkins)
-rw-r--r-- | src/soc/intel/baytrail/iosf.c | 115 |
1 files changed, 41 insertions, 74 deletions
diff --git a/src/soc/intel/baytrail/iosf.c b/src/soc/intel/baytrail/iosf.c index 8016446338..a7f7a905bc 100644 --- a/src/soc/intel/baytrail/iosf.c +++ b/src/soc/intel/baytrail/iosf.c @@ -42,35 +42,42 @@ static inline uint32_t read_iosf_reg(int reg) } #endif -uint32_t iosf_bunit_read(int reg) +/* Common sequences for all the port accesses. */ +static uint32_t iosf_read_port(uint32_t cr, int reg) { - uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_BUNIT) | - IOSF_PORT(IOSF_PORT_BUNIT) | IOSF_REG(reg) | IOSF_BYTE_EN; - + cr |= IOSF_REG(reg) | IOSF_BYTE_EN; write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); write_iosf_reg(MCR_REG, cr); return read_iosf_reg(MDR_REG); } -void iosf_bunit_write(int reg, uint32_t val) +static void iosf_write_port(uint32_t cr, int reg, uint32_t val) { - uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_BUNIT) | - IOSF_PORT(IOSF_PORT_BUNIT) | IOSF_REG(reg) | IOSF_BYTE_EN; - + cr |= IOSF_REG(reg) | IOSF_BYTE_EN; write_iosf_reg(MDR_REG, val); write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); write_iosf_reg(MCR_REG, cr); } +uint32_t iosf_bunit_read(int reg) +{ + uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_BUNIT) | + IOSF_PORT(IOSF_PORT_BUNIT); + return iosf_read_port(cr, reg); +} + +void iosf_bunit_write(int reg, uint32_t val) +{ + uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_BUNIT) | + IOSF_PORT(IOSF_PORT_BUNIT); + iosf_write_port(cr, reg, val); +} + uint32_t iosf_dunit_read(int reg) { uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_SYSMEMC) | - IOSF_PORT(IOSF_PORT_SYSMEMC) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); - return read_iosf_reg(MDR_REG); + IOSF_PORT(IOSF_PORT_SYSMEMC); + return iosf_read_port(cr, reg); } uint32_t iosf_dunit_ch0_read(int reg) @@ -81,109 +88,69 @@ uint32_t iosf_dunit_ch0_read(int reg) uint32_t iosf_dunit_ch1_read(int reg) { uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_SYSMEMC) | - IOSF_PORT(IOSF_PORT_DUNIT_CH1) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); - return read_iosf_reg(MDR_REG); + IOSF_PORT(IOSF_PORT_DUNIT_CH1); + return iosf_read_port(cr, reg); } void iosf_dunit_write(int reg, uint32_t val) { uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_SYSMEMC) | - IOSF_PORT(IOSF_PORT_SYSMEMC) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MDR_REG, val); - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); + IOSF_PORT(IOSF_PORT_SYSMEMC); + iosf_write_port(cr, reg, val); } uint32_t iosf_punit_read(int reg) { uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_PMC) | - IOSF_PORT(IOSF_PORT_PMC) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); - return read_iosf_reg(MDR_REG); + IOSF_PORT(IOSF_PORT_PMC); + return iosf_read_port(cr, reg); } void iosf_punit_write(int reg, uint32_t val) { uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_PMC) | - IOSF_PORT(IOSF_PORT_PMC) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MDR_REG, val); - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); + IOSF_PORT(IOSF_PORT_PMC); + iosf_write_port(cr, reg, val); } uint32_t iosf_usbphy_read(int reg) { uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_USBPHY) | - IOSF_PORT(IOSF_PORT_USBPHY) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); - return read_iosf_reg(MDR_REG); + IOSF_PORT(IOSF_PORT_USBPHY); + return iosf_read_port(cr, reg); } void iosf_usbphy_write(int reg, uint32_t val) { uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_USBPHY) | - IOSF_PORT(IOSF_PORT_USBPHY) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MDR_REG, val); - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); + IOSF_PORT(IOSF_PORT_USBPHY); + return iosf_write_port(cr, reg, val); } uint32_t iosf_ushphy_read(int reg) { uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_USHPHY) | - IOSF_PORT(IOSF_PORT_USHPHY) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); - return read_iosf_reg(MDR_REG); + IOSF_PORT(IOSF_PORT_USHPHY); + return iosf_read_port(cr, reg); } void iosf_ushphy_write(int reg, uint32_t val) { uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_USHPHY) | - IOSF_PORT(IOSF_PORT_USHPHY) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MDR_REG, val); - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); + IOSF_PORT(IOSF_PORT_USHPHY); + return iosf_write_port(cr, reg, val); } uint32_t iosf_lpss_read(int reg) { uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_LPSS) | - IOSF_PORT(IOSF_PORT_LPSS) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); - return read_iosf_reg(MDR_REG); + IOSF_PORT(IOSF_PORT_LPSS); + return iosf_read_port(cr, reg); } void iosf_lpss_write(int reg, uint32_t val) { uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_LPSS) | - IOSF_PORT(IOSF_PORT_LPSS) | IOSF_REG(reg) | - IOSF_BYTE_EN; - - write_iosf_reg(MDR_REG, val); - write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); - write_iosf_reg(MCR_REG, cr); + IOSF_PORT(IOSF_PORT_LPSS); + return iosf_write_port(cr, reg, val); } |