Oh yes seems it is quite similar. I could not test this, I'm attaching the 
changes.

Signed-off-by: Rudolf Marek <[email protected]>

Thanks,
Rudolf

Index: src/southbridge/amd/sb600/lpc.c
===================================================================
--- src/southbridge/amd/sb600/lpc.c	(revision 6315)
+++ src/southbridge/amd/sb600/lpc.c	(working copy)
@@ -103,7 +103,8 @@
 	struct bus *link;
 	u32 reg, reg_x;
 	int var_num = 0;
-	u16 reg_var[3];
+	u16 reg_var[3] = {0x0, 0x0, 0x0};
+	u8 wiosize = pci_read_config8(dev, 0x74);
 
 	reg = pci_read_config32(dev, 0x44);
 	reg_x = pci_read_config32(dev, 0x48);
@@ -134,13 +135,14 @@
 					case 0x2f8:	/*  COM2 */
 						reg |= (1 << 7);
 						break;
-					case 0x378:	/*  Parallal 1 */
+					case 0x378:	/*  Parallel 1 */
 						reg |= (1 << 0);
+						reg |= (1 << 1); /* + 0x778for ECP */
 						break;
 					case 0x3f0:	/*  FD0 */
 						reg |= (1 << 26);
 						break;
-					case 0x220:	/*  Aduio 0 */
+					case 0x220:	/*  Audio 0 */
 						reg |= (1 << 8);
 						break;
 					case 0x300:	/*  Midi 0 */
@@ -170,12 +172,19 @@
 						switch (var_num) {
 						case 0:
 							reg_x |= (1 << 2);
+							if ((end - base) < 16)
+								wiosize |= (1 << 0);
 							break;
 						case 1:
 							reg_x |= (1 << 24);
+							if ((end - base) < 16)
+								wiosize |= (1 << 2);
 							break;
 						case 2:
 							reg_x |= (1 << 25);
+							reg_x |= (1 << 24);
+							if ((end - base) < 16)
+								wiosize |= (1 << 3);
 							break;
 						}
 						reg_var[var_num++] =
@@ -197,6 +206,7 @@
 		pci_write_config16(dev, 0x64, reg_var[0]);
 		break;
 	}
+	pci_write_config8(dev, 0x74, wiosize);
 }
 
 static void sb600_lpc_enable_resources(device_t dev)
Index: src/southbridge/amd/sb600/early_setup.c
===================================================================
--- src/southbridge/amd/sb600/early_setup.c	(revision 6315)
+++ src/southbridge/amd/sb600/early_setup.c	(working copy)
@@ -364,26 +364,8 @@
 	dev = pci_locate_device(PCI_ID(0x1002, 0x438D), 0);
 	/* DMA enable */
 	pci_write_config8(dev, 0x40, 0x04);
-
-	/* IO Port Decode Enable */
-	pci_write_config8(dev, 0x44, 0xFF);
-	pci_write_config8(dev, 0x45, 0xFF);
-	pci_write_config8(dev, 0x46, 0xC3);
-	pci_write_config8(dev, 0x47, 0xFF);
-
-	// TODO: This has already been done(?)
-	/* IO/Mem Port Decode Enable, I don't know why CIM disable some ports.
-	 *  Disable LPC TimeOut counter, enable SuperIO Configuration Port (2e/2f),
-	 * Alternate SuperIO Configuration Port (4e/4f), Wide Generic IO Port (64/65). */
-	byte = pci_read_config8(dev, 0x48);
-	byte |= (1 << 1) | (1 << 0);	/* enable Super IO config port 2e-2h, 4e-4f */
-	byte |= 1 << 6;		/* enable for RTC I/O range */
-	pci_write_config8(dev, 0x48, byte);
+	/* LPC Sync Timeout */
 	pci_write_config8(dev, 0x49, 0xFF);
-	/* Enable 0x480-0x4bf, 0x4700-0x470B */
-	byte = pci_read_config8(dev, 0x4A);
-	byte |= ((1 << 1) + (1 << 6));	/*0x42, save the configuraion for port 0x80. */
-	pci_write_config8(dev, 0x4A, byte);
 
 	/* Enable Tpm12_en and Tpm_legacy. I don't know what is its usage and copied from CIM. */
 	pci_write_config8(dev, 0x7C, 0x05);
