AM64x MCU+ SDK  08.00.00
tiescbsp.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2021 Texas Instruments Incorporated
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef TIESC_BSP_H_
34 #define TIESC_BSP_H_
35 
86 /* ========================================================================== */
87 /* Include Files */
88 /* ========================================================================== */
89 
90 #ifndef DISABLE_UART_PRINT
91 #include <stdio.h>
92 #endif
93 
94 #include <industrial_protocols/ethercat_slave/icss_fwhal/tiesc_pruss_intc_mapping.h>
95 #include <drivers/pruicss.h>
96 #include <industrial_protocols/ethercat_slave/icss_fwhal/tiesc_def.h>
97 
98 #ifdef __cplusplus
99 extern "C" {
100 #endif
101 
102 /* ========================================================================== */
103 /* Macros & Typedefs */
104 /* ========================================================================== */
105 
106 /*Single datagram accessing contiguous multiple FMMU mapped areas in a single slave for process data
107 is supported now by TI ESC firmware.
108 Process path latency in TI ESC is high when this support is active
109 For specific use cases (4SM with 3 FMMUs or multiple FMMUs (in a given ESC) are not accessed in a single datagram)
110 process path latency improvement can be achieved by disabling below define */
111 #define ENABLE_MULTIPLE_SM_ACCESS_IN_SINGLE_DATAGRAM 0
112 
113 #define MAX_SYNC_MAN 8
114 #define SIZEOF_SM_REGISTER 8
115 
116 #define TIESC_EEPROM_SIZE 0x800
117 
118 #define MAILBOX_WRITE 0
119 #define MAILBOX_READ 1
120 #define PROCESS_DATA_OUT 2
121 #define PROCESS_DATA_IN 3
122 
123 #define MBX_WRITE_EVENT ((uint16_t) 0x0100)
124 #define MBX_READ_EVENT ((uint16_t) 0x0200)
125 
126 //Below constants are not defined in esc.h
127 #define ESC_ADDR_REV_TYPE 0x000
128 #define ESC_ADDR_BUILD 0x002
129 
130 #define ESC_ADDR_CONFIG_STATION_ALIAS 0x012
131 #define ESC_ADDR_DLSTATUS 0x110
132 #define ESC_ADDR_ALCONTROL 0x120
133 #define ESC_ADDR_ALSTATUS 0x130
134 #define ESC_ADDR_PDI_CONTROL 0x140
135 #define ESC_PDI_CONTROL_ELD_ALL_PORTS_MASK (1 << 1)
136 #define ESC_ADDR_PDI_CONFIG 0x150
137 #define ESC_ADDR_AL_EVENT_MASK 0x204
138 #define ESC_ADDR_AL_EVENT_REQ 0x220
139 #define ESC_ADDR_SM_WD_STATUS 0x440
140 #define ESC_ADDR_EEPROM_CTRL 0x502
141 #define ESC_ADDR_MI_ECAT_ACCESS 0x516
142 #define ESC_ADDR_MI_PDI_ACCESS 0x517
143 
144 #define ESC_EEPROM_CMD_MASK 0x0700 //Description (0x502.8:10): Command bit mask
145 #define ESC_EEPROM_CMD_READ_MASK 0x0100 //Description (0x502.8): Currently executed read command
146 #define ESC_EEPROM_CMD_WRITE_MASK 0x0200 //Description (0x502.9): Initialize Write Command
147 #define ESC_EEPROM_CMD_RELOAD_MASK 0x0400 //Description (0x502.10): Trigger EEPROM reload
148 #define ESC_EEPROM_ERROR_MASK 0x7800 //Description : Mask all EEPROM error bits; Checksum error (0x0502.11); EEPROM not loaded (0x0502.12); Missing EEPROM Acknowledge (0x0502.13); Write Error (0x0502.14)
149 #define ESC_EEPROM_ERROR_CRC 0x0800 //Description (0x502.11): EEPROM CRC Error
150 #define ESC_EEPROM_ERROR_CMD_ACK 0x2000 //Description (0x502.13): EEPROM Busy
151 #define ESC_EEPROM_BUSY_MASK 0x8000 //Description (0x502.15): EEPROM Busy
152 
153 #define ESC_ADDR_SYNCMAN 0x800
154 
155 #define ESC_ADDR_SM1_STATUS 0x80D
156 #define SM_STATUS_MBX_FULL 0x08
157 
158 #define ESC_ADDR_SM0_STATUS 0x805
159 #define ESC_ADDR_SM0_ACTIVATE 0x806
160 #define ESC_ADDR_SM1_ACTIVATE 0x806+8
161 #define ESC_ADDR_SM2_ACTIVATE 0x806+8*2
162 #define ESC_ADDR_SM3_ACTIVATE 0x806+8*3
163 #define ESC_ADDR_SM4_ACTIVATE 0x806+8*4
164 #define ESC_ADDR_SM5_ACTIVATE 0x806+8*5
165 #define ESC_ADDR_SM6_ACTIVATE 0x806+8*6
166 #define ESC_ADDR_SM7_ACTIVATE 0x806+8*7
167 #define ESC_ADDR_SM0_PDI_CONTROL 0x807
168 #define ESC_ADDR_SM1_PDI_CONTROL 0x807+8
169 #define ESC_ADDR_SM2_PDI_CONTROL 0x807+8*2
170 #define ESC_ADDR_SM3_PDI_CONTROL 0x807+8*3
171 #define ESC_ADDR_SM4_PDI_CONTROL 0x807+8*4
172 #define ESC_ADDR_SM5_PDI_CONTROL 0x807+8*5
173 #define ESC_ADDR_SM6_PDI_CONTROL 0x807+8*6
174 #define ESC_ADDR_SM7_PDI_CONTROL 0x807+8*7
175 
176 #define SM_PDI_CONTROL_SM_DISABLE 1
177 
178 #define ESC_ADDR_SYSTIME 0x910
179 #define ESC_ADDR_SYSTIME_HIGH 0x914
180 #define ESC_ADDR_SYSTIME_OFFSET 0x920
181 #define ESC_ADDR_SYSTIME_DELAY 0x928
182 #define ESC_ADDR_SPEEDCOUNTER_START 0x930
183 #define ESC_ADDR_TIMEDIFF_FILTDEPTH 0x934
184 #define ESC_ADDR_SPEEDDIFF_FILTDEPTH 0x935
185 #define ESC_ADDR_SYNC_PULSE_LENGTH 0x982
186 #define ESC_ADDR_SYNC_STATUS 0x98E
187 #define ESC_ADDR_LATCH0_CONTROL 0x9A8
188 #define ESC_ADDR_LATCH1_CONTROL 0x9A9
189 #define ESC_ADDR_LATCH0_POS_EDGE 0x9B0
190 #define ESC_ADDR_LATCH0_NEG_EDGE 0x9B8
191 #define ESC_ADDR_LATCH1_POS_EDGE 0x9C0
192 #define ESC_ADDR_LATCH1_NEG_EDGE 0x9C8
193 #define ESC_ADDR_TI_PORT0_ACTIVITY 0xE00
194 #define ESC_ADDR_TI_PORT1_ACTIVITY 0xE04
195 #define ESC_ADDR_TI_PORT0_PHYADDR 0xE08
196 #define ESC_ADDR_TI_PORT1_PHYADDR 0xE09
197 #define ESC_ADDR_TI_PDI_ISR_PINSEL 0xE0A
198 #define ESC_ADDR_TI_PHY_LINK_POLARITY 0XE0C
199 #define ESC_ADDR_TI_PORT0_TX_START_DELAY 0xE10
200 #define ESC_ADDR_TI_PORT1_TX_START_DELAY 0xE12
201 #define ESC_ADDR_TI_ESC_RESET 0xE14
202 #define ESC_ADDR_TI_EDMA_LATENCY_ENHANCEMENT 0xE24
203 #define TI_ESC_RST_CMD_U 0x545352
204 #define TI_ESC_RST_CMD_L 0x747372
205 
206 #define ESC_ADDR_MEMORY 0x1000
207 
208 #define CMD_DL_USER_CLEAR_AL_EVENT_HIGH 0x0
209 #define CMD_DL_USER_GET_BUFFER_READ_ADDR 0x1
210 #define CMD_DL_USER_GET_BUFFER_WRITE_ADDR 0x2
211 #define CMD_DL_USER_SET_BUFFER_WRITE_DONE 0x3
212 
216 #define CMD_DL_USER_ACK_MBX_READ 0x4
217 
221 #define CMD_DL_USER_ACK_MBX_WRITE 0x5
222 
226 #define CMD_DL_USER_EEPROM_CMD_ACK 0x6
227 
231 #define CMD_DL_USER_READ_SYNC_STATUS 0x7
232 #define SYNC0 0
233 #define SYNC1 1
234 
238 #define CMD_DL_USER_READ_AL_CONTROL 0x8
239 
243 #define CMD_DL_USER_WRITE_AL_STATUS 0x9
244 
248 #define CMD_DL_USER_READ_PD_WD_STATUS 0xA
249 
253 #define CMD_DL_USER_READ_SM_ACTIVATE 0xB
254 
258 #define CMD_DL_USER_WRITE_SM_PDI_CTRL 0xC
259 
263 #define CMD_DL_USER_READ_LATCH_TIME 0xD
264 #define LATCH0_POS_EDGE 0
265 #define LATCH0_NEG_EDGE 1
266 #define LATCH1_POS_EDGE 2
267 #define LATCH1_NEG_EDGE 3
268 
273 #define CMD_DL_USER_READ_SYS_TIME 0xE
274 
278 #define CMD_DL_USER_CLEAR_AL_EVENT_LOW 0xF
279 #ifdef SYSTEM_TIME_PDI_CONTROLLED
280 
284 #define CMD_DL_USER_SYSTIME_PDI_CONTROL 0x10
285 #define WRITE_SYSTIME 0
286 #define WRITE_SYSTIME_OFFSET 1
287 #define WRITE_FILTER_CONFIG 2
288 #endif
289 
290 #define SWAPWORD
291 #define SWAPDWORD
292 
293 #define ICSS_MDIO_USRPHYSEL_LINKINT_ENABLE 0x40
294 #define ICSS_MDIO_USRPHYSEL_LINKSTAT_MLINK 0x80
295 
296 #define TIESC_PERM_RW 0x0
297 #define TIESC_PERM_WRITE_ONLY 0x1
298 #define TIESC_PERM_READ_ONLY 0x2
299 
300 #define TIESC_PERM_WRITE TIESC_PERM_WRITE_ONLY
301 #define TIESC_PERM_READ TIESC_PERM_READ_ONLY
302 
303 #define PDI_PERM_RW 0x0
304 #define PDI_PERM_READ_ONLY 0x1
305 
306 #define PDI_PERM_WRITE PDI_PERM_RW
307 #define PDI_PERM_READ PDI_PERM_READ_ONLY
308 
309 #define TIESC_MDIO_CLKDIV 79 //For 2.5MHz MDIO clock: 200/(TIESC_MDIO_CLKDIV+1)
310 
311 #define TIESC_MDIO_RX_LINK_DISABLE 0 //Slow MDIO state m/c based link detection
312 #define TIESC_MDIO_RX_LINK_ENABLE 1 //Fast link detect using RXLINK forward from PHY to MDIO MLINK
313 #define TIESC_LINK_POL_ACTIVE_LOW 1
314 #define TIESC_LINK_POL_ACTIVE_HIGH 0
315 
320 #define PDI_WD_TRIGGER_RX_SOF (0 << 4)
321 
326 #define PDI_WD_TRIGGER_LATCH_IN (1 << 4)
327 
332 #define PDI_WD_TRIGGER_SYNC0_OUT (2 << 4)
333 
338 #define PDI_WD_TRIGGER_SYNC1_OUT (3 << 4)
339 
340 #if ENABLE_MULTIPLE_SM_ACCESS_IN_SINGLE_DATAGRAM
341 #define TIESC_PORT0_TX_DELAY 0x98
342 #else
343 #define TIESC_PORT0_TX_DELAY 0x48
344 #endif
345 #define TIESC_PORT1_TX_DELAY TIESC_PORT0_TX_DELAY
346 
347 #define PDI_ISR_EDIO_NUM 7 //GPMC_CSN(2) -> pr1_edio_data_out7 for ICEv2.J4.Pin21
348 
349 /* PDI side register protection using register permission table (4KB) in memory - disable if you care for performance and memory foot print */
350 /* #define ENABLE_PDI_REG_PERMISSIONS */
351 
352 /* Use ESC system time instead of SYS/BIOS Timestamp_get32 for timing info */
353 #define USE_ECAT_TIMER
354 
355 
356 /* Uncomment following to enable DC feature of system time compensation via PDI interface instead of ECAT interface
357  for synchronizing two independent EtherCAT networks */
358 //#define SYSTEM_TIME_PDI_CONTROLLED
359 /*Comment to following to enable PDI ISR and SYNC ISR in HWI context */
360 #define ENABLE_PDI_TASK
361 #define ENABLE_SYNC_TASK
362 
369 /* #define SUPPORT_CMDACK_POLL_MODE */
370 
371 #if defined (__aarch64__)
372 #define ASSERT_DMB() __asm__(" dmb ISH")
373 #define ASSERT_DSB() __asm__(" dsb ISH")
374 #else
375 #define ASSERT_DMB() __asm__(" dmb")
376 #define ASSERT_DSB() __asm__(" dsb")
377 #endif
378 
379 #ifdef USE_ECAT_TIMER
380 #define ECAT_TIMER_INC_P_MS 1000000
381 #else
382 #define ECAT_TIMER_INC_P_MS ecat_timer_inc_p_ms /* ARM frequency: Will be detected during bsp_init*/
383 extern volatile uint32_t ecat_timer_inc_p_ms;
384 #endif
385 
386 #define ESC_SYSTEMTIME_OFFSET_OFFSET 0x0920
387 #define ESC_SPEED_COUNTER_START_OFFSET 0x0930
388 #define ESC_DC_START_TIME_CYCLIC_OFFSET 0x0990
389 
390 #define DRIFTCTRL_TASK_SYNC_ZERO_CROSS_ADJUST 0xE0 //PRU_DMEM0
391 
396 #define LOCK_PD_BUF_AVAILABLE_FOR_HOST 0
397 
401 #define LOCK_PD_BUF_HOST_ACCESS_START 1
402 
406 #define LOCK_PD_BUF_HOST_ACCESS_FINISH 2
407 
414 #define LOCK_PD_BUF_CHECK_AVAILABILITY_RETRY_COUNT (10U)
415 
416 typedef int32_t (*bsp_eeprom_read_t)(uint8_t *buf, uint32_t len);
417 typedef int32_t (*bsp_eeprom_write_t)(uint8_t *buf, uint32_t len);
418 typedef void (*bsp_init_spinlock_t)(void);
419 typedef uint32_t (*bsp_hwspinlock_lock_t)(int num);
420 typedef void (*bsp_hwspinlock_unlock_t)(int num);
421 typedef void (*bsp_ethphy_init_t)(PRUICSS_Handle pruIcssHandle, uint8_t phy0addr, uint8_t phy1addr, uint8_t enhancedlink_enable);
422 typedef int8_t (*bsp_get_phy_address_t)(uint8_t instance, uint8_t portNumber);
423 typedef void (*bsp_ethercat_stack_isr_function)(void);
424 
425 /* ========================================================================== */
426 /* Structure Declarations */
427 /* ========================================================================== */
428 
432 typedef struct bsp_params_s
433 {
456  uint32_t link0_polarity;
458  uint32_t link1_polarity;
460  uint32_t phy0_address;
462  uint32_t phy1_address;
464  const unsigned char *default_tiesc_eeprom;
475 } bsp_params;
476 
480 typedef struct
481 {
482  uint8_t sm_buf_index;
483  uint8_t lock_state;
484  uint16_t addr;
486 
491 typedef struct
492 {
493  uint8_t reserved1[0x90];
494  uint32_t system_time_low;
495  uint32_t system_time_high;
497  uint8_t reserved2[7];
498  uint16_t cmdlow;
499  uint16_t cmdlow_ack;
500  uint16_t param1low;
501  uint16_t param2low;
502  uint16_t resp1low;
503  uint16_t resp2low;
504 #ifndef SYSTEM_TIME_PDI_CONTROLLED
505  uint8_t reserved3[212];
506 #else
507  uint8_t reserved3[24];
508  uint32_t systime_offset_low;
509  uint32_t systime_offset_high;
510  uint8_t reserved4[180];
511 #endif
512  t_sm_processdata sm_processdata[6];
514 
518 typedef struct
519 {
520  uint8_t reserved[1024];
521  uint8_t reg_properties[4096];
523 
524 typedef struct
525 {
527  uint16_t length;
529 
533 typedef struct
534 {
535  uint16_t clkdiv;
536  uint8_t addr0;
537  uint8_t addr1;
538  uint8_t link0pol; /* LINK_MII signal polarity of PHY hooked to PRU-ICSS MII0. 1: Active lLow 0: Active High */
539  uint8_t link1pol; /* LINK_MII signal polarity of PHY hooked to PRU-ICSS MII1. 1: Active lLow 0: Active High */
541 } t_mdio_params;
542 
543 /* ========================================================================== */
544 /* Function Declarations */
545 /* ========================================================================== */
546 
556 void bsp_params_init(bsp_params *init_params);
557 
573 extern int32_t bsp_init(bsp_params *init_params);
574 
602  pruIcssHandle); //Internal API - invoked by bsp_init
603 
611 extern void bsp_start_esc_isr(PRUICSS_Handle pruIcssHandle);
612 
623 extern void bsp_exit(PRUICSS_Handle pruIcssHandle);
624 
639 extern void bsp_set_pdi_wd_trigger_mode(PRUICSS_Handle pruIcssHandle,
640  uint32_t mode);
683  uint32_t command, uint16_t param1, uint16_t param2);
698 extern void bsp_eeprom_emulation_init(void);
699 
709 extern int32_t bsp_eeprom_load_esc_registers(PRUICSS_Handle pruIcssHandle,
710  int32_t reload_flag);
711 
720 extern int32_t bsp_eeprom_emulation_reload(PRUICSS_Handle pruIcssHandle);
721 
729 
735 extern void bsp_eeprom_emulation_flush(void);
736 
742 extern void bsp_eeprom_emulation_exit(void);
743 
750 extern uint8_t *bsp_get_eeprom_cache_base(void);
751 
757 
765 
773 extern void bsp_set_eeprom_update_status(uint8_t status);
774 
782 extern uint8_t bsp_get_eeprom_update_status(void);
783 
802 extern void bsp_set_sm_properties(PRUICSS_Handle pruIcssHandle, uint8_t sm,
803  uint16_t address, uint16_t len);
815 
816 extern int16_t bsp_get_sm_index(uint16_t address, uint16_t len);
832 extern uint8_t bsp_pdi_sm_config_ongoing(PRUICSS_Handle pruIcssHandle);
845 extern void bsp_pdi_mbx_read_start(PRUICSS_Handle pruIcssHandle);
846 
852 extern void bsp_pdi_mbx_read_complete(PRUICSS_Handle pruIcssHandle);
853 
860 extern void bsp_pdi_mbx_write_start(PRUICSS_Handle pruIcssHandle);
861 
868 extern void bsp_pdi_mbx_write_complete(PRUICSS_Handle pruIcssHandle);
869 
889 extern uint16_t bsp_get_process_data_address(PRUICSS_Handle pruIcssHandle,
890  uint16_t address, uint16_t len, int16_t *p_sm_index);
891 
904  uint16_t address, uint16_t len, int16_t sm_index);
905 
922 extern uint8_t bsp_read_byte(PRUICSS_Handle pruIcssHandle, uint16_t address);
923 
934 extern uint16_t bsp_read_word(PRUICSS_Handle pruIcssHandle, uint16_t address);
935 
946 extern uint32_t bsp_read_dword(PRUICSS_Handle pruIcssHandle, uint16_t address);
947 
957 extern void bsp_read(PRUICSS_Handle pruIcssHandle, uint8_t *pdata,
958  uint16_t address,
959  uint16_t len);
960 
970 extern uint8_t bsp_read_byte_isr(PRUICSS_Handle pruIcssHandle, uint16_t address);
971 
981 extern uint16_t bsp_read_word_isr(PRUICSS_Handle pruIcssHandle,
982  uint16_t address);
983 
993 extern uint32_t bsp_read_dword_isr(PRUICSS_Handle pruIcssHandle,
994  uint16_t address);
995 
1013  uint16_t address, uint16_t length);
1028 extern void bsp_pdi_write_indication(PRUICSS_Handle pruIcssHandle,
1029  uint16_t address, uint16_t length,
1030  uint16_t value);
1039 extern void bsp_write_byte(PRUICSS_Handle pruIcssHandle, uint8_t val,
1040  uint16_t address);
1041 
1050 extern void bsp_write_word(PRUICSS_Handle pruIcssHandle, uint16_t val,
1051  uint16_t address);
1052 
1061 extern void bsp_write_dword(PRUICSS_Handle pruIcssHandle, uint32_t val,
1062  uint16_t address);
1063 
1073 extern void bsp_write(PRUICSS_Handle pruIcssHandle, uint8_t *pdata,
1074  uint16_t address, uint16_t len);
1075 
1084 extern uint32_t bsp_pruss_mdioreg_read(PRUICSS_Handle pruIcssHandle,
1085  uint32_t regoffset);
1086 
1095 extern void bsp_pruss_mdioreg_write(PRUICSS_Handle pruIcssHandle, uint32_t val,
1096  uint32_t regoffset);
1097 
1106 extern uint32_t bsp_pruss_iepreg_read(PRUICSS_Handle pruIcssHandle,
1107  uint32_t regoffset);
1108 
1117 extern void bsp_pruss_iepreg_write(PRUICSS_Handle pruIcssHandle, uint32_t val,
1118  uint32_t regoffset);
1119 
1127 extern void bsp_pruss_cmd_intfc_write_word(uint16_t val, volatile uint16_t *ptr);
1128 
1136 extern uint16_t bsp_pruss_cmd_intfc_read_word(volatile uint16_t *ptr);
1137 
1147 extern uint8_t bsp_get_pdi_access_perm(uint16_t address, uint8_t access);
1148 
1158 extern uint8_t bsp_pdi_access_perm_word(uint16_t address, uint8_t access);
1159 
1169 extern uint8_t bsp_pdi_access_perm_dword(uint16_t address, uint8_t access);
1170 
1181 extern uint8_t bsp_pdi_access_perm_array(uint16_t address, uint8_t access,
1182  uint16_t size);
1183 
1191 extern void bsp_set_pdi_perm_read_only(uint16_t *perm_array, uint16_t address);
1192 
1200 extern void bsp_set_pdi_perm_read_write(uint16_t *perm_array, uint16_t address);
1201 
1212 extern uint8_t bsp_is_pdi_perm_read_only(uint16_t *perm_array, uint16_t address);
1213 
1221 
1229 
1247 extern int16_t bsp_pruss_mdio_init(PRUICSS_Handle pruIcssHandle,
1248  t_mdio_params *pmdio_params);
1249 
1260 extern int16_t bsp_pruss_mdio_phy_read(PRUICSS_Handle pruIcssHandle,
1261  uint8_t phyaddr, uint8_t regoffset, uint16_t *regval);
1262 
1273 extern int16_t bsp_pruss_mdio_phy_write(PRUICSS_Handle pruIcssHandle,
1274  uint8_t phyaddr, uint8_t regoffset, uint16_t regval);
1275 
1286 extern uint32_t bsp_pruss_mdio_phy_link_state(PRUICSS_Handle pruIcssHandle,
1287  uint8_t phyaddr);
1301 
1308 extern void bsp_set_digio_out(PRUICSS_Handle pruIcssHandle, uint8_t num);
1309 
1316 extern void bsp_clear_digio_out(PRUICSS_Handle pruIcssHandle, uint8_t num);
1317 
1327 extern void bsp_hwspinlock_init(void);
1328 
1335 extern uint32_t bsp_hwspinlock_lock(int num);
1336 
1342 extern void bsp_hwspinlock_unlock(int num);
1343 
1350 #ifdef SYSTEM_TIME_PDI_CONTROLLED
1351 
1358 extern void bsp_pdi_latch0_control(PRUICSS_Handle pruIcssHandle, uint8_t val);
1359 
1367 extern void bsp_pdi_latch1_control(PRUICSS_Handle pruIcssHandle, uint8_t val);
1368 
1375 extern void bsp_pdi_write_system_time(PRUICSS_Handle pruIcssHandle,
1376  uint32_t systime);
1383 extern void bsp_pdi_write_system_timeoffset(PRUICSS_Handle pruIcssHandle,
1384  unsigned long long systime);
1391 extern void bsp_pdi_write_systime_delay(PRUICSS_Handle pruIcssHandle,
1392  uint32_t systime);
1401 extern void bsp_pdi_write_filterconfig(PRUICSS_Handle pruIcssHandle,
1402  uint16_t speedcount_start,
1403  uint8_t speedcount_filtdepth, uint8_t systime_filtdepth);
1404 #endif
1405 
1417 extern uint32_t bsp_get_timer_register(void);
1418 
1423 extern void bsp_clear_timer_register(void);
1430 extern void bsp_get_local_sys_time(uint32_t *systime_low,
1431  uint32_t *systime_high);
1432 
1441  uint32_t *systime_low, uint32_t *systime_high);
1442 
1451  uint32_t *systime_low, uint32_t *systime_high);
1452 
1461  uint32_t *systime_low, uint32_t *systime_high);
1462 
1471  uint32_t *systime_low, uint32_t *systime_high);
1472 
1484 extern void bsp_global_mutex_lock(void);
1485 
1490 extern void bsp_global_mutex_unlock(void);
1500 void Sync0Isr(void *args);
1504 void Sync1Isr(void *args);
1508 void EcatIsr(void *args);
1509 
1510 #ifndef SUPPORT_CMDACK_POLL_MODE
1511 
1514 void EscCmdLowAckIsr(void *args);
1515 #endif
1516 
1533 extern void bsp_set_pru_firmware(uint32_t *frameProc, uint32_t frameProcLen,
1534  uint32_t *hostProc, uint32_t hostProcLen);
1541 #ifdef __cplusplus
1542 }
1543 #endif
1544 
1545 #endif/*TIESC_BSP_H_ */
bsp_set_eeprom_update_status
void bsp_set_eeprom_update_status(uint8_t status)
Indicate to FWHAL whether EEPROM is written for flushing to non-volatile storage. Typically called on...
bsp_params::phy1_address
uint32_t phy1_address
Definition: tiescbsp.h:462
t_sm_processdata::sm_buf_index
uint8_t sm_buf_index
Definition: tiescbsp.h:482
bsp_get_pdi_read_access_fail_cnt
uint32_t bsp_get_pdi_read_access_fail_cnt()
Returns the count of PDI read access failures.
bsp_hwspinlock_lock
uint32_t bsp_hwspinlock_lock(int num)
Acquire selected spinlock instance.
t_host_interface::resp2low
uint16_t resp2low
Definition: tiescbsp.h:503
bsp_pdi_post_read_indication
void bsp_pdi_post_read_indication(PRUICSS_Handle pruIcssHandle, uint16_t address, uint16_t length)
Invoked after reading a register or mailbox buffer from PDI side .
EscCmdLowAckIsr
void EscCmdLowAckIsr(void *args)
ESC CMD Low ACK IRQ Handler.
bsp_eeprom_emulation_exit
void bsp_eeprom_emulation_exit(void)
Call EEPROM flush on exit.
size
uint16_t size
Definition: tisci_boardcfg.h:1
bsp_get_latch0_posedge_time
void bsp_get_latch0_posedge_time(PRUICSS_Handle pruIcssHandle, uint32_t *systime_low, uint32_t *systime_high)
Return latch0 posedge timestamp for application use(nanosec resolution)
bsp_pdi_mbx_write_start
void bsp_pdi_mbx_write_start(PRUICSS_Handle pruIcssHandle)
Indicates to the firmware that PDI side write to read mailbox has started.
bsp_global_mutex_lock
void bsp_global_mutex_lock(void)
Critical section enter API using semaphore/mutex/interrupt disable primitives from RTOS....
bsp_pdi_access_perm_dword
uint8_t bsp_pdi_access_perm_dword(uint16_t address, uint8_t access)
Checks if the PDI register [Four bytes] has the requested access permission and returns the result.
bsp_params::eeprom_pointer_for_stack
uint8_t ** eeprom_pointer_for_stack
Definition: tiescbsp.h:466
t_host_interface::system_time_low
uint32_t system_time_low
Definition: tiescbsp.h:494
t_host_interface::cmdlow_ack
uint16_t cmdlow_ack
Definition: tiescbsp.h:499
t_sm_processdata
Struct for host to PRU-ICSS command interface.
Definition: tiescbsp.h:481
t_mdio_params::addr0
uint8_t addr0
Definition: tiescbsp.h:536
bsp_process_data_access_complete
void bsp_process_data_access_complete(PRUICSS_Handle pruIcssHandle, uint16_t address, uint16_t len, int16_t sm_index)
This API is invoked after PDI side completes read/write to PD address returned by bsp_get_process_dat...
bsp_params::ethphy_init
bsp_ethphy_init_t ethphy_init
Definition: tiescbsp.h:451
bsp_read_word
uint16_t bsp_read_word(PRUICSS_Handle pruIcssHandle, uint16_t address)
Read a 16-bit value at 'Address' from ESC memory: SM mailbox (single buffer) mapped or register area.
t_sm_processdata::lock_state
uint8_t lock_state
Definition: tiescbsp.h:483
bsp_get_latch1_posedge_time
void bsp_get_latch1_posedge_time(PRUICSS_Handle pruIcssHandle, uint32_t *systime_low, uint32_t *systime_high)
Return latch1 posedge timestamp for application use(nanosec resolution)
pruicss.h
bsp_hwspinlock_unlock
void bsp_hwspinlock_unlock(int num)
Release selected spinlock instance.
bsp_is_pdi_perm_read_only
uint8_t bsp_is_pdi_perm_read_only(uint16_t *perm_array, uint16_t address)
Checks if the PDI register [byte] has read only access permission and returns the result.
bsp_send_command_to_firmware
void bsp_send_command_to_firmware(PRUICSS_Handle pruIcssHandle, uint32_t command, uint16_t param1, uint16_t param2)
Send command and parameters from stack to firmware to perform some action based on stack state or in ...
bsp_read_byte
uint8_t bsp_read_byte(PRUICSS_Handle pruIcssHandle, uint16_t address)
Read a byte value at 'Address' from ESC memory: SM mailbox (single buffer) mapped or register area.
bsp_pdi_write_indication
void bsp_pdi_write_indication(PRUICSS_Handle pruIcssHandle, uint16_t address, uint16_t length, uint16_t value)
Invoked after writing a register or mailbox buffer from PDI side .
t_sm_properties::length
uint16_t length
Definition: tiescbsp.h:527
bsp_params_init
void bsp_params_init(bsp_params *init_params)
Initialize the members of bsp_params with default values.
t_sm_properties
Definition: tiescbsp.h:525
bsp_pruss_iepreg_write
void bsp_pruss_iepreg_write(PRUICSS_Handle pruIcssHandle, uint32_t val, uint32_t regoffset)
Write a 32-bit value from PRU-ICSS IEP register at 'regoffset'.
bsp_pruss_mdioreg_read
uint32_t bsp_pruss_mdioreg_read(PRUICSS_Handle pruIcssHandle, uint32_t regoffset)
Read a 32-bit value from PRU-ICSS MDIO register at 'regoffset'.
bsp_hwspinlock_unlock_t
void(* bsp_hwspinlock_unlock_t)(int num)
Definition: tiescbsp.h:420
bsp_read_dword_isr
uint32_t bsp_read_dword_isr(PRUICSS_Handle pruIcssHandle, uint16_t address)
Read a 32-bit value at 'Address' from ESC process data memory: SM buffer (3-buffer) mapped area.
bsp_eeprom_emulation_reload
int32_t bsp_eeprom_emulation_reload(PRUICSS_Handle pruIcssHandle)
Perform reload operation after validating EEPROM CRC.
bsp_set_pdi_wd_trigger_mode
void bsp_set_pdi_wd_trigger_mode(PRUICSS_Handle pruIcssHandle, uint32_t mode)
Configure PDI WD trigger mode, PDI WD is triggered automatically by h/w on RX_SOF(port0/port1),...
bsp_eeprom_emulation_flush
void bsp_eeprom_emulation_flush(void)
Flush the EEPROM cache to non-volatile storage. Write is performed using eeprom_write callback from b...
bsp_read
void bsp_read(PRUICSS_Handle pruIcssHandle, uint8_t *pdata, uint16_t address, uint16_t len)
Read a byte array at 'address' from ESC memory.
bsp_get_process_data_address
uint16_t bsp_get_process_data_address(PRUICSS_Handle pruIcssHandle, uint16_t address, uint16_t len, int16_t *p_sm_index)
Get the actual address of the buffer for PDI side read/write from host in 3-buffer mode.
bsp_eeprom_read_t
int32_t(* bsp_eeprom_read_t)(uint8_t *buf, uint32_t len)
Definition: tiescbsp.h:416
bsp_read_word_isr
uint16_t bsp_read_word_isr(PRUICSS_Handle pruIcssHandle, uint16_t address)
Read a 16-bit value at 'Address' from ESC process data memory: SM buffer (3-buffer) mapped area.
bsp_set_sm_properties
void bsp_set_sm_properties(PRUICSS_Handle pruIcssHandle, uint8_t sm, uint16_t address, uint16_t len)
Set the address, length info from register to FWHAL layer. During INIT to PREOP transition in Mailbox...
t_host_interface::system_time_high
uint32_t system_time_high
Definition: tiescbsp.h:495
bsp_params::pdi_isr
bsp_ethercat_stack_isr_function pdi_isr
Definition: tiescbsp.h:469
bsp_pruss_mdio_phy_write
int16_t bsp_pruss_mdio_phy_write(PRUICSS_Handle pruIcssHandle, uint8_t phyaddr, uint8_t regoffset, uint16_t regval)
API to write PHY register via PRU-ICSS MDIO.
bsp_params::spinlock_base_address
uint32_t spinlock_base_address
Definition: tiescbsp.h:448
t_register_properties
Struct for register permission array.
Definition: tiescbsp.h:519
bsp_get_latch1_negedge_time
void bsp_get_latch1_negedge_time(PRUICSS_Handle pruIcssHandle, uint32_t *systime_low, uint32_t *systime_high)
Return latch0 negedge timestamp for application use(nanosec resolution)
bsp_set_pru_firmware
void bsp_set_pru_firmware(uint32_t *frameProc, uint32_t frameProcLen, uint32_t *hostProc, uint32_t hostProcLen)
This function internally sets the location from which PRU firmwares can be loaded.
bsp_pdi_access_perm_word
uint8_t bsp_pdi_access_perm_word(uint16_t address, uint8_t access)
Checks if the PDI register [Two bytes] has the requested access permission and returns the result.
bsp_set_pdi_perm_read_only
void bsp_set_pdi_perm_read_only(uint16_t *perm_array, uint16_t address)
Set the PDI register [byte] access permission to read only.
bsp_ethphy_init_t
void(* bsp_ethphy_init_t)(PRUICSS_Handle pruIcssHandle, uint8_t phy0addr, uint8_t phy1addr, uint8_t enhancedlink_enable)
Definition: tiescbsp.h:421
bsp_eeprom_write_t
int32_t(* bsp_eeprom_write_t)(uint8_t *buf, uint32_t len)
Definition: tiescbsp.h:417
t_mdio_params::enhancedlink_enable
uint8_t enhancedlink_enable
Definition: tiescbsp.h:540
value
uint32_t value
Definition: tisci_otp_revision.h:2
bsp_set_eeprom_updated_time
void bsp_set_eeprom_updated_time(void)
Set EEPROM update time.
bsp_write_byte
void bsp_write_byte(PRUICSS_Handle pruIcssHandle, uint8_t val, uint16_t address)
Write a byte value at 'address' in ESC memory.
bsp_eeprom_load_esc_registers
int32_t bsp_eeprom_load_esc_registers(PRUICSS_Handle pruIcssHandle, int32_t reload_flag)
For loading ESC registers from EEPROM during first boot/reload after validating CRC.
bsp_esc_reg_perm_init
void bsp_esc_reg_perm_init(PRUICSS_Handle pruIcssHandle)
Sets up register permissions for ECAT side access for TI ESC, if ENABLE_PDI_REG_PERMISSIONS is define...
bsp_write
void bsp_write(PRUICSS_Handle pruIcssHandle, uint8_t *pdata, uint16_t address, uint16_t len)
Write 'len' bytes from pdata to 'address' in ESC memory.
t_mdio_params::addr1
uint8_t addr1
Definition: tiescbsp.h:537
t_host_interface::resp1low
uint16_t resp1low
Definition: tiescbsp.h:502
bsp_write_word
void bsp_write_word(PRUICSS_Handle pruIcssHandle, uint16_t val, uint16_t address)
Write a 16-bit value at 'address' in ESC memory.
bsp_init_spinlock_t
void(* bsp_init_spinlock_t)(void)
Definition: tiescbsp.h:418
bsp_eeprom_emulation_command_ack
void bsp_eeprom_emulation_command_ack(PRUICSS_Handle pruIcssHandle)
Perform reload operation after validating EEPROM CRC, Wrapper API for SSC.
bsp_pruss_mdio_phy_read
int16_t bsp_pruss_mdio_phy_read(PRUICSS_Handle pruIcssHandle, uint8_t phyaddr, uint8_t regoffset, uint16_t *regval)
API to read PHY register via PRU-ICSS MDIO.
t_mdio_params::link1pol
uint8_t link1pol
Definition: tiescbsp.h:539
t_mdio_params
Struct for MDIO initialization parameters.
Definition: tiescbsp.h:534
bsp_set_digio_out
void bsp_set_digio_out(PRUICSS_Handle pruIcssHandle, uint8_t num)
Set selected digital output pin.
bsp_get_pdi_access_perm
uint8_t bsp_get_pdi_access_perm(uint16_t address, uint8_t access)
Checks if the PDI register [byte] has the requested access permission and returns the result.
bsp_global_mutex_unlock
void bsp_global_mutex_unlock(void)
Critical section leave API using semaphore/mutex/interrupt enable primitives from RTOS....
t_host_interface::param2low
uint16_t param2low
Definition: tiescbsp.h:501
bsp_params::interrupt_offset
int32_t interrupt_offset
Definition: tiescbsp.h:436
bsp_exit
void bsp_exit(PRUICSS_Handle pruIcssHandle)
Cleanup of EtherCAT FWHAL It does following things: .
t_host_interface
Struct for host to PRU-ICSS command interface Starts at PRU0 DMEM.
Definition: tiescbsp.h:492
bsp_params::link0_polarity
uint32_t link0_polarity
Definition: tiescbsp.h:456
bsp_init
int32_t bsp_init(bsp_params *init_params)
Initialize the EtherCAT FWHAL It does following things: .
bsp_read_dword
uint32_t bsp_read_dword(PRUICSS_Handle pruIcssHandle, uint16_t address)
Read a 32-bit value at 'Address' from ESC memory: SM mailbox (single buffer) mapped or register area.
bsp_start_esc_isr
void bsp_start_esc_isr(PRUICSS_Handle pruIcssHandle)
Register IRQ handlers for various PRU-ICSS interrupts from firmware to host to clear corresponding ev...
bsp_get_timer_register
uint32_t bsp_get_timer_register(void)
Returns the time difference from last call of bsp_clear_timer_register to this bsp_get_timer_register...
bsp_get_eeprom_updated_time
uint32_t bsp_get_eeprom_updated_time(void)
Get EEPROM Updated time.
bsp_params::pruicss_handle
PRUICSS_Handle pruicss_handle
Definition: tiescbsp.h:434
bsp_pruss_cmd_intfc_write_word
void bsp_pruss_cmd_intfc_write_word(uint16_t val, volatile uint16_t *ptr)
Read a 16-bit value from PRU-ICSS IEP command interface.
t_host_interface::param1low
uint16_t param1low
Definition: tiescbsp.h:500
t_mdio_params::link0pol
uint8_t link0pol
Definition: tiescbsp.h:538
bsp_hwspinlock_lock_t
uint32_t(* bsp_hwspinlock_lock_t)(int num)
Definition: tiescbsp.h:419
bsp_get_local_sys_time
void bsp_get_local_sys_time(uint32_t *systime_low, uint32_t *systime_high)
Return EtherCAT time base for application use.
bsp_write_dword
void bsp_write_dword(PRUICSS_Handle pruIcssHandle, uint32_t val, uint16_t address)
Write a 32-bit value at 'address' in ESC memory.
bsp_pruss_cmd_intfc_read_word
uint16_t bsp_pruss_cmd_intfc_read_word(volatile uint16_t *ptr)
Read a 16-bit value from PRU-ICSS IEP command interface.
reserved
uint16_t reserved
Definition: tisci_boardcfg_rm.h:2
bsp_pruss_iepreg_read
uint32_t bsp_pruss_iepreg_read(PRUICSS_Handle pruIcssHandle, uint32_t regoffset)
Read a 32-bit value from PRU-ICSS IEP register at 'regoffset'.
bsp_eeprom_emulation_init
void bsp_eeprom_emulation_init(void)
Initialize the EEPROM cache in volatile RAM. If the non-volatile storage has valid data(read is perfo...
bsp_pdi_access_perm_array
uint8_t bsp_pdi_access_perm_array(uint16_t address, uint8_t access, uint16_t size)
Checks if all PDI registers starting from 'address' has the requested access permission and returns t...
t_sm_processdata::addr
uint16_t addr
Definition: tiescbsp.h:484
bsp_set_pdi_perm_read_write
void bsp_set_pdi_perm_read_write(uint16_t *perm_array, uint16_t address)
Set the PDI register [byte] access permission to read and write.
mode
char mode[32]
Definition: tisci_pm_core.h:1
bsp_params::phy0_address
uint32_t phy0_address
Definition: tiescbsp.h:460
bsp_params::eeprom_write
bsp_eeprom_write_t eeprom_write
Definition: tiescbsp.h:446
bsp_clear_timer_register
void bsp_clear_timer_register(void)
Update the time when bsp_clear_timer_register last invoked. This is a wrapper API used by SSC.
Sync1Isr
void Sync1Isr(void *args)
SYNC1 IRQ Handler.
bsp_pdi_mbx_read_start
void bsp_pdi_mbx_read_start(PRUICSS_Handle pruIcssHandle)
Indicates to the firmware that PDI side read from write mailbox has started.
t_mdio_params::clkdiv
uint16_t clkdiv
Definition: tiescbsp.h:535
bsp_get_pdi_write_access_fail_cnt
uint32_t bsp_get_pdi_write_access_fail_cnt()
Returns the count of PDI write access failures.
bsp_get_phy_address_t
int8_t(* bsp_get_phy_address_t)(uint8_t instance, uint8_t portNumber)
Definition: tiescbsp.h:422
bsp_pdi_mbx_read_complete
void bsp_pdi_mbx_read_complete(PRUICSS_Handle pruIcssHandle)
Indicates to the firmware that PDI side read from write mailbox has completed.
Sync0Isr
void Sync0Isr(void *args)
SYNC0 IRQ handler.
bsp_pruss_mdio_init
int16_t bsp_pruss_mdio_init(PRUICSS_Handle pruIcssHandle, t_mdio_params *pmdio_params)
Initializes PRU-ICSS MDIO for EtherCAT firmware to communicate with PHYs. Must be called after poweri...
bsp_pdi_mbx_write_complete
void bsp_pdi_mbx_write_complete(PRUICSS_Handle pruIcssHandle)
Indicates to the firmware that PDI side write to read mailbox has completed.
bsp_clear_digio_out
void bsp_clear_digio_out(PRUICSS_Handle pruIcssHandle, uint8_t num)
Clear selected digital output pin.
bsp_get_sm_properties
t_sm_properties * bsp_get_sm_properties(uint8_t sm)
Get the pointer to requested SM properties. It is used for Buffer/Mailbox read/write detection from H...
bsp_params::sync1_isr
bsp_ethercat_stack_isr_function sync1_isr
Definition: tiescbsp.h:473
bsp_get_eeprom_update_status
uint8_t bsp_get_eeprom_update_status(void)
Read the EEPROM update status from FWHAL. Typically called from low priority task periodically check ...
t_host_interface::cmdlow
uint16_t cmdlow
Definition: tiescbsp.h:498
bsp_params::enhancedlink_enable
uint8_t enhancedlink_enable
Definition: tiescbsp.h:453
bsp_get_sm_index
int16_t bsp_get_sm_index(uint16_t address, uint16_t len)
bsp_ethercat_stack_isr_function
void(* bsp_ethercat_stack_isr_function)(void)
Definition: tiescbsp.h:423
bsp_read_byte_isr
uint8_t bsp_read_byte_isr(PRUICSS_Handle pruIcssHandle, uint16_t address)
Read a byte value at 'Address' from ESC process data memory: SM buffer (3-buffer) mapped area.
bsp_set_digio_sw_dataout_enable
void bsp_set_digio_sw_dataout_enable(PRUICSS_Handle pruIcssHandle)
Configure digio for sw controlled dataout mode.
EcatIsr
void EcatIsr(void *args)
ECAT IRQ Handler.
bsp_params
Struct for FWHAL initialization Parameters.
Definition: tiescbsp.h:433
bsp_get_eeprom_cache_base
uint8_t * bsp_get_eeprom_cache_base(void)
Return pointer to volatile EEPROM cache in FWHAL for processing to access the EEPROM.
bsp_pruss_mdioreg_write
void bsp_pruss_mdioreg_write(PRUICSS_Handle pruIcssHandle, uint32_t val, uint32_t regoffset)
Write a 32-bit value from PRU-ICSS MDIO register at 'regoffset'.
bsp_params::link1_polarity
uint32_t link1_polarity
Definition: tiescbsp.h:458
bsp_pdi_sm_config_ongoing
uint8_t bsp_pdi_sm_config_ongoing(PRUICSS_Handle pruIcssHandle)
Checks whether firmware has finished updating internal state for SM configuration change initiated by...
bsp_params::sync0_isr
bsp_ethercat_stack_isr_function sync0_isr
Definition: tiescbsp.h:471
bsp_params::eeprom_read
bsp_eeprom_read_t eeprom_read
Definition: tiescbsp.h:444
t_host_interface::sm_config_ongoing
uint8_t sm_config_ongoing
Definition: tiescbsp.h:496
bsp_pruss_mdio_phy_link_state
uint32_t bsp_pruss_mdio_phy_link_state(PRUICSS_Handle pruIcssHandle, uint8_t phyaddr)
Get the link status for selected PHY, this API considers MII_link signal polarity differences and rec...
PRUICSS_Handle
struct PRUICSS_Config_s * PRUICSS_Handle
A handle that is returned from a PRUICSS_open() call. This handle is required for calling other APIs.
Definition: pruicss/v0/pruicss.h:234
t_sm_properties::physical_start_addr
uint16_t physical_start_addr
Definition: tiescbsp.h:526
bsp_params::default_tiesc_eeprom
const unsigned char * default_tiesc_eeprom
Definition: tiescbsp.h:464
bsp_get_latch0_negedge_time
void bsp_get_latch0_negedge_time(PRUICSS_Handle pruIcssHandle, uint32_t *systime_low, uint32_t *systime_high)
Return latch0 negedge timestamp for application use(nanosec resolution)
bsp_hwspinlock_init
void bsp_hwspinlock_init(void)
Initialize SOC spinlock, enable clocks and init spinlock instance 0 through 7 to unlocked state.