Lines Matching refs:hal

84 static void set_defaults(usb_dwc_hal_context_t *hal)  in set_defaults()  argument
87 usb_dwc_ll_gahbcfg_en_dma_mode(hal->dev); in set_defaults()
108 usb_dwc_ll_gahbcfg_set_hbstlen(hal->dev, hbstlen); //Set AHB burst mode in set_defaults()
110 usb_dwc_ll_gusbcfg_dis_hnp_cap(hal->dev); //Disable HNP in set_defaults()
111 usb_dwc_ll_gusbcfg_dis_srp_cap(hal->dev); //Disable SRP in set_defaults()
113 usb_dwc_ll_gintmsk_dis_intrs(hal->dev, 0xFFFFFFFF); //Mask all interrupts first in set_defaults()
114 usb_dwc_ll_gintmsk_en_intrs(hal->dev, CORE_INTRS_EN_MSK); //Unmask global interrupts in set_defaults()
115 usb_dwc_ll_gintsts_read_and_clear_intrs(hal->dev); //Clear interrupts in set_defaults()
116 usb_dwc_ll_gahbcfg_en_global_intr(hal->dev); //Enable interrupt signal in set_defaults()
118 usb_dwc_ll_gusbcfg_force_host_mode(hal->dev); in set_defaults()
121 void usb_dwc_hal_init(usb_dwc_hal_context_t *hal) in usb_dwc_hal_init() argument
129 memset(hal, 0, sizeof(usb_dwc_hal_context_t)); in usb_dwc_hal_init()
130 hal->dev = dev; in usb_dwc_hal_init()
131 set_defaults(hal); in usb_dwc_hal_init()
134 void usb_dwc_hal_deinit(usb_dwc_hal_context_t *hal) in usb_dwc_hal_deinit() argument
137 usb_dwc_ll_gintmsk_dis_intrs(hal->dev, 0xFFFFFFFF); //Disable all interrupts in usb_dwc_hal_deinit()
138 usb_dwc_ll_gintsts_read_and_clear_intrs(hal->dev); //Clear interrupts in usb_dwc_hal_deinit()
139 usb_dwc_ll_gahbcfg_dis_global_intr(hal->dev); //Disable interrupt signal in usb_dwc_hal_deinit()
140 hal->dev = NULL; in usb_dwc_hal_deinit()
143 void usb_dwc_hal_core_soft_reset(usb_dwc_hal_context_t *hal) in usb_dwc_hal_core_soft_reset() argument
145 usb_dwc_ll_grstctl_core_soft_reset(hal->dev); in usb_dwc_hal_core_soft_reset()
146 while (usb_dwc_ll_grstctl_is_core_soft_reset_in_progress(hal->dev)) { in usb_dwc_hal_core_soft_reset()
149 while (!usb_dwc_ll_grstctl_is_ahb_idle(hal->dev)) { in usb_dwc_hal_core_soft_reset()
153 set_defaults(hal); in usb_dwc_hal_core_soft_reset()
155 hal->periodic_frame_list = NULL; in usb_dwc_hal_core_soft_reset()
156 hal->flags.val = 0; in usb_dwc_hal_core_soft_reset()
157 hal->channels.num_allocd = 0; in usb_dwc_hal_core_soft_reset()
158 hal->channels.chan_pend_intrs_msk = 0; in usb_dwc_hal_core_soft_reset()
159 memset(hal->channels.hdls, 0, sizeof(usb_dwc_hal_chan_t *) * OTG_NUM_HOST_CHAN); in usb_dwc_hal_core_soft_reset()
162 void usb_dwc_hal_set_fifo_bias(usb_dwc_hal_context_t *hal, const usb_hal_fifo_bias_t fifo_bias) in usb_dwc_hal_set_fifo_bias() argument
170 usb_dwc_ll_ghwcfg_get_hw_config(hal->dev, &ghwcfg1, &ghwcfg2, &ghwcfg3, &ghwcfg4); in usb_dwc_hal_set_fifo_bias()
209 if (hal->channels.hdls[i] != NULL) { in usb_dwc_hal_set_fifo_bias()
210 HAL_ASSERT(!hal->channels.hdls[i]->flags.active); in usb_dwc_hal_set_fifo_bias()
214 usb_dwc_ll_grxfsiz_set_fifo_size(hal->dev, fifo_config.rx_fifo_lines); in usb_dwc_hal_set_fifo_bias()
215 …usb_dwc_ll_gnptxfsiz_set_fifo_size(hal->dev, fifo_config.rx_fifo_lines, fifo_config.nptx_fifo_line… in usb_dwc_hal_set_fifo_bias()
216 …usb_dwc_ll_hptxfsiz_set_ptx_fifo_size(hal->dev, fifo_config.rx_fifo_lines + fifo_config.nptx_fifo_… in usb_dwc_hal_set_fifo_bias()
218 usb_dwc_ll_grstctl_flush_nptx_fifo(hal->dev); in usb_dwc_hal_set_fifo_bias()
219 usb_dwc_ll_grstctl_flush_ptx_fifo(hal->dev); in usb_dwc_hal_set_fifo_bias()
220 usb_dwc_ll_grstctl_flush_rx_fifo(hal->dev); in usb_dwc_hal_set_fifo_bias()
221 hal->fifo_config = fifo_config; // Implicit struct copy in usb_dwc_hal_set_fifo_bias()
222 hal->flags.fifo_sizes_set = 1; in usb_dwc_hal_set_fifo_bias()
225 void usb_dwc_hal_get_mps_limits(usb_dwc_hal_context_t *hal, usb_hal_fifo_mps_limits_t *mps_limits) in usb_dwc_hal_get_mps_limits() argument
227 HAL_ASSERT(hal && mps_limits); in usb_dwc_hal_get_mps_limits()
228 HAL_ASSERT(hal->flags.fifo_sizes_set); in usb_dwc_hal_get_mps_limits()
230 const usb_dwc_hal_fifo_config_t *fifo_config = &(hal->fifo_config); in usb_dwc_hal_get_mps_limits()
238 static inline void debounce_lock_enable(usb_dwc_hal_context_t *hal) in debounce_lock_enable() argument
241 …usb_dwc_ll_gintmsk_dis_intrs(hal->dev, USB_DWC_LL_INTR_CORE_PRTINT | USB_DWC_LL_INTR_CORE_DISCONNI… in debounce_lock_enable()
242 hal->flags.dbnc_lock_enabled = 1; in debounce_lock_enable()
245 void usb_dwc_hal_port_enable(usb_dwc_hal_context_t *hal) in usb_dwc_hal_port_enable() argument
247 usb_dwc_speed_t speed = usb_dwc_ll_hprt_get_speed(hal->dev); in usb_dwc_hal_port_enable()
249 usb_dwc_ll_hcfg_set_defaults(hal->dev, speed); in usb_dwc_hal_port_enable()
251 usb_dwc_ll_hfir_set_defaults(hal->dev, speed); in usb_dwc_hal_port_enable()
258 bool usb_dwc_hal_chan_alloc(usb_dwc_hal_context_t *hal, usb_dwc_hal_chan_t *chan_obj, void *chan_ct… in usb_dwc_hal_chan_alloc() argument
260 …HAL_ASSERT(hal->flags.fifo_sizes_set); //FIFO sizes should be set befor attempting to allocate a … in usb_dwc_hal_chan_alloc()
262 if (hal->channels.num_allocd == OTG_NUM_HOST_CHAN) { in usb_dwc_hal_chan_alloc()
267 if (hal->channels.hdls[i] == NULL) { in usb_dwc_hal_chan_alloc()
268 hal->channels.hdls[i] = chan_obj; in usb_dwc_hal_chan_alloc()
270 hal->channels.num_allocd++; in usb_dwc_hal_chan_alloc()
278 chan_obj->regs = usb_dwc_ll_chan_get_regs(hal->dev, chan_idx); in usb_dwc_hal_chan_alloc()
283 usb_dwc_ll_haintmsk_en_chan_intr(hal->dev, 1 << chan_obj->flags.chan_idx); in usb_dwc_hal_chan_alloc()
290 void usb_dwc_hal_chan_free(usb_dwc_hal_context_t *hal, usb_dwc_hal_chan_t *chan_obj) in usb_dwc_hal_chan_free() argument
294 for (int i = 0; i < hal->frame_list_len; i++) { in usb_dwc_hal_chan_free()
295 hal->periodic_frame_list[i] &= ~(1 << chan_obj->flags.chan_idx); in usb_dwc_hal_chan_free()
301 usb_dwc_ll_haintmsk_dis_chan_intr(hal->dev, 1 << chan_obj->flags.chan_idx); in usb_dwc_hal_chan_free()
303 hal->channels.hdls[chan_obj->flags.chan_idx] = NULL; in usb_dwc_hal_chan_free()
304 hal->channels.num_allocd--; in usb_dwc_hal_chan_free()
305 HAL_ASSERT(hal->channels.num_allocd >= 0); in usb_dwc_hal_chan_free()
310 void usb_dwc_hal_chan_set_ep_char(usb_dwc_hal_context_t *hal, usb_dwc_hal_chan_t *chan_obj, usb_dwc… in usb_dwc_hal_chan_set_ep_char() argument
335 …if (interval_frame_list >= (int)hal->frame_list_len) { // Upper limits is Periodic Frame List leng… in usb_dwc_hal_chan_set_ep_char()
336 interval_frame_list = (int)hal->frame_list_len; in usb_dwc_hal_chan_set_ep_char()
351 for (int i = 0; i < hal->frame_list_len; i+= interval_frame_list) { in usb_dwc_hal_chan_set_ep_char()
352 int index = (offset_frame_list + i) % hal->frame_list_len; in usb_dwc_hal_chan_set_ep_char()
353 hal->periodic_frame_list[index] |= 1 << chan_obj->flags.chan_idx; in usb_dwc_hal_chan_set_ep_char()
408 usb_dwc_hal_port_event_t usb_dwc_hal_decode_intr(usb_dwc_hal_context_t *hal) in usb_dwc_hal_decode_intr() argument
410 …uint32_t intrs_core = usb_dwc_ll_gintsts_read_and_clear_intrs(hal->dev); //Read and clear core in… in usb_dwc_hal_decode_intr()
414 intrs_port = usb_dwc_ll_hprt_intr_read_and_clear(hal->dev); in usb_dwc_hal_decode_intr()
425 debounce_lock_enable(hal); in usb_dwc_hal_decode_intr()
429 if (usb_dwc_ll_hprt_get_port_overcur(hal->dev)) { in usb_dwc_hal_decode_intr()
435 if (usb_dwc_ll_hprt_get_port_en(hal->dev)) { //Host port was enabled in usb_dwc_hal_decode_intr()
440 } else if (intrs_port & USB_DWC_LL_INTR_HPRT_PRTCONNDET && !hal->flags.dbnc_lock_enabled) { in usb_dwc_hal_decode_intr()
442 debounce_lock_enable(hal); in usb_dwc_hal_decode_intr()
448 hal->channels.chan_pend_intrs_msk = usb_dwc_ll_haint_get_chan_intrs(hal->dev); in usb_dwc_hal_decode_intr()
455 usb_dwc_hal_chan_t *usb_dwc_hal_get_chan_pending_intr(usb_dwc_hal_context_t *hal) in usb_dwc_hal_get_chan_pending_intr() argument
457 int chan_num = __builtin_ffs(hal->channels.chan_pend_intrs_msk); in usb_dwc_hal_get_chan_pending_intr()
459hal->channels.chan_pend_intrs_msk &= ~(1 << (chan_num - 1)); //Clear the pending bit for that… in usb_dwc_hal_get_chan_pending_intr()
460 return hal->channels.hdls[chan_num - 1]; in usb_dwc_hal_get_chan_pending_intr()