-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hello,
Attached patch adds support for tinybootblock on VT8237* to decode whole flash independent of strapping, making larger flashes work again (as it was in pre-tiny bootblock era)
Signed-off-by: Rudolf Marek r.marek@assembler.cz
I had a strange problem:
#include <arch/io.h> #include <arch/romcc_io.h> #include <device/pci_ids.h>
static void bootblock_southbridge_init(void) {
device_t dev;
/* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
if (dev == PCI_DEV_INVALID) { /* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237S_LPC), 0);
if (dev == PCI_DEV_INVALID) return; } pci_write_config8(dev, 0x41, 0x7f); }
did not reach the pci write for some reason. This code is a copy from enable_rom_decode() so it should work.
Thanks, Rudolf
On 4/20/10 11:47 PM, Rudolf Marek wrote:
Does it work better like this?
/* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
if (dev == PCI_DEV_INVALID) { /* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237S_LPC), 0);
} // close scope early
if (dev == PCI_DEV_INVALID) return; pci_write_config8(dev, 0x41, 0x7f);
If not, we should make a test case and send it to eric.
....
+static void bootblock_southbridge_init(void) {
functions should have their opening bracket on the next line
- /* ROM decode last 8MB FF800000 - FFFFFFFF on VT8237S/VT8237A */
- /* ROM decode last 4MB FFC00000 - FFFFFFFF on VT8237R */
- /* get SB on 0:11.0, because pci_locate_device construct similar in
enable_rom_decode() did not worked for some reason */
- pci_write_config8(PCI_DEV(0,0x11,0), 0x41, 0x7f);
+}
Is the device always on 0, 0x11, 0? If not, we should add a more explicit comment saying TODO and explaining why the broken code was checked in.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
If not, we should make a test case and send it to eric.
It does not. I tried what you suggested. What now?
....
+static void bootblock_southbridge_init(void) {
functions should have their opening bracket on the next line
Aha ok will fix it for a final patch.
- /* ROM decode last 8MB FF800000 - FFFFFFFF on VT8237S/VT8237A */
- /* ROM decode last 4MB FFC00000 - FFFFFFFF on VT8237R */
- /* get SB on 0:11.0, because pci_locate_device construct similar in
enable_rom_decode() did not worked for some reason */
- pci_write_config8(PCI_DEV(0,0x11,0), 0x41, 0x7f);
+}
Is the device always on 0, 0x11, 0? If not, we should add a more explicit comment saying TODO and explaining why the broken code was checked in.
Yes it it should although VT8237S has programmable SB IDSEL never seen any VT8237 on something else than 11.0, and I did not found any straps for it just a sw reg.
Rudolf
On 4/20/10 11:47 PM, Rudolf Marek wrote:
Hello,
Attached patch adds support for tinybootblock on VT8237* to decode whole flash independent of strapping, making larger flashes work again (as it was in pre-tiny bootblock era)
Signed-off-by: Rudolf Marek r.marek@assembler.cz
I had a strange problem:
#include <arch/io.h> #include <arch/romcc_io.h> #include <device/pci_ids.h>
static void bootblock_southbridge_init(void) {
device_t dev;
/* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
if (dev == PCI_DEV_INVALID) { /* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237S_LPC), 0);
if (dev == PCI_DEV_INVALID) return;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
And you are sure that dev is not PCI_DEV_INVALID at this point?
} pci_write_config8(dev, 0x41, 0x7f); }
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Following code does work:
static void bootblock_southbridge_init(void) {
/* ROM decode last 8MB FF800000 - FFFFFFFF on VT8237S/VT8237A */ /* ROM decode last 4MB FFC00000 - FFFFFFFF on VT8237R */
device_t dev;
/* Power management controller */ //dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, // PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
//if (dev == PCI_DEV_INVALID) { /* Power management controller */ dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237S_LPC), 0); //}
if (dev == PCI_DEV_INVALID) return;
pci_write_config8(dev, 0x41, 0x7f); }
If one uncomment the commented out parts. It stops working. Nothing is changed if the if (dev == PCI_DEV_INVALID) return; is moved to the if or not.
Rudolf
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi again,
dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
pci_write_config8(PCI_DEV(0,0x11,0), 0x41, 0x7f);
This code won't make it either. So I suspect it is not good idea to walk whole PCI bus so early. Maybe HT needs to be setup?
Thanks, Rudolf
Hi again,
dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
pci_write_config8(PCI_DEV(0,0x11,0), 0x41, 0x7f);
This code won't make it either. So I suspect it is not good idea to walk whole PCI bus so early. Maybe HT needs to be setup?
You could use pci_locate_device_on_bus() with bus 0 to test that theory.
Thanks, Myles
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Very good idea!
It works!
Attached patch adds support for tinybootblock on VT8237* to decode whole flash independent of strapping, making larger flashes work. We cannot walk anything else than PCI bus 0 because HT is not setup yet.
Signed-off-by: Rudolf Marek r.marek@assembler.cz
Rudolf
Very good idea!
It works!
Great.
Attached patch adds support for tinybootblock on VT8237* to decode whole flash independent of strapping, making larger flashes work. We cannot walk anything else than PCI bus 0 because HT is not setup yet.
Signed-off-by: Rudolf Marek r.marek@assembler.cz
Acked-by: Myles Watson mylesgw@gmail.com
Thanks, Myles
On 4/22/10 11:41 PM, Rudolf Marek wrote:
Attached patch adds support for tinybootblock on VT8237* to decode whole flash independent of strapping, making larger flashes work. We cannot walk anything else than PCI bus 0 because HT is not setup yet.
Signed-off-by: Rudolf Marek r.marek@assembler.cz
Acked-by: Stefan Reinauer stepan@coresystems.de
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Thanks,
it is in as Committed revision 5485. While we are at the tinybootblock. Kevin do you plan to convert the epia-cn too? What about to implement there the PSON gating so SMB hack is not needed anymore?
Thanks, Rudolf
On Fri, Apr 23, 2010 at 10:59:51PM +0200, Rudolf Marek wrote:
Thanks,
it is in as Committed revision 5485. While we are at the tinybootblock. Kevin do you plan to convert the epia-cn too? What about to implement there the PSON gating so SMB hack is not needed anymore?
I didn't need to do anything for tinybootblock beyond adding "select TINY_BOOTBLOCK" to epia-cn/Kconfig.
The PSON gating was:
--- src/southbridge/via/vt8237r/vt8237r_early_smbus.c (revision 5486) +++ src/southbridge/via/vt8237r/vt8237r_early_smbus.c (working copy) @@ -148,6 +148,9 @@ die("Power management controller not found\n"); }
+ while (!(pci_read_config8(dev, 0x82) & (1<<6))) + ; + /* * 7 = SMBus Clock from RTC 32.768KHz * 5 = Internal PLL reset from susp
But it should probably have a timeout added. I've been meaning to clean these things up, but I haven't had the chance.
-Kevin
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi again,
Attached patch adds support for tinybootblock on VT8237* to decode whole flash independent of strapping, making larger flashes work. We cannot walk PCI bus because HT is not setup yet.
Signed-off-by: Rudolf Marek r.marek@assembler.cz
Rudolf