[coreboot-gerrit] Patch set updated for coreboot: 646af2b rambi: disable internal pullups on ram_id[2:0]

Aaron Durbin (adurbin@google.com) gerrit at coreboot.org
Wed Feb 5 17:04:45 CET 2014


Aaron Durbin (adurbin at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4885

-gerrit

commit 646af2b9fb914abc23465af968fd93875455eb1c
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Wed Oct 16 09:21:55 2013 -0700

    rambi: disable internal pullups on ram_id[2:0]
    
    The ram_id[2:0] signals have stuffing options for pull up/down
    with values of 10K. However, the default pulldown values for these
    pads are 20K. Therefore, one can't read a high value because of
    the high voltage threshold is 0.65 * Vref. Therefore the high
    signals are marginal at best.
    
    Fix this issue by disabling the internal pull for the pads connected
    to ram_id[2:0].
    
    BUG=chrome-os-partner:23350
    BRANCH=None
    TEST=Built and checked that ram_id[2:0] is properly read now.
    
    Change-Id: Ib414d5798b472574337d1b71b87a4cf92f40c762
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/173211
    Reviewed-by: Shawn Nematbakhsh <shawnn at chromium.org>
    Reviewed-by: Bernie Thompson <bhthompson at chromium.org>
---
 src/mainboard/google/rambi/romstage.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/mainboard/google/rambi/romstage.c b/src/mainboard/google/rambi/romstage.c
index d15a21d..369ebad 100644
--- a/src/mainboard/google/rambi/romstage.c
+++ b/src/mainboard/google/rambi/romstage.c
@@ -37,14 +37,29 @@
 #define GPIO_SSUS_38_PAD 50
 #define GPIO_SSUS_39_PAD 58
 
+static inline void disable_internal_pull(int pad)
+{
+	const int pull_mask = ~(0xf << 7);
+	write32(ssus_pconf0(pad), read32(ssus_pconf0(pad)) & pull_mask);
+}
+
 static void *get_spd_pointer(char *spd_file_content, int total_spds)
 {
 	int ram_id = 0;
 
+	/* The ram_id[2:0] pullups on rambi are too large for the default 20K
+	 * pulldown on the pad. Therefore, disable the internal pull resistor to
+	 * read high values correctly. */
+	disable_internal_pull(GPIO_SSUS_37_PAD);
+	disable_internal_pull(GPIO_SSUS_38_PAD);
+	disable_internal_pull(GPIO_SSUS_39_PAD);
+
 	ram_id |= (ssus_get_gpio(GPIO_SSUS_37_PAD) << 0);
 	ram_id |= (ssus_get_gpio(GPIO_SSUS_38_PAD) << 1);
 	ram_id |= (ssus_get_gpio(GPIO_SSUS_39_PAD) << 2);
 
+	printk(BIOS_DEBUG, "ram_id=%d, total_spds: %d\n", ram_id, total_spds);
+
 	if (ram_id >= total_spds)
 		return NULL;
 



More information about the coreboot-gerrit mailing list