Lines Matching refs:devinfo
270 u16 (*read_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset);
271 void (*write_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
281 struct brcmf_pciedev_info *devinfo; member
343 brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo);
346 brcmf_pcie_read_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset) in brcmf_pcie_read_reg32() argument
348 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
355 brcmf_pcie_write_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset, in brcmf_pcie_write_reg32() argument
358 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
365 brcmf_pcie_read_tcm8(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm8() argument
367 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
374 brcmf_pcie_read_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm16() argument
376 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
383 brcmf_pcie_write_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm16() argument
386 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
393 brcmf_pcie_read_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_idx() argument
395 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_read_idx()
402 brcmf_pcie_write_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_idx() argument
405 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_write_idx()
412 brcmf_pcie_read_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm32() argument
414 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
421 brcmf_pcie_write_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm32() argument
424 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
431 brcmf_pcie_read_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_ram32() argument
433 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
440 brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_ram32() argument
443 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
450 brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_mem_todev() argument
453 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_mem_todev()
491 brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_dev_tomem() argument
494 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_dev_tomem()
531 #define WRITECC32(devinfo, reg, value) brcmf_pcie_write_reg32(devinfo, \ argument
536 brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid) in brcmf_pcie_select_core() argument
538 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
543 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
562 static void brcmf_pcie_reset_device(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_reset_device() argument
580 if (!devinfo->ci) in brcmf_pcie_reset_device()
584 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
585 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
588 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
592 brcmf_pcie_select_core(devinfo, BCMA_CORE_CHIPCOMMON); in brcmf_pcie_reset_device()
593 WRITECC32(devinfo, watchdog, 4); in brcmf_pcie_reset_device()
597 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
598 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
601 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
604 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
607 val = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_reset_device()
611 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
619 static void brcmf_pcie_attach(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_attach() argument
624 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
625 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, 0x4e0); in brcmf_pcie_attach()
626 config = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA); in brcmf_pcie_attach()
627 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, config); in brcmf_pcie_attach()
629 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
633 static int brcmf_pcie_enter_download_state(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_enter_download_state() argument
635 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
636 brcmf_pcie_select_core(devinfo, BCMA_CORE_ARM_CR4); in brcmf_pcie_enter_download_state()
637 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
639 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
641 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
643 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
650 static int brcmf_pcie_exit_download_state(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_exit_download_state() argument
655 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
656 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
660 if (!brcmf_chip_set_active(devinfo->ci, resetintr)) in brcmf_pcie_exit_download_state()
667 brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data) in brcmf_pcie_send_mb_data() argument
675 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
677 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
689 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
692 brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data); in brcmf_pcie_send_mb_data()
693 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
696 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_send_mb_data()
698 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
704 static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_handle_mb_data() argument
710 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
712 dtoh_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_handle_mb_data()
717 brcmf_pcie_write_tcm32(devinfo, addr, 0); in brcmf_pcie_handle_mb_data()
722 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_DS_ACK); in brcmf_pcie_handle_mb_data()
729 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
730 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
734 brcmf_fw_crashed(&devinfo->pdev->dev); in brcmf_pcie_handle_mb_data()
739 static void brcmf_pcie_bus_console_init(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_init() argument
745 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
748 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
751 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
753 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
764 static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_bus_console_read() argument
767 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_bus_console_read()
777 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
779 newidx = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_read()
782 ch = brcmf_pcie_read_tcm8(devinfo, addr); in brcmf_pcie_bus_console_read()
809 static void brcmf_pcie_intr_disable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_disable() argument
811 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, 0); in brcmf_pcie_intr_disable()
815 static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_enable() argument
817 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_enable()
823 static void brcmf_pcie_hostready(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_hostready() argument
825 if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1) in brcmf_pcie_hostready()
826 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_hostready()
832 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr() local
834 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT)) { in brcmf_pcie_quick_check_isr()
835 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr()
845 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread() local
848 devinfo->in_irq = true; in brcmf_pcie_isr_thread()
849 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_isr_thread()
852 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_isr_thread()
856 brcmf_pcie_handle_mb_data(devinfo); in brcmf_pcie_isr_thread()
858 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
860 &devinfo->pdev->dev); in brcmf_pcie_isr_thread()
863 brcmf_pcie_bus_console_read(devinfo, false); in brcmf_pcie_isr_thread()
864 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
865 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread()
866 devinfo->in_irq = false; in brcmf_pcie_isr_thread()
871 static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_request_irq() argument
873 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_request_irq()
876 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_request_irq()
883 "brcmf_pcie_intr", devinfo)) { in brcmf_pcie_request_irq()
888 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
893 static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_irq() argument
895 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_release_irq()
900 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
903 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_release_irq()
904 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
909 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
913 if (devinfo->in_irq) in brcmf_pcie_release_irq()
916 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_release_irq()
917 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, status); in brcmf_pcie_release_irq()
919 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
926 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr() local
929 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
935 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
944 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr() local
947 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
953 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
962 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell() local
964 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
969 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0, 1); in brcmf_pcie_ring_mb_ring_bell()
978 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr() local
981 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
984 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
996 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr() local
999 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
1002 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
1012 brcmf_pcie_init_dmabuffer_for_device(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_dmabuffer_for_device() argument
1019 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
1025 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr, in brcmf_pcie_init_dmabuffer_for_device()
1027 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_intr_disable(devinfo); in brcmf_pcie_reset()
1432 brcmf_pcie_bus_console_read(devinfo, true); in brcmf_pcie_reset()
1436 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_reset()
1437 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_reset()
1438 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_reset()
1439 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_reset()
1441 fwreq = brcmf_pcie_prepare_fw_request(devinfo); in brcmf_pcie_reset()
1470 brcmf_pcie_adjust_ramsize(struct brcmf_pciedev_info *devinfo, u8 *data, in brcmf_pcie_adjust_ramsize() argument
1487 devinfo->ci->ramsize = newsize; in brcmf_pcie_adjust_ramsize()
1492 brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_share_ram_info() argument
1495 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_share_ram_info()
1499 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1502 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1515 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1517 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1521 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1526 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1529 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1532 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1535 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1540 brcmf_pcie_bus_console_init(devinfo); in brcmf_pcie_init_share_ram_info()
1546 static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_download_fw_nvram() argument
1550 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_download_fw_nvram()
1559 err = brcmf_pcie_enter_download_state(devinfo); in brcmf_pcie_download_fw_nvram()
1563 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1564 brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1573 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1576 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1577 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1579 brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1583 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1586 sharedram_addr_written = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1587 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1590 err = brcmf_pcie_exit_download_state(devinfo, resetintr); in brcmf_pcie_download_fw_nvram()
1599 sharedram_addr = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1600 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1608 if (sharedram_addr < devinfo->ci->rambase || in brcmf_pcie_download_fw_nvram()
1609 sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) { in brcmf_pcie_download_fw_nvram()
1616 return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr)); in brcmf_pcie_download_fw_nvram()
1620 static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_resource() argument
1622 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1648 devinfo->regs = ioremap(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1649 devinfo->tcm = ioremap(bar1_addr, bar1_size); in brcmf_pcie_get_resource()
1651 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1652 brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1653 devinfo->tcm); in brcmf_pcie_get_resource()
1657 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1659 devinfo->tcm, (unsigned long long)bar1_addr, in brcmf_pcie_get_resource()
1666 static void brcmf_pcie_release_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_resource() argument
1668 if (devinfo->tcm) in brcmf_pcie_release_resource()
1669 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1670 if (devinfo->regs) in brcmf_pcie_release_resource()
1671 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1673 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1691 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_read32() local
1693 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1694 return brcmf_pcie_read_reg32(devinfo, addr); in brcmf_pcie_buscore_read32()
1700 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_write32() local
1702 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1703 brcmf_pcie_write_reg32(devinfo, addr, value); in brcmf_pcie_buscore_write32()
1715 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_reset() local
1718 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1719 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_buscore_reset()
1721 val = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_buscore_reset()
1723 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_buscore_reset()
1733 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_activate() local
1735 brcmf_pcie_write_tcm32(devinfo, 0, rstvec); in brcmf_pcie_buscore_activate()
1757 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_setup() local
1767 devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup()
1768 brcmf_pcie_attach(devinfo); in brcmf_pcie_setup()
1775 ret = brcmf_chip_get_raminfo(devinfo->ci); in brcmf_pcie_setup()
1786 brcmf_pcie_adjust_ramsize(devinfo, (u8 *)fw->data, fw->size); in brcmf_pcie_setup()
1788 ret = brcmf_pcie_download_fw_nvram(devinfo, fw, nvram, nvram_len); in brcmf_pcie_setup()
1792 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
1794 ret = brcmf_pcie_init_ringbuffers(devinfo); in brcmf_pcie_setup()
1798 ret = brcmf_pcie_init_scratchbuffers(devinfo); in brcmf_pcie_setup()
1802 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_setup()
1803 ret = brcmf_pcie_request_irq(devinfo); in brcmf_pcie_setup()
1810 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
1812 flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
1817 for (i = 0; i < devinfo->shared.max_flowrings; i++) in brcmf_pcie_setup()
1818 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
1821 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
1822 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
1823 bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings; in brcmf_pcie_setup()
1825 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
1827 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_setup()
1828 brcmf_pcie_hostready(devinfo); in brcmf_pcie_setup()
1830 ret = brcmf_attach(&devinfo->pdev->dev); in brcmf_pcie_setup()
1834 brcmf_pcie_bus_console_read(devinfo, false); in brcmf_pcie_setup()
1843 brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_prepare_fw_request() argument
1847 { ".bin", devinfo->fw_name }, in brcmf_pcie_prepare_fw_request()
1848 { ".txt", devinfo->nvram_name }, in brcmf_pcie_prepare_fw_request()
1851 fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev, in brcmf_pcie_prepare_fw_request()
1861 fwreq->board_type = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
1863 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1; in brcmf_pcie_prepare_fw_request()
1864 fwreq->bus_nr = devinfo->pdev->bus->number; in brcmf_pcie_prepare_fw_request()
1874 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_probe() local
1881 devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL); in brcmf_pcie_probe()
1882 if (devinfo == NULL) in brcmf_pcie_probe()
1885 devinfo->pdev = pdev; in brcmf_pcie_probe()
1887 devinfo->ci = brcmf_chip_attach(devinfo, &brcmf_pcie_buscore_ops); in brcmf_pcie_probe()
1888 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
1889 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
1890 devinfo->ci = NULL; in brcmf_pcie_probe()
1900 devinfo->settings = brcmf_get_module_param(&devinfo->pdev->dev, in brcmf_pcie_probe()
1902 devinfo->ci->chip, in brcmf_pcie_probe()
1903 devinfo->ci->chiprev); in brcmf_pcie_probe()
1904 if (!devinfo->settings) { in brcmf_pcie_probe()
1922 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
1928 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
1932 ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings); in brcmf_pcie_probe()
1936 fwreq = brcmf_pcie_prepare_fw_request(devinfo); in brcmf_pcie_probe()
1954 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_probe()
1955 if (devinfo->ci) in brcmf_pcie_probe()
1956 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
1957 if (devinfo->settings) in brcmf_pcie_probe()
1958 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_probe()
1960 kfree(devinfo); in brcmf_pcie_probe()
1968 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_remove() local
1977 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
1979 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
1980 if (devinfo->ci) in brcmf_pcie_remove()
1981 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_remove()
1991 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_remove()
1992 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_remove()
1993 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_remove()
1994 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_remove()
1995 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_remove()
1997 if (devinfo->ci) in brcmf_pcie_remove()
1998 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
1999 if (devinfo->settings) in brcmf_pcie_remove()
2000 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_remove()
2002 kfree(devinfo); in brcmf_pcie_remove()
2012 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_pm_enter_D3() local
2018 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_enter_D3()
2022 devinfo->mbdata_completed = false; in brcmf_pcie_pm_enter_D3()
2023 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D3_INFORM); in brcmf_pcie_pm_enter_D3()
2025 wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed, in brcmf_pcie_pm_enter_D3()
2027 if (!devinfo->mbdata_completed) { in brcmf_pcie_pm_enter_D3()
2033 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_pm_enter_D3()
2041 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_pm_leave_D3() local
2049 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_leave_D3()
2053 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_INTMASK) != 0) { in brcmf_pcie_pm_leave_D3()
2055 if (brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D0_INFORM)) in brcmf_pcie_pm_leave_D3()
2058 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_pm_leave_D3()
2059 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_pm_leave_D3()
2061 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_pm_leave_D3()
2062 brcmf_pcie_hostready(devinfo); in brcmf_pcie_pm_leave_D3()
2067 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_pm_leave_D3()
2068 devinfo->ci = NULL; in brcmf_pcie_pm_leave_D3()
2069 pdev = devinfo->pdev; in brcmf_pcie_pm_leave_D3()