AM263x MCU+ SDK  08.02.01
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 
92 /* ========================================================================== */
93 /* Include Files */
94 /* ========================================================================== */
95 
96 #ifndef DISABLE_UART_PRINT
97 #include <stdio.h>
98 #endif
99 
100 #include <industrial_comms/ethercat_slave/icss_fwhal/tiesc_pruss_intc_mapping.h>
101 #include <drivers/pruicss.h>
102 #include <industrial_comms/ethercat_slave/icss_fwhal/tiesc_def.h>
103 
104 #ifdef __cplusplus
105 extern "C" {
106 #endif
107 
108 /* ========================================================================== */
109 /* Macros & Typedefs */
110 /* ========================================================================== */
111 
112 
117 #define TIESC_MAX_FRAME_SIZE (0x7CF)
118 
119 /*Single datagram accessing contiguous multiple FMMU mapped areas in a single slave for process data
120 is supported now by TI ESC firmware.
121 Process path latency in TI ESC is high when this support is active
122 For specific use cases (4SM with 3 FMMUs or multiple FMMUs (in a given ESC) are not accessed in a single datagram)
123 process path latency improvement can be achieved by disabling below define */
124 #define ENABLE_MULTIPLE_SM_ACCESS_IN_SINGLE_DATAGRAM 0
125 
126 #define MAX_SYNC_MAN 8
127 #define SIZEOF_SM_REGISTER 8
128 
129 #define TIESC_EEPROM_SIZE 0x800
130 
131 #define MAILBOX_WRITE 0
132 #define MAILBOX_READ 1
133 #define PROCESS_DATA_OUT 2
134 #define PROCESS_DATA_IN 3
135 
136 #define MBX_WRITE_EVENT ((uint16_t) 0x0100)
137 #define MBX_READ_EVENT ((uint16_t) 0x0200)
138 
139 //Below constants are not defined in esc.h
140 #define ESC_ADDR_REV_TYPE 0x000
141 #define ESC_ADDR_BUILD 0x002
142 
143 #define ESC_ADDR_CONFIG_STATION_ALIAS 0x012
144 #define ESC_ADDR_DLSTATUS 0x110
145 #define ESC_ADDR_ALCONTROL 0x120
146 #define ESC_ADDR_ALSTATUS 0x130
147 #define ESC_ADDR_PDI_CONTROL 0x140
148 #define ESC_PDI_CONTROL_ELD_ALL_PORTS_MASK (1 << 1)
149 #define ESC_ADDR_PDI_CONFIG 0x150
150 #define ESC_ADDR_AL_EVENT_MASK 0x204
151 #define ESC_ADDR_AL_EVENT_REQ 0x220
152 #define ESC_ADDR_SM_WD_STATUS 0x440
153 #define ESC_ADDR_EEPROM_CTRL 0x502
154 #define ESC_ADDR_MI_ECAT_ACCESS 0x516
155 #define ESC_ADDR_MI_PDI_ACCESS 0x517
156 
157 #define ESC_EEPROM_CMD_MASK 0x0700 //Description (0x502.8:10): Command bit mask
158 #define ESC_EEPROM_CMD_READ_MASK 0x0100 //Description (0x502.8): Currently executed read command
159 #define ESC_EEPROM_CMD_WRITE_MASK 0x0200 //Description (0x502.9): Initialize Write Command
160 #define ESC_EEPROM_CMD_RELOAD_MASK 0x0400 //Description (0x502.10): Trigger EEPROM reload
161 #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)
162 #define ESC_EEPROM_ERROR_CRC 0x0800 //Description (0x502.11): EEPROM CRC Error
163 #define ESC_EEPROM_ERROR_CMD_ACK 0x2000 //Description (0x502.13): EEPROM Busy
164 #define ESC_EEPROM_BUSY_MASK 0x8000 //Description (0x502.15): EEPROM Busy
165 
166 #define ESC_ADDR_SYNCMAN 0x800
167 
168 #define ESC_ADDR_SM1_STATUS 0x80D
169 #define SM_STATUS_MBX_FULL 0x08
170 
171 #define ESC_ADDR_SM0_STATUS 0x805
172 #define ESC_ADDR_SM0_ACTIVATE 0x806
173 #define ESC_ADDR_SM1_ACTIVATE 0x806+8
174 #define ESC_ADDR_SM2_ACTIVATE 0x806+8*2
175 #define ESC_ADDR_SM3_ACTIVATE 0x806+8*3
176 #define ESC_ADDR_SM4_ACTIVATE 0x806+8*4
177 #define ESC_ADDR_SM5_ACTIVATE 0x806+8*5
178 #define ESC_ADDR_SM6_ACTIVATE 0x806+8*6
179 #define ESC_ADDR_SM7_ACTIVATE 0x806+8*7
180 #define ESC_ADDR_SM0_PDI_CONTROL 0x807
181 #define ESC_ADDR_SM1_PDI_CONTROL 0x807+8
182 #define ESC_ADDR_SM2_PDI_CONTROL 0x807+8*2
183 #define ESC_ADDR_SM3_PDI_CONTROL 0x807+8*3
184 #define ESC_ADDR_SM4_PDI_CONTROL 0x807+8*4
185 #define ESC_ADDR_SM5_PDI_CONTROL 0x807+8*5
186 #define ESC_ADDR_SM6_PDI_CONTROL 0x807+8*6
187 #define ESC_ADDR_SM7_PDI_CONTROL 0x807+8*7
188 
189 #define SM_PDI_CONTROL_SM_DISABLE 1
190 
191 #define ESC_ADDR_SYSTIME 0x910
192 #define ESC_ADDR_SYSTIME_HIGH 0x914
193 #define ESC_ADDR_SYSTIME_OFFSET 0x920
194 #define ESC_ADDR_SYSTIME_DELAY 0x928
195 #define ESC_ADDR_SPEEDCOUNTER_START 0x930
196 #define ESC_ADDR_TIMEDIFF_FILTDEPTH 0x934
197 #define ESC_ADDR_SPEEDDIFF_FILTDEPTH 0x935
198 #define ESC_ADDR_SYNC_PULSE_LENGTH 0x982
199 #define ESC_ADDR_SYNC_STATUS 0x98E
200 #define ESC_ADDR_LATCH0_CONTROL 0x9A8
201 #define ESC_ADDR_LATCH1_CONTROL 0x9A9
202 #define ESC_ADDR_LATCH0_POS_EDGE 0x9B0
203 #define ESC_ADDR_LATCH0_NEG_EDGE 0x9B8
204 #define ESC_ADDR_LATCH1_POS_EDGE 0x9C0
205 #define ESC_ADDR_LATCH1_NEG_EDGE 0x9C8
206 #define ESC_ADDR_TI_PORT0_ACTIVITY 0xE00
207 #define ESC_ADDR_TI_PORT1_ACTIVITY 0xE04
208 #define ESC_ADDR_TI_PORT0_PHYADDR 0xE08
209 #define ESC_ADDR_TI_PORT1_PHYADDR 0xE09
210 #define ESC_ADDR_TI_PDI_ISR_PINSEL 0xE0A
211 #define ESC_ADDR_TI_PHY_LINK_POLARITY 0XE0C
212 #define ESC_ADDR_TI_PORT0_TX_START_DELAY 0xE10
213 #define ESC_ADDR_TI_PORT1_TX_START_DELAY 0xE12
214 #define ESC_ADDR_TI_ESC_RESET 0xE14
215 #define ESC_ADDR_TI_EDMA_LATENCY_ENHANCEMENT 0xE24
216 #define ESC_ADDR_TI_PHY_RX_ER_REG 0xE28
217 #define TI_ESC_RST_CMD_U 0x545352
218 #define TI_ESC_RST_CMD_L 0x747372
219 
220 #define ESC_ADDR_MEMORY 0x1000
221 
222 #define CMD_DL_USER_CLEAR_AL_EVENT_HIGH 0x0
223 #define CMD_DL_USER_GET_BUFFER_READ_ADDR 0x1
224 #define CMD_DL_USER_GET_BUFFER_WRITE_ADDR 0x2
225 #define CMD_DL_USER_SET_BUFFER_WRITE_DONE 0x3
226 
230 #define CMD_DL_USER_ACK_MBX_READ 0x4
231 
235 #define CMD_DL_USER_ACK_MBX_WRITE 0x5
236 
240 #define CMD_DL_USER_EEPROM_CMD_ACK 0x6
241 
245 #define CMD_DL_USER_READ_SYNC_STATUS 0x7
246 #define SYNC0 0
247 #define SYNC1 1
248 
252 #define CMD_DL_USER_READ_AL_CONTROL 0x8
253 
257 #define CMD_DL_USER_WRITE_AL_STATUS 0x9
258 
262 #define CMD_DL_USER_READ_PD_WD_STATUS 0xA
263 
267 #define CMD_DL_USER_READ_SM_ACTIVATE 0xB
268 
272 #define CMD_DL_USER_WRITE_SM_PDI_CTRL 0xC
273 
277 #define CMD_DL_USER_READ_LATCH_TIME 0xD
278 #define LATCH0_POS_EDGE 0
279 #define LATCH0_NEG_EDGE 1
280 #define LATCH1_POS_EDGE 2
281 #define LATCH1_NEG_EDGE 3
282 
287 #define CMD_DL_USER_READ_SYS_TIME 0xE
288 
292 #define CMD_DL_USER_CLEAR_AL_EVENT_LOW 0xF
293 #ifdef SYSTEM_TIME_PDI_CONTROLLED
294 
298 #define CMD_DL_USER_SYSTIME_PDI_CONTROL 0x10
299 #define WRITE_SYSTIME 0
300 #define WRITE_SYSTIME_OFFSET 1
301 #define WRITE_FILTER_CONFIG 2
302 #endif
303 
304 #define SWAPWORD
305 #define SWAPDWORD
306 
307 #define ICSS_MDIO_USRPHYSEL_LINKINT_ENABLE 0x40
308 #define ICSS_MDIO_USRPHYSEL_LINKSTAT_MLINK 0x80
309 
310 #define TIESC_PERM_RW 0x0
311 #define TIESC_PERM_WRITE_ONLY 0x1
312 #define TIESC_PERM_READ_ONLY 0x2
313 
314 #define TIESC_PERM_WRITE TIESC_PERM_WRITE_ONLY
315 #define TIESC_PERM_READ TIESC_PERM_READ_ONLY
316 
317 #define PDI_PERM_RW 0x0
318 #define PDI_PERM_READ_ONLY 0x1
319 
320 #define PDI_PERM_WRITE PDI_PERM_RW
321 #define PDI_PERM_READ PDI_PERM_READ_ONLY
322 
323 #define TIESC_MDIO_CLKDIV 79 //For 2.5MHz MDIO clock: 200/(TIESC_MDIO_CLKDIV+1)
324 
325 #define TIESC_MDIO_RX_LINK_DISABLE 0 //Slow MDIO state m/c based link detection
326 #define TIESC_MDIO_RX_LINK_ENABLE 1 //Fast link detect using RXLINK forward from PHY to MDIO MLINK
327 #define TIESC_LINK_POL_ACTIVE_LOW 1
328 #define TIESC_LINK_POL_ACTIVE_HIGH 0
329 
334 #define PDI_WD_TRIGGER_RX_SOF (0 << 4)
335 
340 #define PDI_WD_TRIGGER_LATCH_IN (1 << 4)
341 
346 #define PDI_WD_TRIGGER_SYNC0_OUT (2 << 4)
347 
352 #define PDI_WD_TRIGGER_SYNC1_OUT (3 << 4)
353 
354 #if ENABLE_MULTIPLE_SM_ACCESS_IN_SINGLE_DATAGRAM
355 #define TIESC_PORT0_TX_DELAY 0xA0
356 #else
357 #define TIESC_PORT0_TX_DELAY 0x50
358 #endif
359 #define TIESC_PORT1_TX_DELAY 0x50
360 
361 #define PDI_ISR_EDIO_NUM 7 //GPMC_CSN(2) -> pr1_edio_data_out7 for ICEv2.J4.Pin21
362 
363 /* PDI side register protection using register permission table (4KB) in memory - disable if you care for performance and memory foot print */
364 /* #define ENABLE_PDI_REG_PERMISSIONS */
365 
366 /* Use ESC system time instead of SYS/BIOS Timestamp_get32 for timing info */
367 #define USE_ECAT_TIMER
368 
369 
370 /* Uncomment following to enable DC feature of system time compensation via PDI interface instead of ECAT interface
371  for synchronizing two independent EtherCAT networks */
372 //#define SYSTEM_TIME_PDI_CONTROLLED
373 /*Comment to following to enable PDI ISR and SYNC ISR in HWI context */
374 #define ENABLE_PDI_TASK
375 #define ENABLE_SYNC_TASK
376 
383 /* #define SUPPORT_CMDACK_POLL_MODE */
384 
385 #if defined (__aarch64__)
386 #define ASSERT_DMB() __asm__(" dmb ISH")
387 #define ASSERT_DSB() __asm__(" dsb ISH")
388 #else
389 #define ASSERT_DMB() __asm__(" dmb")
390 #define ASSERT_DSB() __asm__(" dsb")
391 #endif
392 
393 #ifdef USE_ECAT_TIMER
394 #define ECAT_TIMER_INC_P_MS 1000000
395 #else
396 #define ECAT_TIMER_INC_P_MS ecat_timer_inc_p_ms /* ARM frequency: Will be detected during bsp_init*/
397 extern volatile uint32_t ecat_timer_inc_p_ms;
398 #endif
399 
400 #define ESC_SYSTEMTIME_OFFSET_OFFSET 0x0920
401 #define ESC_SPEED_COUNTER_START_OFFSET 0x0930
402 #define ESC_DC_START_TIME_CYCLIC_OFFSET 0x0990
403 
404 #define DRIFTCTRL_TASK_SYNC_ZERO_CROSS_ADJUST 0xE0 //PRU_DMEM0
405 
410 #define LOCK_PD_BUF_AVAILABLE_FOR_HOST 0
411 
415 #define LOCK_PD_BUF_HOST_ACCESS_START 1
416 
420 #define LOCK_PD_BUF_HOST_ACCESS_FINISH 2
421 
428 #define LOCK_PD_BUF_CHECK_AVAILABILITY_RETRY_COUNT (10U)
429 
430 typedef int32_t (*bsp_eeprom_read_t)(uint8_t *buf, uint32_t len);
431 typedef int32_t (*bsp_eeprom_write_t)(uint8_t *buf, uint32_t len);
432 typedef void (*bsp_init_spinlock_t)(void);
433 typedef uint32_t (*bsp_hwspinlock_lock_t)(int num);
434 typedef void (*bsp_hwspinlock_unlock_t)(int num);
435 typedef void (*bsp_ethphy_init_t)(PRUICSS_Handle pruIcssHandle, uint8_t phy0addr, uint8_t phy1addr, uint8_t enhancedlink_enable);
436 typedef int8_t (*bsp_get_phy_address_t)(uint8_t instance, uint8_t portNumber);
437 typedef void (*bsp_ethercat_stack_isr_function)(void);
438 
439 /* ========================================================================== */
440 /* Structure Declarations */
441 /* ========================================================================== */
442 
446 typedef struct bsp_params_s
447 {
470  uint32_t link0_polarity;
472  uint32_t link1_polarity;
474  uint32_t phy0_address;
476  uint32_t phy1_address;
478  const unsigned char *default_tiesc_eeprom;
489  uint16_t phy_rx_err_reg;
492 } bsp_params;
493 
497 typedef struct
498 {
499  uint8_t sm_buf_index;
500  uint8_t lock_state;
501  uint16_t addr;
503 
508 typedef struct
509 {
510  uint8_t reserved1[0x90];
511  uint32_t system_time_low;
512  uint32_t system_time_high;
514  uint8_t reserved2[7];
515  uint16_t cmdlow;
516  uint16_t cmdlow_ack;
517  uint16_t param1low;
518  uint16_t param2low;
519  uint16_t resp1low;
520  uint16_t resp2low;
521 #ifndef SYSTEM_TIME_PDI_CONTROLLED
522  uint8_t reserved3[212];
523 #else
524  uint8_t reserved3[24];
525  uint32_t systime_offset_low;
526  uint32_t systime_offset_high;
527  uint8_t reserved4[180];
528 #endif
529  t_sm_processdata sm_processdata[6];
531 
535 typedef struct
536 {
537  uint8_t reserved[1024];
538  uint8_t reg_properties[4096];
540 
541 typedef struct
542 {
544  uint16_t length;
546 
550 typedef struct
551 {
552  uint16_t clkdiv;
553  uint8_t addr0;
554  uint8_t addr1;
555  uint8_t link0pol; /* LINK_MII signal polarity of PHY hooked to PRU-ICSS MII0. 1: Active lLow 0: Active High */
556  uint8_t link1pol; /* LINK_MII signal polarity of PHY hooked to PRU-ICSS MII1. 1: Active lLow 0: Active High */
558 } t_mdio_params;
559 
560 /* ========================================================================== */
561 /* Function Declarations */
562 /* ========================================================================== */
563 
573 void bsp_params_init(bsp_params *init_params);
574 
590 extern int32_t bsp_init(bsp_params *init_params);
591 
619  pruIcssHandle); //Internal API - invoked by bsp_init
620 
628 extern void bsp_start_esc_isr(PRUICSS_Handle pruIcssHandle);
629 
640 extern void bsp_exit(PRUICSS_Handle pruIcssHandle);
641 
656 extern void bsp_set_pdi_wd_trigger_mode(PRUICSS_Handle pruIcssHandle,
657  uint32_t mode);
700  uint32_t command, uint16_t param1, uint16_t param2);
715 extern void bsp_eeprom_emulation_init(void);
716 
726 extern int32_t bsp_eeprom_load_esc_registers(PRUICSS_Handle pruIcssHandle,
727  int32_t reload_flag);
728 
737 extern int32_t bsp_eeprom_emulation_reload(PRUICSS_Handle pruIcssHandle);
738 
746 
752 extern void bsp_eeprom_emulation_flush(void);
753 
759 extern void bsp_eeprom_emulation_exit(void);
760 
767 extern uint8_t *bsp_get_eeprom_cache_base(void);
768 
774 
782 
790 extern void bsp_set_eeprom_update_status(uint8_t status);
791 
799 extern uint8_t bsp_get_eeprom_update_status(void);
800 
819 extern void bsp_set_sm_properties(PRUICSS_Handle pruIcssHandle, uint8_t sm,
820  uint16_t address, uint16_t len);
832 
833 extern int16_t bsp_get_sm_index(uint16_t address, uint16_t len);
849 extern uint8_t bsp_pdi_sm_config_ongoing(PRUICSS_Handle pruIcssHandle);
862 extern void bsp_pdi_mbx_read_start(PRUICSS_Handle pruIcssHandle);
863 
869 extern void bsp_pdi_mbx_read_complete(PRUICSS_Handle pruIcssHandle);
870 
877 extern void bsp_pdi_mbx_write_start(PRUICSS_Handle pruIcssHandle);
878 
885 extern void bsp_pdi_mbx_write_complete(PRUICSS_Handle pruIcssHandle);
886 
906 extern uint16_t bsp_get_process_data_address(PRUICSS_Handle pruIcssHandle,
907  uint16_t address, uint16_t len, int16_t *p_sm_index);
908 
921  uint16_t address, uint16_t len, int16_t sm_index);
922 
939 extern uint8_t bsp_read_byte(PRUICSS_Handle pruIcssHandle, uint16_t address);
940 
951 extern uint16_t bsp_read_word(PRUICSS_Handle pruIcssHandle, uint16_t address);
952 
963 extern uint32_t bsp_read_dword(PRUICSS_Handle pruIcssHandle, uint16_t address);
964 
974 extern void bsp_read(PRUICSS_Handle pruIcssHandle, uint8_t *pdata,
975  uint16_t address,
976  uint16_t len);
977 
987 extern uint8_t bsp_read_byte_isr(PRUICSS_Handle pruIcssHandle, uint16_t address);
988 
998 extern uint16_t bsp_read_word_isr(PRUICSS_Handle pruIcssHandle,
999  uint16_t address);
1000 
1010 extern uint32_t bsp_read_dword_isr(PRUICSS_Handle pruIcssHandle,
1011  uint16_t address);
1012 
1030  uint16_t address, uint16_t length);
1045 extern void bsp_pdi_write_indication(PRUICSS_Handle pruIcssHandle,
1046  uint16_t address, uint16_t length,
1047  uint16_t value);
1056 extern void bsp_write_byte(PRUICSS_Handle pruIcssHandle, uint8_t val,
1057  uint16_t address);
1058 
1067 extern void bsp_write_word(PRUICSS_Handle pruIcssHandle, uint16_t val,
1068  uint16_t address);
1069 
1078 extern void bsp_write_dword(PRUICSS_Handle pruIcssHandle, uint32_t val,
1079  uint16_t address);
1080 
1090 extern void bsp_write(PRUICSS_Handle pruIcssHandle, uint8_t *pdata,
1091  uint16_t address, uint16_t len);
1092 
1101 extern uint32_t bsp_pruss_mdioreg_read(PRUICSS_Handle pruIcssHandle,
1102  uint32_t regoffset);
1103 
1112 extern void bsp_pruss_mdioreg_write(PRUICSS_Handle pruIcssHandle, uint32_t val,
1113  uint32_t regoffset);
1114 
1123 extern uint32_t bsp_pruss_iepreg_read(PRUICSS_Handle pruIcssHandle,
1124  uint32_t regoffset);
1125 
1134 extern void bsp_pruss_iepreg_write(PRUICSS_Handle pruIcssHandle, uint32_t val,
1135  uint32_t regoffset);
1136 
1144 extern void bsp_pruss_cmd_intfc_write_word(uint16_t val, volatile uint16_t *ptr);
1145 
1153 extern uint16_t bsp_pruss_cmd_intfc_read_word(volatile uint16_t *ptr);
1154 
1164 extern uint8_t bsp_get_pdi_access_perm(uint16_t address, uint8_t access);
1165 
1175 extern uint8_t bsp_pdi_access_perm_word(uint16_t address, uint8_t access);
1176 
1186 extern uint8_t bsp_pdi_access_perm_dword(uint16_t address, uint8_t access);
1187 
1198 extern uint8_t bsp_pdi_access_perm_array(uint16_t address, uint8_t access,
1199  uint16_t size);
1200 
1208 extern void bsp_set_pdi_perm_read_only(uint16_t *perm_array, uint16_t address);
1209 
1217 extern void bsp_set_pdi_perm_read_write(uint16_t *perm_array, uint16_t address);
1218 
1229 extern uint8_t bsp_is_pdi_perm_read_only(uint16_t *perm_array, uint16_t address);
1230 
1238 
1246 
1264 extern int16_t bsp_pruss_mdio_init(PRUICSS_Handle pruIcssHandle,
1265  t_mdio_params *pmdio_params);
1266 
1277 extern int16_t bsp_pruss_mdio_phy_read(PRUICSS_Handle pruIcssHandle,
1278  uint8_t phyaddr, uint8_t regoffset, uint16_t *regval);
1279 
1290 extern int16_t bsp_pruss_mdio_phy_write(PRUICSS_Handle pruIcssHandle,
1291  uint8_t phyaddr, uint8_t regoffset, uint16_t regval);
1292 
1303 extern uint32_t bsp_pruss_mdio_phy_link_state(PRUICSS_Handle pruIcssHandle,
1304  uint8_t phyaddr);
1318 
1325 extern void bsp_set_digio_out(PRUICSS_Handle pruIcssHandle, uint8_t num);
1326 
1333 extern void bsp_clear_digio_out(PRUICSS_Handle pruIcssHandle, uint8_t num);
1334 
1344 extern void bsp_hwspinlock_init(void);
1345 
1352 extern uint32_t bsp_hwspinlock_lock(int num);
1353 
1359 extern void bsp_hwspinlock_unlock(int num);
1360 
1367 #ifdef SYSTEM_TIME_PDI_CONTROLLED
1368 
1375 extern void bsp_pdi_latch0_control(PRUICSS_Handle pruIcssHandle, uint8_t val);
1376 
1384 extern void bsp_pdi_latch1_control(PRUICSS_Handle pruIcssHandle, uint8_t val);
1385 
1392 extern void bsp_pdi_write_system_time(PRUICSS_Handle pruIcssHandle,
1393  uint32_t systime);
1400 extern void bsp_pdi_write_system_timeoffset(PRUICSS_Handle pruIcssHandle,
1401  unsigned long long systime);
1408 extern void bsp_pdi_write_systime_delay(PRUICSS_Handle pruIcssHandle,
1409  uint32_t systime);
1418 extern void bsp_pdi_write_filterconfig(PRUICSS_Handle pruIcssHandle,
1419  uint16_t speedcount_start,
1420  uint8_t speedcount_filtdepth, uint8_t systime_filtdepth);
1421 #endif
1422 
1434 extern uint32_t bsp_get_timer_register(void);
1435 
1440 extern void bsp_clear_timer_register(void);
1447 extern void bsp_get_local_sys_time(uint32_t *systime_low,
1448  uint32_t *systime_high);
1449 
1458  uint32_t *systime_low, uint32_t *systime_high);
1459 
1468  uint32_t *systime_low, uint32_t *systime_high);
1469 
1478  uint32_t *systime_low, uint32_t *systime_high);
1479 
1488  uint32_t *systime_low, uint32_t *systime_high);
1489 
1501 extern void bsp_global_mutex_lock(void);
1502 
1507 extern void bsp_global_mutex_unlock(void);
1517 void Sync0Isr(void *args);
1521 void Sync1Isr(void *args);
1525 void EcatIsr(void *args);
1526 
1527 #ifndef SUPPORT_CMDACK_POLL_MODE
1528 
1531 void EscCmdLowAckIsr(void *args);
1532 #endif
1533 
1550 extern void bsp_set_pru_firmware(uint32_t *frameProc, uint32_t frameProcLen,
1551  uint32_t *hostProc, uint32_t hostProcLen);
1558 #ifdef __cplusplus
1559 }
1560 #endif
1561 
1562 #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:476
t_sm_processdata::sm_buf_index
uint8_t sm_buf_index
Definition: tiescbsp.h:499
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:520
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 .
bsp_params::phy_rx_err_reg
uint16_t phy_rx_err_reg
Definition: tiescbsp.h:489
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.
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_hwspinlock_lock_t
uint32_t(* bsp_hwspinlock_lock_t)(int num)
Definition: tiescbsp.h:433
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:480
bsp_eeprom_read_t
int32_t(* bsp_eeprom_read_t)(uint8_t *buf, uint32_t len)
Definition: tiescbsp.h:430
t_host_interface::system_time_low
uint32_t system_time_low
Definition: tiescbsp.h:511
t_host_interface::cmdlow_ack
uint16_t cmdlow_ack
Definition: tiescbsp.h:516
bsp_eeprom_write_t
int32_t(* bsp_eeprom_write_t)(uint8_t *buf, uint32_t len)
Definition: tiescbsp.h:431
t_sm_processdata
Struct for host to PRU-ICSS command interface.
Definition: tiescbsp.h:498
t_mdio_params::addr0
uint8_t addr0
Definition: tiescbsp.h:553
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:465
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:500
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_get_phy_address_t
int8_t(* bsp_get_phy_address_t)(uint8_t instance, uint8_t portNumber)
Definition: tiescbsp.h:436
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:544
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:542
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_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_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:512
bsp_params::pdi_isr
bsp_ethercat_stack_isr_function pdi_isr
Definition: tiescbsp.h:483
bsp_ethercat_stack_isr_function
void(* bsp_ethercat_stack_isr_function)(void)
Definition: tiescbsp.h:437
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:462
t_register_properties
Struct for register permission array.
Definition: tiescbsp.h:536
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.
t_mdio_params::enhancedlink_enable
uint8_t enhancedlink_enable
Definition: tiescbsp.h:557
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:554
t_host_interface::resp1low
uint16_t resp1low
Definition: tiescbsp.h:519
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_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:556
t_mdio_params
Struct for MDIO initialization parameters.
Definition: tiescbsp.h:551
bsp_hwspinlock_unlock_t
void(* bsp_hwspinlock_unlock_t)(int num)
Definition: tiescbsp.h:434
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:518
bsp_params::interrupt_offset
int32_t interrupt_offset
Definition: tiescbsp.h:450
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:509
bsp_params::link0_polarity
uint32_t link0_polarity
Definition: tiescbsp.h:470
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:448
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:517
t_mdio_params::link0pol
uint8_t link0pol
Definition: tiescbsp.h:555
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.
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:501
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.
bsp_params::phy0_address
uint32_t phy0_address
Definition: tiescbsp.h:474
bsp_params::eeprom_write
bsp_eeprom_write_t eeprom_write
Definition: tiescbsp.h:460
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:552
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_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:487
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:515
bsp_params::enhancedlink_enable
uint8_t enhancedlink_enable
Definition: tiescbsp.h:467
bsp_get_sm_index
int16_t bsp_get_sm_index(uint16_t address, uint16_t len)
bsp_init_spinlock_t
void(* bsp_init_spinlock_t)(void)
Definition: tiescbsp.h:432
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_ethphy_init_t
void(* bsp_ethphy_init_t)(PRUICSS_Handle pruIcssHandle, uint8_t phy0addr, uint8_t phy1addr, uint8_t enhancedlink_enable)
Definition: tiescbsp.h:435
bsp_params
Struct for FWHAL initialization Parameters.
Definition: tiescbsp.h:447
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:472
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:485
bsp_params::eeprom_read
bsp_eeprom_read_t eeprom_read
Definition: tiescbsp.h:458
t_host_interface::sm_config_ongoing
uint8_t sm_config_ongoing
Definition: tiescbsp.h:513
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/m_v0/pruicss.h:226
t_sm_properties::physical_start_addr
uint16_t physical_start_addr
Definition: tiescbsp.h:543
bsp_params::default_tiesc_eeprom
const unsigned char * default_tiesc_eeprom
Definition: tiescbsp.h:478
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.