diff --git a/common/cmd_eeprom.c b/common/cmd_eeprom.c
index 120ddbbf97a8f482edfb3ea408e564caba66b4d0..d3e9462f65d960fd381566cb652289e70a2893bc 100644
--- a/common/cmd_eeprom.c
+++ b/common/cmd_eeprom.c
@@ -209,14 +209,21 @@ static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	char * const *args = &argv[2];
 	int rcode;
 	ulong dev_addr, addr, off, cnt;
+	int bus_addr;
 
 	switch (argc) {
 #ifdef CONFIG_SYS_DEF_EEPROM_ADDR
 	case 5:
+		bus_addr = -1;
 		dev_addr = CONFIG_SYS_DEF_EEPROM_ADDR;
 		break;
 #endif
 	case 6:
+		bus_addr = -1;
+		dev_addr = simple_strtoul(*args++, NULL, 16);
+		break;
+	case 7:
+		bus_addr = simple_strtoul(*args++, NULL, 16);
 		dev_addr = simple_strtoul(*args++, NULL, 16);
 		break;
 	default:
@@ -227,7 +234,7 @@ static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	off = simple_strtoul(*args++, NULL, 16);
 	cnt = simple_strtoul(*args++, NULL, 16);
 
-	eeprom_init(-1);
+	eeprom_init(bus_addr);
 
 	if (strcmp (argv[1], "read") == 0) {
 		printf(fmt, dev_addr, argv[1], addr, off, cnt);
@@ -249,9 +256,9 @@ static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 U_BOOT_CMD(
-	eeprom,	6,	1,	do_eeprom,
+	eeprom,	7,	1,	do_eeprom,
 	"EEPROM sub-system",
-	"read  devaddr addr off cnt\n"
-	"eeprom write devaddr addr off cnt\n"
+	"read  <bus> <devaddr> addr off cnt\n"
+	"eeprom write <bus> <devaddr> addr off cnt\n"
 	"       - read/write `cnt' bytes from `devaddr` EEPROM at offset `off'"
 )