diff options
Diffstat (limited to 'src/mainboard/intel/kblrvp/board_id.c')
-rw-r--r-- | src/mainboard/intel/kblrvp/board_id.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/src/mainboard/intel/kblrvp/board_id.c b/src/mainboard/intel/kblrvp/board_id.c index a362b08df8..d4c4f535cb 100644 --- a/src/mainboard/intel/kblrvp/board_id.c +++ b/src/mainboard/intel/kblrvp/board_id.c @@ -1,7 +1,7 @@ /* * This file is part of the coreboot project. * - * Copyright (C) 2016 Intel Corporation. + * Copyright (C) 2016-2018 Intel Corporation. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,18 +15,42 @@ #include "board_id.h" #include <ec/acpi/ec.h> #include <stdint.h> +#include <stddef.h> /* - * Get Board ID via EC I/O port write/read + * Get Board info via EC I/O port write/read */ -int get_board_id(void) +int get_ec_boardinfo(void) { - uint8_t buffer[2]; - uint8_t index; - if (send_ec_command(EC_FAB_ID_CMD) == 0) { - for (index = 0; index < sizeof(buffer); index++) - buffer[index] = recv_ec_data(); - return (buffer[1] << 8) | buffer[0]; + MAYBE_STATIC int ec_info = -1; + if (ec_info < 0) { + uint8_t buffer[2]; + uint8_t index; + if (send_ec_command(EC_FAB_ID_CMD) == 0) { + for (index = 0; index < sizeof(buffer); index++) + buffer[index] = recv_ec_data(); + ec_info = (buffer[1] << 8) | buffer[0]; + } } + return ec_info; +} + +/* Get spd index */ +int get_spd_index(void) +{ + int ec_info = get_ec_boardinfo(); + if (ec_info >= 0) + return ((uint16_t)ec_info >> 5) & 0x7; + + return -1; +} + +/* Get Board Id */ +int get_board_id(void) +{ + int ec_info = get_ec_boardinfo(); + if (ec_info >= 0) + return ((uint16_t)ec_info >> 8) & 0xff; + return -1; } |