blackhawk_tsc_dependencies.c (5072B)
1 /* 2 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 3 * 4 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 5 * 6 */ 7 8 #ifdef LINUX 9 /* #include <stdint.h> */ 10 #endif 11 12 #include "blackhawk_tsc_dependencies.h" 13 #include "common/srds_api_err_code.h" 14 #include "blackhawk_tsc_common.h" 15 #include <phymod/phymod.h> 16 #include <phymod/phymod_system.h> 17 #include <phymod/acc/phymod_tsc_iblk.h> 18 #include "blackhawk_tsc_fields.h" 19 #include "blackhawk_tsc_field_access.h" 20 #include "blackhawk_tsc_interface.h" 21 #include "blackhawk_tsc_functions.h" 22 #include "common/srds_api_types.h" 23 24 extern srds_info_t blackhawk_tsc_info[NUM_SERDES_INFO_TABLES]; 25 26 27 err_code_t blackhawk_tsc_pmd_mwr_reg(srds_access_t *sa__, uint16_t addr, uint16_t mask, uint8_t lsb, uint16_t val) { 28 uint32_t mymask = ( uint32_t) mask; 29 phymod_access_t sa_copy; 30 uint32_t i; 31 uint32_t error_code; 32 33 uint32_t data = ((mymask << 16) & 0xffff0000) | val << lsb; 34 35 error_code=0; 36 PHYMOD_MEMCPY(&sa_copy, sa__, sizeof(srds_access_t)); 37 for(i=1; i <= 0x80; i = i << 1) { 38 if ( i & sa__->lane_mask ) { 39 sa_copy.lane_mask = i; 40 error_code+=phymod_tscbh_iblk_write(&sa_copy, (PHYMOD_REG_ACC_TSC_IBLK | 0x10000 | (uint32_t) addr), data); 41 } 42 } 43 if(error_code) 44 return ERR_CODE_DATA_NOTAVAIL; 45 return ERR_CODE_NONE; 46 } 47 48 uint8_t blackhawk_tsc_get_lane(srds_access_t *sa__) { 49 if (sa__->lane_mask == 0x1) { 50 return ( 0 ); 51 } else if (sa__->lane_mask == 0x2) { 52 return ( 1 ); 53 } else if (sa__->lane_mask == 0x4) { 54 return ( 2 ); 55 } else if (sa__->lane_mask == 0x8) { 56 return ( 3 ); 57 } else if (sa__->lane_mask == 0x10) { 58 return ( 4 ); 59 } else if (sa__->lane_mask == 0x20) { 60 return ( 5 ); 61 } else if (sa__->lane_mask == 0x40) { 62 return ( 6 ); 63 } else if (sa__->lane_mask == 0x80) { 64 return ( 7 ); 65 } else { 66 return ( 0 ); 67 } 68 } 69 70 uint16_t blackhawk_tsc_pmd_rd_reg(srds_access_t *sa__, uint16_t address){ 71 72 uint32_t data; 73 phymod_tscbh_iblk_read(sa__, (PHYMOD_REG_ACC_TSC_IBLK | 0x10000 | (uint32_t) address), &data); 74 data = data & 0xffff; 75 return ( (uint16_t)data ); 76 } 77 78 err_code_t blackhawk_tsc_delay_ns(uint16_t delay_ns) { 79 uint32_t delay; 80 delay = delay_ns / 1000; 81 if (!delay ) { 82 delay = 1; 83 } 84 PHYMOD_USLEEP(delay); 85 return ( 0 ); 86 } 87 88 err_code_t blackhawk_tsc_delay_ms(uint32_t delay_ms) { 89 90 uint32_t delay; 91 delay = delay_ms * 1000; 92 if (!delay ) { 93 delay = 1; 94 } 95 PHYMOD_USLEEP(delay); 96 return ( 0 ); 97 } 98 99 100 /** 101 @brief Falcon PMD Write 102 @param phymod access handle to current Falcon Context 103 @param address 104 @param val 105 @returns The ERR_CODE_NONE upon successful completion, else returns ERR_CODE_DATA_NOTAVAIL 106 */ 107 err_code_t blackhawk_tsc_pmd_wr_reg(srds_access_t *sa__, uint16_t address, uint16_t val){ 108 uint32_t data = 0xffff & val; 109 uint32_t error_code; 110 error_code = phymod_tscbh_iblk_write(sa__, (PHYMOD_REG_ACC_TSC_IBLK | 0x10000 | (uint32_t) address), data); 111 if(error_code) 112 return ERR_CODE_DATA_NOTAVAIL; 113 return ERR_CODE_NONE; 114 } 115 116 err_code_t blackhawk_tsc_delay_us(uint32_t delay_us){ 117 PHYMOD_USLEEP(delay_us); 118 return ( 0 ); 119 } 120 121 err_code_t blackhawk_tsc_pmd_rdt_reg(phymod_access_t *pa, uint16_t address, uint16_t *val) { 122 uint32_t data; 123 phymod_tscbh_iblk_read(pa, (PHYMOD_REG_ACC_TSC_IBLK | 0x10000 | (uint32_t) address), &data); 124 data = data & 0xffff; 125 *val = (uint16_t)data; 126 return ( 0 ); 127 } 128 129 uint8_t blackhawk_tsc_get_core(srds_access_t *sa__) { 130 return(0); 131 } 132 133 err_code_t blackhawk_tsc_uc_lane_idx_to_system_id(srds_access_t *sa__, char string[16], uint8_t uc_lane_idx){ 134 static char info[256]; 135 /* Indicates Falcon Core */ 136 PHYMOD_SPRINTF(info, "%s_%d", "FC_", uc_lane_idx); 137 PHYMOD_STRNCPY(string,info, PHYMOD_STRLEN(info)+1); 138 return ERR_CODE_NONE; 139 } 140 141 err_code_t blackhawk_tsc_pmd_wr_pram(srds_access_t *sa__, uint8_t val){ 142 143 return ERR_CODE_NONE; 144 145 } 146 147 err_code_t blackhawk_tsc_set_lane(srds_access_t *sa__, uint8_t lane_index) 148 { 149 sa__->lane_mask = 1 << lane_index; 150 return ERR_CODE_NONE; 151 152 } 153 154 uint8_t blackhawk_tsc_get_pll_idx(srds_access_t *sa__) 155 { 156 uint32_t data; 157 data = sa__->pll_idx; 158 return (data & 0x1); 159 } 160 161 err_code_t blackhawk_tsc_set_pll_idx(srds_access_t *sa__, uint8_t pll_index) 162 { 163 sa__->pll_idx = pll_index; 164 return ERR_CODE_NONE; 165 } 166 167 uint8_t blackhawk_tsc_get_micro_idx(srds_access_t *sa__) 168 { 169 uint32_t data; 170 data = sa__->pll_idx; 171 return (data & 0x3); 172 } 173 174 err_code_t blackhawk_tsc_set_micro_idx(srds_access_t *sa__, uint8_t micro_index) 175 { 176 sa__->pll_idx = micro_index; 177 return ERR_CODE_NONE; 178 179 } 180 181 srds_info_t *blackhawk_tsc_INTERNAL_get_blackhawk_tsc_info_ptr(srds_access_t *sa__) { 182 183 #if defined(PHYMOD_SUPPORT) && defined(SERDES_EXTERNAL_INFO_TABLE_EN) 184 return (srds_info_t *) (sa__->pmd_info_ptr); 185 #else 186 uint8_t index = 0; 187 return &blackhawk_tsc_info[index]; 188 #endif 189 190 } 191 192 193