Patchwork EPIA halting after vt8601 init

login
register
about
Submitter Myles Watson
Date 2010-11-04 16:09:14
Message ID <AANLkTin4tMRFdj9PkjShFRrod4cNE2dPA4e0qXa5Fs9s@mail.gmail.com>
Download mbox | patch
Permalink /patch/2249/
State Accepted
Headers show

Comments

Myles Watson - 2010-11-04 16:09:14
>> > Loading stage image.
>> > Check CBFS header at <hangs here>
>> Normally a hang here means that the whole ROM isn't mapped, so trying
>> to read from the top of the ROM hangs, even though the bootblock
>> accesses work fine.
>
> Yup, sounds like that's the problem. Here's a quick patch to fix it
> by adding a rom_enable() function (and converting VT8231 to
> TINYBOOTBLOCK) while I'm at it. The only problem: It won't compile ;)
>
> No time to investigate right now, if someone else sees the problem,
> please feel free to fix and commit. Probably just some missing
> "#if defined(ROMCC)" or the like.
I just simplified the patch.  TINYBOOTBLOCK can come later.

It compiles.

Signed-off-by: Myles Watson <mylesgw@gmail.com>

Thanks,
Myles
Uwe Hermann - 2010-11-04 18:25:16
On Thu, Nov 04, 2010 at 10:09:14AM -0600, Myles Watson wrote:
> I just simplified the patch.  TINYBOOTBLOCK can come later.
> 
> It compiles.
> 
> Signed-off-by: Myles Watson <mylesgw@gmail.com>

True, go ahead.

Acked-by: Uwe Hermann <uwe@hermann-uwe.de>

 
Uwe.

Patch

Index: svn/src/southbridge/via/vt8231/vt8231_enable_rom.c
===================================================================
--- /dev/null
+++ svn/src/southbridge/via/vt8231/vt8231_enable_rom.c
@@ -0,0 +1,47 @@ 
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2010 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include <arch/io.h>
+#include <arch/romcc_io.h>
+#include <device/pci_ids.h>
+
+static void vt8231_enable_rom(void)
+{
+	device_t dev;
+
+	dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+	                               PCI_DEVICE_ID_VIA_8231), 0);
+
+	/*
+	 * ROM decode control register (0x43):
+	 *
+	 * Bit  Decode range
+	 * -----------------
+	 * 7	0xFFFE0000-0xFFFEFFFF
+	 * 6	0xFFF80000-0xFFFDFFFF
+	 * 5	0xFFF00000-0xFFF7FFFF
+	 * 4	0x000E0000-0x000EFFFF
+	 * 3	0x000D8000-0x000DFFFF
+	 * 2	0x000D0000-0x000D7FFF
+	 * 1	0x000C8000-0x000CFFFF
+	 * 0	0x000C0000-0x000C7FFF
+	 */
+	pci_write_config8(dev, 0x43, (1 << 7) | (1 << 6) | (1 << 5));
+}
Index: svn/src/southbridge/via/vt8231/vt8231_lpc.c
===================================================================
--- svn.orig/src/southbridge/via/vt8231/vt8231_lpc.c
+++ svn/src/southbridge/via/vt8231/vt8231_lpc.c
@@ -61,9 +61,6 @@  static void vt8231_init(struct device *d
 	enables |= 0x80;
 	pci_write_config8(dev, 0x6C, enables);
 
-	// Map 4MB of FLASH into the address space
-	pci_write_config8(dev, 0x41, 0x7f);
-
 	// Set bit 6 of 0x40, because Award does it (IO recovery time)
 	// IMPORTANT FIX - EISA 0x4d0 decoding must be on so that PCI
 	// interrupts can be properly marked as level triggered.
Index: svn/src/mainboard/via/epia/romstage.c
===================================================================
--- svn.orig/src/mainboard/via/epia/romstage.c
+++ svn/src/mainboard/via/epia/romstage.c
@@ -15,6 +15,7 @@ 
 #include "lib/debug.c"
 #include "southbridge/via/vt8231/vt8231_early_smbus.c"
 #include "southbridge/via/vt8231/vt8231_early_serial.c"
+#include "southbridge/via/vt8231/vt8231_enable_rom.c"
 
 static inline int spd_read_byte(unsigned device, unsigned address)
 {
@@ -86,6 +87,7 @@  static void main(unsigned long bist)
 	/* Halt if there was a built in self test failure */
 	report_bist_failure(bist);
 
+	vt8231_enable_rom();
 	enable_mainboard_devices();
 	enable_smbus();
 	enable_shadow_ram();