xref: /arm-trusted-firmware/plat/brcm/board/stingray/src/ncsi.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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