[coreboot] New patch to review for coreboot: 0e6da85 exynos/snow: get rid of board-specific arbitration code

David Hendricks (dhendrix@chromium.org) gerrit at coreboot.org
Mon Feb 4 05:56:50 CET 2013


David Hendricks (dhendrix at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2272

-gerrit

commit 0e6da8510ce6f104941f4a64eaa31c46464b3f35
Author: David Hendricks <dhendrix at chromium.org>
Date:   Sun Feb 3 20:47:38 2013 -0800

    exynos/snow: get rid of board-specific arbitration code
    
    Snow's AP, EC, PMU, and smarty battery share a bus. Both the AP and
    EC can act as a master, so to avoid conflicts an arbitration
    mechanism consisting of two GPIOs is used.
    
    By default, the AP "owns" the bus unless it is off (in which case
    the EC doesn't monitor the arbitration pins). This means the boot
    firmware does not need to worry about these lines. The payload may
    if it needs to communicate with the EC, though.
    
    In any case, board-specific bus arbitration logic does not belong
    in a low-level driver that is supposed to be generic for an entire
    CPU family. If the payload needs to talk to the EC, we'll deal with
    it there.
    
    Change-Id: I0774d4592af2b21b6ad668441532c5ceab988404
    Signed-off-by: David Hendricks <dhendrix at chromium.org>
---
 src/cpu/samsung/exynos5-common/spl.h     |  4 ----
 src/cpu/samsung/s5p-common/s3c24x0_i2c.c | 19 +------------------
 src/mainboard/google/snow/bootblock.c    | 14 --------------
 src/mainboard/google/snow/smdk5250_spl.c | 15 ---------------
 4 files changed, 1 insertion(+), 51 deletions(-)

diff --git a/src/cpu/samsung/exynos5-common/spl.h b/src/cpu/samsung/exynos5-common/spl.h
index 439e1b0..afa9a8e 100644
--- a/src/cpu/samsung/exynos5-common/spl.h
+++ b/src/cpu/samsung/exynos5-common/spl.h
@@ -91,8 +91,4 @@ struct spl_machine_param *spl_get_machine_params(void);
  */
 void spl_early_init(void);
 
-/* FIXME(dhendrix): for early i2c init */
-void board_i2c_release_bus(int node);
-int board_i2c_claim_bus(int node);
-
 #endif /* __ASM_ARCH_EXYNOS_SPL_H__ */
diff --git a/src/cpu/samsung/s5p-common/s3c24x0_i2c.c b/src/cpu/samsung/s5p-common/s3c24x0_i2c.c
index 0b6f768..2940b09 100644
--- a/src/cpu/samsung/s5p-common/s3c24x0_i2c.c
+++ b/src/cpu/samsung/s5p-common/s3c24x0_i2c.c
@@ -39,9 +39,6 @@
 #include "device/i2c.h"
 #include "s3c24x0_i2c.h"
 
-/* for board_i2c_* */
-#include "cpu/samsung/exynos5-common/spl.h"
-
 #define I2C_WRITE	0
 #define I2C_READ	1
 
@@ -531,12 +528,7 @@ int i2c_probe(uchar chip)
 	 * address was <ACK>ed (i.e. there was a chip at that address which
 	 * drove the data line low).
 	 */
-	if (board_i2c_claim_bus(i2c->node)) {
-		debug("I2C cannot claim bus %d\n", i2c->bus_num);
-		return -1;
-	}
 	ret = i2c_transfer(i2c->regs, I2C_READ, chip << 1, 0, 0, buf, 1);
-	board_i2c_release_bus(i2c->node);
 
 	return ret != I2C_OK;
 }
@@ -578,13 +570,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
 	i2c = get_bus(g_current_bus);
 	if (!i2c)
 		return -1;
-	if (board_i2c_claim_bus(i2c->node)) {
-		debug("I2C cannot claim bus %d\n", i2c->bus_num);
-		return -1;
-	}
 	ret = i2c_transfer(i2c->regs, I2C_READ, chip << 1, &xaddr[4 - alen],
 			   alen, buffer, len);
-	board_i2c_release_bus(i2c->node);
 	if (ret) {
 		debug("I2c read: failed %d\n", ret);
 		return 1;
@@ -628,13 +615,9 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
 	i2c = get_bus(g_current_bus);
 	if (!i2c)
 		return -1;
-	if (board_i2c_claim_bus(i2c->node)) {
-		debug("I2C cannot claim bus %d\n", i2c->bus_num);
-		return -1;
-	}
+
 	ret = i2c_transfer(i2c->regs, I2C_WRITE, chip << 1, &xaddr[4 - alen],
 			   alen, buffer, len);
-	board_i2c_release_bus(i2c->node);
 
 	return ret != 0;
 }
diff --git a/src/mainboard/google/snow/bootblock.c b/src/mainboard/google/snow/bootblock.c
index 7609410..9055a76 100644
--- a/src/mainboard/google/snow/bootblock.c
+++ b/src/mainboard/google/snow/bootblock.c
@@ -912,15 +912,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
 #endif
 	if (!i2c)
 		return -1;
-#if 0
-	if (board_i2c_claim_bus(i2c->node)) {
-		debug("I2C cannot claim bus %d\n", i2c->bus_num);
-		return -1;
-	}
-#endif
 	ret = i2c_transfer(i2c->regs, I2C_READ, chip << 1, &xaddr[4 - alen],
 			   alen, buffer, len);
-	//board_i2c_release_bus(i2c->node);
 	if (ret) {
 		//debug("I2c read: failed %d\n", ret);
 		return 1;
@@ -965,15 +958,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
 	i2c = &i2c0;
 	if (!i2c)
 		return -1;
-#if 0
-	if (board_i2c_claim_bus(i2c->node)) {
-		//debug("I2C cannot claim bus %d\n", i2c->bus_num);
-		return -1;
-	}
-#endif
 	ret = i2c_transfer(i2c->regs, I2C_WRITE, chip << 1, &xaddr[4 - alen],
 			   alen, buffer, len);
-	//board_i2c_release_bus(i2c->node);
 
 	return ret != 0;
 }
diff --git a/src/mainboard/google/snow/smdk5250_spl.c b/src/mainboard/google/snow/smdk5250_spl.c
index 0dbd4e1..33f27b1 100644
--- a/src/mainboard/google/snow/smdk5250_spl.c
+++ b/src/mainboard/google/snow/smdk5250_spl.c
@@ -87,18 +87,3 @@ int board_wakeup_permitted(void)
 
 	return !is_bad_wake;
 }
-
-/*
- * TODO(sjg at chromium.org):
- * Declared there here for SPL, since there is no core i2c subsystem and
- * cmd_i2c.c is not included.
- */
-void board_i2c_release_bus(int node)
-{
-}
-
-int board_i2c_claim_bus(int node)
-{
-	/* EC is not allowed to touch the bus until we enter U-Boot */
-	return 0;
-}



More information about the coreboot mailing list