cr50: introduce means of detecting chip running in factory mode

When installed in the factory test rig, the DIOB4 pin is set to high
by the moment the RW section starts.

Software behavior needs to change to comply with the factory test rig
requirements. Define the GPIO and add a function to report the factory
mode state.

BRANCH=cr50
BUG=b:63686091
TEST=tested along with the rest of the stack of patches.

Change-Id: I8c4158fc75138d717fc009496365c8e61b42a890
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/579584
Reviewed-by: Nick Sanders <nsanders@chromium.org>
This commit is contained in:
Vadim Bendebury
2017-07-20 09:51:11 -07:00
committed by chrome-bot
parent 90a2060904
commit ef213ce62d
3 changed files with 24 additions and 0 deletions

View File

@@ -1641,3 +1641,17 @@ static int command_board_properties(int argc, char **argv)
}
DECLARE_SAFE_CONSOLE_COMMAND(brdprop, command_board_properties,
NULL, "Display board properties");
int chip_factory_mode(void)
{
static uint8_t mode_set;
/*
* Bit 0x2 used to indicate that mode has been set, bit 0x1 is the
* actual indicator of the chip factory mode.
*/
if (!mode_set)
mode_set = 2 | !!gpio_get_level(GPIO_DIOB4);
return mode_set & 1;
}

View File

@@ -222,6 +222,9 @@ void board_reboot_ap(void);
int board_wipe_tpm(void);
int board_is_first_factory_boot(void);
/* Returns True if chip is brought up in a factory test harness. */
int chip_factory_mode(void);
#endif /* !__ASSEMBLER__ */
/* USB interface indexes (use define rather than enum to expand them) */

View File

@@ -91,6 +91,9 @@ GPIO(SPI_MOSI, PIN(0, 7), GPIO_INPUT)
GPIO(SPI_CLK, PIN(0, 8), GPIO_INPUT)
GPIO(SPI_CS_L, PIN(0, 9), GPIO_INPUT)
/* Used during *chip* factory process. */
GPIO(DIOB4, PIN(0, 10), GPIO_INPUT | GPIO_PULL_DOWN)
/* GPIOs used for Cr50 strapping options */
GPIO(STRAP_A0, PIN(1, 12), GPIO_INPUT)
GPIO(STRAP_A1, PIN(1, 13), GPIO_INPUT)
@@ -190,4 +193,8 @@ PINMUX(GPIO(DETECT_SERVO), B5, DIO_INPUT)
PINMUX(GPIO(SPI_MOSI), A4, DIO_OUTPUT)
PINMUX(GPIO(SPI_CLK), A8, DIO_OUTPUT)
PINMUX(GPIO(SPI_CS_L), A14, DIO_OUTPUT)
PINMUX(GPIO(DIOB4), B4, DIO_INPUT)
#undef PINMUX