summaryrefslogtreecommitdiff
path: root/sys/dev/i2c/spdmem.c
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2007-10-18 23:05:21 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2007-10-18 23:05:21 +0000
commite23b5dd03966125edbcd799b8fe0407bfa82d581 (patch)
tree92e0c9bb450fd03295f1fe2b5bfc343e725962e2 /sys/dev/i2c/spdmem.c
parent185138390d7cc449a016b6954dc830517b912ce0 (diff)
Correct tenths of a nanosecond cycle encodings for DDR2,
this makes the PC2-xxxx values show properly in all cases. From giovanni <qgiovanni@gmail.com> tested/ok cnst@ ok deraadt@
Diffstat (limited to 'sys/dev/i2c/spdmem.c')
-rw-r--r--sys/dev/i2c/spdmem.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/dev/i2c/spdmem.c b/sys/dev/i2c/spdmem.c
index bd85651a4fa..1a459b58646 100644
--- a/sys/dev/i2c/spdmem.c
+++ b/sys/dev/i2c/spdmem.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: spdmem.c,v 1.15 2007/10/17 02:35:25 deraadt Exp $ */
+/* $OpenBSD: spdmem.c,v 1.16 2007/10/18 23:05:20 jsg Exp $ */
/* $NetBSD: spdmem.c,v 1.3 2007/09/20 23:09:59 xtraeme Exp $ */
/*
@@ -135,6 +135,10 @@
#define SPDMEM_DDR2_TYPE_REGMASK ((1 << 4) | (1 << 0))
+static const uint8_t ddr2_cycle_tenths[] = {
+ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 25, 33, 66, 75, 0
+};
+
/* Direct Rambus DRAM */
#define SPDMEM_RDR_ROWS_COLS 0x00
@@ -327,8 +331,8 @@ spdmem_attach(struct device *parent, struct device *self, void *aux)
cycle_time = (s->sm_data[SPDMEM_DDR_CYCLE] >> 4) * 100 +
(s->sm_data[SPDMEM_DDR_CYCLE] & 0x0f) * 10;
else if (s->sm_type == SPDMEM_MEMTYPE_DDR2SDRAM) {
- cycle_time = (s->sm_data[SPDMEM_DDR_CYCLE] >> 4) * 100 +
- (s->sm_data[SPDMEM_DDR_CYCLE] & 0x0f);
+ cycle_time = (s->sm_data[SPDMEM_DDR2_CYCLE] >> 4) * 100 +
+ ddr2_cycle_tenths[(s->sm_data[SPDMEM_DDR2_CYCLE] & 0x0f)];
}
if (cycle_time != 0) {