diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2018-01-12 09:52:58 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2018-01-12 09:52:58 +0000 |
| commit | 36b5e43af8561bf1e381022a5010ff0d5cc3be17 (patch) | |
| tree | 21965c6e60a2e29664b7685e52feacdb6a86e0bd /hw/i2c | |
| parent | 997eba28a3ed5400a80f754bf3a1c8044b75b9ff (diff) | |
| parent | acc95bc85036c443da8bf7159a77edf9f00dcd80 (diff) | |
| download | focaccia-qemu-36b5e43af8561bf1e381022a5010ff0d5cc3be17.tar.gz focaccia-qemu-36b5e43af8561bf1e381022a5010ff0d5cc3be17.zip | |
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging
pc, pci, virtio: features, fixes, cleanups A bunch of fixes, cleanus and new features all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Thu 11 Jan 2018 20:04:57 GMT # gpg: using RSA key 0x281F0DB8D28D5469 # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: (23 commits) smbus: do not immediately complete commands dump-guest-memory.py: fix "You can't do that without a process to debug" virtio-pci: Don't force Subsystem Vendor ID = Vendor ID intel_iommu: fix error param in string intel_iommu: remove X86_IOMMU_PCI_DEVFN_MAX vhost-user: document memory accesses vhost-user: fix indentation in protocol specification hw/pci-host/xilinx: QOM'ify the AXI-PCIe host bridge hw/pci-host/piix: QOM'ify the IGD Passthrough host bridge tests/pxe-test: Add some extra tests tests/pxe-test: Test net booting over IPv6 in some cases tests/pxe-test: Use table of testcases rather than open-coding tests/pxe-test: Remove unnecessary special case test functions virtio_error: don't invoke status callbacks pci: Eliminate pci_find_primary_bus() pci: Eliminate redundant PCIDevice::bus pointer pci: Add pci_dev_bus_num() helper pci: Move bridge data structures from pci_bus.h to pci_bridge.h pci: Rename root bus initialization functions for clarity tests: add test to check VirtQueue object ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/i2c')
| -rw-r--r-- | hw/i2c/pm_smbus.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index a044dd1b27..0d26e0f6b5 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -62,6 +62,9 @@ static void smb_transaction(PMSMBus *s) I2CBus *bus = s->smbus; int ret; + assert(s->smb_stat & STS_HOST_BUSY); + s->smb_stat &= ~STS_HOST_BUSY; + SMBUS_DPRINTF("SMBus trans addr=0x%02x prot=0x%02x\n", addr, prot); /* Transaction isn't exec if STS_DEV_ERR bit set */ if ((s->smb_stat & STS_DEV_ERR) != 0) { @@ -134,6 +137,13 @@ error: } +static void smb_transaction_start(PMSMBus *s) +{ + /* Do not execute immediately the command ; it will be + * executed when guest will read SMB_STAT register */ + s->smb_stat |= STS_HOST_BUSY; +} + static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, unsigned width) { @@ -149,7 +159,7 @@ static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, case SMBHSTCNT: s->smb_ctl = val; if (val & 0x40) - smb_transaction(s); + smb_transaction_start(s); break; case SMBHSTCMD: s->smb_cmd = val; @@ -181,6 +191,10 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) switch(addr) { case SMBHSTSTS: val = s->smb_stat; + if (s->smb_stat & STS_HOST_BUSY) { + /* execute command now */ + smb_transaction(s); + } break; case SMBHSTCNT: s->smb_index = 0; |