diff options
author | Angel Pons <th3fanbus@gmail.com> | 2020-06-07 18:31:33 +0200 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2020-06-09 00:26:12 +0000 |
commit | 2f3456a8734d4fb9b4ab492f4bdd7f3b1885706c (patch) | |
tree | 88cf3833c72f93c67010b61d0327c24ac035e749 /src | |
parent | af36b297359a839323f2a9d04625c32d2a3c1437 (diff) |
pci_ops.h: Turn and/or ops into update wrappers
Tested with BUILD_TIMELESS=1, Asus P8Z77-V LX2 does not change.
Change-Id: I2d3779967f357dd380928869c630a1996fdd60ec
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/42147
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/device/pci_ops.h | 90 |
1 files changed, 42 insertions, 48 deletions
diff --git a/src/include/device/pci_ops.h b/src/include/device/pci_ops.h index 680deb9d35..cdf02d6a56 100644 --- a/src/include/device/pci_ops.h +++ b/src/include/device/pci_ops.h @@ -82,122 +82,116 @@ void pci_write_config32(const struct device *dev, u16 reg, u32 val) #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_and_config8(pci_devfn_t dev, u16 reg, u8 andmask) +void pci_update_config8(pci_devfn_t dev, u16 reg, u8 mask, u8 or) #else static __always_inline -void pci_and_config8(const struct device *dev, u16 reg, u8 andmask) +void pci_update_config8(const struct device *dev, u16 reg, u8 mask, u8 or) #endif { - u8 value = pci_read_config8(dev, reg); - pci_write_config8(dev, reg, value & andmask); + u8 reg8; + + reg8 = pci_read_config8(dev, reg); + reg8 &= mask; + reg8 |= or; + pci_write_config8(dev, reg, reg8); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_and_config16(pci_devfn_t dev, u16 reg, u16 andmask) +void pci_update_config16(pci_devfn_t dev, u16 reg, u16 mask, u16 or) #else static __always_inline -void pci_and_config16(const struct device *dev, u16 reg, u16 andmask) +void pci_update_config16(const struct device *dev, u16 reg, u16 mask, u16 or) #endif { - u16 value = pci_read_config16(dev, reg); - pci_write_config16(dev, reg, value & andmask); + u16 reg16; + + reg16 = pci_read_config16(dev, reg); + reg16 &= mask; + reg16 |= or; + pci_write_config16(dev, reg, reg16); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_and_config32(pci_devfn_t dev, u16 reg, u32 andmask) +void pci_update_config32(pci_devfn_t dev, u16 reg, u32 mask, u32 or) #else static __always_inline -void pci_and_config32(const struct device *dev, u16 reg, u32 andmask) +void pci_update_config32(const struct device *dev, u16 reg, u32 mask, u32 or) #endif { - u32 value = pci_read_config32(dev, reg); - pci_write_config32(dev, reg, value & andmask); + u32 reg32; + + reg32 = pci_read_config32(dev, reg); + reg32 &= mask; + reg32 |= or; + pci_write_config32(dev, reg, reg32); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_or_config8(pci_devfn_t dev, u16 reg, u8 ormask) +void pci_and_config8(pci_devfn_t dev, u16 reg, u8 andmask) #else static __always_inline -void pci_or_config8(const struct device *dev, u16 reg, u8 ormask) +void pci_and_config8(const struct device *dev, u16 reg, u8 andmask) #endif { - u8 value = pci_read_config8(dev, reg); - pci_write_config8(dev, reg, value | ormask); + pci_update_config8(dev, reg, andmask, 0); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_or_config16(pci_devfn_t dev, u16 reg, u16 ormask) +void pci_and_config16(pci_devfn_t dev, u16 reg, u16 andmask) #else static __always_inline -void pci_or_config16(const struct device *dev, u16 reg, u16 ormask) +void pci_and_config16(const struct device *dev, u16 reg, u16 andmask) #endif { - u16 value = pci_read_config16(dev, reg); - pci_write_config16(dev, reg, value | ormask); + pci_update_config16(dev, reg, andmask, 0); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_or_config32(pci_devfn_t dev, u16 reg, u32 ormask) +void pci_and_config32(pci_devfn_t dev, u16 reg, u32 andmask) #else static __always_inline -void pci_or_config32(const struct device *dev, u16 reg, u32 ormask) +void pci_and_config32(const struct device *dev, u16 reg, u32 andmask) #endif { - u32 value = pci_read_config32(dev, reg); - pci_write_config32(dev, reg, value | ormask); + pci_update_config32(dev, reg, andmask, 0); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_update_config8(pci_devfn_t dev, u16 reg, u8 mask, u8 or) +void pci_or_config8(pci_devfn_t dev, u16 reg, u8 ormask) #else static __always_inline -void pci_update_config8(const struct device *dev, u16 reg, u8 mask, u8 or) +void pci_or_config8(const struct device *dev, u16 reg, u8 ormask) #endif { - u8 reg8; - - reg8 = pci_read_config8(dev, reg); - reg8 &= mask; - reg8 |= or; - pci_write_config8(dev, reg, reg8); + pci_update_config8(dev, reg, 0xff, ormask); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_update_config16(pci_devfn_t dev, u16 reg, u16 mask, u16 or) +void pci_or_config16(pci_devfn_t dev, u16 reg, u16 ormask) #else static __always_inline -void pci_update_config16(const struct device *dev, u16 reg, u16 mask, u16 or) +void pci_or_config16(const struct device *dev, u16 reg, u16 ormask) #endif { - u16 reg16; - - reg16 = pci_read_config16(dev, reg); - reg16 &= mask; - reg16 |= or; - pci_write_config16(dev, reg, reg16); + pci_update_config16(dev, reg, 0xffff, ormask); } #if ENV_PCI_SIMPLE_DEVICE static __always_inline -void pci_update_config32(pci_devfn_t dev, u16 reg, u32 mask, u32 or) +void pci_or_config32(pci_devfn_t dev, u16 reg, u32 ormask) #else static __always_inline -void pci_update_config32(const struct device *dev, u16 reg, u32 mask, u32 or) +void pci_or_config32(const struct device *dev, u16 reg, u32 ormask) #endif { - u32 reg32; - - reg32 = pci_read_config32(dev, reg); - reg32 &= mask; - reg32 |= or; - pci_write_config32(dev, reg, reg32); + pci_update_config32(dev, reg, 0xffffffff, ormask); } u16 pci_s_find_next_capability(pci_devfn_t dev, u16 cap, u16 last); |