Lines Matching refs:diag

2208  * Interface used by diag module to do firmware boot with memory test
4714 struct bfa_diag_s *diag = diag_arg;
4716 bfa_trc(diag, event);
4717 bfa_trc(diag, diag->block);
4718 bfa_trc(diag, diag->fwping.lock);
4719 bfa_trc(diag, diag->tsensor.lock);
4724 if (diag->fwping.lock) {
4725 diag->fwping.status = BFA_STATUS_IOC_FAILURE;
4726 diag->fwping.cbfn(diag->fwping.cbarg,
4727 diag->fwping.status);
4728 diag->fwping.lock = 0;
4731 if (diag->tsensor.lock) {
4732 diag->tsensor.status = BFA_STATUS_IOC_FAILURE;
4733 diag->tsensor.cbfn(diag->tsensor.cbarg,
4734 diag->tsensor.status);
4735 diag->tsensor.lock = 0;
4738 if (diag->block) {
4739 if (diag->timer_active) {
4740 bfa_timer_stop(&diag->timer);
4741 diag->timer_active = 0;
4744 diag->status = BFA_STATUS_IOC_FAILURE;
4745 diag->cbfn(diag->cbarg, diag->status);
4746 diag->block = 0;
4758 struct bfa_diag_s *diag = cbarg;
4759 struct bfa_ioc_s *ioc = diag->ioc;
4760 struct bfa_diag_memtest_result *res = diag->result;
4779 bfa_trc(diag, res->status);
4782 diag->status = BFA_STATUS_OK;
4784 diag->status = BFA_STATUS_MEMTEST_FAILED;
4791 bfa_trc(diag, res->addr);
4792 bfa_trc(diag, res->exp);
4793 bfa_trc(diag, res->act);
4794 bfa_trc(diag, res->err_status);
4795 bfa_trc(diag, res->err_status1);
4796 bfa_trc(diag, res->err_addr);
4798 diag->timer_active = 0;
4799 diag->cbfn(diag->cbarg, diag->status);
4800 diag->block = 0;
4811 diag_fwping_send(struct bfa_diag_s *diag)
4816 bfa_trc(diag, diag->fwping.dbuf_pa);
4820 *((u32 *)diag->fwping.dbuf_kva + i) = diag->fwping.data;
4823 fwping_req = (struct bfi_diag_fwping_req_s *)diag->fwping.mbcmd.msg;
4827 diag->fwping.dbuf_pa);
4829 fwping_req->count = cpu_to_be32(diag->fwping.count);
4831 fwping_req->data = diag->fwping.data;
4835 bfa_ioc_portid(diag->ioc));
4838 bfa_ioc_mbox_queue(diag->ioc, &diag->fwping.mbcmd);
4842 diag_fwping_comp(struct bfa_diag_s *diag,
4848 bfa_trc(diag, rsp_data);
4849 bfa_trc(diag, rsp_dma_status);
4853 pat = (diag->fwping.count & 0x1) ? ~(diag->fwping.data) :
4854 diag->fwping.data;
4856 if (diag->fwping.data != rsp_data) {
4857 bfa_trc(diag, rsp_data);
4858 diag->fwping.result->dmastatus =
4860 diag->fwping.status = BFA_STATUS_DATACORRUPTED;
4861 diag->fwping.cbfn(diag->fwping.cbarg,
4862 diag->fwping.status);
4863 diag->fwping.lock = 0;
4868 if (*((u32 *)diag->fwping.dbuf_kva + i) != pat) {
4869 bfa_trc(diag, i);
4870 bfa_trc(diag, pat);
4871 bfa_trc(diag,
4872 *((u32 *)diag->fwping.dbuf_kva + i));
4873 diag->fwping.result->dmastatus =
4875 diag->fwping.status = BFA_STATUS_DATACORRUPTED;
4876 diag->fwping.cbfn(diag->fwping.cbarg,
4877 diag->fwping.status);
4878 diag->fwping.lock = 0;
4882 diag->fwping.result->dmastatus = BFA_STATUS_OK;
4883 diag->fwping.status = BFA_STATUS_OK;
4884 diag->fwping.cbfn(diag->fwping.cbarg, diag->fwping.status);
4885 diag->fwping.lock = 0;
4887 diag->fwping.status = BFA_STATUS_HDMA_FAILED;
4888 diag->fwping.cbfn(diag->fwping.cbarg, diag->fwping.status);
4889 diag->fwping.lock = 0;
4898 diag_tempsensor_send(struct bfa_diag_s *diag)
4902 msg = (struct bfi_diag_ts_req_s *)diag->tsensor.mbcmd.msg;
4903 bfa_trc(diag, msg->temp);
4906 bfa_ioc_portid(diag->ioc));
4908 bfa_ioc_mbox_queue(diag->ioc, &diag->tsensor.mbcmd);
4912 diag_tempsensor_comp(struct bfa_diag_s *diag, bfi_diag_ts_rsp_t *rsp)
4914 if (!diag->tsensor.lock) {
4916 bfa_trc(diag, diag->tsensor.lock);
4924 diag->tsensor.temp->temp = be16_to_cpu(rsp->temp);
4925 diag->tsensor.temp->ts_junc = rsp->ts_junc;
4926 diag->tsensor.temp->ts_brd = rsp->ts_brd;
4930 diag->tsensor.temp->status = rsp->status;
4932 diag->tsensor.temp->brd_temp =
4935 diag->tsensor.temp->brd_temp = 0;
4938 bfa_trc(diag, rsp->status);
4939 bfa_trc(diag, rsp->ts_junc);
4940 bfa_trc(diag, rsp->temp);
4941 bfa_trc(diag, rsp->ts_brd);
4942 bfa_trc(diag, rsp->brd_temp);
4945 diag->tsensor.status = BFA_STATUS_OK;
4946 diag->tsensor.cbfn(diag->tsensor.cbarg, diag->tsensor.status);
4947 diag->tsensor.lock = 0;
4954 diag_ledtest_send(struct bfa_diag_s *diag, struct bfa_diag_ledtest_s *ledtest)
4958 msg = (struct bfi_diag_ledtest_req_s *)diag->ledtest.mbcmd.msg;
4961 bfa_ioc_portid(diag->ioc));
4973 bfa_trc(diag, ledtest->freq);
4977 msg->portid = bfa_ioc_portid(diag->ioc);
4982 bfa_ioc_mbox_queue(diag->ioc, &diag->ledtest.mbcmd);
4986 diag_ledtest_comp(struct bfa_diag_s *diag, struct bfi_diag_ledtest_rsp_s *msg)
4988 bfa_trc(diag, diag->ledtest.lock);
4989 diag->ledtest.lock = BFA_FALSE;
4997 diag_portbeacon_send(struct bfa_diag_s *diag, bfa_boolean_t beacon, u32 sec)
5001 msg = (struct bfi_diag_portbeacon_req_s *)diag->beacon.mbcmd.msg;
5004 bfa_ioc_portid(diag->ioc));
5008 bfa_ioc_mbox_queue(diag->ioc, &diag->beacon.mbcmd);
5012 diag_portbeacon_comp(struct bfa_diag_s *diag)
5014 bfa_trc(diag, diag->beacon.state);
5015 diag->beacon.state = BFA_FALSE;
5016 if (diag->cbfn_beacon)
5017 diag->cbfn_beacon(diag->dev, BFA_FALSE, diag->beacon.link_e2e);
5026 struct bfa_diag_s *diag = diagarg;
5030 diag_portbeacon_comp(diag);
5033 diag_fwping_comp(diag, (struct bfi_diag_fwping_rsp_s *) msg);
5036 diag_tempsensor_comp(diag, (bfi_diag_ts_rsp_t *) msg);
5039 diag_ledtest_comp(diag, (struct bfi_diag_ledtest_rsp_s *) msg);
5042 bfa_trc(diag, msg->mh.msg_id);
5050 * @param[in] *diag - diag data struct
5060 bfa_diag_memtest(struct bfa_diag_s *diag, struct bfa_diag_memtest_s *memtest,
5066 bfa_trc(diag, pattern);
5068 if (!bfa_ioc_adapter_is_disabled(diag->ioc))
5071 /* check to see if there is another destructive diag cmd running */
5072 if (diag->block) {
5073 bfa_trc(diag, diag->block);
5076 diag->block = 1;
5078 diag->result = result;
5079 diag->cbfn = cbfn;
5080 diag->cbarg = cbarg;
5083 bfa_ioc_boot(diag->ioc, BFI_FWBOOT_TYPE_MEMTEST, BFI_FWBOOT_ENV_OS);
5085 memtest_tov = (bfa_ioc_asic_gen(diag->ioc) == BFI_ASIC_GEN_CT2) ?
5087 bfa_timer_begin(diag->ioc->timer_mod, &diag->timer,
5088 bfa_diag_memtest_done, diag, memtest_tov);
5089 diag->timer_active = 1;
5096 * @param[in] *diag - diag data struct
5106 bfa_diag_fwping(struct bfa_diag_s *diag, u32 cnt, u32 data,
5110 bfa_trc(diag, cnt);
5111 bfa_trc(diag, data);
5113 if (!bfa_ioc_is_operational(diag->ioc))
5116 if (bfa_asic_id_ct2(bfa_ioc_devid((diag->ioc))) &&
5117 ((diag->ioc)->clscode == BFI_PCIFN_CLASS_ETH))
5120 /* check to see if there is another destructive diag cmd running */
5121 if (diag->block || diag->fwping.lock) {
5122 bfa_trc(diag, diag->block);
5123 bfa_trc(diag, diag->fwping.lock);
5128 diag->fwping.lock = 1;
5129 diag->fwping.cbfn = cbfn;
5130 diag->fwping.cbarg = cbarg;
5131 diag->fwping.result = result;
5132 diag->fwping.data = data;
5133 diag->fwping.count = cnt;
5136 diag->fwping.result->data = 0;
5137 diag->fwping.result->status = BFA_STATUS_OK;
5140 diag_fwping_send(diag);
5147 * @param[in] *diag - diag data struct
5155 bfa_diag_tsensor_query(struct bfa_diag_s *diag,
5159 /* check to see if there is a destructive diag cmd running */
5160 if (diag->block || diag->tsensor.lock) {
5161 bfa_trc(diag, diag->block);
5162 bfa_trc(diag, diag->tsensor.lock);
5166 if (!bfa_ioc_is_operational(diag->ioc))
5169 /* Init diag mod params */
5170 diag->tsensor.lock = 1;
5171 diag->tsensor.temp = result;
5172 diag->tsensor.cbfn = cbfn;
5173 diag->tsensor.cbarg = cbarg;
5174 diag->tsensor.status = BFA_STATUS_OK;
5177 diag_tempsensor_send(diag);
5185 * @param[in] *diag - diag data struct
5191 bfa_diag_ledtest(struct bfa_diag_s *diag, struct bfa_diag_ledtest_s *ledtest)
5193 bfa_trc(diag, ledtest->cmd);
5195 if (!bfa_ioc_is_operational(diag->ioc))
5198 if (diag->beacon.state)
5201 if (diag->ledtest.lock)
5205 diag->ledtest.lock = BFA_TRUE;
5206 diag_ledtest_send(diag, ledtest);
5214 * @param[in] *diag - diag data struct
5222 bfa_diag_beacon_port(struct bfa_diag_s *diag, bfa_boolean_t beacon,
5225 bfa_trc(diag, beacon);
5226 bfa_trc(diag, link_e2e_beacon);
5227 bfa_trc(diag, sec);
5229 if (!bfa_ioc_is_operational(diag->ioc))
5232 if (diag->ledtest.lock)
5235 if (diag->beacon.state && beacon) /* beacon alread on */
5238 diag->beacon.state = beacon;
5239 diag->beacon.link_e2e = link_e2e_beacon;
5240 if (diag->cbfn_beacon)
5241 diag->cbfn_beacon(diag->dev, beacon, link_e2e_beacon);
5244 diag_portbeacon_send(diag, beacon, sec);
5250 * Return DMA memory needed by diag module.
5262 bfa_diag_attach(struct bfa_diag_s *diag, struct bfa_ioc_s *ioc, void *dev,
5265 diag->dev = dev;
5266 diag->ioc = ioc;
5267 diag->trcmod = trcmod;
5269 diag->block = 0;
5270 diag->cbfn = NULL;
5271 diag->cbarg = NULL;
5272 diag->result = NULL;
5273 diag->cbfn_beacon = cbfn_beacon;
5275 bfa_ioc_mbox_regisr(diag->ioc, BFI_MC_DIAG, bfa_diag_intr, diag);
5276 bfa_q_qe_init(&diag->ioc_notify);
5277 bfa_ioc_notify_init(&diag->ioc_notify, bfa_diag_notify, diag);
5278 list_add_tail(&diag->ioc_notify.qe, &diag->ioc->notify_q);
5282 bfa_diag_memclaim(struct bfa_diag_s *diag, u8 *dm_kva, u64 dm_pa)
5284 diag->fwping.dbuf_kva = dm_kva;
5285 diag->fwping.dbuf_pa = dm_pa;
5286 memset(diag->fwping.dbuf_kva, 0, BFI_DIAG_DMA_BUF_SZ);