mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-09 17:11:42 +00:00
g: override RBOX fuses for correct POR behavior
Sanity tested by powering up cr50 and checking for correct RBOX register values. This patch is mainly to address RBOX debounce issues and key blocking while EC_RST is asserted. A debounce value less than 4, sometimes causes initial pin values to be incorrectly detected. The latter is related to https://chromium-review.googlesource.com/#/c/357590/. As RBOX controls cannot be selectively bypassed (they have to be bypassed as a group), all registers are set up in this patch BUG=chrome-os-partner:54602 BRANCH=None CQ-DEPEND=CL:377621 TEST=manual on Kevin Do three-finger salute, enter recovery mode. Change-Id: Ieb82c94fa33888ead359a77bf77981567998b3fc Signed-off-by: Timothy Chen <timothytim@google.com> Reviewed-on: https://chromium-review.googlesource.com/372001 Commit-Ready: Bill Richardson <wfrichar@chromium.org> Tested-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
60fc54854c
commit
b9a55a09ec
@@ -28,5 +28,51 @@ static void rbox_init(void)
|
||||
/* Clear any wakeup bits (write 0x2, then 0x0) */
|
||||
GREG32(RBOX, WAKEUP) = GC_RBOX_WAKEUP_CLEAR_MASK;
|
||||
GREG32(RBOX, WAKEUP) = 0;
|
||||
|
||||
/* Override rbox fuses and setup correct behavior */
|
||||
GWRITE(RBOX, DEBUG_CLK10HZ_COUNT, 0x63ff);
|
||||
GWRITE(RBOX, DEBUG_SHORT_DELAY_COUNT, 0x4ff);
|
||||
GWRITE(RBOX, DEBUG_LONG_DELAY_COUNT, 0x31);
|
||||
GWRITE(RBOX, DEBUG_DEBOUNCE, 0x4);
|
||||
GWRITE(RBOX, DEBUG_KEY_COMBO0, 0xC0);
|
||||
GWRITE(RBOX, DEBUG_KEY_COMBO1, 0x0);
|
||||
GWRITE(RBOX, DEBUG_KEY_COMBO2, 0x0);
|
||||
/* DEBUG_BLOCK_OUTPUT value should be 0x7 */
|
||||
GWRITE(RBOX, DEBUG_BLOCK_OUTPUT,
|
||||
GC_RBOX_DEBUG_BLOCK_OUTPUT_KEY0_SEL_MASK |
|
||||
GC_RBOX_DEBUG_BLOCK_OUTPUT_KEY1_SEL_MASK |
|
||||
GC_RBOX_DEBUG_BLOCK_OUTPUT_KEY0_VAL_MASK);
|
||||
/* DEBUG_POL value should be 0x21 */
|
||||
GWRITE(RBOX, DEBUG_POL,
|
||||
0x1 << GC_RBOX_DEBUG_POL_AC_PRESENT_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_PWRB_IN_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_PWRB_OUT_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_KEY0_IN_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_KEY0_OUT_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_POL_KEY1_IN_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_KEY1_OUT_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_EC_RST_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_POL_BATT_DISABLE_LSB);
|
||||
/* DEBUG_TERM value should be 0x1204 */
|
||||
GWRITE(RBOX, DEBUG_TERM,
|
||||
0x0 << GC_RBOX_DEBUG_TERM_AC_PRESENT_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_TERM_ENTERING_RW_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_TERM_PWRB_IN_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_TERM_PWRB_OUT_LSB |
|
||||
0x2 << GC_RBOX_DEBUG_TERM_KEY0_IN_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_TERM_KEY0_OUT_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_TERM_KEY1_IN_LSB |
|
||||
0x0 << GC_RBOX_DEBUG_TERM_KEY1_IN_LSB);
|
||||
/* DEBUG_BLOCK_OUTPUT value should be 0x157 */
|
||||
GWRITE(RBOX, DEBUG_DRIVE,
|
||||
0x3 << GC_RBOX_DEBUG_DRIVE_PWRB_OUT_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_DRIVE_KEY0_OUT_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_DRIVE_KEY1_OUT_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_DRIVE_EC_RST_LSB |
|
||||
0x1 << GC_RBOX_DEBUG_DRIVE_BATT_DISABLE_LSB);
|
||||
/* FUSE_CTRL value should be 0x3 */
|
||||
GWRITE(RBOX, FUSE_CTRL,
|
||||
GC_RBOX_FUSE_CTRL_OVERRIDE_FUSE_MASK |
|
||||
GC_RBOX_FUSE_CTRL_OVERRIDE_FUSE_READY_MASK);
|
||||
}
|
||||
DECLARE_HOOK(HOOK_INIT, rbox_init, HOOK_PRIO_DEFAULT - 1);
|
||||
|
||||
Reference in New Issue
Block a user