xbox: smbus port is set as a bar on the bridge

This commit is contained in:
espes 2012-10-20 20:47:03 +11:00
parent d823f5802e
commit 77033f9e10
2 changed files with 37 additions and 7 deletions

View File

@ -165,16 +165,44 @@ i2c_bus *mcpx_smbus_init(DeviceState *host, PCIBus *bus)
#define MCPX_SMBUS_BASE_BAR 1
static void mcpx_smb_ioport_writeb(void *opaque, target_phys_addr_t addr,
uint64_t val, unsigned size)
{
MCPX_SMBState *s = opaque;
uint64_t offset = addr - s->dev.io_regions[MCPX_SMBUS_BASE_BAR].addr;
amd756_smb_ioport_writeb(&s->smb, offset, val);
}
static uint64_t mcpx_smb_ioport_readb(void *opaque, target_phys_addr_t addr,
unsigned size)
{
MCPX_SMBState *s = opaque;
uint64_t offset = addr - s->dev.io_regions[MCPX_SMBUS_BASE_BAR].addr;
return amd756_smb_ioport_readb(&s->smb, offset);
}
static const MemoryRegionOps mcpx_smbus_ops = {
.read = mcpx_smb_ioport_readb,
.write = mcpx_smb_ioport_writeb,
.endianness = DEVICE_LITTLE_ENDIAN,
.impl = {
.min_access_size = 1,
.max_access_size = 1,
},
};
static int mcpx_smbus_initfn(PCIDevice *dev)
{
MCPX_SMBState *s = MCPX_SMBUS_DEVICE(dev);
//presumably configurable, but can't find docs...
const uint32_t smb_io_base = 0xc000;
register_ioport_write(smb_io_base, 64, 1, amd756_smb_ioport_writeb, &s->smb);
register_ioport_read(smb_io_base, 64, 1, amd756_smb_ioport_readb, &s->smb);
memory_region_init_io(&s->smb_bar, &mcpx_smbus_ops,
s, "mcpx-smbus-bar", 32);
pci_register_bar(dev, MCPX_SMBUS_BASE_BAR, PCI_BASE_ADDRESS_SPACE_IO,
&s->smb_bar);
amd756_smbus_init(&dev->qdev, &s->smb);
return 0;
@ -199,13 +227,14 @@ static void mcpx_smbus_class_init(ObjectClass *klass, void *data)
static const TypeInfo mcpx_smbus_info = {
.name = "mcpx-smbus",
.parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(PCIDevice),
.instance_size = sizeof(MCPX_SMBState),
.class_init = mcpx_smbus_class_init,
};
#define MCPX_LPC_PMBASE 0x84
#define MCPX_LPC_PMBASE_ADDRESS_MASK 0xff00
#define MCPX_LPC_PMBASE_DEFAULT 0x1
@ -284,7 +313,7 @@ static void mcpx_lpc_class_init(ObjectClass *klass, void *data)
static const TypeInfo mcpx_lpc_info = {
.name = "mcpx-lpc",
.parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(PCIDevice),
.instance_size = sizeof(MCPX_LPCState),
.class_init = mcpx_lpc_class_init,
};

View File

@ -44,6 +44,7 @@ typedef struct MCPX_SMBState {
PCIDevice dev;
AMD756SMBus smb;
MemoryRegion smb_bar;
} MCPX_SMBState;
typedef struct MCPX_LPCState {