Lines Matching +full:fails +full:- +full:without +full:- +full:test +full:- +full:cd

1 // SPDX-License-Identifier: GPL-2.0-only
8 * Author: Joerg-Stephan Vogt <jsvogt@de.ibm.com>
27 #include <linux/dma-mapping.h>
38 MODULE_AUTHOR("Joerg-Stephan Vogt <jsvogt@de.ibm.com>");
60 /* Initial SR-IOV bring-up image */
109 * genwqe_dev_alloc() - Create and prepare a new card descriptor
116 struct genwqe_dev *cd; in genwqe_dev_alloc() local
123 return ERR_PTR(-ENODEV); in genwqe_dev_alloc()
125 cd = kzalloc(sizeof(struct genwqe_dev), GFP_KERNEL); in genwqe_dev_alloc()
126 if (!cd) in genwqe_dev_alloc()
127 return ERR_PTR(-ENOMEM); in genwqe_dev_alloc()
129 cd->card_idx = i; in genwqe_dev_alloc()
130 cd->class_genwqe = class_genwqe; in genwqe_dev_alloc()
131 cd->debugfs_genwqe = debugfs_genwqe; in genwqe_dev_alloc()
137 cd->use_platform_recovery = CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY; in genwqe_dev_alloc()
139 init_waitqueue_head(&cd->queue_waitq); in genwqe_dev_alloc()
141 spin_lock_init(&cd->file_lock); in genwqe_dev_alloc()
142 INIT_LIST_HEAD(&cd->file_list); in genwqe_dev_alloc()
144 cd->card_state = GENWQE_CARD_UNUSED; in genwqe_dev_alloc()
145 spin_lock_init(&cd->print_lock); in genwqe_dev_alloc()
147 cd->ddcb_software_timeout = GENWQE_DDCB_SOFTWARE_TIMEOUT; in genwqe_dev_alloc()
148 cd->kill_timeout = GENWQE_KILL_TIMEOUT; in genwqe_dev_alloc()
151 cd->vf_jobtimeout_msec[j] = GENWQE_VF_JOBTIMEOUT_MSEC; in genwqe_dev_alloc()
153 genwqe_devices[i] = cd; in genwqe_dev_alloc()
154 return cd; in genwqe_dev_alloc()
157 static void genwqe_dev_free(struct genwqe_dev *cd) in genwqe_dev_free() argument
159 if (!cd) in genwqe_dev_free()
162 genwqe_devices[cd->card_idx] = NULL; in genwqe_dev_free()
163 kfree(cd); in genwqe_dev_free()
167 * genwqe_bus_reset() - Card recovery
168 * @cd: GenWQE device information
175 static int genwqe_bus_reset(struct genwqe_dev *cd) in genwqe_bus_reset() argument
178 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_bus_reset()
181 if (cd->err_inject & GENWQE_INJECT_BUS_RESET_FAILURE) in genwqe_bus_reset()
182 return -EIO; in genwqe_bus_reset()
184 mmio = cd->mmio; in genwqe_bus_reset()
185 cd->mmio = NULL; in genwqe_bus_reset()
192 * Settings like enable bus-mastering, ... are backuped and in genwqe_bus_reset()
195 dev_dbg(&pci_dev->dev, "[%s] pci_reset function ...\n", __func__); in genwqe_bus_reset()
198 dev_err(&pci_dev->dev, in genwqe_bus_reset()
202 dev_dbg(&pci_dev->dev, "[%s] done with rc=%d\n", __func__, rc); in genwqe_bus_reset()
208 cd->err_inject &= ~(GENWQE_INJECT_HARDWARE_FAILURE | in genwqe_bus_reset()
214 dev_err(&pci_dev->dev, in genwqe_bus_reset()
216 return -EIO; in genwqe_bus_reset()
219 cd->mmio = pci_iomap(pci_dev, 0, 0); in genwqe_bus_reset()
220 if (cd->mmio == NULL) { in genwqe_bus_reset()
221 dev_err(&pci_dev->dev, in genwqe_bus_reset()
223 return -ENOMEM; in genwqe_bus_reset()
229 * Hardware circumvention section. Certain bitstreams in our test-lab
240 bool genwqe_need_err_masking(struct genwqe_dev *cd) in genwqe_need_err_masking() argument
242 return (cd->slu_unitcfg & 0xFFFF0ull) < 0x32170ull; in genwqe_need_err_masking()
245 static void genwqe_tweak_hardware(struct genwqe_dev *cd) in genwqe_tweak_hardware() argument
247 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_tweak_hardware()
250 if (((cd->slu_unitcfg & 0xFFFF0ull) >= 0x32000ull) && in genwqe_tweak_hardware()
251 ((cd->slu_unitcfg & 0xFFFF0ull) <= 0x33250ull)) { in genwqe_tweak_hardware()
252 dev_warn(&pci_dev->dev, in genwqe_tweak_hardware()
254 cd->slu_unitcfg, cd->app_unitcfg); in genwqe_tweak_hardware()
256 __genwqe_writeq(cd, IO_APP_SEC_LEM_DEBUG_OVR, in genwqe_tweak_hardware()
259 __genwqe_writeq(cd, IO_APP_ERR_ACT_MASK, in genwqe_tweak_hardware()
265 * genwqe_recovery_on_fatal_gfir_required() - Version depended actions
266 * @cd: GenWQE device information
268 * Bitstreams older than 2013-02-17 have a bug where fatal GFIRs must
271 * test-lab.
273 int genwqe_recovery_on_fatal_gfir_required(struct genwqe_dev *cd) in genwqe_recovery_on_fatal_gfir_required() argument
275 return (cd->slu_unitcfg & 0xFFFF0ull) >= 0x32170ull; in genwqe_recovery_on_fatal_gfir_required()
278 int genwqe_flash_readback_fails(struct genwqe_dev *cd) in genwqe_flash_readback_fails() argument
280 return (cd->slu_unitcfg & 0xFFFF0ull) < 0x32170ull; in genwqe_flash_readback_fails()
284 * genwqe_T_psec() - Calculate PF/VF timeout register content
285 * @cd: GenWQE device information
295 static int genwqe_T_psec(struct genwqe_dev *cd) in genwqe_T_psec() argument
297 u16 speed; /* 1/f -> 250, 200, 166, 175 */ in genwqe_T_psec()
300 speed = (u16)((cd->slu_unitcfg >> 28) & 0x0full); in genwqe_T_psec()
302 return -1; /* illegal value */ in genwqe_T_psec()
308 * genwqe_setup_pf_jtimer() - Setup PF hardware timeouts for DDCB execution
309 * @cd: GenWQE device information
317 static bool genwqe_setup_pf_jtimer(struct genwqe_dev *cd) in genwqe_setup_pf_jtimer() argument
319 u32 T = genwqe_T_psec(cd); in genwqe_setup_pf_jtimer()
327 16000000000uL/(T * 15)) - 10; in genwqe_setup_pf_jtimer()
329 genwqe_write_vreg(cd, IO_SLC_VF_APPJOB_TIMEOUT, in genwqe_setup_pf_jtimer()
335 * genwqe_setup_vf_jtimer() - Setup VF hardware timeouts for DDCB execution
336 * @cd: GenWQE device information
338 static bool genwqe_setup_vf_jtimer(struct genwqe_dev *cd) in genwqe_setup_vf_jtimer() argument
340 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_setup_vf_jtimer()
342 u32 T = genwqe_T_psec(cd); in genwqe_setup_vf_jtimer()
352 if (cd->vf_jobtimeout_msec[vf] == 0) in genwqe_setup_vf_jtimer()
355 x = ilog2(cd->vf_jobtimeout_msec[vf] * in genwqe_setup_vf_jtimer()
356 16000000000uL/(T * 15)) - 10; in genwqe_setup_vf_jtimer()
358 genwqe_write_vreg(cd, IO_SLC_VF_APPJOB_TIMEOUT, in genwqe_setup_vf_jtimer()
364 static int genwqe_ffdc_buffs_alloc(struct genwqe_dev *cd) in genwqe_ffdc_buffs_alloc() argument
371 e = genwqe_ffdc_buff_size(cd, 0); in genwqe_ffdc_buffs_alloc()
374 e = genwqe_ffdc_buff_size(cd, 1); in genwqe_ffdc_buffs_alloc()
377 e = genwqe_ffdc_buff_size(cd, 2); in genwqe_ffdc_buffs_alloc()
385 cd->ffdc[type].entries = e; in genwqe_ffdc_buffs_alloc()
386 cd->ffdc[type].regs = in genwqe_ffdc_buffs_alloc()
397 static void genwqe_ffdc_buffs_free(struct genwqe_dev *cd) in genwqe_ffdc_buffs_free() argument
402 kfree(cd->ffdc[type].regs); in genwqe_ffdc_buffs_free()
403 cd->ffdc[type].regs = NULL; in genwqe_ffdc_buffs_free()
407 static int genwqe_read_ids(struct genwqe_dev *cd) in genwqe_read_ids() argument
411 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_read_ids()
413 cd->slu_unitcfg = __genwqe_readq(cd, IO_SLU_UNITCFG); in genwqe_read_ids()
414 if (cd->slu_unitcfg == IO_ILLEGAL_VALUE) { in genwqe_read_ids()
415 dev_err(&pci_dev->dev, in genwqe_read_ids()
416 "err: SLUID=%016llx\n", cd->slu_unitcfg); in genwqe_read_ids()
417 err = -EIO; in genwqe_read_ids()
421 slu_id = genwqe_get_slu_id(cd); in genwqe_read_ids()
423 dev_err(&pci_dev->dev, in genwqe_read_ids()
425 err = -ENOENT; in genwqe_read_ids()
429 cd->app_unitcfg = __genwqe_readq(cd, IO_APP_UNITCFG); in genwqe_read_ids()
430 if (cd->app_unitcfg == IO_ILLEGAL_VALUE) { in genwqe_read_ids()
431 dev_err(&pci_dev->dev, in genwqe_read_ids()
432 "err: APPID=%016llx\n", cd->app_unitcfg); in genwqe_read_ids()
433 err = -EIO; in genwqe_read_ids()
436 genwqe_read_app_id(cd, cd->app_name, sizeof(cd->app_name)); in genwqe_read_ids()
445 if (pci_dev->is_virtfn) in genwqe_read_ids()
446 cd->is_privileged = 0; in genwqe_read_ids()
448 cd->is_privileged = (__genwqe_readq(cd, IO_SLU_BITSTREAM) in genwqe_read_ids()
455 static int genwqe_start(struct genwqe_dev *cd) in genwqe_start() argument
458 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_start()
460 err = genwqe_read_ids(cd); in genwqe_start()
464 if (genwqe_is_privileged(cd)) { in genwqe_start()
466 genwqe_ffdc_buffs_alloc(cd); in genwqe_start()
467 genwqe_stop_traps(cd); in genwqe_start()
470 genwqe_read_ffdc_regs(cd, cd->ffdc[GENWQE_DBG_REGS].regs, in genwqe_start()
471 cd->ffdc[GENWQE_DBG_REGS].entries, 0); in genwqe_start()
473 genwqe_ffdc_buff_read(cd, GENWQE_DBG_UNIT0, in genwqe_start()
474 cd->ffdc[GENWQE_DBG_UNIT0].regs, in genwqe_start()
475 cd->ffdc[GENWQE_DBG_UNIT0].entries); in genwqe_start()
477 genwqe_ffdc_buff_read(cd, GENWQE_DBG_UNIT1, in genwqe_start()
478 cd->ffdc[GENWQE_DBG_UNIT1].regs, in genwqe_start()
479 cd->ffdc[GENWQE_DBG_UNIT1].entries); in genwqe_start()
481 genwqe_ffdc_buff_read(cd, GENWQE_DBG_UNIT2, in genwqe_start()
482 cd->ffdc[GENWQE_DBG_UNIT2].regs, in genwqe_start()
483 cd->ffdc[GENWQE_DBG_UNIT2].entries); in genwqe_start()
485 genwqe_start_traps(cd); in genwqe_start()
487 if (cd->card_state == GENWQE_CARD_FATAL_ERROR) { in genwqe_start()
488 dev_warn(&pci_dev->dev, in genwqe_start()
495 cd->softreset = 0x7Cull; in genwqe_start()
496 __genwqe_writeq(cd, IO_SLC_CFGREG_SOFTRESET, in genwqe_start()
497 cd->softreset); in genwqe_start()
499 err = genwqe_bus_reset(cd); in genwqe_start()
501 dev_err(&pci_dev->dev, in genwqe_start()
508 * Re-read the IDs because in genwqe_start()
512 err = genwqe_read_ids(cd); in genwqe_start()
518 err = genwqe_setup_service_layer(cd); /* does a reset to the card */ in genwqe_start()
520 dev_err(&pci_dev->dev, in genwqe_start()
522 err = -ENODEV; in genwqe_start()
526 if (genwqe_is_privileged(cd)) { /* code is running _after_ reset */ in genwqe_start()
527 genwqe_tweak_hardware(cd); in genwqe_start()
529 genwqe_setup_pf_jtimer(cd); in genwqe_start()
530 genwqe_setup_vf_jtimer(cd); in genwqe_start()
533 err = genwqe_device_create(cd); in genwqe_start()
535 dev_err(&pci_dev->dev, in genwqe_start()
542 genwqe_release_service_layer(cd); in genwqe_start()
544 if (genwqe_is_privileged(cd)) in genwqe_start()
545 genwqe_ffdc_buffs_free(cd); in genwqe_start()
546 return -EIO; in genwqe_start()
550 * genwqe_stop() - Stop card operation
551 * @cd: GenWQE device information
556 * When genwqe_bus_reset() fails this function might called two times:
562 static int genwqe_stop(struct genwqe_dev *cd) in genwqe_stop() argument
564 genwqe_finish_queue(cd); /* no register access */ in genwqe_stop()
565 genwqe_device_remove(cd); /* device removed, procs killed */ in genwqe_stop()
566 genwqe_release_service_layer(cd); /* here genwqe_thread is stopped */ in genwqe_stop()
568 if (genwqe_is_privileged(cd)) { in genwqe_stop()
569 pci_disable_sriov(cd->pci_dev); /* access pci config space */ in genwqe_stop()
570 genwqe_ffdc_buffs_free(cd); in genwqe_stop()
577 * genwqe_recover_card() - Try to recover the card if it is possible
578 * @cd: GenWQE device information
582 * likely that genwqe_start fails in that situation. Proper error
588 static int genwqe_recover_card(struct genwqe_dev *cd, int fatal_err) in genwqe_recover_card() argument
591 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_recover_card()
593 genwqe_stop(cd); in genwqe_recover_card()
600 cd->softreset = 0x70ull; in genwqe_recover_card()
601 __genwqe_writeq(cd, IO_SLC_CFGREG_SOFTRESET, cd->softreset); in genwqe_recover_card()
604 rc = genwqe_bus_reset(cd); in genwqe_recover_card()
606 dev_err(&pci_dev->dev, in genwqe_recover_card()
611 rc = genwqe_start(cd); in genwqe_recover_card()
613 dev_err(&pci_dev->dev, in genwqe_recover_card()
620 static int genwqe_health_check_cond(struct genwqe_dev *cd, u64 *gfir) in genwqe_health_check_cond() argument
622 *gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR); in genwqe_health_check_cond()
624 genwqe_recovery_on_fatal_gfir_required(cd); in genwqe_health_check_cond()
628 * genwqe_fir_checking() - Check the fault isolation registers of the card
629 * @cd: GenWQE device information
637 static u64 genwqe_fir_checking(struct genwqe_dev *cd) in genwqe_fir_checking() argument
642 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_fir_checking()
647 dev_err(&pci_dev->dev, "* exit looping after %d times\n", in genwqe_fir_checking()
652 gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR); in genwqe_fir_checking()
654 dev_err(&pci_dev->dev, "* 0x%08x 0x%016llx\n", in genwqe_fir_checking()
662 * FIR set without a 2ndary FIR/FIR cannot be cleared in genwqe_fir_checking()
674 fir = __genwqe_readq(cd, fir_addr); in genwqe_fir_checking()
678 dev_err(&pci_dev->dev, "* 0x%08x 0x%016llx\n", fir_addr, fir); in genwqe_fir_checking()
684 fec = __genwqe_readq(cd, fec_addr); in genwqe_fir_checking()
686 dev_err(&pci_dev->dev, "* 0x%08x 0x%016llx\n", fec_addr, fec); in genwqe_fir_checking()
697 sfir = __genwqe_readq(cd, sfir_addr); in genwqe_fir_checking()
701 dev_err(&pci_dev->dev, in genwqe_fir_checking()
705 sfec = __genwqe_readq(cd, sfec_addr); in genwqe_fir_checking()
709 dev_err(&pci_dev->dev, in genwqe_fir_checking()
712 gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR); in genwqe_fir_checking()
728 __genwqe_writeq(cd, sfir_addr, sfir); in genwqe_fir_checking()
730 dev_dbg(&pci_dev->dev, in genwqe_fir_checking()
735 * note, these cannot be error-Firs in genwqe_fir_checking()
745 __genwqe_writeq(cd, fir_clr_addr, mask); in genwqe_fir_checking()
747 dev_dbg(&pci_dev->dev, in genwqe_fir_checking()
753 gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR); in genwqe_fir_checking()
762 dev_dbg(&pci_dev->dev, "ACK! Another FIR! Recursing %d!\n", in genwqe_fir_checking()
773 * genwqe_pci_fundamental_reset() - trigger a PCIe fundamental reset on the slot
805 static int genwqe_platform_recovery(struct genwqe_dev *cd) in genwqe_platform_recovery() argument
807 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_platform_recovery()
810 dev_info(&pci_dev->dev, in genwqe_platform_recovery()
814 cd->err_inject &= ~(GENWQE_INJECT_HARDWARE_FAILURE | in genwqe_platform_recovery()
818 genwqe_stop(cd); in genwqe_platform_recovery()
823 rc = genwqe_start(cd); in genwqe_platform_recovery()
825 dev_info(&pci_dev->dev, in genwqe_platform_recovery()
828 dev_err(&pci_dev->dev, in genwqe_platform_recovery()
832 dev_err(&pci_dev->dev, in genwqe_platform_recovery()
840 * genwqe_reload_bistream() - reload card bitstream
841 * @cd: GenWQE device information
848 static int genwqe_reload_bistream(struct genwqe_dev *cd) in genwqe_reload_bistream() argument
850 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_reload_bistream()
853 dev_info(&pci_dev->dev, in genwqe_reload_bistream()
857 genwqe_stop(cd); in genwqe_reload_bistream()
863 __genwqe_writeq(cd, IO_SLC_CFGREG_SOFTRESET, in genwqe_reload_bistream()
864 (cd->softreset & 0xcull) | 0x70ull); in genwqe_reload_bistream()
874 dev_err(&pci_dev->dev, in genwqe_reload_bistream()
879 rc = genwqe_start(cd); in genwqe_reload_bistream()
881 dev_err(&pci_dev->dev, in genwqe_reload_bistream()
886 dev_info(&pci_dev->dev, in genwqe_reload_bistream()
893 * genwqe_health_thread() - Health checking thread
899 * is when we read registers which contain -1 (IO_ILLEGAL_VALUE). In
905 * Condition for the health-thread to trigger:
915 struct genwqe_dev *cd = data; in genwqe_health_thread() local
916 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_health_thread()
921 rc = wait_event_interruptible_timeout(cd->health_waitq, in genwqe_health_thread()
922 (genwqe_health_check_cond(cd, &gfir) || in genwqe_health_thread()
930 dev_err(&pci_dev->dev, in genwqe_health_thread()
935 slu_unitcfg = __genwqe_readq(cd, IO_SLU_UNITCFG); in genwqe_health_thread()
937 dev_err(&pci_dev->dev, in genwqe_health_thread()
943 app_unitcfg = __genwqe_readq(cd, IO_APP_UNITCFG); in genwqe_health_thread()
945 dev_err(&pci_dev->dev, in genwqe_health_thread()
951 gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR); in genwqe_health_thread()
953 dev_err(&pci_dev->dev, in genwqe_health_thread()
960 gfir_masked = genwqe_fir_checking(cd); in genwqe_health_thread()
968 if ((gfir_masked) && !cd->skip_recovery && in genwqe_health_thread()
969 genwqe_recovery_on_fatal_gfir_required(cd)) { in genwqe_health_thread()
971 cd->card_state = GENWQE_CARD_FATAL_ERROR; in genwqe_health_thread()
973 rc = genwqe_recover_card(cd, 0); in genwqe_health_thread()
980 if (cd->card_state == GENWQE_CARD_RELOAD_BITSTREAM) { in genwqe_health_thread()
982 rc = genwqe_reload_bistream(cd); in genwqe_health_thread()
987 cd->last_gfir = gfir; in genwqe_health_thread()
994 if (cd->use_platform_recovery) { in genwqe_health_thread()
997 * by the platform until we do a non-raw MMIO or config space in genwqe_health_thread()
1000 readq(cd->mmio + IO_SLC_CFGREG_GFIR); in genwqe_health_thread()
1004 return -EIO; in genwqe_health_thread()
1011 rc = genwqe_platform_recovery(cd); in genwqe_health_thread()
1016 dev_err(&pci_dev->dev, in genwqe_health_thread()
1020 cd->card_state = GENWQE_CARD_FATAL_ERROR; in genwqe_health_thread()
1021 genwqe_stop(cd); in genwqe_health_thread()
1027 return -EIO; in genwqe_health_thread()
1030 static int genwqe_health_check_start(struct genwqe_dev *cd) in genwqe_health_check_start() argument
1038 /* init_waitqueue_head(&cd->health_waitq); */ in genwqe_health_check_start()
1040 cd->health_thread = kthread_run(genwqe_health_thread, cd, in genwqe_health_check_start()
1042 cd->card_idx); in genwqe_health_check_start()
1043 if (IS_ERR(cd->health_thread)) { in genwqe_health_check_start()
1044 rc = PTR_ERR(cd->health_thread); in genwqe_health_check_start()
1045 cd->health_thread = NULL; in genwqe_health_check_start()
1051 static int genwqe_health_thread_running(struct genwqe_dev *cd) in genwqe_health_thread_running() argument
1053 return cd->health_thread != NULL; in genwqe_health_thread_running()
1056 static int genwqe_health_check_stop(struct genwqe_dev *cd) in genwqe_health_check_stop() argument
1058 if (!genwqe_health_thread_running(cd)) in genwqe_health_check_stop()
1059 return -EIO; in genwqe_health_check_stop()
1061 kthread_stop(cd->health_thread); in genwqe_health_check_stop()
1062 cd->health_thread = NULL; in genwqe_health_check_stop()
1067 * genwqe_pci_setup() - Allocate PCIe related resources for our card
1068 * @cd: GenWQE device information
1070 static int genwqe_pci_setup(struct genwqe_dev *cd) in genwqe_pci_setup() argument
1073 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_pci_setup()
1077 dev_err(&pci_dev->dev, in genwqe_pci_setup()
1085 dev_err(&pci_dev->dev, in genwqe_pci_setup()
1087 err = -EIO; in genwqe_pci_setup()
1091 /* check for 64-bit DMA address supported (DAC) */ in genwqe_pci_setup()
1095 dev_err(&pci_dev->dev, in genwqe_pci_setup()
1097 err = -EIO; in genwqe_pci_setup()
1100 /* check for 32-bit DMA address supported (SAC) */ in genwqe_pci_setup()
1104 dev_err(&pci_dev->dev, in genwqe_pci_setup()
1106 err = -EIO; in genwqe_pci_setup()
1110 dev_err(&pci_dev->dev, in genwqe_pci_setup()
1112 err = -EIO; in genwqe_pci_setup()
1120 pci_dev->needs_freset = 1; in genwqe_pci_setup()
1122 /* request complete BAR-0 space (length = 0) */ in genwqe_pci_setup()
1123 cd->mmio_len = pci_resource_len(pci_dev, 0); in genwqe_pci_setup()
1124 cd->mmio = pci_iomap(pci_dev, 0, 0); in genwqe_pci_setup()
1125 if (cd->mmio == NULL) { in genwqe_pci_setup()
1126 dev_err(&pci_dev->dev, in genwqe_pci_setup()
1128 err = -ENOMEM; in genwqe_pci_setup()
1132 cd->num_vfs = pci_sriov_get_totalvfs(pci_dev); in genwqe_pci_setup()
1133 if (cd->num_vfs < 0) in genwqe_pci_setup()
1134 cd->num_vfs = 0; in genwqe_pci_setup()
1136 err = genwqe_read_ids(cd); in genwqe_pci_setup()
1143 pci_iounmap(pci_dev, cd->mmio); in genwqe_pci_setup()
1153 * genwqe_pci_remove() - Free PCIe related resources for our card
1154 * @cd: GenWQE device information
1156 static void genwqe_pci_remove(struct genwqe_dev *cd) in genwqe_pci_remove() argument
1158 struct pci_dev *pci_dev = cd->pci_dev; in genwqe_pci_remove()
1160 if (cd->mmio) in genwqe_pci_remove()
1161 pci_iounmap(pci_dev, cd->mmio); in genwqe_pci_remove()
1168 * genwqe_probe() - Device initialization
1180 struct genwqe_dev *cd; in genwqe_probe() local
1184 cd = genwqe_dev_alloc(); in genwqe_probe()
1185 if (IS_ERR(cd)) { in genwqe_probe()
1186 dev_err(&pci_dev->dev, "err: could not alloc mem (err=%d)!\n", in genwqe_probe()
1187 (int)PTR_ERR(cd)); in genwqe_probe()
1188 return PTR_ERR(cd); in genwqe_probe()
1191 dev_set_drvdata(&pci_dev->dev, cd); in genwqe_probe()
1192 cd->pci_dev = pci_dev; in genwqe_probe()
1194 err = genwqe_pci_setup(cd); in genwqe_probe()
1196 dev_err(&pci_dev->dev, in genwqe_probe()
1201 err = genwqe_start(cd); in genwqe_probe()
1203 dev_err(&pci_dev->dev, in genwqe_probe()
1208 if (genwqe_is_privileged(cd)) { in genwqe_probe()
1209 err = genwqe_health_check_start(cd); in genwqe_probe()
1211 dev_err(&pci_dev->dev, in genwqe_probe()
1220 genwqe_stop(cd); in genwqe_probe()
1222 genwqe_pci_remove(cd); in genwqe_probe()
1224 genwqe_dev_free(cd); in genwqe_probe()
1229 * genwqe_remove() - Called when device is removed (hot-plugable)
1236 struct genwqe_dev *cd = dev_get_drvdata(&pci_dev->dev); in genwqe_remove() local
1238 genwqe_health_check_stop(cd); in genwqe_remove()
1243 * and fails on genwqe_bus_reset(). in genwqe_remove()
1245 genwqe_stop(cd); in genwqe_remove()
1246 genwqe_pci_remove(cd); in genwqe_remove()
1247 genwqe_dev_free(cd); in genwqe_remove()
1251 * genwqe_err_error_detected() - Error detection callback
1261 struct genwqe_dev *cd; in genwqe_err_error_detected() local
1263 dev_err(&pci_dev->dev, "[%s] state=%d\n", __func__, state); in genwqe_err_error_detected()
1265 cd = dev_get_drvdata(&pci_dev->dev); in genwqe_err_error_detected()
1266 if (cd == NULL) in genwqe_err_error_detected()
1270 genwqe_health_check_stop(cd); in genwqe_err_error_detected()
1271 genwqe_stop(cd); in genwqe_err_error_detected()
1281 genwqe_pci_remove(cd); in genwqe_err_error_detected()
1289 struct genwqe_dev *cd = dev_get_drvdata(&pci_dev->dev); in genwqe_err_slot_reset() local
1291 rc = genwqe_pci_setup(cd); in genwqe_err_slot_reset()
1295 dev_err(&pci_dev->dev, in genwqe_err_slot_reset()
1309 struct genwqe_dev *cd = dev_get_drvdata(&pci_dev->dev); in genwqe_err_resume() local
1311 rc = genwqe_start(cd); in genwqe_err_resume()
1313 rc = genwqe_health_check_start(cd); in genwqe_err_resume()
1315 dev_err(&pci_dev->dev, in genwqe_err_resume()
1319 dev_err(&pci_dev->dev, in genwqe_err_resume()
1327 struct genwqe_dev *cd = dev_get_drvdata(&dev->dev); in genwqe_sriov_configure() local
1330 genwqe_setup_vf_jtimer(cd); in genwqe_sriov_configure()
1360 * genwqe_devnode() - Set default access mode for genwqe devices.
1362 * @mode: Carrier to pass-back given mode (permissions)
1375 * genwqe_init_module() - Driver registration and initialization
1384 return -ENOMEM; in genwqe_init_module()
1387 class_genwqe->devnode = genwqe_devnode; in genwqe_init_module()
1406 * genwqe_exit_module() - Driver exit