From 23b7f089207e44244ecc5757a2be5263db08581b Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Tue, 28 Apr 2015 11:52:42 +0300 Subject: [PATCH] lib: add 16 and 8 bit versions of INREG and OUTREG Add INREG8, INREG16, OUTREG8, and OUTREG16. While at it, cleanup doc comments of INREG and OUTREG. Signed-off-by: Jani Nikula --- lib/intel_io.h | 4 +++ lib/intel_mmio.c | 77 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/lib/intel_io.h b/lib/intel_io.h index 04aa3fd4..1c3b4445 100644 --- a/lib/intel_io.h +++ b/lib/intel_io.h @@ -43,7 +43,11 @@ void intel_register_write(uint32_t reg, uint32_t val); int intel_register_access_needs_fakewake(void); uint32_t INREG(uint32_t reg); +uint16_t INREG16(uint32_t reg); +uint8_t INREG8(uint32_t reg); void OUTREG(uint32_t reg, uint32_t val); +void OUTREG16(uint32_t reg, uint16_t val); +void OUTREG8(uint32_t reg, uint8_t val); /* sideband access functions from intel_iosf.c */ uint32_t intel_dpio_reg_read(uint32_t reg, int phy); diff --git a/lib/intel_mmio.c b/lib/intel_mmio.c index 9a2ee27b..be8f7d77 100644 --- a/lib/intel_mmio.c +++ b/lib/intel_mmio.c @@ -311,8 +311,8 @@ write_out: * INREG: * @reg: register offset * - * 32-bit read of the register at @offset. This function only works when the new - * register access helper is initialized with intel_register_access_init(). + * 32-bit read of the register at offset @reg. This function only works when the + * new register access helper is initialized with intel_register_access_init(). * * This function directly accesses the #mmio without safety checks. * @@ -325,12 +325,47 @@ uint32_t INREG(uint32_t reg) } /** - * OUTRET: + * INREG16: + * @reg: register offset + * + * 16-bit read of the register at offset @reg. This function only works when the + * new register access helper is initialized with intel_register_access_init(). + * + * This function directly accesses the #mmio without safety checks. + * + * Returns: + * The value read from the register. + */ +uint16_t INREG16(uint32_t reg) +{ + return *(volatile uint16_t *)((volatile char *)mmio + reg); +} + +/** + * INREG8: + * @reg: register offset + * + * 8-bit read of the register at offset @reg. This function only works when the + * new register access helper is initialized with intel_register_access_init(). + * + * This function directly accesses the #mmio without safety checks. + * + * Returns: + * The value read from the register. + */ +uint8_t INREG8(uint32_t reg) +{ + return *((volatile uint8_t *)mmio + reg); +} + +/** + * OUTREG: * @reg: register offset * @val: value to write * - * 32-bit write to the register at @offset. This function only works when the new - * register access helper is initialized with intel_register_access_init(). + * 32-bit write of @val to the register at offset @reg. This function only works + * when the new register access helper is initialized with + * intel_register_access_init(). * * This function directly accesses the #mmio without safety checks. */ @@ -338,3 +373,35 @@ void OUTREG(uint32_t reg, uint32_t val) { *(volatile uint32_t *)((volatile char *)mmio + reg) = val; } + +/** + * OUTREG16: + * @reg: register offset + * @val: value to write + * + * 16-bit write of @val to the register at offset @reg. This function only works + * when the new register access helper is initialized with + * intel_register_access_init(). + * + * This function directly accesses the #mmio without safety checks. + */ +void OUTREG16(uint32_t reg, uint16_t val) +{ + *(volatile uint16_t *)((volatile char *)mmio + reg) = val; +} + +/** + * OUTREG8: + * @reg: register offset + * @val: value to write + * + * 8-bit write of @val to the register at offset @reg. This function only works + * when the new register access helper is initialized with + * intel_register_access_init(). + * + * This function directly accesses the #mmio without safety checks. + */ +void OUTREG8(uint32_t reg, uint8_t val) +{ + *((volatile uint8_t *)mmio + reg) = val; +}