Lines Matching refs:devinfo
269 void (*ringbell)(struct brcmf_pciedev_info *devinfo);
278 u16 (*read_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset);
279 void (*write_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
288 struct brcmf_pciedev_info *devinfo; member
311 brcmf_pcie_read_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset) in brcmf_pcie_read_reg32() argument
313 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
320 brcmf_pcie_write_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset, in brcmf_pcie_write_reg32() argument
323 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
330 brcmf_pcie_read_tcm8(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm8() argument
332 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
339 brcmf_pcie_read_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm16() argument
341 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
348 brcmf_pcie_write_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm16() argument
351 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
358 brcmf_pcie_read_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_idx() argument
360 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_read_idx()
367 brcmf_pcie_write_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_idx() argument
370 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_write_idx()
377 brcmf_pcie_read_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm32() argument
379 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
386 brcmf_pcie_write_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm32() argument
389 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
396 brcmf_pcie_read_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_ram32() argument
398 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
405 brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_ram32() argument
408 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
415 brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_mem_todev() argument
418 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_mem_todev()
456 brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_dev_tomem() argument
459 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_dev_tomem()
496 #define WRITECC32(devinfo, reg, value) brcmf_pcie_write_reg32(devinfo, \ argument
501 brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid) in brcmf_pcie_select_core() argument
503 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
507 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
526 static void brcmf_pcie_reset_device(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_reset_device() argument
544 if (!devinfo->ci) in brcmf_pcie_reset_device()
548 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
549 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
552 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
556 brcmf_pcie_select_core(devinfo, BCMA_CORE_CHIPCOMMON); in brcmf_pcie_reset_device()
557 WRITECC32(devinfo, watchdog, 4); in brcmf_pcie_reset_device()
561 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
562 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
565 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
568 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
571 val = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_reset_device()
575 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
583 static void brcmf_pcie_attach(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_attach() argument
587 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
589 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
590 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, 0x4e0); in brcmf_pcie_attach()
591 config = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA); in brcmf_pcie_attach()
592 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, config); in brcmf_pcie_attach()
594 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
598 static int brcmf_pcie_enter_download_state(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_enter_download_state() argument
600 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
601 brcmf_pcie_select_core(devinfo, BCMA_CORE_ARM_CR4); in brcmf_pcie_enter_download_state()
602 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
604 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
606 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
608 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
615 static int brcmf_pcie_exit_download_state(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_exit_download_state() argument
620 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
621 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
625 return !brcmf_chip_set_active(devinfo->ci, resetintr); in brcmf_pcie_exit_download_state()
630 brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data) in brcmf_pcie_send_mb_data() argument
637 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
639 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
651 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
654 brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data); in brcmf_pcie_send_mb_data()
655 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
656 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
662 static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_handle_mb_data() argument
668 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
670 dtoh_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_handle_mb_data()
675 brcmf_pcie_write_tcm32(devinfo, addr, 0); in brcmf_pcie_handle_mb_data()
680 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_DS_ACK); in brcmf_pcie_handle_mb_data()
687 if (waitqueue_active(&devinfo->mbdata_resp_wait)) { in brcmf_pcie_handle_mb_data()
688 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
689 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
695 static void brcmf_pcie_bus_console_init(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_init() argument
701 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
704 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
707 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
709 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
716 static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_read() argument
726 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
728 newidx = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_read()
731 ch = brcmf_pcie_read_tcm8(devinfo, addr); in brcmf_pcie_bus_console_read()
754 static __used void brcmf_pcie_ringbell_v1(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_ringbell_v1() argument
759 reg_value = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_ringbell_v1()
762 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_ringbell_v1()
767 static void brcmf_pcie_ringbell_v2(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_ringbell_v2() argument
771 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX, 1); in brcmf_pcie_ringbell_v2()
775 static void brcmf_pcie_intr_disable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_disable() argument
777 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) in brcmf_pcie_intr_disable()
778 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_INTMASK, in brcmf_pcie_intr_disable()
781 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_disable()
786 static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_enable() argument
788 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) in brcmf_pcie_intr_enable()
789 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_INTMASK, in brcmf_pcie_intr_enable()
792 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_enable()
801 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr_v1() local
805 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_INTSTATUS, &status); in brcmf_pcie_quick_check_isr_v1()
807 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr_v1()
817 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr_v2() local
819 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT)) { in brcmf_pcie_quick_check_isr_v2()
820 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr_v2()
830 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread_v1() local
831 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_isr_thread_v1()
834 devinfo->in_irq = true; in brcmf_pcie_isr_thread_v1()
840 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v1()
841 brcmf_proto_msgbuf_rx_trigger(&devinfo->pdev->dev); in brcmf_pcie_isr_thread_v1()
843 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v1()
844 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread_v1()
845 devinfo->in_irq = false; in brcmf_pcie_isr_thread_v1()
852 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread_v2() local
855 devinfo->in_irq = true; in brcmf_pcie_isr_thread_v2()
856 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_isr_thread_v2()
859 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_isr_thread_v2()
863 brcmf_pcie_handle_mb_data(devinfo); in brcmf_pcie_isr_thread_v2()
865 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v2()
867 &devinfo->pdev->dev); in brcmf_pcie_isr_thread_v2()
870 brcmf_pcie_bus_console_read(devinfo); in brcmf_pcie_isr_thread_v2()
871 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread_v2()
872 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread_v2()
873 devinfo->in_irq = false; in brcmf_pcie_isr_thread_v2()
878 static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_request_irq() argument
882 pdev = devinfo->pdev; in brcmf_pcie_request_irq()
884 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_request_irq()
888 devinfo->irq_requested = false; in brcmf_pcie_request_irq()
890 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) { in brcmf_pcie_request_irq()
895 devinfo)) { in brcmf_pcie_request_irq()
905 devinfo)) { in brcmf_pcie_request_irq()
911 devinfo->irq_requested = true; in brcmf_pcie_request_irq()
912 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
917 static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_irq() argument
923 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
926 pdev = devinfo->pdev; in brcmf_pcie_release_irq()
928 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_release_irq()
929 if (!devinfo->irq_requested) in brcmf_pcie_release_irq()
931 devinfo->irq_requested = false; in brcmf_pcie_release_irq()
932 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
937 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
941 if (devinfo->in_irq) in brcmf_pcie_release_irq()
944 if (devinfo->generic_corerev == BRCMF_PCIE_GENREV1) { in brcmf_pcie_release_irq()
949 status = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_release_irq()
951 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_release_irq()
954 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
961 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr() local
964 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
970 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
979 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr() local
982 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
988 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
997 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell() local
999 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
1002 devinfo->ringbell(devinfo); in brcmf_pcie_ring_mb_ring_bell()
1011 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr() local
1014 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
1017 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
1029 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr() local
1032 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
1035 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
1045 brcmf_pcie_init_dmabuffer_for_device(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_dmabuffer_for_device() argument
1052 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
1058 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr, in brcmf_pcie_init_dmabuffer_for_device()
1060 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr + 4, address >> 32); in brcmf_pcie_init_dmabuffer_for_device()
1069 brcmf_pcie_alloc_dma_and_ring(struct brcmf_pciedev_info *devinfo, u32 ring_id, in brcmf_pcie_alloc_dma_and_ring() argument
1079 dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size, in brcmf_pcie_alloc_dma_and_ring()
1086 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
1088 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
1092 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1099 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1129 static void brcmf_pcie_release_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_ringbuffers() argument
1134 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1135 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1136 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1138 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1139 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1140 if (devinfo->idxbuf) { in brcmf_pcie_release_ringbuffers()
1141 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1142 devinfo->idxbuf_sz, in brcmf_pcie_release_ringbuffers()
1143 devinfo->idxbuf, in brcmf_pcie_release_ringbuffers()
1144 devinfo->idxbuf_dmahandle); in brcmf_pcie_release_ringbuffers()
1145 devinfo->idxbuf = NULL; in brcmf_pcie_release_ringbuffers()
1150 static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_ringbuffers() argument
1167 ring_addr = devinfo->shared.ring_info_addr; in brcmf_pcie_init_ringbuffers()
1170 max_sub_queues = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1172 if (devinfo->dma_idx_sz != 0) { in brcmf_pcie_init_ringbuffers()
1174 devinfo->dma_idx_sz * 2; in brcmf_pcie_init_ringbuffers()
1175 devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz, in brcmf_pcie_init_ringbuffers()
1176 &devinfo->idxbuf_dmahandle, in brcmf_pcie_init_ringbuffers()
1178 if (!devinfo->idxbuf) in brcmf_pcie_init_ringbuffers()
1179 devinfo->dma_idx_sz = 0; in brcmf_pcie_init_ringbuffers()
1182 if (devinfo->dma_idx_sz == 0) { in brcmf_pcie_init_ringbuffers()
1184 d2h_w_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1186 d2h_r_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1188 h2d_w_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1190 h2d_r_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1192 devinfo->write_ptr = brcmf_pcie_write_tcm16; in brcmf_pcie_init_ringbuffers()
1193 devinfo->read_ptr = brcmf_pcie_read_tcm16; in brcmf_pcie_init_ringbuffers()
1196 memset(devinfo->idxbuf, 0, bufsz); in brcmf_pcie_init_ringbuffers()
1197 devinfo->idxbuf_sz = bufsz; in brcmf_pcie_init_ringbuffers()
1198 idx_offset = devinfo->dma_idx_sz; in brcmf_pcie_init_ringbuffers()
1199 devinfo->write_ptr = brcmf_pcie_write_idx; in brcmf_pcie_init_ringbuffers()
1200 devinfo->read_ptr = brcmf_pcie_read_idx; in brcmf_pcie_init_ringbuffers()
1204 address = (u64)devinfo->idxbuf_dmahandle; in brcmf_pcie_init_ringbuffers()
1205 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_ringbuffers()
1206 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_ringbuffers()
1211 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_ringbuffers()
1212 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_ringbuffers()
1217 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_ringbuffers()
1218 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_ringbuffers()
1224 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_ringbuffers()
1225 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_ringbuffers()
1230 ring_mem_ptr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_ringbuffers()
1233 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1239 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1248 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1254 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1261 devinfo->shared.nrof_flowrings = in brcmf_pcie_init_ringbuffers()
1263 rings = kcalloc(devinfo->shared.nrof_flowrings, sizeof(*ring), in brcmf_pcie_init_ringbuffers()
1269 devinfo->shared.nrof_flowrings); in brcmf_pcie_init_ringbuffers()
1271 for (i = 0; i < devinfo->shared.nrof_flowrings; i++) { in brcmf_pcie_init_ringbuffers()
1273 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1287 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1293 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_init_ringbuffers()
1299 brcmf_pcie_release_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_scratchbuffers() argument
1301 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1302 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1304 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1305 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1306 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1307 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1309 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1310 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1313 static int brcmf_pcie_init_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_scratchbuffers() argument
1318 devinfo->shared.scratch = dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1320 &devinfo->shared.scratch_dmahandle, GFP_KERNEL); in brcmf_pcie_init_scratchbuffers()
1321 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1324 memset(devinfo->shared.scratch, 0, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1326 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1328 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1329 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1330 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1331 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1333 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1335 devinfo->shared.ringupd = dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1337 &devinfo->shared.ringupd_dmahandle, GFP_KERNEL); in brcmf_pcie_init_scratchbuffers()
1338 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1341 memset(devinfo->shared.ringupd, 0, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1343 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1345 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1346 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1347 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1348 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1350 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1355 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_init_scratchbuffers()
1389 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config() local
1392 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1394 device_set_wakeup_enable(&devinfo->pdev->dev, true); in brcmf_pcie_wowl_config()
1396 device_set_wakeup_enable(&devinfo->pdev->dev, false); in brcmf_pcie_wowl_config()
1404 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_ramsize() local
1406 return devinfo->ci->ramsize - devinfo->ci->srsize; in brcmf_pcie_get_ramsize()
1414 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_memdump() local
1416 brcmf_dbg(PCIE, "dump at 0x%08X: len=%zu\n", devinfo->ci->rambase, len); in brcmf_pcie_get_memdump()
1417 brcmf_pcie_copy_dev_tomem(devinfo, devinfo->ci->rambase, data, len); in brcmf_pcie_get_memdump()
1434 brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_share_ram_info() argument
1441 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1444 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1456 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1458 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1462 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1467 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1470 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1473 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1476 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1481 brcmf_pcie_bus_console_init(devinfo); in brcmf_pcie_init_share_ram_info()
1487 static int brcmf_pcie_get_fwnames(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_fwnames() argument
1494 brcmf_dbg(PCIE, "Enter, chip 0x%04x chiprev %d\n", devinfo->ci->chip, in brcmf_pcie_get_fwnames()
1495 devinfo->ci->chiprev); in brcmf_pcie_get_fwnames()
1497 switch (devinfo->ci->chip) { in brcmf_pcie_get_fwnames()
1533 brcmf_err("Unsupported chip 0x%04x\n", devinfo->ci->chip); in brcmf_pcie_get_fwnames()
1537 fw_len = sizeof(devinfo->fw_name) - 1; in brcmf_pcie_get_fwnames()
1538 nv_len = sizeof(devinfo->nvram_name) - 1; in brcmf_pcie_get_fwnames()
1541 strncpy(devinfo->fw_name, brcmf_firmware_path, fw_len); in brcmf_pcie_get_fwnames()
1542 strncpy(devinfo->nvram_name, brcmf_firmware_path, nv_len); in brcmf_pcie_get_fwnames()
1543 fw_len -= strlen(devinfo->fw_name); in brcmf_pcie_get_fwnames()
1544 nv_len -= strlen(devinfo->nvram_name); in brcmf_pcie_get_fwnames()
1548 strncat(devinfo->fw_name, "/", fw_len); in brcmf_pcie_get_fwnames()
1549 strncat(devinfo->nvram_name, "/", nv_len); in brcmf_pcie_get_fwnames()
1554 strncat(devinfo->fw_name, fw_name, fw_len); in brcmf_pcie_get_fwnames()
1555 strncat(devinfo->nvram_name, nvram_name, nv_len); in brcmf_pcie_get_fwnames()
1561 static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_download_fw_nvram() argument
1572 devinfo->ringbell = brcmf_pcie_ringbell_v2; in brcmf_pcie_download_fw_nvram()
1573 devinfo->generic_corerev = BRCMF_PCIE_GENREV2; in brcmf_pcie_download_fw_nvram()
1576 err = brcmf_pcie_enter_download_state(devinfo); in brcmf_pcie_download_fw_nvram()
1580 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1581 brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1590 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1593 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1594 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1596 brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1600 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1603 sharedram_addr_written = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1604 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1607 err = brcmf_pcie_exit_download_state(devinfo, resetintr); in brcmf_pcie_download_fw_nvram()
1616 sharedram_addr = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1617 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1627 return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr)); in brcmf_pcie_download_fw_nvram()
1631 static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_resource() argument
1638 pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1660 devinfo->regs = ioremap_nocache(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1661 devinfo->tcm = ioremap_nocache(bar1_addr, BRCMF_PCIE_TCM_MAP_SIZE); in brcmf_pcie_get_resource()
1662 devinfo->tcm_size = BRCMF_PCIE_TCM_MAP_SIZE; in brcmf_pcie_get_resource()
1664 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1665 brcmf_err("ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1666 devinfo->tcm); in brcmf_pcie_get_resource()
1670 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1672 devinfo->tcm, (unsigned long long)bar1_addr); in brcmf_pcie_get_resource()
1678 static void brcmf_pcie_release_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_resource() argument
1680 if (devinfo->tcm) in brcmf_pcie_release_resource()
1681 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1682 if (devinfo->regs) in brcmf_pcie_release_resource()
1683 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1685 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1721 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_read32() local
1723 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1724 return brcmf_pcie_read_reg32(devinfo, addr); in brcmf_pcie_buscore_read32()
1730 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_write32() local
1732 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1733 brcmf_pcie_write_reg32(devinfo, addr, value); in brcmf_pcie_buscore_write32()
1745 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_reset() local
1748 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1749 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_buscore_reset()
1751 val = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_buscore_reset()
1753 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_buscore_reset()
1763 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_activate() local
1765 brcmf_pcie_write_tcm32(devinfo, 0, rstvec); in brcmf_pcie_buscore_activate()
1782 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup() local
1787 brcmf_pcie_attach(devinfo); in brcmf_pcie_setup()
1789 ret = brcmf_pcie_download_fw_nvram(devinfo, fw, nvram, nvram_len); in brcmf_pcie_setup()
1793 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
1795 ret = brcmf_pcie_init_ringbuffers(devinfo); in brcmf_pcie_setup()
1799 ret = brcmf_pcie_init_scratchbuffers(devinfo); in brcmf_pcie_setup()
1803 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_setup()
1804 ret = brcmf_pcie_request_irq(devinfo); in brcmf_pcie_setup()
1811 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
1813 flowrings = kcalloc(devinfo->shared.nrof_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
1818 for (i = 0; i < devinfo->shared.nrof_flowrings; i++) in brcmf_pcie_setup()
1819 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
1822 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
1823 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
1824 bus->msgbuf->nrof_flowrings = devinfo->shared.nrof_flowrings; in brcmf_pcie_setup()
1826 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
1828 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_setup()
1832 brcmf_pcie_bus_console_read(devinfo); in brcmf_pcie_setup()
1842 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_probe() local
1854 devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL); in brcmf_pcie_probe()
1855 if (devinfo == NULL) in brcmf_pcie_probe()
1858 devinfo->pdev = pdev; in brcmf_pcie_probe()
1860 devinfo->ci = brcmf_chip_attach(devinfo, &brcmf_pcie_buscore_ops); in brcmf_pcie_probe()
1861 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
1862 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
1863 devinfo->ci = NULL; in brcmf_pcie_probe()
1886 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
1892 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
1896 ret = brcmf_pcie_get_fwnames(devinfo); in brcmf_pcie_probe()
1902 devinfo->fw_name, devinfo->nvram_name, in brcmf_pcie_probe()
1911 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_probe()
1912 if (devinfo->ci) in brcmf_pcie_probe()
1913 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
1915 kfree(devinfo); in brcmf_pcie_probe()
1923 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_remove() local
1932 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
1934 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
1935 if (devinfo->ci) in brcmf_pcie_remove()
1936 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_remove()
1945 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_remove()
1946 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_remove()
1947 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_remove()
1948 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_remove()
1949 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_remove()
1951 if (devinfo->ci) in brcmf_pcie_remove()
1952 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
1954 kfree(devinfo); in brcmf_pcie_remove()
1964 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_suspend() local
1971 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_suspend()
1975 devinfo->mbdata_completed = false; in brcmf_pcie_suspend()
1976 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D3_INFORM); in brcmf_pcie_suspend()
1978 wait_event_timeout(devinfo->mbdata_resp_wait, in brcmf_pcie_suspend()
1979 devinfo->mbdata_completed, in brcmf_pcie_suspend()
1981 if (!devinfo->mbdata_completed) { in brcmf_pcie_suspend()
1985 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D0_INFORM_IN_USE); in brcmf_pcie_suspend()
1990 if ((err) || (!devinfo->wowl_enabled)) { in brcmf_pcie_suspend()
1991 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_suspend()
1992 devinfo->ci = NULL; in brcmf_pcie_suspend()
2002 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_resume() local
2020 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_resume()
2021 if (brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_resume()
2023 if (brcmf_pcie_send_mb_data(devinfo, in brcmf_pcie_resume()
2027 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_resume()
2029 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_resume()
2036 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_resume()
2037 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_resume()
2038 devinfo->ci = NULL; in brcmf_pcie_resume()