diff --git a/src/chipset/via_apollo.c b/src/chipset/via_apollo.c index 7c1203c3a..20e2c7f74 100644 --- a/src/chipset/via_apollo.c +++ b/src/chipset/via_apollo.c @@ -444,7 +444,7 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv) apollo_smram_map(dev, 0, 0x000a0000, 0x00020000, 0); break; } - else + else if (dev->id == VIA_595) switch (val & 0x03) { case 0x00: apollo_smram_map(dev, 1, 0x000a0000, 0x00020000, 0); @@ -468,6 +468,12 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv) default: break; } + else { + smram_enable(dev->smram, 0x000a0000, 0x000a0000, 0x00020000, + (dev->pci_conf[0x6d] & 0x10) && (dev->pci_conf[0x63] & 0x01), + dev->pci_conf[0x63] & 0x01); + flushmmucache(); + } break; case 0x65: if (dev->id == VIA_585) @@ -532,6 +538,13 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv) dev->pci_conf[0x6d] = (dev->pci_conf[0x6d] & ~0x7f) | (val & 0x7f); else dev->pci_conf[0x6d] = val; + if (dev->id == VIA_585) { + smram_disable_all(); + smram_enable(dev->smram, 0x000a0000, 0x000a0000, 0x00020000, + (dev->pci_conf[0x6d] & 0x10) && (dev->pci_conf[0x63] & 0x01), + dev->pci_conf[0x63] & 0x01); + flushmmucache(); + } break; case 0x6e: if ((dev->id == VIA_595) || (dev->id == VIA_694))