1d8e919c7SMasahiro Yamada /* 2d8e919c7SMasahiro Yamada * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3d8e919c7SMasahiro Yamada * 4d8e919c7SMasahiro Yamada * SPDX-License-Identifier: BSD-3-Clause 5d8e919c7SMasahiro Yamada */ 6d8e919c7SMasahiro Yamada 7*dd53cfe1SMasahiro Yamada #include <common/bl_common.h> 809d40e0eSAntonio Nino Diaz #include <lib/mmio.h> 9d8e919c7SMasahiro Yamada 10d8e919c7SMasahiro Yamada #include "uniphier.h" 11d8e919c7SMasahiro Yamada 12*dd53cfe1SMasahiro Yamada #define UNIPHIER_REVISION 0x5f800000UL 13*dd53cfe1SMasahiro Yamada #define UNIPHIER_REVISION_NEW 0x1f800000UL 14d8e919c7SMasahiro Yamada uniphier_get_revision_field(unsigned int mask,unsigned int shift)15d8e919c7SMasahiro Yamadastatic unsigned int uniphier_get_revision_field(unsigned int mask, 16d8e919c7SMasahiro Yamada unsigned int shift) 17d8e919c7SMasahiro Yamada { 18*dd53cfe1SMasahiro Yamada uintptr_t reg; 19d8e919c7SMasahiro Yamada 20*dd53cfe1SMasahiro Yamada if (BL_CODE_BASE >= 0x80000000UL) 21*dd53cfe1SMasahiro Yamada reg = UNIPHIER_REVISION; 22*dd53cfe1SMasahiro Yamada else 23*dd53cfe1SMasahiro Yamada reg = UNIPHIER_REVISION_NEW; 24*dd53cfe1SMasahiro Yamada 25*dd53cfe1SMasahiro Yamada return (mmio_read_32(reg) >> shift) & mask; 26d8e919c7SMasahiro Yamada } 27d8e919c7SMasahiro Yamada uniphier_get_soc_type(void)28d8e919c7SMasahiro Yamadaunsigned int uniphier_get_soc_type(void) 29d8e919c7SMasahiro Yamada { 30d8e919c7SMasahiro Yamada return uniphier_get_revision_field(0xff, 16); 31d8e919c7SMasahiro Yamada } 32d8e919c7SMasahiro Yamada uniphier_get_soc_model(void)33d8e919c7SMasahiro Yamadaunsigned int uniphier_get_soc_model(void) 34d8e919c7SMasahiro Yamada { 35d8e919c7SMasahiro Yamada return uniphier_get_revision_field(0x07, 8); 36d8e919c7SMasahiro Yamada } 37d8e919c7SMasahiro Yamada uniphier_get_soc_revision(void)38d8e919c7SMasahiro Yamadaunsigned int uniphier_get_soc_revision(void) 39d8e919c7SMasahiro Yamada { 40d8e919c7SMasahiro Yamada return uniphier_get_revision_field(0x1f, 0); 41d8e919c7SMasahiro Yamada } 42d8e919c7SMasahiro Yamada uniphier_get_soc_id(void)43d8e919c7SMasahiro Yamadaunsigned int uniphier_get_soc_id(void) 44d8e919c7SMasahiro Yamada { 45d8e919c7SMasahiro Yamada uint32_t type = uniphier_get_soc_type(); 46d8e919c7SMasahiro Yamada 47d8e919c7SMasahiro Yamada switch (type) { 48d8e919c7SMasahiro Yamada case 0x31: 49d8e919c7SMasahiro Yamada return UNIPHIER_SOC_LD11; 50d8e919c7SMasahiro Yamada case 0x32: 51d8e919c7SMasahiro Yamada return UNIPHIER_SOC_LD20; 52d8e919c7SMasahiro Yamada case 0x35: 53d8e919c7SMasahiro Yamada return UNIPHIER_SOC_PXS3; 54d8e919c7SMasahiro Yamada default: 55d8e919c7SMasahiro Yamada return UNIPHIER_SOC_UNKNOWN; 56d8e919c7SMasahiro Yamada } 57d8e919c7SMasahiro Yamada } 58