* [Qemu-devel] [4220] Optimize consecutive CFI02 writes by remapping memory lazily ( Jan Kiszka).
@ 2008-04-16 23:58 Andrzej Zaborowski
0 siblings, 0 replies; only message in thread
From: Andrzej Zaborowski @ 2008-04-16 23:58 UTC (permalink / raw)
To: qemu-devel
Revision: 4220
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4220
Author: balrog
Date: 2008-04-16 23:58:02 +0000 (Wed, 16 Apr 2008)
Log Message:
-----------
Optimize consecutive CFI02 writes by remapping memory lazily (Jan Kiszka).
Modified Paths:
--------------
trunk/hw/pflash_cfi02.c
Modified: trunk/hw/pflash_cfi02.c
===================================================================
--- trunk/hw/pflash_cfi02.c 2008-04-16 23:45:36 UTC (rev 4219)
+++ trunk/hw/pflash_cfi02.c 2008-04-16 23:58:02 UTC (rev 4220)
@@ -70,6 +70,7 @@
QEMUTimer *timer;
ram_addr_t off;
int fl_mem;
+ int rom_mode;
void *storage;
};
@@ -80,6 +81,7 @@
if (rom_mode)
phys_offset |= pfl->off | IO_MEM_ROMD;
+ pfl->rom_mode = rom_mode;
for (i = 0; i < pfl->mappings; i++)
cpu_register_physical_memory(pfl->base + i * pfl->chip_len,
@@ -110,7 +112,13 @@
DPRINTF("%s: offset " TARGET_FMT_lx "\n", __func__, offset);
ret = -1;
- offset -= pfl->base;
+ if (pfl->rom_mode) {
+ offset -= (uint32_t)(long)pfl->storage;
+ /* Lazy reset of to ROMD mode */
+ if (pfl->wcycle == 0)
+ pflash_register_memory(pfl, 1);
+ } else
+ offset -= pfl->base;
offset &= pfl->chip_len - 1;
boff = offset & 0xFF;
if (pfl->width == 2)
@@ -224,8 +232,6 @@
uint8_t *p;
uint8_t cmd;
- /* WARNING: when the memory area is in ROMD mode, the offset is a
- ram offset, not a physical address */
cmd = value;
if (pfl->cmd != 0xA0 && cmd == 0xF0) {
#if 0
@@ -236,7 +242,9 @@
}
DPRINTF("%s: offset " TARGET_FMT_lx " %08x %d %d\n", __func__,
offset, value, width, pfl->wcycle);
- if (pfl->wcycle == 0)
+ /* WARNING: when the memory area is in ROMD mode, the offset is a
+ ram offset, not a physical address */
+ if (pfl->rom_mode)
offset -= (uint32_t)(long)pfl->storage;
else
offset -= pfl->base;
@@ -251,8 +259,9 @@
boff = boff >> 2;
switch (pfl->wcycle) {
case 0:
- /* Set the device in I/O access mode */
- pflash_register_memory(pfl, 0);
+ /* Set the device in I/O access mode if required */
+ if (pfl->rom_mode)
+ pflash_register_memory(pfl, 0);
/* We're in read mode */
check_unlock0:
if (boff == 0x55 && cmd == 0x98) {
@@ -439,7 +448,6 @@
/* Reset flash */
reset_flash:
- pflash_register_memory(pfl, 1);
pfl->bypass = 0;
pfl->wcycle = 0;
pfl->cmd = 0;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-04-16 23:58 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-16 23:58 [Qemu-devel] [4220] Optimize consecutive CFI02 writes by remapping memory lazily ( Jan Kiszka) Andrzej Zaborowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).