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