Lines Matching +full:otp +full:- +full:2

1 // SPDX-License-Identifier: ISC
52 BRCMF_FW_DEF(43602, "brcmfmac43602-pcie");
53 BRCMF_FW_DEF(4350, "brcmfmac4350-pcie");
54 BRCMF_FW_DEF(4350C, "brcmfmac4350c2-pcie");
55 BRCMF_FW_CLM_DEF(4355, "brcmfmac4355-pcie");
56 BRCMF_FW_CLM_DEF(4355C1, "brcmfmac4355c1-pcie");
57 BRCMF_FW_CLM_DEF(4356, "brcmfmac4356-pcie");
58 BRCMF_FW_CLM_DEF(43570, "brcmfmac43570-pcie");
59 BRCMF_FW_DEF(4358, "brcmfmac4358-pcie");
60 BRCMF_FW_DEF(4359, "brcmfmac4359-pcie");
61 BRCMF_FW_DEF(4359C, "brcmfmac4359c-pcie");
62 BRCMF_FW_CLM_DEF(4364B2, "brcmfmac4364b2-pcie");
63 BRCMF_FW_CLM_DEF(4364B3, "brcmfmac4364b3-pcie");
64 BRCMF_FW_DEF(4365B, "brcmfmac4365b-pcie");
65 BRCMF_FW_DEF(4365C, "brcmfmac4365c-pcie");
66 BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie");
67 BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
68 BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
69 BRCMF_FW_CLM_DEF(43752, "brcmfmac43752-pcie");
70 BRCMF_FW_CLM_DEF(4377B3, "brcmfmac4377b3-pcie");
71 BRCMF_FW_CLM_DEF(4378B1, "brcmfmac4378b1-pcie");
72 BRCMF_FW_CLM_DEF(4378B3, "brcmfmac4378b3-pcie");
73 BRCMF_FW_CLM_DEF(4387C2, "brcmfmac4387c2-pcie");
76 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.txt");
77 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");
79 /* per-board firmware binaries */
80 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.bin");
81 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.clm_blob");
82 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txcap_blob");
357 struct brcmf_otp_params otp; member
376 * struct brcmf_pcie_dhi_ringinfo - dongle/host interface shared ring info
471 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg16()
479 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
489 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
498 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
507 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
517 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
526 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_read_idx()
536 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_write_idx()
545 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
555 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
564 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
574 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
584 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_dev_tomem()
590 if (((ulong)address & 2) || ((ulong)dstaddr & 2) || (len & 2)) { in brcmf_pcie_copy_dev_tomem()
596 len--; in brcmf_pcie_copy_dev_tomem()
599 len = len / 2; in brcmf_pcie_copy_dev_tomem()
603 address += 2; in brcmf_pcie_copy_dev_tomem()
605 len--; in brcmf_pcie_copy_dev_tomem()
615 len--; in brcmf_pcie_copy_dev_tomem()
630 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
631 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_select_core()
635 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
637 bar0_win = core->base; in brcmf_pcie_select_core()
641 if (bar0_win != core->base) { in brcmf_pcie_select_core()
642 bar0_win = core->base; in brcmf_pcie_select_core()
672 if (!devinfo->ci) in brcmf_pcie_reset_device()
677 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
680 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
690 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
693 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
694 if (core->rev <= 13) { in brcmf_pcie_reset_device()
721 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
727 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
747 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
748 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
752 if (!brcmf_chip_set_active(devinfo->ci, resetintr)) in brcmf_pcie_exit_download_state()
753 return -EIO; in brcmf_pcie_exit_download_state()
767 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
768 addr = shared->htod_mb_data_addr; in brcmf_pcie_send_mb_data()
780 return -EIO; in brcmf_pcie_send_mb_data()
785 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
788 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_send_mb_data()
789 if (core->rev <= 13) in brcmf_pcie_send_mb_data()
790 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
802 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
803 addr = shared->dtoh_mb_data_addr; in brcmf_pcie_handle_mb_data()
821 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
822 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
826 brcmf_fw_crashed(&devinfo->pdev->dev); in brcmf_pcie_handle_mb_data()
837 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
838 console = &shared->console; in brcmf_pcie_bus_console_init()
839 addr = shared->tcm_base_address + BRCMF_SHARED_CONSOLE_ADDR_OFFSET; in brcmf_pcie_bus_console_init()
840 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
842 addr = console->base_addr + BRCMF_CONSOLE_BUFADDR_OFFSET; in brcmf_pcie_bus_console_init()
843 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
844 addr = console->base_addr + BRCMF_CONSOLE_BUFSIZE_OFFSET; in brcmf_pcie_bus_console_init()
845 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
848 console->base_addr, console->buf_addr, console->bufsize); in brcmf_pcie_bus_console_init()
852 * brcmf_pcie_bus_console_read - reads firmware messages
860 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_bus_console_read()
861 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_bus_console_read()
870 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
871 if (!console->base_addr) in brcmf_pcie_bus_console_read()
873 addr = console->base_addr + BRCMF_CONSOLE_WRITEIDX_OFFSET; in brcmf_pcie_bus_console_read()
875 while (newidx != console->read_idx) { in brcmf_pcie_bus_console_read()
876 addr = console->buf_addr + console->read_idx; in brcmf_pcie_bus_console_read()
878 console->read_idx++; in brcmf_pcie_bus_console_read()
879 if (console->read_idx == console->bufsize) in brcmf_pcie_bus_console_read()
880 console->read_idx = 0; in brcmf_pcie_bus_console_read()
883 console->log_str[console->log_idx] = ch; in brcmf_pcie_bus_console_read()
884 console->log_idx++; in brcmf_pcie_bus_console_read()
886 (console->log_idx == (sizeof(console->log_str) - 2))) { in brcmf_pcie_bus_console_read()
888 console->log_str[console->log_idx] = ch; in brcmf_pcie_bus_console_read()
889 console->log_idx++; in brcmf_pcie_bus_console_read()
892 console->log_str[console->log_idx] = 0; in brcmf_pcie_bus_console_read()
895 console->log_str); in brcmf_pcie_bus_console_read()
897 pr_debug("CONSOLE: %s", console->log_str); in brcmf_pcie_bus_console_read()
898 console->log_idx = 0; in brcmf_pcie_bus_console_read()
906 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxmask, 0); in brcmf_pcie_intr_disable()
912 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxmask, in brcmf_pcie_intr_enable()
913 devinfo->reginfo->int_d2h_db | in brcmf_pcie_intr_enable()
914 devinfo->reginfo->int_fn0); in brcmf_pcie_intr_enable()
919 if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1) in brcmf_pcie_hostready()
921 devinfo->reginfo->h2d_mailbox_1, 1); in brcmf_pcie_hostready()
928 if (brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint)) { in brcmf_pcie_quick_check_isr()
942 devinfo->in_irq = true; in brcmf_pcie_isr_thread()
943 status = brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint); in brcmf_pcie_isr_thread()
946 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxint, in brcmf_pcie_isr_thread()
948 if (status & devinfo->reginfo->int_fn0) in brcmf_pcie_isr_thread()
950 if (status & devinfo->reginfo->int_d2h_db) { in brcmf_pcie_isr_thread()
951 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
953 &devinfo->pdev->dev); in brcmf_pcie_isr_thread()
957 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
959 devinfo->in_irq = false; in brcmf_pcie_isr_thread()
966 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_request_irq()
967 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_request_irq()
974 if (request_threaded_irq(pdev->irq, brcmf_pcie_quick_check_isr, in brcmf_pcie_request_irq()
978 brcmf_err(bus, "Failed to request IRQ %d\n", pdev->irq); in brcmf_pcie_request_irq()
979 return -EIO; in brcmf_pcie_request_irq()
981 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
988 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_release_irq()
989 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_release_irq()
993 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
997 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
1002 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
1006 if (devinfo->in_irq) in brcmf_pcie_release_irq()
1009 status = brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint); in brcmf_pcie_release_irq()
1010 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxint, status); in brcmf_pcie_release_irq()
1012 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
1019 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr()
1020 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_write_rptr()
1022 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
1023 return -EIO; in brcmf_pcie_ring_mb_write_rptr()
1025 brcmf_dbg(PCIE, "W r_ptr %d (%d), ring %d\n", commonring->r_ptr, in brcmf_pcie_ring_mb_write_rptr()
1026 commonring->w_ptr, ring->id); in brcmf_pcie_ring_mb_write_rptr()
1028 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
1037 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr()
1038 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_write_wptr()
1040 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
1041 return -EIO; in brcmf_pcie_ring_mb_write_wptr()
1043 brcmf_dbg(PCIE, "W w_ptr %d (%d), ring %d\n", commonring->w_ptr, in brcmf_pcie_ring_mb_write_wptr()
1044 commonring->r_ptr, ring->id); in brcmf_pcie_ring_mb_write_wptr()
1046 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
1055 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell()
1057 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
1058 return -EIO; in brcmf_pcie_ring_mb_ring_bell()
1062 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->h2d_mailbox_0, 1); in brcmf_pcie_ring_mb_ring_bell()
1071 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr()
1072 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_update_rptr()
1074 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
1075 return -EIO; in brcmf_pcie_ring_mb_update_rptr()
1077 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
1079 brcmf_dbg(PCIE, "R r_ptr %d (%d), ring %d\n", commonring->r_ptr, in brcmf_pcie_ring_mb_update_rptr()
1080 commonring->w_ptr, ring->id); in brcmf_pcie_ring_mb_update_rptr()
1089 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr()
1090 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_update_wptr()
1092 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
1093 return -EIO; in brcmf_pcie_ring_mb_update_wptr()
1095 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
1097 brcmf_dbg(PCIE, "R w_ptr %d (%d), ring %d\n", commonring->w_ptr, in brcmf_pcie_ring_mb_update_wptr()
1098 commonring->r_ptr, ring->id); in brcmf_pcie_ring_mb_update_wptr()
1112 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
1137 if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7) in brcmf_pcie_alloc_dma_and_ring()
1156 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1160 brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id], in brcmf_pcie_alloc_dma_and_ring()
1162 ring->dma_handle = dma_handle; in brcmf_pcie_alloc_dma_and_ring()
1163 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1164 brcmf_commonring_register_cb(&ring->commonring, in brcmf_pcie_alloc_dma_and_ring()
1184 dma_buf = ring->commonring.buf_addr; in brcmf_pcie_release_ringbuffer()
1186 size = ring->commonring.depth * ring->commonring.item_len; in brcmf_pcie_release_ringbuffer()
1187 dma_free_coherent(dev, size, dma_buf, ring->dma_handle); in brcmf_pcie_release_ringbuffer()
1198 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1199 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1200 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1202 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1203 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1204 if (devinfo->idxbuf) { in brcmf_pcie_release_ringbuffers()
1205 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1206 devinfo->idxbuf_sz, in brcmf_pcie_release_ringbuffers()
1207 devinfo->idxbuf, in brcmf_pcie_release_ringbuffers()
1208 devinfo->idxbuf_dmahandle); in brcmf_pcie_release_ringbuffers()
1209 devinfo->idxbuf = NULL; in brcmf_pcie_release_ringbuffers()
1216 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_ringbuffers()
1233 memcpy_fromio(&ringinfo, devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1235 if (devinfo->shared.version >= 6) { in brcmf_pcie_init_ringbuffers()
1241 max_flowrings = max_submissionrings - in brcmf_pcie_init_ringbuffers()
1247 return -EIO; in brcmf_pcie_init_ringbuffers()
1250 if (devinfo->dma_idx_sz != 0) { in brcmf_pcie_init_ringbuffers()
1252 devinfo->dma_idx_sz * 2; in brcmf_pcie_init_ringbuffers()
1253 devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz, in brcmf_pcie_init_ringbuffers()
1254 &devinfo->idxbuf_dmahandle, in brcmf_pcie_init_ringbuffers()
1256 if (!devinfo->idxbuf) in brcmf_pcie_init_ringbuffers()
1257 devinfo->dma_idx_sz = 0; in brcmf_pcie_init_ringbuffers()
1260 if (devinfo->dma_idx_sz == 0) { in brcmf_pcie_init_ringbuffers()
1266 devinfo->write_ptr = brcmf_pcie_write_tcm16; in brcmf_pcie_init_ringbuffers()
1267 devinfo->read_ptr = brcmf_pcie_read_tcm16; in brcmf_pcie_init_ringbuffers()
1270 memset(devinfo->idxbuf, 0, bufsz); in brcmf_pcie_init_ringbuffers()
1271 devinfo->idxbuf_sz = bufsz; in brcmf_pcie_init_ringbuffers()
1272 idx_offset = devinfo->dma_idx_sz; in brcmf_pcie_init_ringbuffers()
1273 devinfo->write_ptr = brcmf_pcie_write_idx; in brcmf_pcie_init_ringbuffers()
1274 devinfo->read_ptr = brcmf_pcie_read_idx; in brcmf_pcie_init_ringbuffers()
1277 address = (u64)devinfo->idxbuf_dmahandle; in brcmf_pcie_init_ringbuffers()
1307 memcpy_toio(devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1318 ring->w_idx_addr = h2d_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1319 ring->r_idx_addr = h2d_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1320 ring->id = i; in brcmf_pcie_init_ringbuffers()
1321 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1333 ring->w_idx_addr = d2h_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1334 ring->r_idx_addr = d2h_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1335 ring->id = i; in brcmf_pcie_init_ringbuffers()
1336 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1343 devinfo->shared.max_flowrings = max_flowrings; in brcmf_pcie_init_ringbuffers()
1344 devinfo->shared.max_submissionrings = max_submissionrings; in brcmf_pcie_init_ringbuffers()
1345 devinfo->shared.max_completionrings = max_completionrings; in brcmf_pcie_init_ringbuffers()
1354 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1355 ring->id = i + BRCMF_H2D_MSGRING_FLOWRING_IDSTART; in brcmf_pcie_init_ringbuffers()
1356 brcmf_commonring_register_cb(&ring->commonring, in brcmf_pcie_init_ringbuffers()
1363 ring->w_idx_addr = h2d_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1364 ring->r_idx_addr = h2d_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1368 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1375 return -ENOMEM; in brcmf_pcie_init_ringbuffers()
1382 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1383 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1385 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1386 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1387 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1388 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1390 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1391 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1396 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_scratchbuffers()
1400 devinfo->shared.scratch = in brcmf_pcie_init_scratchbuffers()
1401 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1403 &devinfo->shared.scratch_dmahandle, in brcmf_pcie_init_scratchbuffers()
1405 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1408 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1410 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1413 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1417 devinfo->shared.ringupd = in brcmf_pcie_init_scratchbuffers()
1418 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1420 &devinfo->shared.ringupd_dmahandle, in brcmf_pcie_init_scratchbuffers()
1422 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1425 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1427 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1430 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1438 return -ENOMEM; in brcmf_pcie_init_scratchbuffers()
1445 struct brcmf_pciedev *pcie_bus_dev = bus_if->bus_priv.pcie; in brcmf_pcie_down()
1446 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_down()
1454 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_preinit()
1458 brcmf_pcie_intr_enable(buspub->devinfo); in brcmf_pcie_preinit()
1459 brcmf_pcie_hostready(buspub->devinfo); in brcmf_pcie_preinit()
1487 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_wowl_config()
1488 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config()
1491 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1498 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_ramsize()
1499 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_ramsize()
1501 return devinfo->ci->ramsize - devinfo->ci->srsize; in brcmf_pcie_get_ramsize()
1508 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_memdump()
1509 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_memdump()
1511 brcmf_dbg(PCIE, "dump at 0x%08X: len=%zu\n", devinfo->ci->rambase, len); in brcmf_pcie_get_memdump()
1512 brcmf_pcie_copy_dev_tomem(devinfo, devinfo->ci->rambase, data, len); in brcmf_pcie_get_memdump()
1520 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_blob()
1521 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_blob()
1525 *fw = devinfo->clm_fw; in brcmf_pcie_get_blob()
1526 devinfo->clm_fw = NULL; in brcmf_pcie_get_blob()
1529 *fw = devinfo->txcap_fw; in brcmf_pcie_get_blob()
1530 devinfo->txcap_fw = NULL; in brcmf_pcie_get_blob()
1533 return -ENOENT; in brcmf_pcie_get_blob()
1537 return -ENOENT; in brcmf_pcie_get_blob()
1545 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_reset()
1546 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_reset()
1564 return -ENOMEM; in brcmf_pcie_reset()
1609 devinfo->ci->ramsize = newsize; in brcmf_pcie_adjust_ramsize()
1617 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_share_ram_info()
1621 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1622 shared->tcm_base_address = sharedram_addr; in brcmf_pcie_init_share_ram_info()
1624 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1625 shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK); in brcmf_pcie_init_share_ram_info()
1626 brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version); in brcmf_pcie_init_share_ram_info()
1627 if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) || in brcmf_pcie_init_share_ram_info()
1628 (shared->version < BRCMF_PCIE_MIN_SHARED_VERSION)) { in brcmf_pcie_init_share_ram_info()
1630 shared->version); in brcmf_pcie_init_share_ram_info()
1631 return -EINVAL; in brcmf_pcie_init_share_ram_info()
1635 if (shared->flags & BRCMF_PCIE_SHARED_DMA_INDEX) { in brcmf_pcie_init_share_ram_info()
1636 if (shared->flags & BRCMF_PCIE_SHARED_DMA_2B_IDX) in brcmf_pcie_init_share_ram_info()
1637 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1639 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1643 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1644 if (shared->max_rxbufpost == 0) in brcmf_pcie_init_share_ram_info()
1645 shared->max_rxbufpost = BRCMF_DEF_MAX_RXBUFPOST; in brcmf_pcie_init_share_ram_info()
1648 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1651 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1654 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1657 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1660 shared->max_rxbufpost, shared->rx_dataoffset); in brcmf_pcie_init_share_ram_info()
1682 memcpy_toio(devinfo->tcm + address, randbuf, BRCMF_RANDOM_SEED_LENGTH); in brcmf_pcie_provide_random_bytes()
1689 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_download_fw_nvram()
1702 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1703 memcpy_toio(devinfo->tcm + devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1704 (void *)fw->data, fw->size); in brcmf_pcie_download_fw_nvram()
1706 resetintr = get_unaligned_le32(fw->data); in brcmf_pcie_download_fw_nvram()
1712 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1715 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1716 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1718 memcpy_toio(devinfo->tcm + address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1721 if (devinfo->fwseed) { in brcmf_pcie_download_fw_nvram()
1733 address -= sizeof(footer); in brcmf_pcie_download_fw_nvram()
1734 memcpy_toio(devinfo->tcm + address, &footer, in brcmf_pcie_download_fw_nvram()
1737 address -= rand_len; in brcmf_pcie_download_fw_nvram()
1742 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1746 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1759 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1761 loop_counter--; in brcmf_pcie_download_fw_nvram()
1765 return -ENODEV; in brcmf_pcie_download_fw_nvram()
1767 if (sharedram_addr < devinfo->ci->rambase || in brcmf_pcie_download_fw_nvram()
1768 sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) { in brcmf_pcie_download_fw_nvram()
1771 return -ENODEV; in brcmf_pcie_download_fw_nvram()
1781 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1782 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_get_resource()
1795 /* Bar-0 mapped address */ in brcmf_pcie_get_resource()
1797 /* Bar-1 mapped address */ in brcmf_pcie_get_resource()
1798 bar1_addr = pci_resource_start(pdev, 2); in brcmf_pcie_get_resource()
1799 /* read Bar-1 mapped memory range */ in brcmf_pcie_get_resource()
1800 bar1_size = pci_resource_len(pdev, 2); in brcmf_pcie_get_resource()
1804 return -EINVAL; in brcmf_pcie_get_resource()
1807 devinfo->regs = ioremap(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1808 devinfo->tcm = ioremap(bar1_addr, bar1_size); in brcmf_pcie_get_resource()
1810 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1811 brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1812 devinfo->tcm); in brcmf_pcie_get_resource()
1813 return -EINVAL; in brcmf_pcie_get_resource()
1816 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1818 devinfo->tcm, (unsigned long long)bar1_addr, in brcmf_pcie_get_resource()
1827 if (devinfo->tcm) in brcmf_pcie_release_resource()
1828 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1829 if (devinfo->regs) in brcmf_pcie_release_resource()
1830 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1832 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1840 ret_addr = addr & (BRCMF_PCIE_BAR0_REG_SIZE - 1); in brcmf_pcie_buscore_prep_addr()
1841 addr &= ~(BRCMF_PCIE_BAR0_REG_SIZE - 1); in brcmf_pcie_buscore_prep_addr()
1852 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1861 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1878 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1883 if (core->rev >= 64) in brcmf_pcie_buscore_reset()
1927 /* 4-byte header and two empty strings */ in brcmf_pcie_parse_otp_sys_vendor()
1929 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1932 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1937 idx += strnlen(chip_params, size - idx) + 1; in brcmf_pcie_parse_otp_sys_vendor()
1939 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1944 idx += strnlen(board_params, size - idx); in brcmf_pcie_parse_otp_sys_vendor()
1946 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1948 /* At this point both strings are guaranteed NUL-terminated */ in brcmf_pcie_parse_otp_sys_vendor()
1949 brcmf_dbg(PCIE, "OTP: chip_params='%s' board_params='%s'\n", in brcmf_pcie_parse_otp_sys_vendor()
1959 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1963 len = end - p; in brcmf_pcie_parse_otp_sys_vendor()
1966 if (len > (BRCMF_OTP_MAX_PARAM_LEN - 1)) in brcmf_pcie_parse_otp_sys_vendor()
1967 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1972 strscpy(devinfo->otp.module, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1975 strscpy(devinfo->otp.vendor, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1978 strscpy(devinfo->otp.version, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1986 brcmf_dbg(PCIE, "OTP: module=%s vendor=%s version=%s\n", in brcmf_pcie_parse_otp_sys_vendor()
1987 devinfo->otp.module, devinfo->otp.vendor, in brcmf_pcie_parse_otp_sys_vendor()
1988 devinfo->otp.version); in brcmf_pcie_parse_otp_sys_vendor()
1990 if (!devinfo->otp.module[0] || in brcmf_pcie_parse_otp_sys_vendor()
1991 !devinfo->otp.vendor[0] || in brcmf_pcie_parse_otp_sys_vendor()
1992 !devinfo->otp.version[0]) in brcmf_pcie_parse_otp_sys_vendor()
1993 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1995 devinfo->otp.valid = true; in brcmf_pcie_parse_otp_sys_vendor()
2000 brcmf_pcie_parse_otp(struct brcmf_pciedev_info *devinfo, u8 *otp, size_t size) in brcmf_pcie_parse_otp() argument
2003 int ret = -EINVAL; in brcmf_pcie_parse_otp()
2007 while (p < (size - 1)) { in brcmf_pcie_parse_otp()
2008 u8 type = otp[p]; in brcmf_pcie_parse_otp()
2009 u8 length = otp[p + 1]; in brcmf_pcie_parse_otp()
2014 if ((p + 2 + length) > size) in brcmf_pcie_parse_otp()
2019 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): SYS_VENDOR\n", in brcmf_pcie_parse_otp()
2022 &otp[p + 2], in brcmf_pcie_parse_otp()
2026 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): BRCM_CIS\n", in brcmf_pcie_parse_otp()
2030 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): Unknown type 0x%x\n", in brcmf_pcie_parse_otp()
2035 p += 2 + length; in brcmf_pcie_parse_otp()
2043 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_read_otp()
2044 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_read_otp()
2046 u16 *otp; in brcmf_pcie_read_otp() local
2050 switch (devinfo->ci->chip) { in brcmf_pcie_read_otp()
2073 /* OTP not supported on this chip */ in brcmf_pcie_read_otp()
2077 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_read_otp()
2079 brcmf_err(bus, "No OTP core\n"); in brcmf_pcie_read_otp()
2080 return -ENODEV; in brcmf_pcie_read_otp()
2084 /* Chips with OTP accessed via ChipCommon need additional in brcmf_pcie_read_otp()
2085 * handling to access the OTP in brcmf_pcie_read_otp()
2091 /* Chip lacks OTP, try without it... */ in brcmf_pcie_read_otp()
2093 "OTP unavailable, using default firmware\n"); in brcmf_pcie_read_otp()
2097 /* Map OTP to shadow area */ in brcmf_pcie_read_otp()
2102 otp = kcalloc(words, sizeof(u16), GFP_KERNEL); in brcmf_pcie_read_otp()
2103 if (!otp) in brcmf_pcie_read_otp()
2104 return -ENOMEM; in brcmf_pcie_read_otp()
2106 /* Map bus window to SROM/OTP shadow area in core */ in brcmf_pcie_read_otp()
2107 base = brcmf_pcie_buscore_prep_addr(devinfo->pdev, base + core->base); in brcmf_pcie_read_otp()
2109 brcmf_dbg(PCIE, "OTP data:\n"); in brcmf_pcie_read_otp()
2111 otp[idx] = brcmf_pcie_read_reg16(devinfo, base + 2 * idx); in brcmf_pcie_read_otp()
2112 brcmf_dbg(PCIE, "[%8x] 0x%04x\n", base + 2 * idx, otp[idx]); in brcmf_pcie_read_otp()
2120 ret = brcmf_pcie_parse_otp(devinfo, (u8 *)otp, 2 * words); in brcmf_pcie_read_otp()
2121 kfree(otp); in brcmf_pcie_read_otp()
2128 #define BRCMF_PCIE_FW_CLM 2
2143 pcie_bus_dev = bus->bus_priv.pcie; in brcmf_pcie_setup()
2144 devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup()
2152 fw = fwreq->items[BRCMF_PCIE_FW_CODE].binary; in brcmf_pcie_setup()
2153 nvram = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.data; in brcmf_pcie_setup()
2154 nvram_len = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.len; in brcmf_pcie_setup()
2155 devinfo->clm_fw = fwreq->items[BRCMF_PCIE_FW_CLM].binary; in brcmf_pcie_setup()
2156 devinfo->txcap_fw = fwreq->items[BRCMF_PCIE_FW_TXCAP].binary; in brcmf_pcie_setup()
2159 ret = brcmf_chip_get_raminfo(devinfo->ci); in brcmf_pcie_setup()
2172 brcmf_pcie_adjust_ramsize(devinfo, (u8 *)fw->data, fw->size); in brcmf_pcie_setup()
2178 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
2195 bus->msgbuf->commonrings[i] = in brcmf_pcie_setup()
2196 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
2198 flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
2203 for (i = 0; i < devinfo->shared.max_flowrings; i++) in brcmf_pcie_setup()
2204 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
2205 bus->msgbuf->flowrings = flowrings; in brcmf_pcie_setup()
2207 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
2208 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
2209 bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings; in brcmf_pcie_setup()
2211 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
2213 ret = brcmf_attach(&devinfo->pdev->dev); in brcmf_pcie_setup()
2235 { ".bin", devinfo->fw_name }, in brcmf_pcie_prepare_fw_request()
2236 { ".txt", devinfo->nvram_name }, in brcmf_pcie_prepare_fw_request()
2237 { ".clm_blob", devinfo->clm_name }, in brcmf_pcie_prepare_fw_request()
2238 { ".txcap_blob", devinfo->txcap_name }, in brcmf_pcie_prepare_fw_request()
2241 fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev, in brcmf_pcie_prepare_fw_request()
2248 fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2249 fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM; in brcmf_pcie_prepare_fw_request()
2250 fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2251 fwreq->items[BRCMF_PCIE_FW_CLM].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2252 fwreq->items[BRCMF_PCIE_FW_CLM].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2253 fwreq->items[BRCMF_PCIE_FW_TXCAP].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2254 fwreq->items[BRCMF_PCIE_FW_TXCAP].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2256 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1; in brcmf_pcie_prepare_fw_request()
2257 fwreq->bus_nr = devinfo->pdev->bus->number; in brcmf_pcie_prepare_fw_request()
2260 if (devinfo->settings->board_type && in brcmf_pcie_prepare_fw_request()
2261 devinfo->settings->antenna_sku && in brcmf_pcie_prepare_fw_request()
2262 devinfo->otp.valid) { in brcmf_pcie_prepare_fw_request()
2263 const struct brcmf_otp_params *otp = &devinfo->otp; in brcmf_pcie_prepare_fw_request() local
2264 struct device *dev = &devinfo->pdev->dev; in brcmf_pcie_prepare_fw_request()
2265 const char **bt = fwreq->board_types; in brcmf_pcie_prepare_fw_request()
2268 devinfo->settings->board_type); in brcmf_pcie_prepare_fw_request()
2270 /* Example: apple,shikoku-RASP-m-6.11-X3 */ in brcmf_pcie_prepare_fw_request()
2271 bt[0] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2272 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2273 otp->module, otp->vendor, otp->version, in brcmf_pcie_prepare_fw_request()
2274 devinfo->settings->antenna_sku); in brcmf_pcie_prepare_fw_request()
2275 bt[1] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2276 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2277 otp->module, otp->vendor, otp->version); in brcmf_pcie_prepare_fw_request()
2278 bt[2] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2279 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2280 otp->module, otp->vendor); in brcmf_pcie_prepare_fw_request()
2281 bt[3] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s", in brcmf_pcie_prepare_fw_request()
2282 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2283 otp->module); in brcmf_pcie_prepare_fw_request()
2284 bt[4] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s", in brcmf_pcie_prepare_fw_request()
2285 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2286 devinfo->settings->antenna_sku); in brcmf_pcie_prepare_fw_request()
2287 bt[5] = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
2289 if (!bt[0] || !bt[1] || !bt[2] || !bt[3] || !bt[4]) { in brcmf_pcie_prepare_fw_request()
2294 brcmf_dbg(PCIE, "Board: %s\n", devinfo->settings->board_type); in brcmf_pcie_prepare_fw_request()
2295 fwreq->board_types[0] = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
2306 if (devinfo->console_active) { in brcmf_pcie_fwcon_timer()
2307 del_timer_sync(&devinfo->timer); in brcmf_pcie_fwcon_timer()
2308 devinfo->console_active = false; in brcmf_pcie_fwcon_timer()
2314 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP || in brcmf_pcie_fwcon_timer()
2315 !devinfo->console_interval || !BRCMF_FWCON_ON()) in brcmf_pcie_fwcon_timer()
2318 if (!devinfo->console_active) { in brcmf_pcie_fwcon_timer()
2319 devinfo->timer.expires = jiffies + devinfo->console_interval; in brcmf_pcie_fwcon_timer()
2320 add_timer(&devinfo->timer); in brcmf_pcie_fwcon_timer()
2321 devinfo->console_active = true; in brcmf_pcie_fwcon_timer()
2324 mod_timer(&devinfo->timer, jiffies + devinfo->console_interval); in brcmf_pcie_fwcon_timer()
2333 if (!devinfo->console_active) in brcmf_pcie_fwcon()
2339 mod_timer(&devinfo->timer, jiffies + devinfo->console_interval); in brcmf_pcie_fwcon()
2346 *val = devinfo->console_interval; in brcmf_pcie_console_interval_get()
2356 return -EINVAL; in brcmf_pcie_console_interval_set()
2358 devinfo->console_interval = val; in brcmf_pcie_console_interval_set()
2360 if (!val && devinfo->console_active) in brcmf_pcie_console_interval_set()
2376 struct brcmf_pub *drvr = bus_if->drvr; in brcmf_pcie_debugfs_create()
2377 struct brcmf_pciedev *pcie_bus_dev = bus_if->bus_priv.pcie; in brcmf_pcie_debugfs_create()
2378 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_debugfs_create()
2384 devinfo->console_interval = BRCMF_CONSOLE; in brcmf_pcie_debugfs_create()
2447 pci_err(pdev, "Error could not find pci_device_id for %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2448 return -ENODEV; in brcmf_pcie_probe()
2452 brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2454 ret = -ENOMEM; in brcmf_pcie_probe()
2459 devinfo->pdev = pdev; in brcmf_pcie_probe()
2461 devinfo->ci = brcmf_chip_attach(devinfo, pdev->device, in brcmf_pcie_probe()
2463 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
2464 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
2465 devinfo->ci = NULL; in brcmf_pcie_probe()
2469 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_probe()
2470 if (core->rev >= 64) in brcmf_pcie_probe()
2471 devinfo->reginfo = &brcmf_reginfo_64; in brcmf_pcie_probe()
2473 devinfo->reginfo = &brcmf_reginfo_default; in brcmf_pcie_probe()
2477 ret = -ENOMEM; in brcmf_pcie_probe()
2481 devinfo->settings = brcmf_get_module_param(&devinfo->pdev->dev, in brcmf_pcie_probe()
2483 devinfo->ci->chip, in brcmf_pcie_probe()
2484 devinfo->ci->chiprev); in brcmf_pcie_probe()
2485 if (!devinfo->settings) { in brcmf_pcie_probe()
2486 ret = -ENOMEM; in brcmf_pcie_probe()
2489 ret = PTR_ERR_OR_ZERO(devinfo->settings); in brcmf_pcie_probe()
2495 ret = -ENOMEM; in brcmf_pcie_probe()
2498 bus->msgbuf = kzalloc(sizeof(*bus->msgbuf), GFP_KERNEL); in brcmf_pcie_probe()
2499 if (!bus->msgbuf) { in brcmf_pcie_probe()
2500 ret = -ENOMEM; in brcmf_pcie_probe()
2506 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
2507 pcie_bus_dev->bus = bus; in brcmf_pcie_probe()
2508 bus->dev = &pdev->dev; in brcmf_pcie_probe()
2509 bus->bus_priv.pcie = pcie_bus_dev; in brcmf_pcie_probe()
2510 bus->ops = &brcmf_pcie_bus_ops; in brcmf_pcie_probe()
2511 bus->proto_type = BRCMF_PROTO_MSGBUF; in brcmf_pcie_probe()
2512 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
2513 bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot); in brcmf_pcie_probe()
2514 bus->fwvid = drvdata[id->driver_data].vendor; in brcmf_pcie_probe()
2515 devinfo->fwseed = drvdata[id->driver_data].fw_seed; in brcmf_pcie_probe()
2516 dev_set_drvdata(&pdev->dev, bus); in brcmf_pcie_probe()
2518 ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings); in brcmf_pcie_probe()
2524 brcmf_err(bus, "failed to parse OTP\n"); in brcmf_pcie_probe()
2530 timer_setup(&devinfo->timer, brcmf_pcie_fwcon, 0); in brcmf_pcie_probe()
2535 ret = -ENOMEM; in brcmf_pcie_probe()
2539 ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup); in brcmf_pcie_probe()
2547 brcmf_free(&devinfo->pdev->dev); in brcmf_pcie_probe()
2549 kfree(bus->msgbuf); in brcmf_pcie_probe()
2552 brcmf_err(NULL, "failed %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2554 if (devinfo->ci) in brcmf_pcie_probe()
2555 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
2556 if (devinfo->settings) in brcmf_pcie_probe()
2557 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_probe()
2572 bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_remove()
2576 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
2580 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
2581 if (devinfo->ci) in brcmf_pcie_remove()
2584 brcmf_detach(&pdev->dev); in brcmf_pcie_remove()
2585 brcmf_free(&pdev->dev); in brcmf_pcie_remove()
2587 kfree(bus->bus_priv.pcie); in brcmf_pcie_remove()
2588 kfree(bus->msgbuf->flowrings); in brcmf_pcie_remove()
2589 kfree(bus->msgbuf); in brcmf_pcie_remove()
2597 release_firmware(devinfo->clm_fw); in brcmf_pcie_remove()
2598 release_firmware(devinfo->txcap_fw); in brcmf_pcie_remove()
2600 if (devinfo->ci) in brcmf_pcie_remove()
2601 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
2602 if (devinfo->settings) in brcmf_pcie_remove()
2603 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_remove()
2606 dev_set_drvdata(&pdev->dev, NULL); in brcmf_pcie_remove()
2621 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_enter_D3()
2626 devinfo->mbdata_completed = false; in brcmf_pcie_pm_enter_D3()
2629 wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed, in brcmf_pcie_pm_enter_D3()
2631 if (!devinfo->mbdata_completed) { in brcmf_pcie_pm_enter_D3()
2634 return -EIO; in brcmf_pcie_pm_enter_D3()
2637 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_pm_enter_D3()
2653 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_leave_D3()
2657 if (brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->intmask) != 0) { in brcmf_pcie_pm_leave_D3()
2662 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_pm_leave_D3()
2672 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_pm_leave_D3()
2673 devinfo->ci = NULL; in brcmf_pcie_pm_leave_D3()
2674 pdev = devinfo->pdev; in brcmf_pcie_pm_leave_D3()