Loading drivers/platform/msm/ipa/test/ipa_test_mhi.c +42 −14 Original line number Original line Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -1304,6 +1304,7 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, u32 next_wp_ofst; u32 next_wp_ofst; int i; int i; u32 num_of_ed_to_queue; u32 num_of_ed_to_queue; u32 avail_ev; IPA_UT_LOG("Entry\n"); IPA_UT_LOG("Entry\n"); Loading Loading @@ -1341,6 +1342,8 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, wp_ofst = (u32)(p_events[event_ring_index].wp - wp_ofst = (u32)(p_events[event_ring_index].wp - p_events[event_ring_index].rbase); p_events[event_ring_index].rbase); rp_ofst = (u32)(p_events[event_ring_index].rp - p_events[event_ring_index].rbase); if (p_events[event_ring_index].rlen & 0xFFFFFFFF00000000) { if (p_events[event_ring_index].rlen & 0xFFFFFFFF00000000) { IPA_UT_LOG("invalid ev rlen %llu\n", IPA_UT_LOG("invalid ev rlen %llu\n", Loading @@ -1348,7 +1351,30 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, return -EFAULT; return -EFAULT; } } next_wp_ofst = (wp_ofst + num_of_ed_to_queue * if (wp_ofst > rp_ofst) { avail_ev = (wp_ofst - rp_ofst) / sizeof(struct ipa_mhi_event_ring_element); } else { avail_ev = (u32)p_events[event_ring_index].rlen - (rp_ofst - wp_ofst); avail_ev /= sizeof(struct ipa_mhi_event_ring_element); } IPA_UT_LOG("wp_ofst=0x%x rp_ofst=0x%x rlen=%llu avail_ev=%u\n", wp_ofst, rp_ofst, p_events[event_ring_index].rlen, avail_ev); if (num_of_ed_to_queue > ((u32)p_events[event_ring_index].rlen / sizeof(struct ipa_mhi_event_ring_element))) { IPA_UT_LOG("event ring too small for %u credits\n", num_of_ed_to_queue); return -EFAULT; } if (num_of_ed_to_queue > avail_ev) { IPA_UT_LOG("Need to add event credits (needed=%u)\n", num_of_ed_to_queue - avail_ev); next_wp_ofst = (wp_ofst + (num_of_ed_to_queue - avail_ev) * sizeof(struct ipa_mhi_event_ring_element)) % sizeof(struct ipa_mhi_event_ring_element)) % (u32)p_events[event_ring_index].rlen; (u32)p_events[event_ring_index].rlen; Loading @@ -1359,12 +1385,14 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, /* write value to event ring doorbell */ /* write value to event ring doorbell */ IPA_UT_LOG("DB to event 0x%llx: base %pa ofst 0x%x\n", IPA_UT_LOG("DB to event 0x%llx: base %pa ofst 0x%x\n", p_events[event_ring_index].wp, p_events[event_ring_index].wp, &(gsi_ctx->per.phys_addr), GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( &(gsi_ctx->per.phys_addr), GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( event_ring_index + IPA_MHI_GSI_ER_START, 0)); event_ring_index + IPA_MHI_GSI_ER_START, 0)); iowrite32(p_events[event_ring_index].wp, iowrite32(p_events[event_ring_index].wp, test_mhi_ctx->gsi_mmio + test_mhi_ctx->gsi_mmio + GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( event_ring_index + IPA_MHI_GSI_ER_START, 0)); event_ring_index + IPA_MHI_GSI_ER_START, 0)); } for (i = 0; i < buf_array_size; i++) { for (i = 0; i < buf_array_size; i++) { /* calculate virtual pointer for current WP and RP */ /* calculate virtual pointer for current WP and RP */ Loading Loading
drivers/platform/msm/ipa/test/ipa_test_mhi.c +42 −14 Original line number Original line Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -1304,6 +1304,7 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, u32 next_wp_ofst; u32 next_wp_ofst; int i; int i; u32 num_of_ed_to_queue; u32 num_of_ed_to_queue; u32 avail_ev; IPA_UT_LOG("Entry\n"); IPA_UT_LOG("Entry\n"); Loading Loading @@ -1341,6 +1342,8 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, wp_ofst = (u32)(p_events[event_ring_index].wp - wp_ofst = (u32)(p_events[event_ring_index].wp - p_events[event_ring_index].rbase); p_events[event_ring_index].rbase); rp_ofst = (u32)(p_events[event_ring_index].rp - p_events[event_ring_index].rbase); if (p_events[event_ring_index].rlen & 0xFFFFFFFF00000000) { if (p_events[event_ring_index].rlen & 0xFFFFFFFF00000000) { IPA_UT_LOG("invalid ev rlen %llu\n", IPA_UT_LOG("invalid ev rlen %llu\n", Loading @@ -1348,7 +1351,30 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, return -EFAULT; return -EFAULT; } } next_wp_ofst = (wp_ofst + num_of_ed_to_queue * if (wp_ofst > rp_ofst) { avail_ev = (wp_ofst - rp_ofst) / sizeof(struct ipa_mhi_event_ring_element); } else { avail_ev = (u32)p_events[event_ring_index].rlen - (rp_ofst - wp_ofst); avail_ev /= sizeof(struct ipa_mhi_event_ring_element); } IPA_UT_LOG("wp_ofst=0x%x rp_ofst=0x%x rlen=%llu avail_ev=%u\n", wp_ofst, rp_ofst, p_events[event_ring_index].rlen, avail_ev); if (num_of_ed_to_queue > ((u32)p_events[event_ring_index].rlen / sizeof(struct ipa_mhi_event_ring_element))) { IPA_UT_LOG("event ring too small for %u credits\n", num_of_ed_to_queue); return -EFAULT; } if (num_of_ed_to_queue > avail_ev) { IPA_UT_LOG("Need to add event credits (needed=%u)\n", num_of_ed_to_queue - avail_ev); next_wp_ofst = (wp_ofst + (num_of_ed_to_queue - avail_ev) * sizeof(struct ipa_mhi_event_ring_element)) % sizeof(struct ipa_mhi_event_ring_element)) % (u32)p_events[event_ring_index].rlen; (u32)p_events[event_ring_index].rlen; Loading @@ -1359,12 +1385,14 @@ static int ipa_mhi_test_q_transfer_re(struct ipa_mem_buffer *mmio, /* write value to event ring doorbell */ /* write value to event ring doorbell */ IPA_UT_LOG("DB to event 0x%llx: base %pa ofst 0x%x\n", IPA_UT_LOG("DB to event 0x%llx: base %pa ofst 0x%x\n", p_events[event_ring_index].wp, p_events[event_ring_index].wp, &(gsi_ctx->per.phys_addr), GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( &(gsi_ctx->per.phys_addr), GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( event_ring_index + IPA_MHI_GSI_ER_START, 0)); event_ring_index + IPA_MHI_GSI_ER_START, 0)); iowrite32(p_events[event_ring_index].wp, iowrite32(p_events[event_ring_index].wp, test_mhi_ctx->gsi_mmio + test_mhi_ctx->gsi_mmio + GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( GSI_EE_n_EV_CH_k_DOORBELL_0_OFFS( event_ring_index + IPA_MHI_GSI_ER_START, 0)); event_ring_index + IPA_MHI_GSI_ER_START, 0)); } for (i = 0; i < buf_array_size; i++) { for (i = 0; i < buf_array_size; i++) { /* calculate virtual pointer for current WP and RP */ /* calculate virtual pointer for current WP and RP */ Loading