hw/pci-host/bonito: Trace PCI config accesses smaller than 32-bit
Per the datasheet section "5.7.5. Accessing PCI configuration space" the address must be 32-bit aligned. Trace eventual accesses not aligned to 32-bit. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20210624202747.1433023-3-f4bug@amsat.org>
This commit is contained in:
parent
3f178b8d8c
commit
300491f988
@ -52,6 +52,7 @@
|
|||||||
#include "hw/misc/unimp.h"
|
#include "hw/misc/unimp.h"
|
||||||
#include "hw/registerfields.h"
|
#include "hw/registerfields.h"
|
||||||
#include "qom/object.h"
|
#include "qom/object.h"
|
||||||
|
#include "trace.h"
|
||||||
|
|
||||||
/* #define DEBUG_BONITO */
|
/* #define DEBUG_BONITO */
|
||||||
|
|
||||||
@ -185,6 +186,7 @@ FIELD(BONGENCFG, PCIQUEUE, 12, 1)
|
|||||||
#define BONITO_PCICONF_IDSEL_OFFSET 11
|
#define BONITO_PCICONF_IDSEL_OFFSET 11
|
||||||
#define BONITO_PCICONF_FUN_MASK 0x700 /* [10:8] */
|
#define BONITO_PCICONF_FUN_MASK 0x700 /* [10:8] */
|
||||||
#define BONITO_PCICONF_FUN_OFFSET 8
|
#define BONITO_PCICONF_FUN_OFFSET 8
|
||||||
|
#define BONITO_PCICONF_REG_MASK_DS (~3) /* Per datasheet */
|
||||||
#define BONITO_PCICONF_REG_MASK 0xFC
|
#define BONITO_PCICONF_REG_MASK 0xFC
|
||||||
#define BONITO_PCICONF_REG_OFFSET 0
|
#define BONITO_PCICONF_REG_OFFSET 0
|
||||||
|
|
||||||
@ -495,6 +497,9 @@ static void bonito_spciconf_write(void *opaque, hwaddr addr, uint64_t val,
|
|||||||
if (pciaddr == 0xffffffff) {
|
if (pciaddr == 0xffffffff) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (addr & ~BONITO_PCICONF_REG_MASK_DS) {
|
||||||
|
trace_bonito_spciconf_small_access(addr, size);
|
||||||
|
}
|
||||||
|
|
||||||
/* set the pci address in s->config_reg */
|
/* set the pci address in s->config_reg */
|
||||||
phb->config_reg = (pciaddr) | (1u << 31);
|
phb->config_reg = (pciaddr) | (1u << 31);
|
||||||
@ -521,6 +526,9 @@ static uint64_t bonito_spciconf_read(void *opaque, hwaddr addr, unsigned size)
|
|||||||
if (pciaddr == 0xffffffff) {
|
if (pciaddr == 0xffffffff) {
|
||||||
return MAKE_64BIT_MASK(0, size * 8);
|
return MAKE_64BIT_MASK(0, size * 8);
|
||||||
}
|
}
|
||||||
|
if (addr & ~BONITO_PCICONF_REG_MASK_DS) {
|
||||||
|
trace_bonito_spciconf_small_access(addr, size);
|
||||||
|
}
|
||||||
|
|
||||||
/* set the pci address in s->config_reg */
|
/* set the pci address in s->config_reg */
|
||||||
phb->config_reg = (pciaddr) | (1u << 31);
|
phb->config_reg = (pciaddr) | (1u << 31);
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
# See docs/devel/tracing.rst for syntax documentation.
|
# See docs/devel/tracing.rst for syntax documentation.
|
||||||
|
|
||||||
|
# bonito.c
|
||||||
|
bonito_spciconf_small_access(uint64_t addr, unsigned size) "PCI config address is smaller then 32-bit, addr: 0x%"PRIx64", size: %u"
|
||||||
|
|
||||||
# grackle.c
|
# grackle.c
|
||||||
grackle_set_irq(int irq_num, int level) "set_irq num %d level %d"
|
grackle_set_irq(int irq_num, int level) "set_irq num %d level %d"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user