1 /* 2 * Copyright (c) 2015-2018, Renesas Electronics Corporation. All rights 3 * reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #include <stdint.h> 9 10 #include <lib/utils_def.h> 11 12 #include <iic_dvfs.h> 13 14 #include "board.h" 15 16 #ifndef BOARD_DEFAULT 17 #if (RCAR_LSI == RCAR_D3) 18 #define BOARD_DEFAULT (BOARD_DRAAK << BOARD_CODE_SHIFT) 19 #elif (RCAR_LSI == RCAR_E3) 20 #define BOARD_DEFAULT (BOARD_EBISU << BOARD_CODE_SHIFT) 21 #else 22 #define BOARD_DEFAULT (BOARD_SALVATOR_X << BOARD_CODE_SHIFT) 23 #endif 24 #endif 25 26 #define BOARD_CODE_MASK (0xF8) 27 #define BOARD_REV_MASK (0x07) 28 #define BOARD_CODE_SHIFT (0x03) 29 #define BOARD_ID_UNKNOWN (0xFF) 30 31 #define SXS_ID { 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 32 #define SX_ID { 0x10U, 0x11U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 33 #define SKP_ID { 0x10U, 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 34 #define SK_ID { 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 35 #define EB4_ID { 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 36 #define EB_ID { 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 37 #define DR_ID { 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 38 #define KK_ID { 0x10U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU } 39 40 const char *g_board_tbl[] = { 41 [BOARD_STARTER_KIT_PRE] = "Starter Kit Premier", 42 [BOARD_STARTER_KIT] = "Starter Kit", 43 [BOARD_SALVATOR_XS] = "Salvator-XS", 44 [BOARD_SALVATOR_X] = "Salvator-X", 45 [BOARD_EBISU_4D] = "Ebisu-4D", 46 [BOARD_KRIEK] = "Kriek", 47 [BOARD_EBISU] = "Ebisu", 48 [BOARD_DRAAK] = "Draak", 49 [BOARD_UNKNOWN] = "unknown" 50 }; 51 52 int32_t rcar_get_board_type(uint32_t *type, uint32_t *rev) 53 { 54 int32_t ret = 0; 55 const uint8_t board_tbl[][8] = { 56 [BOARD_STARTER_KIT_PRE] = SKP_ID, 57 [BOARD_SALVATOR_XS] = SXS_ID, 58 [BOARD_STARTER_KIT] = SK_ID, 59 [BOARD_SALVATOR_X] = SX_ID, 60 [BOARD_EBISU_4D] = EB4_ID, 61 [BOARD_EBISU] = EB_ID, 62 [BOARD_DRAAK] = DR_ID, 63 [BOARD_KRIEK] = KK_ID, 64 }; 65 static uint8_t board_id = BOARD_ID_UNKNOWN; 66 67 if (board_id != BOARD_ID_UNKNOWN) 68 goto get_type; 69 70 #if PMIC_ROHM_BD9571 71 /* Board ID detection from EEPROM */ 72 ret = rcar_iic_dvfs_receive(EEPROM, BOARD_ID, &board_id); 73 if (ret) { 74 board_id = BOARD_ID_UNKNOWN; 75 goto get_type; 76 } 77 78 if (board_id == BOARD_ID_UNKNOWN) 79 board_id = BOARD_DEFAULT; 80 #else 81 board_id = BOARD_DEFAULT; 82 #endif 83 84 get_type: 85 *type = ((uint32_t) board_id & BOARD_CODE_MASK) >> BOARD_CODE_SHIFT; 86 87 if (*type >= ARRAY_SIZE(board_tbl)) { 88 /* no revision information, set Rev0.0. */ 89 *rev = 0; 90 return ret; 91 } 92 93 *rev = board_tbl[*type][(uint8_t) (board_id & BOARD_REV_MASK)]; 94 95 return ret; 96 } 97