Peter Stuge wrote:
> enable_flash_geodelx() yes.
>
> Please send a patch! Check out
> http://linuxbios.org/Development_Guidelines
Please have a look at the attached patch.
I've tested it first with a bunch of printf lines in between the
read/write steps and it looked good. The 'production' version comes
without the printfs, but with some sanity testing which works fine here.
cheers,
Ingmar
Index: chipset_enable.c
===================================================================
--- chipset_enable.c (revision 2744)
+++ chipset_enable.c (working copy)
@@ -11,9 +11,15 @@
*
*/
+#define _LARGEFILE64_SOURCE
#include <stdio.h>
#include <pci/pci.h>
#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
#include "flash.h"
#include "debug.h"
@@ -414,6 +420,45 @@
return 0;
}
+static int enable_flash_geodelx(struct pci_dev *dev, char *name)
+{
+ /* note: needs kernel support for /dev/cpu/0/msr. Compile support into
+ * the kernel or create the msr kernel module and load it before
+ * running flashrom !
+ * note 2: make sure the device node /dev/cpu/0/msr c 202 0 exists!
+ */
+
+ unsigned char buf[8];
+ int fd_msr;
+ unsigned long addr = 0x1808;
+ unsigned char wrbuf[] = { 0x00, 0xbf, 0xf7, 0x10, 0x02, 0x80, 0xff, 0x22};
+
+ fd_msr = open("/dev/cpu/0/msr", O_RDONLY);
+ if (fd_msr == -1)
+ {
+ fprintf(stderr, "ERROR: Cannot open /dev/cpu/0/msr. aborting\n");
+ exit(1);
+ }
+ lseek64(fd_msr, (off64_t)addr, SEEK_SET);
+ read(fd_msr, buf, 8);
+ close(fd_msr);
+
+ fd_msr = open("/dev/cpu/0/msr", O_WRONLY);
+ lseek64(fd_msr, (off64_t)addr, SEEK_SET);
+ write(fd_msr, wrbuf, 8);
+ close(fd_msr);
+
+ fd_msr = open("/dev/cpu/0/msr", O_RDONLY);
+ lseek64(fd_msr, (off64_t)addr, SEEK_SET);
+ read(fd_msr, buf, 8);
+ close(fd_msr);
+
+ if (memcmp(buf, wrbuf, 8))
+ return -1;
+
+ return 0;
+}
+
typedef struct penable {
unsigned short vendor, device;
char *name;
@@ -473,6 +518,7 @@
{0x1002, 0x4377, "ATI SB400", enable_flash_sb400}, /* ATI Technologies Inc IXP SB400 PCI-ISA Bridge (rev 80) */
{0x1166, 0x0205, "Broadcom HT-1000", enable_flash_ht1000},
+ {0x1022, 0x2090, "AMD Geode LX", enable_flash_geodelx},
};
/*
--
linuxbios mailing list
[email protected]
http://www.linuxbios.org/mailman/listinfo/linuxbios