mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
hw/pci-host/designware: Use deposit/extract API
Prefer the safer (less bug-prone) deposit/extract API to access lower/upper 32-bit of 64-bit registers. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org> Message-Id: <20250331152041.74533-3-philmd@linaro.org>
This commit is contained in:
parent
edbb66bb30
commit
6970f91ac7
1 changed files with 17 additions and 31 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
|
#include "qemu/bitops.h"
|
||||||
#include "hw/pci/msi.h"
|
#include "hw/pci/msi.h"
|
||||||
#include "hw/pci/pci_bridge.h"
|
#include "hw/pci/pci_bridge.h"
|
||||||
#include "hw/pci/pci_host.h"
|
#include "hw/pci/pci_host.h"
|
||||||
|
@ -162,11 +163,9 @@ designware_pcie_root_config_read(PCIDevice *d, uint32_t address, int len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_MSI_ADDR_LO:
|
case DESIGNWARE_PCIE_MSI_ADDR_LO:
|
||||||
val = root->msi.base;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_MSI_ADDR_HI:
|
case DESIGNWARE_PCIE_MSI_ADDR_HI:
|
||||||
val = root->msi.base >> 32;
|
val = extract64(root->msi.base,
|
||||||
|
address == DESIGNWARE_PCIE_MSI_ADDR_LO ? 0 : 32, 32);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_MSI_INTR0_ENABLE:
|
case DESIGNWARE_PCIE_MSI_INTR0_ENABLE:
|
||||||
|
@ -190,19 +189,16 @@ designware_pcie_root_config_read(PCIDevice *d, uint32_t address, int len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_LOWER_BASE:
|
case DESIGNWARE_PCIE_ATU_LOWER_BASE:
|
||||||
val = viewport->base;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_UPPER_BASE:
|
case DESIGNWARE_PCIE_ATU_UPPER_BASE:
|
||||||
val = viewport->base >> 32;
|
val = extract64(viewport->base,
|
||||||
|
address == DESIGNWARE_PCIE_ATU_LOWER_BASE ? 0 : 32, 32);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_LOWER_TARGET:
|
case DESIGNWARE_PCIE_ATU_LOWER_TARGET:
|
||||||
val = viewport->target;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_UPPER_TARGET:
|
case DESIGNWARE_PCIE_ATU_UPPER_TARGET:
|
||||||
val = viewport->target >> 32;
|
val = extract64(viewport->target,
|
||||||
|
address == DESIGNWARE_PCIE_ATU_LOWER_TARGET ? 0 : 32,
|
||||||
|
32);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_LIMIT:
|
case DESIGNWARE_PCIE_ATU_LIMIT:
|
||||||
|
@ -321,14 +317,10 @@ static void designware_pcie_root_config_write(PCIDevice *d, uint32_t address,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_MSI_ADDR_LO:
|
case DESIGNWARE_PCIE_MSI_ADDR_LO:
|
||||||
root->msi.base &= 0xFFFFFFFF00000000ULL;
|
|
||||||
root->msi.base |= val;
|
|
||||||
designware_pcie_root_update_msi_mapping(root);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_MSI_ADDR_HI:
|
case DESIGNWARE_PCIE_MSI_ADDR_HI:
|
||||||
root->msi.base &= 0x00000000FFFFFFFFULL;
|
root->msi.base = deposit64(root->msi.base,
|
||||||
root->msi.base |= (uint64_t)val << 32;
|
address == DESIGNWARE_PCIE_MSI_ADDR_LO
|
||||||
|
? 0 : 32, 32, val);
|
||||||
designware_pcie_root_update_msi_mapping(root);
|
designware_pcie_root_update_msi_mapping(root);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -355,23 +347,17 @@ static void designware_pcie_root_config_write(PCIDevice *d, uint32_t address,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_LOWER_BASE:
|
case DESIGNWARE_PCIE_ATU_LOWER_BASE:
|
||||||
viewport->base &= 0xFFFFFFFF00000000ULL;
|
|
||||||
viewport->base |= val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_UPPER_BASE:
|
case DESIGNWARE_PCIE_ATU_UPPER_BASE:
|
||||||
viewport->base &= 0x00000000FFFFFFFFULL;
|
viewport->base = deposit64(root->msi.base,
|
||||||
viewport->base |= (uint64_t)val << 32;
|
address == DESIGNWARE_PCIE_ATU_LOWER_BASE
|
||||||
|
? 0 : 32, 32, val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_LOWER_TARGET:
|
case DESIGNWARE_PCIE_ATU_LOWER_TARGET:
|
||||||
viewport->target &= 0xFFFFFFFF00000000ULL;
|
|
||||||
viewport->target |= val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_UPPER_TARGET:
|
case DESIGNWARE_PCIE_ATU_UPPER_TARGET:
|
||||||
viewport->target &= 0x00000000FFFFFFFFULL;
|
viewport->target = deposit64(root->msi.base,
|
||||||
viewport->target |= (uint64_t)val << 32;
|
address == DESIGNWARE_PCIE_ATU_LOWER_TARGET
|
||||||
|
? 0 : 32, 32, val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DESIGNWARE_PCIE_ATU_LIMIT:
|
case DESIGNWARE_PCIE_ATU_LIMIT:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue