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