Lines Matching refs:devinfo

242 	void (*ringbell)(struct brcmf_pciedev_info *devinfo);
254 struct brcmf_pciedev_info *devinfo; member
286 brcmf_pcie_read_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset) in brcmf_pcie_read_reg32() argument
288 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
295 brcmf_pcie_write_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset, in brcmf_pcie_write_reg32() argument
298 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
305 brcmf_pcie_read_tcm8(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm8() argument
307 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
314 brcmf_pcie_read_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm16() argument
316 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
323 brcmf_pcie_write_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm16() argument
326 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
333 brcmf_pcie_read_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm32() argument
335 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
342 brcmf_pcie_write_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm32() argument
345 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
352 brcmf_pcie_read_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_ram32() argument
354 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
361 brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_ram32() argument
364 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
371 brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_mem_todev() argument
374 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_mem_todev()
411 #define WRITECC32(devinfo, reg, value) brcmf_pcie_write_reg32(devinfo, \ argument
416 brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid) in brcmf_pcie_select_core() argument
418 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
422 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
441 static void brcmf_pcie_reset_device(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_reset_device() argument
458 if (!devinfo->ci) in brcmf_pcie_reset_device()
461 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
462 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, in brcmf_pcie_reset_device()
464 lsc = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA); in brcmf_pcie_reset_device()
466 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, val); in brcmf_pcie_reset_device()
468 brcmf_pcie_select_core(devinfo, BCMA_CORE_CHIPCOMMON); in brcmf_pcie_reset_device()
469 WRITECC32(devinfo, watchdog, 4); in brcmf_pcie_reset_device()
472 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
473 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, in brcmf_pcie_reset_device()
475 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, lsc); in brcmf_pcie_reset_device()
477 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
479 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, in brcmf_pcie_reset_device()
481 val = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_reset_device()
485 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, in brcmf_pcie_reset_device()
491 static void brcmf_pcie_attach(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_attach() argument
495 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
496 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_INTMASK) != 0) in brcmf_pcie_attach()
497 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_attach()
499 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
500 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, 0x4e0); in brcmf_pcie_attach()
501 config = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA); in brcmf_pcie_attach()
502 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, config); in brcmf_pcie_attach()
504 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
508 static int brcmf_pcie_enter_download_state(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_enter_download_state() argument
510 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
511 brcmf_pcie_select_core(devinfo, BCMA_CORE_ARM_CR4); in brcmf_pcie_enter_download_state()
512 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
514 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
516 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
518 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
525 static int brcmf_pcie_exit_download_state(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_exit_download_state() argument
530 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
531 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
535 return !brcmf_chip_set_active(devinfo->ci, resetintr); in brcmf_pcie_exit_download_state()
540 brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data) in brcmf_pcie_send_mb_data() argument
547 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
549 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
561 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
564 brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data); in brcmf_pcie_send_mb_data()
565 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
566 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
572 static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_handle_mb_data() argument
578 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
580 dtoh_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_handle_mb_data()
585 brcmf_pcie_write_tcm32(devinfo, addr, 0); in brcmf_pcie_handle_mb_data()
590 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_DS_ACK); in brcmf_pcie_handle_mb_data()
597 if (waitqueue_active(&devinfo->mbdata_resp_wait)) { in brcmf_pcie_handle_mb_data()
598 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
599 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
605 static void brcmf_pcie_bus_console_init(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_init() argument
611 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
614 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
617 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
619 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
626 static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_read() argument
633 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
635 newidx = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_read()
638 ch = brcmf_pcie_read_tcm8(devinfo, addr); in brcmf_pcie_bus_console_read()
661 static __used void brcmf_pcie_ringbell_v1(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_ringbell_v1() argument
666 reg_value = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_ringbell_v1()
669 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_ringbell_v1()
674 static void brcmf_pcie_ringbell_v2(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_ringbell_v2() argument
678 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX, 1); in brcmf_pcie_ringbell_v2()
682 static void brcmf_pcie_intr_disable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_disable() argument
684 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) in brcmf_pcie_intr_disable()
685 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_INTMASK, in brcmf_pcie_intr_disable()
688 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_disable()
693 static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_enable() argument
695 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) in brcmf_pcie_intr_enable()
696 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_INTMASK, in brcmf_pcie_intr_enable()
699 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_enable()
708 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr_v1() local
712 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_INTSTATUS, &status); in brcmf_pcie_quick_check_isr_v1()
714 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr_v1()
724 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr_v2() local
726 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT)) { in brcmf_pcie_quick_check_isr_v2()
727 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr_v2()
737 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread_v1() local
738 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_isr_thread_v1()
741 devinfo->in_irq = true; in brcmf_pcie_isr_thread_v1()
747 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v1()
748 brcmf_proto_msgbuf_rx_trigger(&devinfo->pdev->dev); in brcmf_pcie_isr_thread_v1()
750 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v1()
751 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread_v1()
752 devinfo->in_irq = false; in brcmf_pcie_isr_thread_v1()
759 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread_v2() local
762 devinfo->in_irq = true; in brcmf_pcie_isr_thread_v2()
763 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_isr_thread_v2()
766 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_isr_thread_v2()
770 brcmf_pcie_handle_mb_data(devinfo); in brcmf_pcie_isr_thread_v2()
772 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v2()
774 &devinfo->pdev->dev); in brcmf_pcie_isr_thread_v2()
777 brcmf_pcie_bus_console_read(devinfo); in brcmf_pcie_isr_thread_v2()
778 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v2()
779 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread_v2()
780 devinfo->in_irq = false; in brcmf_pcie_isr_thread_v2()
785 static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_request_irq() argument
789 pdev = devinfo->pdev; in brcmf_pcie_request_irq()
791 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_request_irq()
795 devinfo->irq_requested = false; in brcmf_pcie_request_irq()
797 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) { in brcmf_pcie_request_irq()
802 devinfo)) { in brcmf_pcie_request_irq()
812 devinfo)) { in brcmf_pcie_request_irq()
818 devinfo->irq_requested = true; in brcmf_pcie_request_irq()
819 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
824 static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_irq() argument
830 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
833 pdev = devinfo->pdev; in brcmf_pcie_release_irq()
835 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_release_irq()
836 if (!devinfo->irq_requested) in brcmf_pcie_release_irq()
838 devinfo->irq_requested = false; in brcmf_pcie_release_irq()
839 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
844 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
848 if (devinfo->in_irq) in brcmf_pcie_release_irq()
851 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) { in brcmf_pcie_release_irq()
856 status = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_release_irq()
858 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_release_irq()
861 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
868 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr() local
871 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
877 brcmf_pcie_write_tcm16(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
886 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr() local
889 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
895 brcmf_pcie_write_tcm16(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
904 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell() local
906 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
909 devinfo->ringbell(devinfo); in brcmf_pcie_ring_mb_ring_bell()
918 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr() local
921 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
924 commonring->r_ptr = brcmf_pcie_read_tcm16(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
936 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr() local
939 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
942 commonring->w_ptr = brcmf_pcie_read_tcm16(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
952 brcmf_pcie_init_dmabuffer_for_device(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_dmabuffer_for_device() argument
959 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
965 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr, in brcmf_pcie_init_dmabuffer_for_device()
967 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr + 4, address >> 32); in brcmf_pcie_init_dmabuffer_for_device()
976 brcmf_pcie_alloc_dma_and_ring(struct brcmf_pciedev_info *devinfo, u32 ring_id, in brcmf_pcie_alloc_dma_and_ring() argument
986 dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size, in brcmf_pcie_alloc_dma_and_ring()
993 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
995 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
999 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1006 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1036 static void brcmf_pcie_release_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_ringbuffers() argument
1041 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1042 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1043 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1045 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1046 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1050 static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_ringbuffers() argument
1064 ring_addr = devinfo->shared.ring_info_addr; in brcmf_pcie_init_ringbuffers()
1068 d2h_w_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1070 d2h_r_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1072 h2d_w_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1074 h2d_r_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1077 ring_mem_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1080 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1086 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1095 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1101 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1109 max_sub_queues = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1110 devinfo->shared.nrof_flowrings = in brcmf_pcie_init_ringbuffers()
1112 rings = kcalloc(devinfo->shared.nrof_flowrings, sizeof(*ring), in brcmf_pcie_init_ringbuffers()
1118 devinfo->shared.nrof_flowrings); in brcmf_pcie_init_ringbuffers()
1120 for (i = 0; i < devinfo->shared.nrof_flowrings; i++) { in brcmf_pcie_init_ringbuffers()
1122 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1136 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1142 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_init_ringbuffers()
1148 brcmf_pcie_release_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_scratchbuffers() argument
1150 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1151 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1153 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1154 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1155 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1156 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1158 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1159 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1162 static int brcmf_pcie_init_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_scratchbuffers() argument
1167 devinfo->shared.scratch = dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1169 &devinfo->shared.scratch_dmahandle, GFP_KERNEL); in brcmf_pcie_init_scratchbuffers()
1170 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1173 memset(devinfo->shared.scratch, 0, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1174 brcmf_dma_flush(devinfo->shared.scratch, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1176 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1178 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1179 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1180 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1181 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1183 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1185 devinfo->shared.ringupd = dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1187 &devinfo->shared.ringupd_dmahandle, GFP_KERNEL); in brcmf_pcie_init_scratchbuffers()
1188 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1191 memset(devinfo->shared.ringupd, 0, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1192 brcmf_dma_flush(devinfo->shared.ringupd, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1194 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1196 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1197 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1198 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1199 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1201 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1206 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_init_scratchbuffers()
1240 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config() local
1243 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1245 device_set_wakeup_enable(&devinfo->pdev->dev, true); in brcmf_pcie_wowl_config()
1247 device_set_wakeup_enable(&devinfo->pdev->dev, false); in brcmf_pcie_wowl_config()
1261 brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_share_ram_info() argument
1268 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1271 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1286 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1291 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1294 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1297 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1300 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1305 brcmf_pcie_bus_console_init(devinfo); in brcmf_pcie_init_share_ram_info()
1311 static int brcmf_pcie_get_fwnames(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_fwnames() argument
1318 brcmf_dbg(PCIE, "Enter, chip 0x%04x chiprev %d\n", devinfo->ci->chip, in brcmf_pcie_get_fwnames()
1319 devinfo->ci->chiprev); in brcmf_pcie_get_fwnames()
1321 switch (devinfo->ci->chip) { in brcmf_pcie_get_fwnames()
1337 brcmf_err("Unsupported chip 0x%04x\n", devinfo->ci->chip); in brcmf_pcie_get_fwnames()
1341 fw_len = sizeof(devinfo->fw_name) - 1; in brcmf_pcie_get_fwnames()
1342 nv_len = sizeof(devinfo->nvram_name) - 1; in brcmf_pcie_get_fwnames()
1345 strncpy(devinfo->fw_name, brcmf_firmware_path, fw_len); in brcmf_pcie_get_fwnames()
1346 strncpy(devinfo->nvram_name, brcmf_firmware_path, nv_len); in brcmf_pcie_get_fwnames()
1347 fw_len -= strlen(devinfo->fw_name); in brcmf_pcie_get_fwnames()
1348 nv_len -= strlen(devinfo->nvram_name); in brcmf_pcie_get_fwnames()
1352 strncat(devinfo->fw_name, "/", fw_len); in brcmf_pcie_get_fwnames()
1353 strncat(devinfo->nvram_name, "/", nv_len); in brcmf_pcie_get_fwnames()
1358 strncat(devinfo->fw_name, fw_name, fw_len); in brcmf_pcie_get_fwnames()
1359 strncat(devinfo->nvram_name, nvram_name, nv_len); in brcmf_pcie_get_fwnames()
1365 static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_download_fw_nvram() argument
1376 devinfo->ringbell = brcmf_pcie_ringbell_v2; in brcmf_pcie_download_fw_nvram()
1377 devinfo->generic_corerev = BRCMF_PCIE_GENREV2; in brcmf_pcie_download_fw_nvram()
1380 err = brcmf_pcie_enter_download_state(devinfo); in brcmf_pcie_download_fw_nvram()
1384 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1385 brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1394 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1397 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1398 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1400 brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1404 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1407 sharedram_addr_written = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1408 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1411 err = brcmf_pcie_exit_download_state(devinfo, resetintr); in brcmf_pcie_download_fw_nvram()
1420 sharedram_addr = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1421 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1431 return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr)); in brcmf_pcie_download_fw_nvram()
1435 static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_resource() argument
1442 pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1464 devinfo->regs = ioremap_nocache(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1465 devinfo->tcm = ioremap_nocache(bar1_addr, BRCMF_PCIE_TCM_MAP_SIZE); in brcmf_pcie_get_resource()
1466 devinfo->tcm_size = BRCMF_PCIE_TCM_MAP_SIZE; in brcmf_pcie_get_resource()
1468 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1469 brcmf_err("ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1470 devinfo->tcm); in brcmf_pcie_get_resource()
1474 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1476 devinfo->tcm, (unsigned long long)bar1_addr); in brcmf_pcie_get_resource()
1482 static void brcmf_pcie_release_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_resource() argument
1484 if (devinfo->tcm) in brcmf_pcie_release_resource()
1485 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1486 if (devinfo->regs) in brcmf_pcie_release_resource()
1487 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1489 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1525 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_read32() local
1527 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1528 return brcmf_pcie_read_reg32(devinfo, addr); in brcmf_pcie_buscore_read32()
1534 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_write32() local
1536 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1537 brcmf_pcie_write_reg32(devinfo, addr, value); in brcmf_pcie_buscore_write32()
1543 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscoreprep() local
1546 err = brcmf_pcie_get_resource(devinfo); in brcmf_pcie_buscoreprep()
1563 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_activate() local
1565 brcmf_pcie_write_tcm32(devinfo, 0, rstvec); in brcmf_pcie_buscore_activate()
1581 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup() local
1586 brcmf_pcie_attach(devinfo); in brcmf_pcie_setup()
1588 ret = brcmf_pcie_download_fw_nvram(devinfo, fw, nvram, nvram_len); in brcmf_pcie_setup()
1592 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
1594 ret = brcmf_pcie_init_ringbuffers(devinfo); in brcmf_pcie_setup()
1598 ret = brcmf_pcie_init_scratchbuffers(devinfo); in brcmf_pcie_setup()
1602 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_setup()
1603 ret = brcmf_pcie_request_irq(devinfo); in brcmf_pcie_setup()
1610 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
1612 flowrings = kcalloc(devinfo->shared.nrof_flowrings, sizeof(flowrings), in brcmf_pcie_setup()
1617 for (i = 0; i < devinfo->shared.nrof_flowrings; i++) in brcmf_pcie_setup()
1618 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
1621 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
1622 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
1623 bus->msgbuf->nrof_flowrings = devinfo->shared.nrof_flowrings; in brcmf_pcie_setup()
1625 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
1627 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_setup()
1631 brcmf_pcie_bus_console_read(devinfo); in brcmf_pcie_setup()
1641 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_probe() local
1648 devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL); in brcmf_pcie_probe()
1649 if (devinfo == NULL) in brcmf_pcie_probe()
1652 devinfo->pdev = pdev; in brcmf_pcie_probe()
1654 devinfo->ci = brcmf_chip_attach(devinfo, &brcmf_pcie_buscore_ops); in brcmf_pcie_probe()
1655 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
1656 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
1657 devinfo->ci = NULL; in brcmf_pcie_probe()
1680 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
1686 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
1690 ret = brcmf_pcie_get_fwnames(devinfo); in brcmf_pcie_probe()
1696 devinfo->fw_name, devinfo->nvram_name, in brcmf_pcie_probe()
1705 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_probe()
1706 if (devinfo->ci) in brcmf_pcie_probe()
1707 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
1709 kfree(devinfo); in brcmf_pcie_probe()
1717 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_remove() local
1726 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
1728 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
1729 if (devinfo->ci) in brcmf_pcie_remove()
1730 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_remove()
1739 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_remove()
1740 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_remove()
1741 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_remove()
1742 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_remove()
1743 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_remove()
1745 if (devinfo->ci) in brcmf_pcie_remove()
1746 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
1748 kfree(devinfo); in brcmf_pcie_remove()
1758 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_suspend() local
1765 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_suspend()
1769 devinfo->mbdata_completed = false; in brcmf_pcie_suspend()
1770 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D3_INFORM); in brcmf_pcie_suspend()
1772 wait_event_timeout(devinfo->mbdata_resp_wait, in brcmf_pcie_suspend()
1773 devinfo->mbdata_completed, in brcmf_pcie_suspend()
1775 if (!devinfo->mbdata_completed) { in brcmf_pcie_suspend()
1779 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D0_INFORM_IN_USE); in brcmf_pcie_suspend()
1784 if ((err) || (!devinfo->wowl_enabled)) { in brcmf_pcie_suspend()
1785 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_suspend()
1786 devinfo->ci = NULL; in brcmf_pcie_suspend()
1796 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_resume() local
1814 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_resume()
1815 if (brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_resume()
1817 if (brcmf_pcie_send_mb_data(devinfo, in brcmf_pcie_resume()
1821 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_resume()
1823 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_resume()
1830 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_resume()
1831 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_resume()
1832 devinfo->ci = NULL; in brcmf_pcie_resume()