1 /** \r
2 * @file bcp_device.c\r
3 *\r
4 * @brief \r
5 * This file contains any device (SoC) specific definitions and functions\r
6 * required for BCP setup.\r
7 * \r
8 * \par\r
9 * ============================================================================\r
10 * @n (C) Copyright 2010, Texas Instruments, Inc.\r
11 * \r
12 * Redistribution and use in source and binary forms, with or without \r
13 * modification, are permitted provided that the following conditions \r
14 * are met:\r
15 *\r
16 * Redistributions of source code must retain the above copyright \r
17 * notice, this list of conditions and the following disclaimer.\r
18 *\r
19 * Redistributions in binary form must reproduce the above copyright\r
20 * notice, this list of conditions and the following disclaimer in the \r
21 * documentation and/or other materials provided with the \r
22 * distribution.\r
23 *\r
24 * Neither the name of Texas Instruments Incorporated nor the names of\r
25 * its contributors may be used to endorse or promote products derived\r
26 * from this software without specific prior written permission.\r
27 *\r
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
39 *\r
40 */\r
41 /* BCP types include */\r
42 #include <bcp_types.h>\r
43 \r
44 /* BCP include */\r
45 #include <ti/drv/bcp/bcp.h>\r
46 \r
47 /**\r
48 * ============================================================================\r
49 * @n@b Bcp_initDevice\r
50 *\r
51 * @b brief\r
52 * @n This API provides a sample initialization sequence for BCP that can be\r
53 * called as part of system level initialization during device startup. \r
54 * The initialization sequence provided here is just an example and \r
55 * is expected to be customized as per the customer's system and its needs.\r
56 *\r
57 * @param[in] \r
58 * pBcpLldObj BCP LLD Object Handle.\r
59 *\r
60 * @return int32_t\r
61 * @li 0 - BCP device init succesfully done. \r
62 * @li <0 - BCP device init failed. \r
63 * ============================================================================\r
64 */\r
65 int32_t Bcp_initDevice (Bcp_LldObj* pBcpLldObj)\r
66 {\r
67 uint8_t destSel [BCP_MAX_NUM_TXQUEUES], prioVal [BCP_MAX_NUM_TXQUEUES];\r
68 \r
69 /* Setup TM MMR */\r
70 Bcp_setCdmaHpSrcId (pBcpLldObj, CSL_BCP_TM_TM_CONTROL_CDMAHP_SRC_ID_RESETVAL); \r
71 Bcp_enableTxCdmaHpReadArbPrio (pBcpLldObj);\r
72 \r
73 /* Setup the Tx queue --> PPB (Port) Mapping.\r
74 *\r
75 * Lets use the following configuration:\r
76 * Tx Q0 --> PPB0 Tx Q1 --> PPB1 TX Q2 --> PPB2 Tx Q3 --> PPB3\r
77 * Tx Q4 --> PPB0 Tx Q5 --> PPB1 TX Q6 --> PPB2 Tx Q7 --> PPB3 \r
78 *\r
79 * All are at the same priority for now.\r
80 */\r
81 destSel [0] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_0_RESETVAL;\r
82 destSel [1] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_1_RESETVAL;\r
83 destSel [2] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_2_RESETVAL;\r
84 destSel [3] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_3_RESETVAL;\r
85 destSel [4] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_4_RESETVAL;\r
86 destSel [5] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_5_RESETVAL;\r
87 destSel [6] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_6_RESETVAL;\r
88 destSel [7] = CSL_BCP_TM_TM_TX_QFIFO_RD_DEST_SEL_TX_QFIFO_RD_DEST_SEL_7_RESETVAL;\r
89 memset (prioVal, 0, sizeof (uint8_t) * BCP_MAX_NUM_TXQUEUES);\r
90 Bcp_setTxQfifoReadDestSelReg (pBcpLldObj, destSel, prioVal);\r
91 \r
92 /* Initialize the Encoder engine block */ \r
93 Bcp_setEncPolyCoef1Reg (pBcpLldObj, CSL_BCP_ENC_POLY_COEF1_POLYCOEF1_RESETVAL); //WCDMA code rate 1/2\r
94 Bcp_setEncPolyCoef2Reg (pBcpLldObj, CSL_BCP_ENC_POLY_COEF2_POLYCOEF2_RESETVAL); //WCDMA code rate 1/3\r
95 Bcp_setEncPolyCoef3Reg (pBcpLldObj, CSL_BCP_ENC_POLY_COEF3_POLYCOEF3_RESETVAL); //LTE code rate 1/3\r
96 \r
97 Bcp_setEncScrInit0Reg (pBcpLldObj, CSL_BCP_ENC_SCR_INIT_0_SCRINIT_RESETVAL); //scrambler initialization\r
98 Bcp_setEncScrPoly0Reg (pBcpLldObj, CSL_BCP_ENC_SCR_POLY_0_SCRPOLY_RESETVAL); //scrambler polynomial\r
99 Bcp_setEncCrc24Init0Reg (pBcpLldObj, CSL_BCP_ENC_CRC24_INIT_0_CRC24INIT_RESETVAL); //crc24 initialization\r
100 Bcp_setEncCrc24Poly0Reg (pBcpLldObj, CSL_BCP_ENC_CRC24_POLY_0_CRC24POLY_RESETVAL); //crc24 polynomial\r
101 \r
102 Bcp_setEncScrInit1Reg (pBcpLldObj, CSL_BCP_ENC_SCR_INIT_1_SCRINIT_RESETVAL); //scrambler initialization\r
103 Bcp_setEncScrPoly1Reg (pBcpLldObj, CSL_BCP_ENC_SCR_POLY_1_SCRPOLY_RESETVAL); //scrambler polynomial\r
104 Bcp_setEncCrc16Init1Reg (pBcpLldObj, CSL_BCP_ENC_CRC16_INIT_1_CRC16INIT_RESETVAL); //crc16 initialization\r
105 Bcp_setEncCrc16Poly1Reg (pBcpLldObj, CSL_BCP_ENC_CRC16_POLY_1_CRC16POLY_RESETVAL); //crc16 polynomial\r
106 \r
107 Bcp_setEncScrInit2Reg (pBcpLldObj, CSL_BCP_ENC_SCR_INIT_2_SCRINIT_RESETVAL); //scrambler initialization\r
108 Bcp_setEncScrPoly2Reg (pBcpLldObj, CSL_BCP_ENC_SCR_POLY_2_SCRPOLY_RESETVAL); //scrambler polynomial\r
109 \r
110 /* Initialize the Correlator MMR */\r
111 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 0, CSL_BCP_COR_M0_MOD_EN_RESETVAL);\r
112 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 1, CSL_BCP_COR_M1_MOD_EN_RESETVAL);\r
113 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 2, CSL_BCP_COR_M2_MOD_EN_RESETVAL);\r
114 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 3, CSL_BCP_COR_M3_MOD_EN_RESETVAL);\r
115 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 4, CSL_BCP_COR_M4_MOD_EN_RESETVAL);\r
116 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 5, CSL_BCP_COR_M5_MOD_EN_RESETVAL);\r
117 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 6, CSL_BCP_COR_M6_MOD_EN_RESETVAL);\r
118 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 7, CSL_BCP_COR_M7_MOD_EN_RESETVAL);\r
119 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 8, CSL_BCP_COR_M8_MOD_EN_RESETVAL);\r
120 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 9, CSL_BCP_COR_M9_MOD_EN_RESETVAL);\r
121 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 10, CSL_BCP_COR_M10_MOD_EN_RESETVAL);\r
122 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 11, CSL_BCP_COR_M11_MOD_EN_RESETVAL);\r
123 Bcp_setCorReedMullerTableColumn (pBcpLldObj, 12, CSL_BCP_COR_M12_MOD_EN_RESETVAL);\r
124 Bcp_setCorControlReg (pBcpLldObj, CSL_BCP_COR_CONTROL_REGISTER_QPSK_MAPPING_C2K10_C2K0_RESETVAL,\r
125 CSL_BCP_COR_CONTROL_REGISTER_QPSK_MAPPING_C2K10_C2K1_RESETVAL,\r
126 CSL_BCP_COR_CONTROL_REGISTER_QPSK_MAPPING_C2K11_C2K0_RESETVAL,\r
127 CSL_BCP_COR_CONTROL_REGISTER_QPSK_MAPPING_C2K11_C2K1_RESETVAL);\r
128 \r
129 return 0; \r
130 }\r