summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/southbridge/intel/bd82x6x/early_pch.c158
1 files changed, 81 insertions, 77 deletions
diff --git a/src/southbridge/intel/bd82x6x/early_pch.c b/src/southbridge/intel/bd82x6x/early_pch.c
index cf0ea17cd2..4015495e4e 100644
--- a/src/southbridge/intel/bd82x6x/early_pch.c
+++ b/src/southbridge/intel/bd82x6x/early_pch.c
@@ -31,39 +31,43 @@
#define SOUTHBRIDGE PCI_DEV(0, 0x1f, 0)
static void
-wait_2338 (void)
+wait_iobp(void)
{
- while (read8 (DEFAULT_RCBA + 0x2338) & 1);
+ while (read8(DEFAULT_RCBA + IOBPS) & 1)
+ ; // implement timeout?
}
static u32
-read_2338 (u32 edx)
+read_iobp(u32 address)
{
u32 ret;
- write32 (DEFAULT_RCBA + 0x2330, edx);
- write16 (DEFAULT_RCBA + 0x2338, (read16 (DEFAULT_RCBA + 0x2338)
+ write32(DEFAULT_RCBA + IOBPIRI, address);
+ write16(DEFAULT_RCBA + IOBPS, (read16(DEFAULT_RCBA + IOBPS)
& 0x1ff) | 0x600);
- wait_2338 ();
- ret = read32 (DEFAULT_RCBA + 0x2334);
- wait_2338 ();
- read8 (DEFAULT_RCBA + 0x2338);
+ wait_iobp();
+ ret = read32(DEFAULT_RCBA + IOBPD);
+ wait_iobp();
+ read8(DEFAULT_RCBA + IOBPS); // call wait_iobp() instead here?
return ret;
}
static void
-write_2338 (u32 edx, u32 val)
+write_iobp(u32 address, u32 val)
{
- read_2338 (edx);
- write16 (DEFAULT_RCBA + 0x2338, (read16 (DEFAULT_RCBA + 0x2338)
+ /* this function was probably pch_iobp_update with the andvalue
+ * being 0. So either the IOBP read can be removed or this function
+ * and the pch_iobp_update function in ramstage could be merged */
+ read_iobp(address);
+ write16(DEFAULT_RCBA + IOBPS, (read16(DEFAULT_RCBA + IOBPS)
& 0x1ff) | 0x600);
- wait_2338 ();
+ wait_iobp();
- write32 (DEFAULT_RCBA + 0x2334, val);
- wait_2338 ();
- write16 (DEFAULT_RCBA + 0x2338,
- (read16 (DEFAULT_RCBA + 0x2338) & 0x1ff) | 0x600);
- read8 (DEFAULT_RCBA + 0x2338);
+ write32(DEFAULT_RCBA + IOBPD, val);
+ wait_iobp();
+ write16(DEFAULT_RCBA + IOBPS,
+ (read16(DEFAULT_RCBA + IOBPS) & 0x1ff) | 0x600);
+ read8(DEFAULT_RCBA + IOBPS); // call wait_iobp() instead here?
}
@@ -304,67 +308,67 @@ early_pch_init_native (void)
read32 (DEFAULT_RCBA + 0x2310); // !!! = 0xa809605b
write32 (DEFAULT_RCBA + 0x2310, 0xa809605b);
- write_2338 (0xea007f62, 0x00590133);
- write_2338 (0xec007f62, 0x00590133);
- write_2338 (0xec007f64, 0x59555588);
- write_2338 (0xea0040b9, 0x0001051c);
- write_2338 (0xeb0040a1, 0x800084ff);
- write_2338 (0xec0040a1, 0x800084ff);
- write_2338 (0xea004001, 0x00008400);
- write_2338 (0xeb004002, 0x40201758);
- write_2338 (0xec004002, 0x40201758);
- write_2338 (0xea004002, 0x00601758);
- write_2338 (0xea0040a1, 0x810084ff);
- write_2338 (0xeb0040b1, 0x0001c598);
- write_2338 (0xec0040b1, 0x0001c598);
- write_2338 (0xeb0040b6, 0x0001c598);
- write_2338 (0xea0000a9, 0x80ff969f);
- write_2338 (0xea0001a9, 0x80ff969f);
- write_2338 (0xeb0040b2, 0x0001c396);
- write_2338 (0xeb0040b3, 0x0001c396);
- write_2338 (0xec0040b2, 0x0001c396);
- write_2338 (0xea0001a9, 0x80ff94ff);
- write_2338 (0xea000151, 0x0088037f);
- write_2338 (0xea0000a9, 0x80ff94ff);
- write_2338 (0xea000051, 0x0088037f);
+ write_iobp(0xea007f62, 0x00590133);
+ write_iobp(0xec007f62, 0x00590133);
+ write_iobp(0xec007f64, 0x59555588);
+ write_iobp(0xea0040b9, 0x0001051c);
+ write_iobp(0xeb0040a1, 0x800084ff);
+ write_iobp(0xec0040a1, 0x800084ff);
+ write_iobp(0xea004001, 0x00008400);
+ write_iobp(0xeb004002, 0x40201758);
+ write_iobp(0xec004002, 0x40201758);
+ write_iobp(0xea004002, 0x00601758);
+ write_iobp(0xea0040a1, 0x810084ff);
+ write_iobp(0xeb0040b1, 0x0001c598);
+ write_iobp(0xec0040b1, 0x0001c598);
+ write_iobp(0xeb0040b6, 0x0001c598);
+ write_iobp(0xea0000a9, 0x80ff969f);
+ write_iobp(0xea0001a9, 0x80ff969f);
+ write_iobp(0xeb0040b2, 0x0001c396);
+ write_iobp(0xeb0040b3, 0x0001c396);
+ write_iobp(0xec0040b2, 0x0001c396);
+ write_iobp(0xea0001a9, 0x80ff94ff);
+ write_iobp(SATA_IOBP_SP0G3IR, 0x0088037f);
+ write_iobp(0xea0000a9, 0x80ff94ff);
+ write_iobp(SATA_IOBP_SP1G3IR, 0x0088037f);
- write_2338 (0xea007f05, 0x00010642);
- write_2338 (0xea0040b7, 0x0001c91c);
- write_2338 (0xea0040b8, 0x0001c91c);
- write_2338 (0xeb0040a1, 0x820084ff);
- write_2338 (0xec0040a1, 0x820084ff);
- write_2338 (0xea007f0a, 0xc2480000);
+ write_iobp(0xea007f05, 0x00010642);
+ write_iobp(0xea0040b7, 0x0001c91c);
+ write_iobp(0xea0040b8, 0x0001c91c);
+ write_iobp(0xeb0040a1, 0x820084ff);
+ write_iobp(0xec0040a1, 0x820084ff);
+ write_iobp(0xea007f0a, 0xc2480000);
- write_2338 (0xec00404d, 0x1ff177f);
- write_2338 (0xec000084, 0x5a600000);
- write_2338 (0xec000184, 0x5a600000);
- write_2338 (0xec000284, 0x5a600000);
- write_2338 (0xec000384, 0x5a600000);
- write_2338 (0xec000094, 0x000f0501);
- write_2338 (0xec000194, 0x000f0501);
- write_2338 (0xec000294, 0x000f0501);
- write_2338 (0xec000394, 0x000f0501);
- write_2338 (0xec000096, 0x00000001);
- write_2338 (0xec000196, 0x00000001);
- write_2338 (0xec000296, 0x00000001);
- write_2338 (0xec000396, 0x00000001);
- write_2338 (0xec000001, 0x00008c08);
- write_2338 (0xec000101, 0x00008c08);
- write_2338 (0xec000201, 0x00008c08);
- write_2338 (0xec000301, 0x00008c08);
- write_2338 (0xec0040b5, 0x0001c518);
- write_2338 (0xec000087, 0x06077597);
- write_2338 (0xec000187, 0x06077597);
- write_2338 (0xec000287, 0x06077597);
- write_2338 (0xec000387, 0x06077597);
- write_2338 (0xea000050, 0x00bb0157);
- write_2338 (0xea000150, 0x00bb0157);
- write_2338 (0xec007f60, 0x77777d77);
- write_2338 (0xea00008d, 0x01320000);
- write_2338 (0xea00018d, 0x01320000);
- write_2338 (0xec0007b2, 0x04514b5e);
- write_2338 (0xec00078c, 0x40000200);
- write_2338 (0xec000780, 0x02000020);
+ write_iobp(0xec00404d, 0x1ff177f);
+ write_iobp(0xec000084, 0x5a600000);
+ write_iobp(0xec000184, 0x5a600000);
+ write_iobp(0xec000284, 0x5a600000);
+ write_iobp(0xec000384, 0x5a600000);
+ write_iobp(0xec000094, 0x000f0501);
+ write_iobp(0xec000194, 0x000f0501);
+ write_iobp(0xec000294, 0x000f0501);
+ write_iobp(0xec000394, 0x000f0501);
+ write_iobp(0xec000096, 0x00000001);
+ write_iobp(0xec000196, 0x00000001);
+ write_iobp(0xec000296, 0x00000001);
+ write_iobp(0xec000396, 0x00000001);
+ write_iobp(0xec000001, 0x00008c08);
+ write_iobp(0xec000101, 0x00008c08);
+ write_iobp(0xec000201, 0x00008c08);
+ write_iobp(0xec000301, 0x00008c08);
+ write_iobp(0xec0040b5, 0x0001c518);
+ write_iobp(0xec000087, 0x06077597);
+ write_iobp(0xec000187, 0x06077597);
+ write_iobp(0xec000287, 0x06077597);
+ write_iobp(0xec000387, 0x06077597);
+ write_iobp(0xea000050, 0x00bb0157);
+ write_iobp(0xea000150, 0x00bb0157);
+ write_iobp(0xec007f60, 0x77777d77);
+ write_iobp(0xea00008d, 0x01320000);
+ write_iobp(0xea00018d, 0x01320000);
+ write_iobp(0xec0007b2, 0x04514b5e);
+ write_iobp(0xec00078c, 0x40000200);
+ write_iobp(0xec000780, 0x02000020);
init_dmi();
}