Lines Matching refs:diag
2208 * Interface used by diag module to do firmware boot with memory test
4713 struct bfa_diag_s *diag = diag_arg;
4715 bfa_trc(diag, event);
4716 bfa_trc(diag, diag->block);
4717 bfa_trc(diag, diag->fwping.lock);
4718 bfa_trc(diag, diag->tsensor.lock);
4723 if (diag->fwping.lock) {
4724 diag->fwping.status = BFA_STATUS_IOC_FAILURE;
4725 diag->fwping.cbfn(diag->fwping.cbarg,
4726 diag->fwping.status);
4727 diag->fwping.lock = 0;
4730 if (diag->tsensor.lock) {
4731 diag->tsensor.status = BFA_STATUS_IOC_FAILURE;
4732 diag->tsensor.cbfn(diag->tsensor.cbarg,
4733 diag->tsensor.status);
4734 diag->tsensor.lock = 0;
4737 if (diag->block) {
4738 if (diag->timer_active) {
4739 bfa_timer_stop(&diag->timer);
4740 diag->timer_active = 0;
4743 diag->status = BFA_STATUS_IOC_FAILURE;
4744 diag->cbfn(diag->cbarg, diag->status);
4745 diag->block = 0;
4757 struct bfa_diag_s *diag = cbarg;
4758 struct bfa_ioc_s *ioc = diag->ioc;
4759 struct bfa_diag_memtest_result *res = diag->result;
4778 bfa_trc(diag, res->status);
4781 diag->status = BFA_STATUS_OK;
4783 diag->status = BFA_STATUS_MEMTEST_FAILED;
4790 bfa_trc(diag, res->addr);
4791 bfa_trc(diag, res->exp);
4792 bfa_trc(diag, res->act);
4793 bfa_trc(diag, res->err_status);
4794 bfa_trc(diag, res->err_status1);
4795 bfa_trc(diag, res->err_addr);
4797 diag->timer_active = 0;
4798 diag->cbfn(diag->cbarg, diag->status);
4799 diag->block = 0;
4810 diag_fwping_send(struct bfa_diag_s *diag)
4815 bfa_trc(diag, diag->fwping.dbuf_pa);
4819 *((u32 *)diag->fwping.dbuf_kva + i) = diag->fwping.data;
4822 fwping_req = (struct bfi_diag_fwping_req_s *)diag->fwping.mbcmd.msg;
4826 diag->fwping.dbuf_pa);
4828 fwping_req->count = cpu_to_be32(diag->fwping.count);
4830 fwping_req->data = diag->fwping.data;
4834 bfa_ioc_portid(diag->ioc));
4837 bfa_ioc_mbox_queue(diag->ioc, &diag->fwping.mbcmd);
4841 diag_fwping_comp(struct bfa_diag_s *diag,
4847 bfa_trc(diag, rsp_data);
4848 bfa_trc(diag, rsp_dma_status);
4852 pat = (diag->fwping.count & 0x1) ? ~(diag->fwping.data) :
4853 diag->fwping.data;
4855 if (diag->fwping.data != rsp_data) {
4856 bfa_trc(diag, rsp_data);
4857 diag->fwping.result->dmastatus =
4859 diag->fwping.status = BFA_STATUS_DATACORRUPTED;
4860 diag->fwping.cbfn(diag->fwping.cbarg,
4861 diag->fwping.status);
4862 diag->fwping.lock = 0;
4867 if (*((u32 *)diag->fwping.dbuf_kva + i) != pat) {
4868 bfa_trc(diag, i);
4869 bfa_trc(diag, pat);
4870 bfa_trc(diag,
4871 *((u32 *)diag->fwping.dbuf_kva + i));
4872 diag->fwping.result->dmastatus =
4874 diag->fwping.status = BFA_STATUS_DATACORRUPTED;
4875 diag->fwping.cbfn(diag->fwping.cbarg,
4876 diag->fwping.status);
4877 diag->fwping.lock = 0;
4881 diag->fwping.result->dmastatus = BFA_STATUS_OK;
4882 diag->fwping.status = BFA_STATUS_OK;
4883 diag->fwping.cbfn(diag->fwping.cbarg, diag->fwping.status);
4884 diag->fwping.lock = 0;
4886 diag->fwping.status = BFA_STATUS_HDMA_FAILED;
4887 diag->fwping.cbfn(diag->fwping.cbarg, diag->fwping.status);
4888 diag->fwping.lock = 0;
4897 diag_tempsensor_send(struct bfa_diag_s *diag)
4901 msg = (struct bfi_diag_ts_req_s *)diag->tsensor.mbcmd.msg;
4902 bfa_trc(diag, msg->temp);
4905 bfa_ioc_portid(diag->ioc));
4907 bfa_ioc_mbox_queue(diag->ioc, &diag->tsensor.mbcmd);
4911 diag_tempsensor_comp(struct bfa_diag_s *diag, bfi_diag_ts_rsp_t *rsp)
4913 if (!diag->tsensor.lock) {
4915 bfa_trc(diag, diag->tsensor.lock);
4923 diag->tsensor.temp->temp = be16_to_cpu(rsp->temp);
4924 diag->tsensor.temp->ts_junc = rsp->ts_junc;
4925 diag->tsensor.temp->ts_brd = rsp->ts_brd;
4929 diag->tsensor.temp->status = rsp->status;
4931 diag->tsensor.temp->brd_temp =
4934 diag->tsensor.temp->brd_temp = 0;
4937 bfa_trc(diag, rsp->status);
4938 bfa_trc(diag, rsp->ts_junc);
4939 bfa_trc(diag, rsp->temp);
4940 bfa_trc(diag, rsp->ts_brd);
4941 bfa_trc(diag, rsp->brd_temp);
4944 diag->tsensor.status = BFA_STATUS_OK;
4945 diag->tsensor.cbfn(diag->tsensor.cbarg, diag->tsensor.status);
4946 diag->tsensor.lock = 0;
4953 diag_ledtest_send(struct bfa_diag_s *diag, struct bfa_diag_ledtest_s *ledtest)
4957 msg = (struct bfi_diag_ledtest_req_s *)diag->ledtest.mbcmd.msg;
4960 bfa_ioc_portid(diag->ioc));
4972 bfa_trc(diag, ledtest->freq);
4976 msg->portid = bfa_ioc_portid(diag->ioc);
4981 bfa_ioc_mbox_queue(diag->ioc, &diag->ledtest.mbcmd);
4985 diag_ledtest_comp(struct bfa_diag_s *diag, struct bfi_diag_ledtest_rsp_s *msg)
4987 bfa_trc(diag, diag->ledtest.lock);
4988 diag->ledtest.lock = BFA_FALSE;
4996 diag_portbeacon_send(struct bfa_diag_s *diag, bfa_boolean_t beacon, u32 sec)
5000 msg = (struct bfi_diag_portbeacon_req_s *)diag->beacon.mbcmd.msg;
5003 bfa_ioc_portid(diag->ioc));
5007 bfa_ioc_mbox_queue(diag->ioc, &diag->beacon.mbcmd);
5011 diag_portbeacon_comp(struct bfa_diag_s *diag)
5013 bfa_trc(diag, diag->beacon.state);
5014 diag->beacon.state = BFA_FALSE;
5015 if (diag->cbfn_beacon)
5016 diag->cbfn_beacon(diag->dev, BFA_FALSE, diag->beacon.link_e2e);
5025 struct bfa_diag_s *diag = diagarg;
5029 diag_portbeacon_comp(diag);
5032 diag_fwping_comp(diag, (struct bfi_diag_fwping_rsp_s *) msg);
5035 diag_tempsensor_comp(diag, (bfi_diag_ts_rsp_t *) msg);
5038 diag_ledtest_comp(diag, (struct bfi_diag_ledtest_rsp_s *) msg);
5041 bfa_trc(diag, msg->mh.msg_id);
5049 * @param[in] *diag - diag data struct
5059 bfa_diag_memtest(struct bfa_diag_s *diag, struct bfa_diag_memtest_s *memtest,
5065 bfa_trc(diag, pattern);
5067 if (!bfa_ioc_adapter_is_disabled(diag->ioc))
5070 /* check to see if there is another destructive diag cmd running */
5071 if (diag->block) {
5072 bfa_trc(diag, diag->block);
5075 diag->block = 1;
5077 diag->result = result;
5078 diag->cbfn = cbfn;
5079 diag->cbarg = cbarg;
5082 bfa_ioc_boot(diag->ioc, BFI_FWBOOT_TYPE_MEMTEST, BFI_FWBOOT_ENV_OS);
5084 memtest_tov = (bfa_ioc_asic_gen(diag->ioc) == BFI_ASIC_GEN_CT2) ?
5086 bfa_timer_begin(diag->ioc->timer_mod, &diag->timer,
5087 bfa_diag_memtest_done, diag, memtest_tov);
5088 diag->timer_active = 1;
5095 * @param[in] *diag - diag data struct
5105 bfa_diag_fwping(struct bfa_diag_s *diag, u32 cnt, u32 data,
5109 bfa_trc(diag, cnt);
5110 bfa_trc(diag, data);
5112 if (!bfa_ioc_is_operational(diag->ioc))
5115 if (bfa_asic_id_ct2(bfa_ioc_devid((diag->ioc))) &&
5116 ((diag->ioc)->clscode == BFI_PCIFN_CLASS_ETH))
5119 /* check to see if there is another destructive diag cmd running */
5120 if (diag->block || diag->fwping.lock) {
5121 bfa_trc(diag, diag->block);
5122 bfa_trc(diag, diag->fwping.lock);
5127 diag->fwping.lock = 1;
5128 diag->fwping.cbfn = cbfn;
5129 diag->fwping.cbarg = cbarg;
5130 diag->fwping.result = result;
5131 diag->fwping.data = data;
5132 diag->fwping.count = cnt;
5135 diag->fwping.result->data = 0;
5136 diag->fwping.result->status = BFA_STATUS_OK;
5139 diag_fwping_send(diag);
5146 * @param[in] *diag - diag data struct
5154 bfa_diag_tsensor_query(struct bfa_diag_s *diag,
5158 /* check to see if there is a destructive diag cmd running */
5159 if (diag->block || diag->tsensor.lock) {
5160 bfa_trc(diag, diag->block);
5161 bfa_trc(diag, diag->tsensor.lock);
5165 if (!bfa_ioc_is_operational(diag->ioc))
5168 /* Init diag mod params */
5169 diag->tsensor.lock = 1;
5170 diag->tsensor.temp = result;
5171 diag->tsensor.cbfn = cbfn;
5172 diag->tsensor.cbarg = cbarg;
5173 diag->tsensor.status = BFA_STATUS_OK;
5176 diag_tempsensor_send(diag);
5184 * @param[in] *diag - diag data struct
5190 bfa_diag_ledtest(struct bfa_diag_s *diag, struct bfa_diag_ledtest_s *ledtest)
5192 bfa_trc(diag, ledtest->cmd);
5194 if (!bfa_ioc_is_operational(diag->ioc))
5197 if (diag->beacon.state)
5200 if (diag->ledtest.lock)
5204 diag->ledtest.lock = BFA_TRUE;
5205 diag_ledtest_send(diag, ledtest);
5213 * @param[in] *diag - diag data struct
5221 bfa_diag_beacon_port(struct bfa_diag_s *diag, bfa_boolean_t beacon,
5224 bfa_trc(diag, beacon);
5225 bfa_trc(diag, link_e2e_beacon);
5226 bfa_trc(diag, sec);
5228 if (!bfa_ioc_is_operational(diag->ioc))
5231 if (diag->ledtest.lock)
5234 if (diag->beacon.state && beacon) /* beacon alread on */
5237 diag->beacon.state = beacon;
5238 diag->beacon.link_e2e = link_e2e_beacon;
5239 if (diag->cbfn_beacon)
5240 diag->cbfn_beacon(diag->dev, beacon, link_e2e_beacon);
5243 diag_portbeacon_send(diag, beacon, sec);
5249 * Return DMA memory needed by diag module.
5261 bfa_diag_attach(struct bfa_diag_s *diag, struct bfa_ioc_s *ioc, void *dev,
5264 diag->dev = dev;
5265 diag->ioc = ioc;
5266 diag->trcmod = trcmod;
5268 diag->block = 0;
5269 diag->cbfn = NULL;
5270 diag->cbarg = NULL;
5271 diag->result = NULL;
5272 diag->cbfn_beacon = cbfn_beacon;
5274 bfa_ioc_mbox_regisr(diag->ioc, BFI_MC_DIAG, bfa_diag_intr, diag);
5275 bfa_q_qe_init(&diag->ioc_notify);
5276 bfa_ioc_notify_init(&diag->ioc_notify, bfa_diag_notify, diag);
5277 list_add_tail(&diag->ioc_notify.qe, &diag->ioc->notify_q);
5281 bfa_diag_memclaim(struct bfa_diag_s *diag, u8 *dm_kva, u64 dm_pa)
5283 diag->fwping.dbuf_kva = dm_kva;
5284 diag->fwping.dbuf_pa = dm_pa;
5285 memset(diag->fwping.dbuf_kva, 0, BFI_DIAG_DMA_BUF_SZ);