Index: src/southbridge/amd/sb800/lpc.c
===================================================================
--- src/southbridge/amd/sb800/lpc.c	(revision 6315)
+++ src/southbridge/amd/sb800/lpc.c	(working copy)
@@ -122,7 +122,8 @@
 	struct bus *link;
 	u32 reg, reg_x;
 	int var_num = 0;
-	u16 reg_var[3];
+	u16 reg_var[3] = {0x0, 0x0, 0x0};
+	u8 wiosize = pci_read_config8(dev, 0x74);
 
 	reg = pci_read_config32(dev, 0x44);
 	reg_x = pci_read_config32(dev, 0x48);
@@ -153,13 +154,14 @@
 					case 0x2f8:	/*  COM2 */
 						reg |= (1 << 7);
 						break;
-					case 0x378:	/*  Parallal 1 */
+					case 0x378:	/*  Parallel 1 */
 						reg |= (1 << 0);
+						reg |= (1 << 1); /* + 0x778for ECP */
 						break;
 					case 0x3f0:	/*  FD0 */
 						reg |= (1 << 26);
 						break;
-					case 0x220:	/*  Aduio 0 */
+					case 0x220:	/*  Audio 0 */
 						reg |= (1 << 8);
 						break;
 					case 0x300:	/*  Midi 0 */
@@ -189,12 +191,19 @@
 						switch (var_num) {
 						case 0:
 							reg_x |= (1 << 2);
+							if ((end - base) < 16)
+								wiosize |= (1 << 0);
 							break;
 						case 1:
 							reg_x |= (1 << 24);
+							if ((end - base) < 16)
+								wiosize |= (1 << 2);
 							break;
 						case 2:
 							reg_x |= (1 << 25);
+							reg_x |= (1 << 24);
+							if ((end - base) < 16)
+								wiosize |= (1 << 3);
 							break;
 						}
 						reg_var[var_num++] =
@@ -216,6 +225,7 @@
 		pci_write_config16(dev, 0x64, reg_var[0]);
 		break;
 	}
+	pci_write_config8(dev, 0x74, wiosize);
 }
 
 static void sb800_lpc_enable_resources(device_t dev)
Index: src/southbridge/amd/sb800/early_setup.c
===================================================================
--- src/southbridge/amd/sb800/early_setup.c	(revision 6315)
+++ src/southbridge/amd/sb800/early_setup.c	(working copy)
@@ -450,26 +450,8 @@
 	/* DMA enable */
 	pci_write_config8(dev, 0x40, 0x04);
 
-	/* IO Port Decode Enable */
-	pci_write_config8(dev, 0x44, 0xFF);
-	pci_write_config8(dev, 0x45, 0xFF);
-	pci_write_config8(dev, 0x46, 0xC3);
-	pci_write_config8(dev, 0x47, 0xFF);
-
-	/* IO/Mem Port Decode Enable, I don't know why CIM disable some ports.
-	 *  Disable LPC TimeOut counter, enable SuperIO Configuration Port (2e/2f),
-	 * Alternate SuperIO Configuration Port (4e/4f), Wide Generic IO Port (64/65).
-	 * Enable bits for LPC ROM memory address range 1&2 for 1M ROM setting.*/
-	byte = pci_read_config8(dev, 0x48);
-	byte |= (1 << 1) | (1 << 0);	/* enable Super IO config port 2e-2h, 4e-4f */
-	byte |= (1 << 3) | (1 << 4);	/* enable for LPC ROM address range1&2, Enable 512KB rom access at 0xFFF80000 - 0xFFFFFFFF */
-	byte |= 1 << 6;		/* enable for RTC I/O range */
-	pci_write_config8(dev, 0x48, byte);
+	/* LPC Sync Timeout */
 	pci_write_config8(dev, 0x49, 0xFF);
-	/* Enable 0x480-0x4bf, 0x4700-0x470B */
-	byte = pci_read_config8(dev, 0x4A);
-	byte |= ((1 << 1) + (1 << 6));	/*0x42, save the configuraion for port 0x80. */
-	pci_write_config8(dev, 0x4A, byte);
 
 	/* Set LPC ROM size, it has been done in sb800_lpc_init().
 	 * enable LPC ROM range, 0xfff8: 512KB, 0xfff0: 1MB;
-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to