diff options
Diffstat (limited to 'drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c')
-rw-r--r-- | drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c | 65 |
1 files changed, 37 insertions, 28 deletions
diff --git a/drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c b/drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c index 87bb11f..c09a6f5 100644 --- a/drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c +++ b/drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -99,12 +99,11 @@ static const char *bit_mask_string[] = { void DWC_ETH_QOS_ipa_offload_event_handler( struct DWC_ETH_QOS_prv_data *pdata, IPA_OFFLOAD_EVENT ev) { - struct hw_if_struct *hw_if = &(pdata->hw_if); IPA_LOCK(); - EMACINFO("Enter: event=%s\n", IPA_OFFLOAD_EVENT_string[ev]); + EMACDBG("Enter: event=%s\n", IPA_OFFLOAD_EVENT_string[ev]); EMACDBG("PHY_link=%d\n" "emac_dev_ready=%d\n" "ipa_ready=%d\n" @@ -202,7 +201,7 @@ void DWC_ETH_QOS_ipa_offload_event_handler( case EV_IPA_UC_READY: { pdata->prv_ipa.ipa_uc_ready = true; - EMACINFO("%s:%d ipa uC is ready\n", __func__, __LINE__); + EMACDBG("%s:%d ipa uC is ready\n", __func__, __LINE__); if (!pdata->prv_ipa.emac_dev_ready) break; @@ -265,7 +264,7 @@ void DWC_ETH_QOS_ipa_offload_event_handler( break; } - EMACINFO("Exit: event=%s\n", IPA_OFFLOAD_EVENT_string[ev]); + EMACDBG("Exit: event=%s\n", IPA_OFFLOAD_EVENT_string[ev]); IPA_UNLOCK(); } @@ -281,7 +280,7 @@ int DWC_ETH_QOS_enable_ipa_offload(struct DWC_ETH_QOS_prv_data *pdata) EMACERR("IPA Offload Init Failed \n"); goto fail; } - EMACINFO("IPA Offload Initialized Successfully \n"); + EMACDBG("IPA Offload Initialized Successfully \n"); pdata->prv_ipa.ipa_offload_init = true; } @@ -292,7 +291,7 @@ int DWC_ETH_QOS_enable_ipa_offload(struct DWC_ETH_QOS_prv_data *pdata) pdata->prv_ipa.ipa_offload_conn = false; goto fail; } - EMACINFO("IPA Offload Connect Successfully\n"); + EMACDBG("IPA Offload Connect Successfully\n"); pdata->prv_ipa.ipa_offload_conn = true; /*Initialize DMA CHs for offload*/ @@ -305,12 +304,12 @@ int DWC_ETH_QOS_enable_ipa_offload(struct DWC_ETH_QOS_prv_data *pdata) if (!pdata->prv_ipa.ipa_debugfs_exists) { if (!DWC_ETH_QOS_ipa_create_debugfs(pdata)) { - EMACINFO("eMAC Debugfs created \n"); + EMACDBG("eMAC Debugfs created \n"); pdata->prv_ipa.ipa_debugfs_exists = true; } else EMACERR("eMAC Debugfs failed \n"); } - EMACINFO("IPA Offload Enabled successfully\n"); + EMACDBG("IPA Offload Enabled successfully\n"); return ret; fail: @@ -318,7 +317,7 @@ fail: if( DWC_ETH_QOS_ipa_offload_disconnect(pdata) ) EMACERR("IPA Offload Disconnect Failed \n"); else - EMACINFO("IPA Offload Disconnect Successfully \n"); + EMACDBG("IPA Offload Disconnect Successfully \n"); pdata->prv_ipa.ipa_offload_conn = false; } @@ -326,7 +325,7 @@ fail: if ( DWC_ETH_QOS_ipa_offload_cleanup(pdata )) EMACERR("IPA Offload Cleanup Failed \n"); else - EMACINFO("IPA Offload Cleanup Success \n"); + EMACDBG("IPA Offload Cleanup Success \n"); pdata->prv_ipa.ipa_offload_init = false; } @@ -355,7 +354,7 @@ int DWC_ETH_QOS_disable_ipa_offload(struct DWC_ETH_QOS_prv_data *pdata) EMACERR("IPA Offload Cleanup Failed, err: %d\n", ret); return ret; } - EMACINFO("IPA Offload Cleanup Success \n"); + EMACDBG("IPA Offload Cleanup Success \n"); pdata->prv_ipa.ipa_offload_init = false; } @@ -526,7 +525,7 @@ static int DWC_ETH_QOS_ipa_offload_resume(struct DWC_ETH_QOS_prv_data *pdata) static int DWC_ETH_QOS_ipa_ready(struct DWC_ETH_QOS_prv_data *pdata) { - int ret; + int ret = 0 ; EMACDBG("Enter \n"); @@ -534,12 +533,12 @@ static int DWC_ETH_QOS_ipa_ready(struct DWC_ETH_QOS_prv_data *pdata) ret = ipa_register_ipa_ready_cb(DWC_ETH_QOS_ipa_ready_cb, (void *)pdata); if (ret == -ENXIO) { - EMACINFO("%s: IPA driver context is not even ready\n", __func__); + EMACDBG("%s: IPA driver context is not even ready\n", __func__); return ret; } if (ret != -EEXIST) { - EMACINFO("%s:%d register ipa ready cb\n", __func__, __LINE__); + EMACDBG("%s:%d register ipa ready cb\n", __func__, __LINE__); return ret; } } @@ -554,7 +553,6 @@ static int DWC_ETH_QOS_ipa_ready(struct DWC_ETH_QOS_prv_data *pdata) static int DWC_ETH_QOS_ipa_uc_ready(struct DWC_ETH_QOS_prv_data *pdata) { struct ipa_uc_ready_params param; - unsigned long flags; int ret; EMACDBG("Enter \n"); @@ -566,7 +564,7 @@ static int DWC_ETH_QOS_ipa_uc_ready(struct DWC_ETH_QOS_prv_data *pdata) ret = ipa_uc_offload_reg_rdyCB(¶m); if (ret == 0 && param.is_uC_ready) { - EMACINFO("%s:%d ipa uc ready\n", __func__, __LINE__); + EMACDBG("%s:%d ipa uc ready\n", __func__, __LINE__); pdata->prv_ipa.ipa_uc_ready = true; } @@ -748,7 +746,7 @@ static int DWC_ETH_QOS_ipa_offload_init(struct DWC_ETH_QOS_prv_data *pdata) ipa_vlan_mode = 0; } - EMACINFO("IPA VLAN mode %d\n", ipa_vlan_mode); + EMACDBG("IPA VLAN mode %d\n", ipa_vlan_mode); memset(&in, 0, sizeof(in)); memset(&out, 0, sizeof(out)); @@ -817,7 +815,7 @@ int DWC_ETH_QOS_ipa_offload_cleanup(struct DWC_ETH_QOS_prv_data *pdata) struct DWC_ETH_QOS_prv_ipa_data *ntn_ipa = &pdata->prv_ipa; int ret = 0; - EMACINFO("%s - begin\n", __func__); + EMACDBG("%s - begin\n", __func__); if (!pdata) { EMACERR("Null Param %s \n", __func__); @@ -836,7 +834,7 @@ int DWC_ETH_QOS_ipa_offload_cleanup(struct DWC_ETH_QOS_prv_data *pdata) return -1; } - EMACINFO("%s - end\n", __func__); + EMACDBG("%s - end\n", __func__); return 0; } @@ -962,14 +960,15 @@ static int DWC_ETH_QOS_ipa_offload_connect(struct DWC_ETH_QOS_prv_data *pdata) struct DWC_ETH_QOS_prv_ipa_data *ntn_ipa = &pdata->prv_ipa; struct ipa_uc_offload_conn_in_params in; struct ipa_uc_offload_conn_out_params out; - struct ipa_ntn_setup_info rx_setup_info; - struct ipa_ntn_setup_info tx_setup_info; + struct ipa_ntn_setup_info rx_setup_info = {0}; + struct ipa_ntn_setup_info tx_setup_info = {0}; struct ipa_perf_profile profile; int ret = 0; int i = 0; + u32 reg_val; - EMACINFO("%s - begin\n", __func__); + EMACDBG("%s - begin\n", __func__); if(!pdata) { EMACERR( "Null Param %s \n", __func__); @@ -1070,9 +1069,9 @@ static int DWC_ETH_QOS_ipa_offload_connect(struct DWC_ETH_QOS_prv_data *pdata) } /* Dump UL and DL Setups */ - EMACINFO("IPA Offload UL client %d ring_base_pa 0x%x ntn_ring_size %d buff_pool_base_pa 0x%x num_buffers %d data_buff_size %d ntn_reg_base_ptr_pa 0x%x\n", + EMACDBG("IPA Offload UL client %d ring_base_pa 0x%x ntn_ring_size %d buff_pool_base_pa 0x%x num_buffers %d data_buff_size %d ntn_reg_base_ptr_pa 0x%x\n", rx_setup_info.client, rx_setup_info.ring_base_pa, rx_setup_info.ntn_ring_size, rx_setup_info.buff_pool_base_pa, rx_setup_info.num_buffers, rx_setup_info.data_buff_size, rx_setup_info.ntn_reg_base_ptr_pa); - EMACINFO("IPA Offload DL client %d ring_base_pa 0x%x ntn_ring_size %d buff_pool_base_pa 0x%x num_buffers %d data_buff_size %d ntn_reg_base_ptr_pa 0x%x\n", + EMACDBG("IPA Offload DL client %d ring_base_pa 0x%x ntn_ring_size %d buff_pool_base_pa 0x%x num_buffers %d data_buff_size %d ntn_reg_base_ptr_pa 0x%x\n", tx_setup_info.client, tx_setup_info.ring_base_pa, tx_setup_info.ntn_ring_size, tx_setup_info.buff_pool_base_pa, tx_setup_info.num_buffers, tx_setup_info.data_buff_size, tx_setup_info.ntn_reg_base_ptr_pa); in.u.ntn.ul = rx_setup_info; @@ -1085,6 +1084,16 @@ static int DWC_ETH_QOS_ipa_offload_connect(struct DWC_ETH_QOS_prv_data *pdata) goto mem_free; } + /* Mapped RX queue 0 to DMA channel 0 on successful IPA offload connect */ + MTL_RQDCM0R_RGWR(0x3020100); + + /* Mapped RX queue 0 to DMA channel 0 on successful IPA offload connect */ + if (pdata->res_data->early_eth_en) { + MTL_RQDCM0R_RGRD(reg_val); + reg_val &= ~IPA_RX_TO_DMA_CH_MAP_NUM; + MTL_RQDCM0R_RGWR(reg_val); + } + ntn_ipa->uc_db_rx_addr = out.u.ntn.ul_uc_db_pa; ntn_ipa->uc_db_tx_addr = out.u.ntn.dl_uc_db_pa; @@ -1140,7 +1149,7 @@ static int DWC_ETH_QOS_ipa_offload_connect(struct DWC_ETH_QOS_prv_data *pdata) } } - EMACINFO("%s - end \n", __func__); + EMACDBG("%s - end \n", __func__); return 0; } @@ -1160,7 +1169,7 @@ static int DWC_ETH_QOS_ipa_offload_disconnect(struct DWC_ETH_QOS_prv_data *pdata struct DWC_ETH_QOS_prv_ipa_data *ntn_ipa = &pdata->prv_ipa; int ret = 0; - EMACINFO("%s - begin \n", __func__); + EMACDBG("%s - begin \n", __func__); if(!pdata) { EMACERR( "Null Param %s \n", __func__); @@ -1173,7 +1182,7 @@ static int DWC_ETH_QOS_ipa_offload_disconnect(struct DWC_ETH_QOS_prv_data *pdata return ret; } - EMACINFO("%s - end \n", __func__); + EMACDBG("%s - end \n", __func__); return 0; } |