diff --git a/flash.h b/flash.h
index 8cb13cdc53791cf0eccff683c73e1ff750bc041c..14a9145ecc7ed3a708f238c88957eb72c6038acf 100644
--- a/flash.h
+++ b/flash.h
@@ -287,6 +287,7 @@ extern const struct board_info boards_bad[];
 #define AT_29C040A		0xA4
 #define AT_29C010A		0xD5	
 #define AT_29C020		0xDA
+#define AT_29C512		0x5D	
 #define AT_45BR3214B		/* No ID available */
 #define AT_45CS1282		0x2920
 #define AT_45D011		/* No ID available */
diff --git a/flashchips.c b/flashchips.c
index f211539b448eef50709d24116acaa53f03ec130d..b14cec42dba6ed09c92d2551359c731de4898ae5 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -398,6 +398,22 @@ struct flashchip flashchips[] = {
 		.read		= spi_chip_read,
 	},
 
+	{
+		.vendor		= "Atmel",
+		.name		= "AT29C512",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
+		.manufacture_id	= ATMEL_ID,
+		.model_id	= AT_29C512,
+		.total_size	= 64,
+		.page_size	= 128,
+		.tested		= TEST_OK_PREW,
+		.probe		= probe_jedec,
+		.erase		= erase_chip_jedec,
+		.write		= write_jedec,
+		.read		= read_memmapped,
+
+	},
+
 	{
 		.vendor		= "Atmel",
 		.name		= "AT29C010A",
diff --git a/nic3com.c b/nic3com.c
index a68bd8cad86a9a6c4c6cfe10cd95c0cbe878a2fc..0bebe92adc5ac7baba8e14b989e29c89ec614fa6 100644
--- a/nic3com.c
+++ b/nic3com.c
@@ -46,6 +46,7 @@ struct pcidev_status nics_3com[] = {
 	{0x10b7, 0x9006, PCI_NT, "3COM", "3C90xB: PCI 10BASE-T/10BASE2 (TPC)" },
 	{0x10b7, 0x900a, PCI_NT, "3COM", "3C90xB: PCI 10BASE-FL" },
 	{0x10b7, 0x905a, PCI_NT, "3COM", "3C90xB: PCI 10BASE-FX" },
+	{0x10b7, 0x9058, PCI_NT, "3COM", "3C905B: Cyclone 10/100/BNC" },
 
 	/* 3C905C */
 	{0x10b7, 0x9200, PCI_OK, "3COM", "3C905C: EtherLink 10/100 PCI (TX)" },
@@ -65,7 +66,7 @@ int nic3com_init(void)
 
 	/* 3COM 3C90xB cards need a special fixup. */
 	if (id == 0x9055 || id == 0x9001 || id == 0x9004 || id == 0x9005
-	    || id == 0x9006 || id == 0x900a || id == 0x905a) {
+	    || id == 0x9006 || id == 0x900a || id == 0x905a || id == 0x9058) {
 		/* Select register window 3 and save the receiver status. */
 		OUTW(SELECT_REG_WINDOW + 3, io_base_addr + INT_STATUS);
 		internal_conf = INL(io_base_addr + INTERNAL_CONFIG);
@@ -90,7 +91,7 @@ int nic3com_shutdown(void)
 {
 	/* 3COM 3C90xB cards need a special fixup. */
 	if (id == 0x9055 || id == 0x9001 || id == 0x9004 || id == 0x9005
-	    || id == 0x9006 || id == 0x900a || id == 0x905a) {
+	    || id == 0x9006 || id == 0x900a || id == 0x905a || id == 0x9058) {
 		/* Select register window 3 and restore the receiver status. */
 		OUTW(SELECT_REG_WINDOW + 3, io_base_addr + INT_STATUS);
 		OUTL(internal_conf, io_base_addr + INTERNAL_CONFIG);