xref: /rk3399_ARM-atf/plat/brcm/board/stingray/src/ncsi.c (revision 926cd70a0cc3a0cbf209a87765a8dc0b869798e3)
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 
brcm_stingray_ncsi_init(void)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