1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2019-2020, Broadcom 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #include <stdbool.h> 8*91f16700Schasinglulu 9*91f16700Schasinglulu #include <common/debug.h> 10*91f16700Schasinglulu #include <lib/mmio.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <ncsi.h> 13*91f16700Schasinglulu #include <sr_def.h> 14*91f16700Schasinglulu #include <sr_utils.h> 15*91f16700Schasinglulu 16*91f16700Schasinglulu static const char *const io_drives[] = { 17*91f16700Schasinglulu "2mA", "4mA", "6mA", "8mA", 18*91f16700Schasinglulu "10mA", "12mA", "14mA", "16mA" 19*91f16700Schasinglulu }; 20*91f16700Schasinglulu 21*91f16700Schasinglulu void brcm_stingray_ncsi_init(void) 22*91f16700Schasinglulu { 23*91f16700Schasinglulu unsigned int i = 0; 24*91f16700Schasinglulu unsigned int selx = 0; 25*91f16700Schasinglulu 26*91f16700Schasinglulu #if NCSI_IO_DRIVE_STRENGTH_MA == 2 27*91f16700Schasinglulu selx = 0x0; 28*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 4 29*91f16700Schasinglulu selx = 0x1; 30*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 6 31*91f16700Schasinglulu selx = 0x2; 32*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 8 33*91f16700Schasinglulu selx = 0x3; 34*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 10 35*91f16700Schasinglulu selx = 0x4; 36*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 12 37*91f16700Schasinglulu selx = 0x5; 38*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 14 39*91f16700Schasinglulu selx = 0x6; 40*91f16700Schasinglulu #elif NCSI_IO_DRIVE_STRENGTH_MA == 16 41*91f16700Schasinglulu selx = 0x7; 42*91f16700Schasinglulu #else 43*91f16700Schasinglulu ERROR("Unsupported NCSI_IO_DRIVE_STRENGTH_MA. Please check it.\n"); 44*91f16700Schasinglulu return; 45*91f16700Schasinglulu #endif 46*91f16700Schasinglulu INFO("ncsi io drives: %s\n", io_drives[selx]); 47*91f16700Schasinglulu 48*91f16700Schasinglulu for (i = 0; i < NITRO_NCSI_IOPAD_CONTROL_NUM; i++) { 49*91f16700Schasinglulu mmio_clrsetbits_32((NITRO_NCSI_IOPAD_CONTROL_BASE + (i * 4)), 50*91f16700Schasinglulu PAD_SELX_MASK, PAD_SELX_VALUE(selx)); 51*91f16700Schasinglulu } 52*91f16700Schasinglulu 53*91f16700Schasinglulu INFO("ncsi init done\n"); 54*91f16700Schasinglulu } 55