Lines Matching refs:devinfo
268 u16 (*read_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset);
269 void (*write_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
279 struct brcmf_pciedev_info *devinfo; member
341 brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo);
344 brcmf_pcie_read_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset) in brcmf_pcie_read_reg32() argument
346 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
353 brcmf_pcie_write_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset, in brcmf_pcie_write_reg32() argument
356 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
363 brcmf_pcie_read_tcm8(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm8() argument
365 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
372 brcmf_pcie_read_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm16() argument
374 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
381 brcmf_pcie_write_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm16() argument
384 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
391 brcmf_pcie_read_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_idx() argument
393 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_read_idx()
400 brcmf_pcie_write_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_idx() argument
403 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_write_idx()
410 brcmf_pcie_read_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm32() argument
412 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
419 brcmf_pcie_write_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm32() argument
422 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
429 brcmf_pcie_read_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_ram32() argument
431 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
438 brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_ram32() argument
441 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
448 brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_mem_todev() argument
451 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_mem_todev()
489 brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_dev_tomem() argument
492 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_dev_tomem()
529 #define WRITECC32(devinfo, reg, value) brcmf_pcie_write_reg32(devinfo, \ argument
534 brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid) in brcmf_pcie_select_core() argument
536 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
541 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
560 static void brcmf_pcie_reset_device(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_reset_device() argument
578 if (!devinfo->ci) in brcmf_pcie_reset_device()
582 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
583 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
586 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
590 brcmf_pcie_select_core(devinfo, BCMA_CORE_CHIPCOMMON); in brcmf_pcie_reset_device()
591 WRITECC32(devinfo, watchdog, 4); in brcmf_pcie_reset_device()
595 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
596 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
599 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
602 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
605 val = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_reset_device()
609 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
617 static void brcmf_pcie_attach(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_attach() argument
622 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
623 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, 0x4e0); in brcmf_pcie_attach()
624 config = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA); in brcmf_pcie_attach()
625 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, config); in brcmf_pcie_attach()
627 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
631 static int brcmf_pcie_enter_download_state(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_enter_download_state() argument
633 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
634 brcmf_pcie_select_core(devinfo, BCMA_CORE_ARM_CR4); in brcmf_pcie_enter_download_state()
635 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
637 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
639 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
641 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
648 static int brcmf_pcie_exit_download_state(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_exit_download_state() argument
653 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
654 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
658 if (!brcmf_chip_set_active(devinfo->ci, resetintr)) in brcmf_pcie_exit_download_state()
665 brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data) in brcmf_pcie_send_mb_data() argument
673 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
675 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
687 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
690 brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data); in brcmf_pcie_send_mb_data()
691 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
694 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_send_mb_data()
696 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
702 static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_handle_mb_data() argument
708 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
710 dtoh_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_handle_mb_data()
715 brcmf_pcie_write_tcm32(devinfo, addr, 0); in brcmf_pcie_handle_mb_data()
720 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_DS_ACK); in brcmf_pcie_handle_mb_data()
727 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
728 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
732 brcmf_fw_crashed(&devinfo->pdev->dev); in brcmf_pcie_handle_mb_data()
737 static void brcmf_pcie_bus_console_init(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_init() argument
743 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
746 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
749 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
751 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
762 static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_bus_console_read() argument
765 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_bus_console_read()
775 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
777 newidx = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_read()
780 ch = brcmf_pcie_read_tcm8(devinfo, addr); in brcmf_pcie_bus_console_read()
807 static void brcmf_pcie_intr_disable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_disable() argument
809 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, 0); in brcmf_pcie_intr_disable()
813 static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_enable() argument
815 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_enable()
821 static void brcmf_pcie_hostready(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_hostready() argument
823 if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1) in brcmf_pcie_hostready()
824 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_hostready()
830 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr() local
832 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT)) { in brcmf_pcie_quick_check_isr()
833 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr()
843 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread() local
846 devinfo->in_irq = true; in brcmf_pcie_isr_thread()
847 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_isr_thread()
850 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_isr_thread()
854 brcmf_pcie_handle_mb_data(devinfo); in brcmf_pcie_isr_thread()
856 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
858 &devinfo->pdev->dev); in brcmf_pcie_isr_thread()
861 brcmf_pcie_bus_console_read(devinfo, false); in brcmf_pcie_isr_thread()
862 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
863 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread()
864 devinfo->in_irq = false; in brcmf_pcie_isr_thread()
869 static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_request_irq() argument
871 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_request_irq()
874 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_request_irq()
881 "brcmf_pcie_intr", devinfo)) { in brcmf_pcie_request_irq()
886 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
891 static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_irq() argument
893 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_release_irq()
898 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
901 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_release_irq()
902 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
907 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
911 if (devinfo->in_irq) in brcmf_pcie_release_irq()
914 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_release_irq()
915 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, status); in brcmf_pcie_release_irq()
917 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
924 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr() local
927 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
933 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
942 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr() local
945 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
951 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
960 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell() local
962 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
967 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0, 1); in brcmf_pcie_ring_mb_ring_bell()
976 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr() local
979 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
982 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
994 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr() local
997 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
1000 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
1010 brcmf_pcie_init_dmabuffer_for_device(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_dmabuffer_for_device() argument
1017 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
1023 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr, in brcmf_pcie_init_dmabuffer_for_device()
1025 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr + 4, address >> 32); in brcmf_pcie_init_dmabuffer_for_device()
1034 brcmf_pcie_alloc_dma_and_ring(struct brcmf_pciedev_info *devinfo, u32 ring_id, in brcmf_pcie_alloc_dma_and_ring() argument
1044 if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7) in brcmf_pcie_alloc_dma_and_ring()
1050 dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size, in brcmf_pcie_alloc_dma_and_ring()
1057 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
1059 brcmf_pcie_write_tcm16(devinfo, addr, ring_itemsize_array[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
1063 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1070 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1100 static void brcmf_pcie_release_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_ringbuffers() argument
1105 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1106 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1107 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1109 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1110 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1111 if (devinfo->idxbuf) { in brcmf_pcie_release_ringbuffers()
1112 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1113 devinfo->idxbuf_sz, in brcmf_pcie_release_ringbuffers()
1114 devinfo->idxbuf, in brcmf_pcie_release_ringbuffers()
1115 devinfo->idxbuf_dmahandle); in brcmf_pcie_release_ringbuffers()
1116 devinfo->idxbuf = NULL; in brcmf_pcie_release_ringbuffers()
1121 static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_ringbuffers() argument
1123 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_ringbuffers()
1140 memcpy_fromio(&ringinfo, devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1142 if (devinfo->shared.version >= 6) { in brcmf_pcie_init_ringbuffers()
1153 if (devinfo->dma_idx_sz != 0) { in brcmf_pcie_init_ringbuffers()
1155 devinfo->dma_idx_sz * 2; in brcmf_pcie_init_ringbuffers()
1156 devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz, in brcmf_pcie_init_ringbuffers()
1157 &devinfo->idxbuf_dmahandle, in brcmf_pcie_init_ringbuffers()
1159 if (!devinfo->idxbuf) in brcmf_pcie_init_ringbuffers()
1160 devinfo->dma_idx_sz = 0; in brcmf_pcie_init_ringbuffers()
1163 if (devinfo->dma_idx_sz == 0) { in brcmf_pcie_init_ringbuffers()
1169 devinfo->write_ptr = brcmf_pcie_write_tcm16; in brcmf_pcie_init_ringbuffers()
1170 devinfo->read_ptr = brcmf_pcie_read_tcm16; in brcmf_pcie_init_ringbuffers()
1173 memset(devinfo->idxbuf, 0, bufsz); in brcmf_pcie_init_ringbuffers()
1174 devinfo->idxbuf_sz = bufsz; in brcmf_pcie_init_ringbuffers()
1175 idx_offset = devinfo->dma_idx_sz; in brcmf_pcie_init_ringbuffers()
1176 devinfo->write_ptr = brcmf_pcie_write_idx; in brcmf_pcie_init_ringbuffers()
1177 devinfo->read_ptr = brcmf_pcie_read_idx; in brcmf_pcie_init_ringbuffers()
1180 address = (u64)devinfo->idxbuf_dmahandle; in brcmf_pcie_init_ringbuffers()
1210 memcpy_toio(devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1218 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1224 devinfo->shared.commonrings[i] = ring; 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()
1246 devinfo->shared.max_flowrings = max_flowrings; in brcmf_pcie_init_ringbuffers()
1247 devinfo->shared.max_submissionrings = max_submissionrings; in brcmf_pcie_init_ringbuffers()
1248 devinfo->shared.max_completionrings = max_completionrings; in brcmf_pcie_init_ringbuffers()
1257 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1271 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1277 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_init_ringbuffers()
1283 brcmf_pcie_release_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_scratchbuffers() argument
1285 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1286 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1288 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1289 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1290 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1291 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1293 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1294 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1297 static int brcmf_pcie_init_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_scratchbuffers() argument
1299 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_scratchbuffers()
1303 devinfo->shared.scratch = in brcmf_pcie_init_scratchbuffers()
1304 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1306 &devinfo->shared.scratch_dmahandle, in brcmf_pcie_init_scratchbuffers()
1308 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1311 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1313 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1314 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1315 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1316 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1318 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1320 devinfo->shared.ringupd = in brcmf_pcie_init_scratchbuffers()
1321 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1323 &devinfo->shared.ringupd_dmahandle, in brcmf_pcie_init_scratchbuffers()
1325 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1328 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1330 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1331 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1332 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1333 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1335 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1340 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_init_scratchbuffers()
1374 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config() local
1377 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1385 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_ramsize() local
1387 return devinfo->ci->ramsize - devinfo->ci->srsize; in brcmf_pcie_get_ramsize()
1395 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_memdump() local
1397 brcmf_dbg(PCIE, "dump at 0x%08X: len=%zu\n", devinfo->ci->rambase, len); in brcmf_pcie_get_memdump()
1398 brcmf_pcie_copy_dev_tomem(devinfo, devinfo->ci->rambase, data, len); in brcmf_pcie_get_memdump()
1426 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_reset() local
1430 brcmf_pcie_bus_console_read(devinfo, true); in brcmf_pcie_reset()
1434 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_reset()
1435 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_reset()
1436 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_reset()
1437 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_reset()
1439 fwreq = brcmf_pcie_prepare_fw_request(devinfo); in brcmf_pcie_reset()
1468 brcmf_pcie_adjust_ramsize(struct brcmf_pciedev_info *devinfo, u8 *data, in brcmf_pcie_adjust_ramsize() argument
1485 devinfo->ci->ramsize = newsize; in brcmf_pcie_adjust_ramsize()
1490 brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_share_ram_info() argument
1493 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_share_ram_info()
1497 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1500 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1513 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1515 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1519 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1524 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1527 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1530 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1533 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1538 brcmf_pcie_bus_console_init(devinfo); in brcmf_pcie_init_share_ram_info()
1544 static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_download_fw_nvram() argument
1548 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_download_fw_nvram()
1557 err = brcmf_pcie_enter_download_state(devinfo); in brcmf_pcie_download_fw_nvram()
1561 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1562 brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1571 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1574 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1575 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1577 brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1581 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1584 sharedram_addr_written = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1585 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1588 err = brcmf_pcie_exit_download_state(devinfo, resetintr); in brcmf_pcie_download_fw_nvram()
1597 sharedram_addr = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1598 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1606 if (sharedram_addr < devinfo->ci->rambase || in brcmf_pcie_download_fw_nvram()
1607 sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) { in brcmf_pcie_download_fw_nvram()
1614 return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr)); in brcmf_pcie_download_fw_nvram()
1618 static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_resource() argument
1620 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1646 devinfo->regs = ioremap_nocache(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1647 devinfo->tcm = ioremap_nocache(bar1_addr, bar1_size); in brcmf_pcie_get_resource()
1649 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1650 brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1651 devinfo->tcm); in brcmf_pcie_get_resource()
1655 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1657 devinfo->tcm, (unsigned long long)bar1_addr, in brcmf_pcie_get_resource()
1664 static void brcmf_pcie_release_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_resource() argument
1666 if (devinfo->tcm) in brcmf_pcie_release_resource()
1667 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1668 if (devinfo->regs) in brcmf_pcie_release_resource()
1669 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1671 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1689 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_read32() local
1691 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1692 return brcmf_pcie_read_reg32(devinfo, addr); in brcmf_pcie_buscore_read32()
1698 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_write32() local
1700 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1701 brcmf_pcie_write_reg32(devinfo, addr, value); in brcmf_pcie_buscore_write32()
1713 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_reset() local
1716 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1717 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_buscore_reset()
1719 val = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_buscore_reset()
1721 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_buscore_reset()
1731 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_activate() local
1733 brcmf_pcie_write_tcm32(devinfo, 0, rstvec); in brcmf_pcie_buscore_activate()
1755 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_setup() local
1765 devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup()
1766 brcmf_pcie_attach(devinfo); in brcmf_pcie_setup()
1773 ret = brcmf_chip_get_raminfo(devinfo->ci); in brcmf_pcie_setup()
1784 brcmf_pcie_adjust_ramsize(devinfo, (u8 *)fw->data, fw->size); in brcmf_pcie_setup()
1786 ret = brcmf_pcie_download_fw_nvram(devinfo, fw, nvram, nvram_len); in brcmf_pcie_setup()
1790 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
1792 ret = brcmf_pcie_init_ringbuffers(devinfo); in brcmf_pcie_setup()
1796 ret = brcmf_pcie_init_scratchbuffers(devinfo); in brcmf_pcie_setup()
1800 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_setup()
1801 ret = brcmf_pcie_request_irq(devinfo); in brcmf_pcie_setup()
1808 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
1810 flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
1815 for (i = 0; i < devinfo->shared.max_flowrings; i++) in brcmf_pcie_setup()
1816 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
1819 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
1820 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
1821 bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings; in brcmf_pcie_setup()
1823 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
1825 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_setup()
1826 brcmf_pcie_hostready(devinfo); in brcmf_pcie_setup()
1828 ret = brcmf_attach(&devinfo->pdev->dev); in brcmf_pcie_setup()
1832 brcmf_pcie_bus_console_read(devinfo, false); in brcmf_pcie_setup()
1841 brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_prepare_fw_request() argument
1845 { ".bin", devinfo->fw_name }, in brcmf_pcie_prepare_fw_request()
1846 { ".txt", devinfo->nvram_name }, in brcmf_pcie_prepare_fw_request()
1849 fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev, in brcmf_pcie_prepare_fw_request()
1859 fwreq->board_type = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
1861 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1; in brcmf_pcie_prepare_fw_request()
1862 fwreq->bus_nr = devinfo->pdev->bus->number; in brcmf_pcie_prepare_fw_request()
1872 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_probe() local
1879 devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL); in brcmf_pcie_probe()
1880 if (devinfo == NULL) in brcmf_pcie_probe()
1883 devinfo->pdev = pdev; in brcmf_pcie_probe()
1885 devinfo->ci = brcmf_chip_attach(devinfo, &brcmf_pcie_buscore_ops); in brcmf_pcie_probe()
1886 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
1887 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
1888 devinfo->ci = NULL; in brcmf_pcie_probe()
1898 devinfo->settings = brcmf_get_module_param(&devinfo->pdev->dev, in brcmf_pcie_probe()
1900 devinfo->ci->chip, in brcmf_pcie_probe()
1901 devinfo->ci->chiprev); in brcmf_pcie_probe()
1902 if (!devinfo->settings) { in brcmf_pcie_probe()
1920 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
1926 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
1930 ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings); in brcmf_pcie_probe()
1934 fwreq = brcmf_pcie_prepare_fw_request(devinfo); in brcmf_pcie_probe()
1952 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_probe()
1953 if (devinfo->ci) in brcmf_pcie_probe()
1954 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
1955 if (devinfo->settings) in brcmf_pcie_probe()
1956 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_probe()
1958 kfree(devinfo); in brcmf_pcie_probe()
1966 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_remove() local
1975 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
1977 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
1978 if (devinfo->ci) in brcmf_pcie_remove()
1979 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_remove()
1989 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_remove()
1990 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_remove()
1991 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_remove()
1992 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_remove()
1993 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_remove()
1995 if (devinfo->ci) in brcmf_pcie_remove()
1996 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
1997 if (devinfo->settings) in brcmf_pcie_remove()
1998 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_remove()
2000 kfree(devinfo); in brcmf_pcie_remove()
2010 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_pm_enter_D3() local
2016 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_enter_D3()
2020 devinfo->mbdata_completed = false; in brcmf_pcie_pm_enter_D3()
2021 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D3_INFORM); in brcmf_pcie_pm_enter_D3()
2023 wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed, in brcmf_pcie_pm_enter_D3()
2025 if (!devinfo->mbdata_completed) { in brcmf_pcie_pm_enter_D3()
2031 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_pm_enter_D3()
2039 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_pm_leave_D3() local
2047 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_leave_D3()
2051 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_INTMASK) != 0) { in brcmf_pcie_pm_leave_D3()
2053 if (brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D0_INFORM)) in brcmf_pcie_pm_leave_D3()
2056 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_pm_leave_D3()
2057 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_pm_leave_D3()
2059 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_pm_leave_D3()
2060 brcmf_pcie_hostready(devinfo); in brcmf_pcie_pm_leave_D3()
2065 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_pm_leave_D3()
2066 devinfo->ci = NULL; in brcmf_pcie_pm_leave_D3()
2067 pdev = devinfo->pdev; in brcmf_pcie_pm_leave_D3()