From patchwork Sun Dec 2 17:19:59 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [3/4] hw/ds1338.c: ensure OSF can only be cleared From: Antoine Mathys X-Patchwork-Id: 203233 Message-Id: <50BB8DBF.5030505@gmail.com> To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, paul@codesourcery.com Date: Sun, 02 Dec 2012 18:19:59 +0100 Per the datasheet, the OSF bit in the control register can only be cleared. Attempts to set it have no effect. Implement this. Signed-off-by: Antoine Mathys --- hw/ds1338.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/ds1338.c b/hw/ds1338.c index 1fb152e..f3c6bc5 100644 --- a/hw/ds1338.c +++ b/hw/ds1338.c @@ -160,7 +160,12 @@ static int ds1338_send(I2CSlave *i2c, uint8_t data) } s->offset = qemu_timedate_diff(&now); } else if (s->ptr == 7) { - /* Control register. Currently ignored. */ + /* Control register. */ + + /* Attempting to write the OSF flag to logic 1 leaves the + value unchanged. */ + data = (data & 0xDF) | (data & s->nvram[s->ptr] & 0x20); + s->nvram[s->ptr] = data; } else { s->nvram[s->ptr] = data;