• Home
  • Raw
  • Download

Lines Matching refs:devinfo

264 	u16 (*read_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset);
265 void (*write_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
275 struct brcmf_pciedev_info *devinfo; member
328 brcmf_pcie_read_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset) in brcmf_pcie_read_reg32() argument
330 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
337 brcmf_pcie_write_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset, in brcmf_pcie_write_reg32() argument
340 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
347 brcmf_pcie_read_tcm8(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm8() argument
349 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
356 brcmf_pcie_read_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm16() argument
358 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
365 brcmf_pcie_write_tcm16(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm16() argument
368 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
375 brcmf_pcie_read_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_idx() argument
377 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_read_idx()
384 brcmf_pcie_write_idx(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_idx() argument
387 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_write_idx()
394 brcmf_pcie_read_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_tcm32() argument
396 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
403 brcmf_pcie_write_tcm32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_tcm32() argument
406 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
413 brcmf_pcie_read_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset) in brcmf_pcie_read_ram32() argument
415 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
422 brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_write_ram32() argument
425 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
432 brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_mem_todev() argument
435 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_mem_todev()
473 brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset, in brcmf_pcie_copy_dev_tomem() argument
476 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_dev_tomem()
513 #define WRITECC32(devinfo, reg, value) brcmf_pcie_write_reg32(devinfo, \ argument
518 brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid) in brcmf_pcie_select_core() argument
520 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
524 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
543 static void brcmf_pcie_reset_device(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_reset_device() argument
561 if (!devinfo->ci) in brcmf_pcie_reset_device()
565 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
566 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
569 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
573 brcmf_pcie_select_core(devinfo, BCMA_CORE_CHIPCOMMON); in brcmf_pcie_reset_device()
574 WRITECC32(devinfo, watchdog, 4); in brcmf_pcie_reset_device()
578 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
579 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
582 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
585 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
588 val = brcmf_pcie_read_reg32(devinfo, in brcmf_pcie_reset_device()
592 brcmf_pcie_write_reg32(devinfo, in brcmf_pcie_reset_device()
600 static void brcmf_pcie_attach(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_attach() argument
605 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_attach()
606 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGADDR, 0x4e0); in brcmf_pcie_attach()
607 config = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA); in brcmf_pcie_attach()
608 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_CONFIGDATA, config); in brcmf_pcie_attach()
610 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
614 static int brcmf_pcie_enter_download_state(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_enter_download_state() argument
616 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
617 brcmf_pcie_select_core(devinfo, BCMA_CORE_ARM_CR4); in brcmf_pcie_enter_download_state()
618 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
620 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
622 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKIDX, in brcmf_pcie_enter_download_state()
624 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_ARMCR4REG_BANKPDA, in brcmf_pcie_enter_download_state()
631 static int brcmf_pcie_exit_download_state(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_exit_download_state() argument
636 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
637 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
641 if (!brcmf_chip_set_active(devinfo->ci, resetintr)) in brcmf_pcie_exit_download_state()
648 brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data) in brcmf_pcie_send_mb_data() argument
655 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
657 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
669 cur_htod_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_send_mb_data()
672 brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data); in brcmf_pcie_send_mb_data()
673 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
674 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
680 static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_handle_mb_data() argument
686 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
688 dtoh_mb_data = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_handle_mb_data()
693 brcmf_pcie_write_tcm32(devinfo, addr, 0); in brcmf_pcie_handle_mb_data()
698 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_DS_ACK); in brcmf_pcie_handle_mb_data()
705 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
706 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
711 static void brcmf_pcie_bus_console_init(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_init() argument
717 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
720 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
723 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
725 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
732 static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_bus_console_read() argument
742 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
744 newidx = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_read()
747 ch = brcmf_pcie_read_tcm8(devinfo, addr); in brcmf_pcie_bus_console_read()
770 static void brcmf_pcie_intr_disable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_disable() argument
772 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, 0); in brcmf_pcie_intr_disable()
776 static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_intr_enable() argument
778 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXMASK, in brcmf_pcie_intr_enable()
787 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_quick_check_isr() local
789 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT)) { in brcmf_pcie_quick_check_isr()
790 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_quick_check_isr()
800 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; in brcmf_pcie_isr_thread() local
803 devinfo->in_irq = true; in brcmf_pcie_isr_thread()
804 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_isr_thread()
807 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_isr_thread()
811 brcmf_pcie_handle_mb_data(devinfo); in brcmf_pcie_isr_thread()
813 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
815 &devinfo->pdev->dev); in brcmf_pcie_isr_thread()
818 brcmf_pcie_bus_console_read(devinfo); in brcmf_pcie_isr_thread()
819 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
820 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_isr_thread()
821 devinfo->in_irq = false; in brcmf_pcie_isr_thread()
826 static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_request_irq() argument
830 pdev = devinfo->pdev; in brcmf_pcie_request_irq()
832 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_request_irq()
839 "brcmf_pcie_intr", devinfo)) { in brcmf_pcie_request_irq()
844 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
849 static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_irq() argument
855 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
858 pdev = devinfo->pdev; in brcmf_pcie_release_irq()
860 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_release_irq()
861 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
866 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
870 if (devinfo->in_irq) in brcmf_pcie_release_irq()
873 status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_release_irq()
874 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, status); in brcmf_pcie_release_irq()
876 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
883 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr() local
886 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
892 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
901 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr() local
904 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
910 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
919 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell() local
921 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
926 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX, 1); in brcmf_pcie_ring_mb_ring_bell()
935 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr() local
938 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
941 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
953 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr() local
956 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
959 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
969 brcmf_pcie_init_dmabuffer_for_device(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_dmabuffer_for_device() argument
976 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
982 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr, in brcmf_pcie_init_dmabuffer_for_device()
984 brcmf_pcie_write_tcm32(devinfo, tcm_dma_phys_addr + 4, address >> 32); in brcmf_pcie_init_dmabuffer_for_device()
993 brcmf_pcie_alloc_dma_and_ring(struct brcmf_pciedev_info *devinfo, u32 ring_id, in brcmf_pcie_alloc_dma_and_ring() argument
1003 dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size, in brcmf_pcie_alloc_dma_and_ring()
1010 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
1012 brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]); in brcmf_pcie_alloc_dma_and_ring()
1016 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1023 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1053 static void brcmf_pcie_release_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_ringbuffers() argument
1058 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1059 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1060 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1062 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1063 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1064 if (devinfo->idxbuf) { in brcmf_pcie_release_ringbuffers()
1065 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1066 devinfo->idxbuf_sz, in brcmf_pcie_release_ringbuffers()
1067 devinfo->idxbuf, in brcmf_pcie_release_ringbuffers()
1068 devinfo->idxbuf_dmahandle); in brcmf_pcie_release_ringbuffers()
1069 devinfo->idxbuf = NULL; in brcmf_pcie_release_ringbuffers()
1074 static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_ringbuffers() argument
1092 memcpy_fromio(&ringinfo, devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1094 if (devinfo->shared.version >= 6) { in brcmf_pcie_init_ringbuffers()
1105 if (devinfo->dma_idx_sz != 0) { in brcmf_pcie_init_ringbuffers()
1107 devinfo->dma_idx_sz * 2; in brcmf_pcie_init_ringbuffers()
1108 devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz, in brcmf_pcie_init_ringbuffers()
1109 &devinfo->idxbuf_dmahandle, in brcmf_pcie_init_ringbuffers()
1111 if (!devinfo->idxbuf) in brcmf_pcie_init_ringbuffers()
1112 devinfo->dma_idx_sz = 0; in brcmf_pcie_init_ringbuffers()
1115 if (devinfo->dma_idx_sz == 0) { in brcmf_pcie_init_ringbuffers()
1121 devinfo->write_ptr = brcmf_pcie_write_tcm16; in brcmf_pcie_init_ringbuffers()
1122 devinfo->read_ptr = brcmf_pcie_read_tcm16; in brcmf_pcie_init_ringbuffers()
1125 memset(devinfo->idxbuf, 0, bufsz); in brcmf_pcie_init_ringbuffers()
1126 devinfo->idxbuf_sz = bufsz; in brcmf_pcie_init_ringbuffers()
1127 idx_offset = devinfo->dma_idx_sz; in brcmf_pcie_init_ringbuffers()
1128 devinfo->write_ptr = brcmf_pcie_write_idx; in brcmf_pcie_init_ringbuffers()
1129 devinfo->read_ptr = brcmf_pcie_read_idx; in brcmf_pcie_init_ringbuffers()
1132 address = (u64)devinfo->idxbuf_dmahandle; in brcmf_pcie_init_ringbuffers()
1162 memcpy_toio(devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1170 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1176 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1185 ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr); in brcmf_pcie_init_ringbuffers()
1191 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1198 devinfo->shared.max_flowrings = max_flowrings; in brcmf_pcie_init_ringbuffers()
1199 devinfo->shared.max_submissionrings = max_submissionrings; in brcmf_pcie_init_ringbuffers()
1200 devinfo->shared.max_completionrings = max_completionrings; in brcmf_pcie_init_ringbuffers()
1209 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1223 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1229 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_init_ringbuffers()
1235 brcmf_pcie_release_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_scratchbuffers() argument
1237 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1238 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1240 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1241 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1242 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1243 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1245 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1246 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1249 static int brcmf_pcie_init_scratchbuffers(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_init_scratchbuffers() argument
1254 devinfo->shared.scratch = dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1256 &devinfo->shared.scratch_dmahandle, GFP_KERNEL); in brcmf_pcie_init_scratchbuffers()
1257 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1260 memset(devinfo->shared.scratch, 0, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1262 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1264 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1265 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1266 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1267 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1269 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_SCRATCH_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1271 devinfo->shared.ringupd = dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1273 &devinfo->shared.ringupd_dmahandle, GFP_KERNEL); in brcmf_pcie_init_scratchbuffers()
1274 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1277 memset(devinfo->shared.ringupd, 0, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1279 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1281 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1282 brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff); in brcmf_pcie_init_scratchbuffers()
1283 brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32); in brcmf_pcie_init_scratchbuffers()
1284 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1286 brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_RINGUPD_BUF_LEN); in brcmf_pcie_init_scratchbuffers()
1291 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_init_scratchbuffers()
1325 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config() local
1328 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1336 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_ramsize() local
1338 return devinfo->ci->ramsize - devinfo->ci->srsize; in brcmf_pcie_get_ramsize()
1346 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_memdump() local
1348 brcmf_dbg(PCIE, "dump at 0x%08X: len=%zu\n", devinfo->ci->rambase, len); in brcmf_pcie_get_memdump()
1349 brcmf_pcie_copy_dev_tomem(devinfo, devinfo->ci->rambase, data, len); in brcmf_pcie_get_memdump()
1366 brcmf_pcie_adjust_ramsize(struct brcmf_pciedev_info *devinfo, u8 *data, in brcmf_pcie_adjust_ramsize() argument
1383 devinfo->ci->ramsize = newsize; in brcmf_pcie_adjust_ramsize()
1388 brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_init_share_ram_info() argument
1394 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1397 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1409 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1411 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1415 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1420 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1423 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1426 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1429 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1434 brcmf_pcie_bus_console_init(devinfo); in brcmf_pcie_init_share_ram_info()
1440 static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, in brcmf_pcie_download_fw_nvram() argument
1452 err = brcmf_pcie_enter_download_state(devinfo); in brcmf_pcie_download_fw_nvram()
1456 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1457 brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1466 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1469 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1470 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1472 brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1476 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1479 sharedram_addr_written = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1480 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1483 err = brcmf_pcie_exit_download_state(devinfo, resetintr); in brcmf_pcie_download_fw_nvram()
1492 sharedram_addr = brcmf_pcie_read_ram32(devinfo, in brcmf_pcie_download_fw_nvram()
1493 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1503 return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr)); in brcmf_pcie_download_fw_nvram()
1507 static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_get_resource() argument
1514 pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1536 devinfo->regs = ioremap_nocache(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1537 devinfo->tcm = ioremap_nocache(bar1_addr, bar1_size); in brcmf_pcie_get_resource()
1539 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1540 brcmf_err("ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1541 devinfo->tcm); in brcmf_pcie_get_resource()
1545 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1547 devinfo->tcm, (unsigned long long)bar1_addr, in brcmf_pcie_get_resource()
1554 static void brcmf_pcie_release_resource(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_release_resource() argument
1556 if (devinfo->tcm) in brcmf_pcie_release_resource()
1557 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1558 if (devinfo->regs) in brcmf_pcie_release_resource()
1559 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1561 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1565 static int brcmf_pcie_attach_bus(struct brcmf_pciedev_info *devinfo) in brcmf_pcie_attach_bus() argument
1570 ret = brcmf_attach(&devinfo->pdev->dev, devinfo->settings); in brcmf_pcie_attach_bus()
1574 ret = brcmf_bus_started(&devinfo->pdev->dev); in brcmf_pcie_attach_bus()
1597 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_read32() local
1599 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1600 return brcmf_pcie_read_reg32(devinfo, addr); in brcmf_pcie_buscore_read32()
1606 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_write32() local
1608 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1609 brcmf_pcie_write_reg32(devinfo, addr, value); in brcmf_pcie_buscore_write32()
1621 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_reset() local
1624 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1625 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_buscore_reset()
1627 val = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT); in brcmf_pcie_buscore_reset()
1629 brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, in brcmf_pcie_buscore_reset()
1639 struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)ctx; in brcmf_pcie_buscore_activate() local
1641 brcmf_pcie_write_tcm32(devinfo, 0, rstvec); in brcmf_pcie_buscore_activate()
1659 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_setup() local
1669 devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup()
1670 brcmf_pcie_attach(devinfo); in brcmf_pcie_setup()
1677 brcmf_pcie_adjust_ramsize(devinfo, (u8 *)fw->data, fw->size); in brcmf_pcie_setup()
1679 ret = brcmf_pcie_download_fw_nvram(devinfo, fw, nvram, nvram_len); in brcmf_pcie_setup()
1683 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
1685 ret = brcmf_pcie_init_ringbuffers(devinfo); in brcmf_pcie_setup()
1689 ret = brcmf_pcie_init_scratchbuffers(devinfo); in brcmf_pcie_setup()
1693 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_setup()
1694 ret = brcmf_pcie_request_irq(devinfo); in brcmf_pcie_setup()
1701 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
1703 flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
1708 for (i = 0; i < devinfo->shared.max_flowrings; i++) in brcmf_pcie_setup()
1709 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
1712 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
1713 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
1714 bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings; in brcmf_pcie_setup()
1716 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
1718 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_setup()
1719 if (brcmf_pcie_attach_bus(devinfo) == 0) in brcmf_pcie_setup()
1722 brcmf_pcie_bus_console_read(devinfo); in brcmf_pcie_setup()
1732 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_probe() local
1744 devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL); in brcmf_pcie_probe()
1745 if (devinfo == NULL) in brcmf_pcie_probe()
1748 devinfo->pdev = pdev; in brcmf_pcie_probe()
1750 devinfo->ci = brcmf_chip_attach(devinfo, &brcmf_pcie_buscore_ops); in brcmf_pcie_probe()
1751 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
1752 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
1753 devinfo->ci = NULL; in brcmf_pcie_probe()
1763 devinfo->settings = brcmf_get_module_param(&devinfo->pdev->dev, in brcmf_pcie_probe()
1765 devinfo->ci->chip, in brcmf_pcie_probe()
1766 devinfo->ci->chiprev); in brcmf_pcie_probe()
1767 if (!devinfo->settings) { in brcmf_pcie_probe()
1785 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
1791 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
1795 ret = brcmf_fw_map_chip_to_name(devinfo->ci->chip, devinfo->ci->chiprev, in brcmf_pcie_probe()
1798 devinfo->fw_name, devinfo->nvram_name); in brcmf_pcie_probe()
1804 devinfo->fw_name, devinfo->nvram_name, in brcmf_pcie_probe()
1813 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_probe()
1814 if (devinfo->ci) in brcmf_pcie_probe()
1815 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
1816 if (devinfo->settings) in brcmf_pcie_probe()
1817 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_probe()
1819 kfree(devinfo); in brcmf_pcie_probe()
1827 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_remove() local
1836 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
1838 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
1839 if (devinfo->ci) in brcmf_pcie_remove()
1840 brcmf_pcie_intr_disable(devinfo); in brcmf_pcie_remove()
1849 brcmf_pcie_release_irq(devinfo); in brcmf_pcie_remove()
1850 brcmf_pcie_release_scratchbuffers(devinfo); in brcmf_pcie_remove()
1851 brcmf_pcie_release_ringbuffers(devinfo); in brcmf_pcie_remove()
1852 brcmf_pcie_reset_device(devinfo); in brcmf_pcie_remove()
1853 brcmf_pcie_release_resource(devinfo); in brcmf_pcie_remove()
1855 if (devinfo->ci) in brcmf_pcie_remove()
1856 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
1857 if (devinfo->settings) in brcmf_pcie_remove()
1858 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_remove()
1860 kfree(devinfo); in brcmf_pcie_remove()
1870 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_pm_enter_D3() local
1876 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_enter_D3()
1880 devinfo->mbdata_completed = false; in brcmf_pcie_pm_enter_D3()
1881 brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D3_INFORM); in brcmf_pcie_pm_enter_D3()
1883 wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed, in brcmf_pcie_pm_enter_D3()
1885 if (!devinfo->mbdata_completed) { in brcmf_pcie_pm_enter_D3()
1891 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_pm_enter_D3()
1899 struct brcmf_pciedev_info *devinfo; in brcmf_pcie_pm_leave_D3() local
1907 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_leave_D3()
1911 if (brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_INTMASK) != 0) { in brcmf_pcie_pm_leave_D3()
1913 if (brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D0_INFORM)) in brcmf_pcie_pm_leave_D3()
1916 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_pm_leave_D3()
1917 brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2); in brcmf_pcie_pm_leave_D3()
1919 brcmf_pcie_intr_enable(devinfo); in brcmf_pcie_pm_leave_D3()
1924 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_pm_leave_D3()
1925 devinfo->ci = NULL; in brcmf_pcie_pm_leave_D3()
1926 pdev = devinfo->pdev; in brcmf_pcie_pm_leave_D3()