Lines Matching +full:otp +full:- +full:1
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");
74 BRCMF_FW_CLM_DEF(54591, "brcmfmac54591-pcie");
77 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.txt");
78 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");
80 /* per-board firmware binaries */
81 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.bin");
82 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.clm_blob");
83 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txcap_blob");
240 #define BRCMF_RING_D2H_RING_COUNT_OFFSET 1
359 struct brcmf_otp_params otp; member
378 * struct brcmf_pcie_dhi_ringinfo - dongle/host interface shared ring info
473 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg16()
481 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_read_reg32()
491 void __iomem *address = devinfo->regs + reg_offset; in brcmf_pcie_write_reg32()
500 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm8()
509 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm16()
519 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm16()
528 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_read_idx()
538 u16 *address = devinfo->idxbuf + mem_offset; in brcmf_pcie_write_idx()
547 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_read_tcm32()
557 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_write_tcm32()
566 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_read_ram32()
576 void __iomem *addr = devinfo->tcm + devinfo->ci->rambase + mem_offset; in brcmf_pcie_write_ram32()
586 void __iomem *address = devinfo->tcm + mem_offset; in brcmf_pcie_copy_dev_tomem()
598 len--; in brcmf_pcie_copy_dev_tomem()
607 len--; in brcmf_pcie_copy_dev_tomem()
617 len--; in brcmf_pcie_copy_dev_tomem()
632 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_select_core()
633 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_select_core()
637 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_select_core()
639 bar0_win = core->base; in brcmf_pcie_select_core()
643 if (bar0_win != core->base) { in brcmf_pcie_select_core()
644 bar0_win = core->base; in brcmf_pcie_select_core()
676 if (!devinfo->ci) in brcmf_pcie_reset_device()
681 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
684 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
694 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
697 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
698 if (core->rev <= 13) { in brcmf_pcie_reset_device()
725 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
731 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
751 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
752 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
756 if (!brcmf_chip_set_active(devinfo->ci, resetintr)) in brcmf_pcie_exit_download_state()
757 return -EIO; in brcmf_pcie_exit_download_state()
771 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
772 addr = shared->htod_mb_data_addr; in brcmf_pcie_send_mb_data()
784 return -EIO; in brcmf_pcie_send_mb_data()
789 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
792 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_send_mb_data()
793 if (core->rev <= 13) in brcmf_pcie_send_mb_data()
794 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
806 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
807 addr = shared->dtoh_mb_data_addr; in brcmf_pcie_handle_mb_data()
825 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
826 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
830 brcmf_fw_crashed(&devinfo->pdev->dev); in brcmf_pcie_handle_mb_data()
841 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
842 console = &shared->console; in brcmf_pcie_bus_console_init()
843 addr = shared->tcm_base_address + BRCMF_SHARED_CONSOLE_ADDR_OFFSET; in brcmf_pcie_bus_console_init()
844 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
846 addr = console->base_addr + BRCMF_CONSOLE_BUFADDR_OFFSET; in brcmf_pcie_bus_console_init()
847 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
848 addr = console->base_addr + BRCMF_CONSOLE_BUFSIZE_OFFSET; in brcmf_pcie_bus_console_init()
849 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
852 console->base_addr, console->buf_addr, console->bufsize); in brcmf_pcie_bus_console_init()
856 * brcmf_pcie_bus_console_read - reads firmware messages
864 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_bus_console_read()
865 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_bus_console_read()
874 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
875 if (!console->base_addr) in brcmf_pcie_bus_console_read()
877 addr = console->base_addr + BRCMF_CONSOLE_WRITEIDX_OFFSET; in brcmf_pcie_bus_console_read()
879 while (newidx != console->read_idx) { in brcmf_pcie_bus_console_read()
880 addr = console->buf_addr + console->read_idx; in brcmf_pcie_bus_console_read()
882 console->read_idx++; in brcmf_pcie_bus_console_read()
883 if (console->read_idx == console->bufsize) in brcmf_pcie_bus_console_read()
884 console->read_idx = 0; in brcmf_pcie_bus_console_read()
887 console->log_str[console->log_idx] = ch; in brcmf_pcie_bus_console_read()
888 console->log_idx++; in brcmf_pcie_bus_console_read()
890 (console->log_idx == (sizeof(console->log_str) - 2))) { in brcmf_pcie_bus_console_read()
892 console->log_str[console->log_idx] = ch; in brcmf_pcie_bus_console_read()
893 console->log_idx++; in brcmf_pcie_bus_console_read()
896 console->log_str[console->log_idx] = 0; in brcmf_pcie_bus_console_read()
899 console->log_str); in brcmf_pcie_bus_console_read()
901 pr_debug("CONSOLE: %s", console->log_str); in brcmf_pcie_bus_console_read()
902 console->log_idx = 0; in brcmf_pcie_bus_console_read()
910 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxmask, 0); in brcmf_pcie_intr_disable()
916 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxmask, in brcmf_pcie_intr_enable()
917 devinfo->reginfo->int_d2h_db | in brcmf_pcie_intr_enable()
918 devinfo->reginfo->int_fn0); in brcmf_pcie_intr_enable()
923 if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1) in brcmf_pcie_hostready()
925 devinfo->reginfo->h2d_mailbox_1, 1); in brcmf_pcie_hostready()
932 if (brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint)) { in brcmf_pcie_quick_check_isr()
946 devinfo->in_irq = true; in brcmf_pcie_isr_thread()
947 status = brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint); in brcmf_pcie_isr_thread()
950 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxint, in brcmf_pcie_isr_thread()
952 if (status & devinfo->reginfo->int_fn0) in brcmf_pcie_isr_thread()
954 if (status & devinfo->reginfo->int_d2h_db) { in brcmf_pcie_isr_thread()
955 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
957 &devinfo->pdev->dev); in brcmf_pcie_isr_thread()
961 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
963 devinfo->in_irq = false; in brcmf_pcie_isr_thread()
970 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_request_irq()
971 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_request_irq()
978 if (request_threaded_irq(pdev->irq, brcmf_pcie_quick_check_isr, in brcmf_pcie_request_irq()
982 brcmf_err(bus, "Failed to request IRQ %d\n", pdev->irq); in brcmf_pcie_request_irq()
983 return -EIO; in brcmf_pcie_request_irq()
985 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
992 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_release_irq()
993 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_release_irq()
997 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
1001 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
1006 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
1010 if (devinfo->in_irq) in brcmf_pcie_release_irq()
1013 status = brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint); in brcmf_pcie_release_irq()
1014 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxint, status); in brcmf_pcie_release_irq()
1016 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
1023 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr()
1024 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_write_rptr()
1026 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
1027 return -EIO; in brcmf_pcie_ring_mb_write_rptr()
1029 brcmf_dbg(PCIE, "W r_ptr %d (%d), ring %d\n", commonring->r_ptr, in brcmf_pcie_ring_mb_write_rptr()
1030 commonring->w_ptr, ring->id); in brcmf_pcie_ring_mb_write_rptr()
1032 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
1041 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr()
1042 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_write_wptr()
1044 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
1045 return -EIO; in brcmf_pcie_ring_mb_write_wptr()
1047 brcmf_dbg(PCIE, "W w_ptr %d (%d), ring %d\n", commonring->w_ptr, in brcmf_pcie_ring_mb_write_wptr()
1048 commonring->r_ptr, ring->id); in brcmf_pcie_ring_mb_write_wptr()
1050 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
1059 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell()
1061 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
1062 return -EIO; in brcmf_pcie_ring_mb_ring_bell()
1065 /* Any arbitrary value will do, lets use 1 */ in brcmf_pcie_ring_mb_ring_bell()
1066 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->h2d_mailbox_0, 1); in brcmf_pcie_ring_mb_ring_bell()
1075 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr()
1076 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_update_rptr()
1078 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
1079 return -EIO; in brcmf_pcie_ring_mb_update_rptr()
1081 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
1083 brcmf_dbg(PCIE, "R r_ptr %d (%d), ring %d\n", commonring->r_ptr, in brcmf_pcie_ring_mb_update_rptr()
1084 commonring->w_ptr, ring->id); in brcmf_pcie_ring_mb_update_rptr()
1093 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr()
1094 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_update_wptr()
1096 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
1097 return -EIO; in brcmf_pcie_ring_mb_update_wptr()
1099 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
1101 brcmf_dbg(PCIE, "R w_ptr %d (%d), ring %d\n", commonring->w_ptr, in brcmf_pcie_ring_mb_update_wptr()
1102 commonring->r_ptr, ring->id); in brcmf_pcie_ring_mb_update_wptr()
1116 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
1141 if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7) in brcmf_pcie_alloc_dma_and_ring()
1160 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1164 brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id], in brcmf_pcie_alloc_dma_and_ring()
1166 ring->dma_handle = dma_handle; in brcmf_pcie_alloc_dma_and_ring()
1167 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1168 brcmf_commonring_register_cb(&ring->commonring, in brcmf_pcie_alloc_dma_and_ring()
1188 dma_buf = ring->commonring.buf_addr; in brcmf_pcie_release_ringbuffer()
1190 size = ring->commonring.depth * ring->commonring.item_len; in brcmf_pcie_release_ringbuffer()
1191 dma_free_coherent(dev, size, dma_buf, ring->dma_handle); in brcmf_pcie_release_ringbuffer()
1202 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1203 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1204 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1206 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1207 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1208 if (devinfo->idxbuf) { in brcmf_pcie_release_ringbuffers()
1209 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1210 devinfo->idxbuf_sz, in brcmf_pcie_release_ringbuffers()
1211 devinfo->idxbuf, in brcmf_pcie_release_ringbuffers()
1212 devinfo->idxbuf_dmahandle); in brcmf_pcie_release_ringbuffers()
1213 devinfo->idxbuf = NULL; in brcmf_pcie_release_ringbuffers()
1220 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_ringbuffers()
1237 memcpy_fromio(&ringinfo, devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1239 if (devinfo->shared.version >= 6) { in brcmf_pcie_init_ringbuffers()
1245 max_flowrings = max_submissionrings - in brcmf_pcie_init_ringbuffers()
1251 return -EIO; in brcmf_pcie_init_ringbuffers()
1254 if (devinfo->dma_idx_sz != 0) { in brcmf_pcie_init_ringbuffers()
1256 devinfo->dma_idx_sz * 2; in brcmf_pcie_init_ringbuffers()
1257 devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz, in brcmf_pcie_init_ringbuffers()
1258 &devinfo->idxbuf_dmahandle, in brcmf_pcie_init_ringbuffers()
1260 if (!devinfo->idxbuf) in brcmf_pcie_init_ringbuffers()
1261 devinfo->dma_idx_sz = 0; in brcmf_pcie_init_ringbuffers()
1264 if (devinfo->dma_idx_sz == 0) { in brcmf_pcie_init_ringbuffers()
1270 devinfo->write_ptr = brcmf_pcie_write_tcm16; in brcmf_pcie_init_ringbuffers()
1271 devinfo->read_ptr = brcmf_pcie_read_tcm16; in brcmf_pcie_init_ringbuffers()
1274 memset(devinfo->idxbuf, 0, bufsz); in brcmf_pcie_init_ringbuffers()
1275 devinfo->idxbuf_sz = bufsz; in brcmf_pcie_init_ringbuffers()
1276 idx_offset = devinfo->dma_idx_sz; in brcmf_pcie_init_ringbuffers()
1277 devinfo->write_ptr = brcmf_pcie_write_idx; in brcmf_pcie_init_ringbuffers()
1278 devinfo->read_ptr = brcmf_pcie_read_idx; in brcmf_pcie_init_ringbuffers()
1281 address = (u64)devinfo->idxbuf_dmahandle; in brcmf_pcie_init_ringbuffers()
1311 memcpy_toio(devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1322 ring->w_idx_addr = h2d_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1323 ring->r_idx_addr = h2d_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1324 ring->id = i; in brcmf_pcie_init_ringbuffers()
1325 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1337 ring->w_idx_addr = d2h_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1338 ring->r_idx_addr = d2h_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1339 ring->id = i; in brcmf_pcie_init_ringbuffers()
1340 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1347 devinfo->shared.max_flowrings = max_flowrings; in brcmf_pcie_init_ringbuffers()
1348 devinfo->shared.max_submissionrings = max_submissionrings; in brcmf_pcie_init_ringbuffers()
1349 devinfo->shared.max_completionrings = max_completionrings; in brcmf_pcie_init_ringbuffers()
1358 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1359 ring->id = i + BRCMF_H2D_MSGRING_FLOWRING_IDSTART; in brcmf_pcie_init_ringbuffers()
1360 brcmf_commonring_register_cb(&ring->commonring, in brcmf_pcie_init_ringbuffers()
1367 ring->w_idx_addr = h2d_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1368 ring->r_idx_addr = h2d_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1372 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1379 return -ENOMEM; in brcmf_pcie_init_ringbuffers()
1386 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1387 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1389 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1390 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1391 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1392 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1394 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1395 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1400 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_scratchbuffers()
1404 devinfo->shared.scratch = in brcmf_pcie_init_scratchbuffers()
1405 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1407 &devinfo->shared.scratch_dmahandle, in brcmf_pcie_init_scratchbuffers()
1409 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1412 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1414 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1417 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1421 devinfo->shared.ringupd = in brcmf_pcie_init_scratchbuffers()
1422 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1424 &devinfo->shared.ringupd_dmahandle, in brcmf_pcie_init_scratchbuffers()
1426 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1429 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1431 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1434 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1442 return -ENOMEM; in brcmf_pcie_init_scratchbuffers()
1449 struct brcmf_pciedev *pcie_bus_dev = bus_if->bus_priv.pcie; in brcmf_pcie_down()
1450 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_down()
1458 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_preinit()
1462 brcmf_pcie_intr_enable(buspub->devinfo); in brcmf_pcie_preinit()
1463 brcmf_pcie_hostready(buspub->devinfo); in brcmf_pcie_preinit()
1491 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_wowl_config()
1492 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config()
1495 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1502 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_ramsize()
1503 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_ramsize()
1505 return devinfo->ci->ramsize - devinfo->ci->srsize; in brcmf_pcie_get_ramsize()
1512 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_memdump()
1513 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_memdump()
1515 brcmf_dbg(PCIE, "dump at 0x%08X: len=%zu\n", devinfo->ci->rambase, len); in brcmf_pcie_get_memdump()
1516 brcmf_pcie_copy_dev_tomem(devinfo, devinfo->ci->rambase, data, len); in brcmf_pcie_get_memdump()
1524 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_blob()
1525 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_blob()
1529 *fw = devinfo->clm_fw; in brcmf_pcie_get_blob()
1530 devinfo->clm_fw = NULL; in brcmf_pcie_get_blob()
1533 *fw = devinfo->txcap_fw; in brcmf_pcie_get_blob()
1534 devinfo->txcap_fw = NULL; in brcmf_pcie_get_blob()
1537 return -ENOENT; in brcmf_pcie_get_blob()
1541 return -ENOENT; in brcmf_pcie_get_blob()
1549 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_reset()
1550 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_reset()
1568 return -ENOMEM; in brcmf_pcie_reset()
1613 devinfo->ci->ramsize = newsize; in brcmf_pcie_adjust_ramsize()
1621 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_share_ram_info()
1625 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1626 shared->tcm_base_address = sharedram_addr; in brcmf_pcie_init_share_ram_info()
1628 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1629 shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK); in brcmf_pcie_init_share_ram_info()
1630 brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version); in brcmf_pcie_init_share_ram_info()
1631 if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) || in brcmf_pcie_init_share_ram_info()
1632 (shared->version < BRCMF_PCIE_MIN_SHARED_VERSION)) { in brcmf_pcie_init_share_ram_info()
1634 shared->version); in brcmf_pcie_init_share_ram_info()
1635 return -EINVAL; in brcmf_pcie_init_share_ram_info()
1639 if (shared->flags & BRCMF_PCIE_SHARED_DMA_INDEX) { in brcmf_pcie_init_share_ram_info()
1640 if (shared->flags & BRCMF_PCIE_SHARED_DMA_2B_IDX) in brcmf_pcie_init_share_ram_info()
1641 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1643 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1647 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1648 if (shared->max_rxbufpost == 0) in brcmf_pcie_init_share_ram_info()
1649 shared->max_rxbufpost = BRCMF_DEF_MAX_RXBUFPOST; in brcmf_pcie_init_share_ram_info()
1652 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1655 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1658 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1661 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1664 shared->max_rxbufpost, shared->rx_dataoffset); in brcmf_pcie_init_share_ram_info()
1686 memcpy_toio(devinfo->tcm + address, randbuf, BRCMF_RANDOM_SEED_LENGTH); in brcmf_pcie_provide_random_bytes()
1693 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_download_fw_nvram()
1706 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1707 memcpy_toio(devinfo->tcm + devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1708 (void *)fw->data, fw->size); in brcmf_pcie_download_fw_nvram()
1710 resetintr = get_unaligned_le32(fw->data); in brcmf_pcie_download_fw_nvram()
1716 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1719 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1720 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1722 memcpy_toio(devinfo->tcm + address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1725 if (devinfo->fwseed) { in brcmf_pcie_download_fw_nvram()
1737 address -= sizeof(footer); in brcmf_pcie_download_fw_nvram()
1738 memcpy_toio(devinfo->tcm + address, &footer, in brcmf_pcie_download_fw_nvram()
1741 address -= rand_len; in brcmf_pcie_download_fw_nvram()
1746 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1750 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1763 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1765 loop_counter--; in brcmf_pcie_download_fw_nvram()
1769 return -ENODEV; in brcmf_pcie_download_fw_nvram()
1771 if (sharedram_addr < devinfo->ci->rambase || in brcmf_pcie_download_fw_nvram()
1772 sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) { in brcmf_pcie_download_fw_nvram()
1775 return -ENODEV; in brcmf_pcie_download_fw_nvram()
1785 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1786 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_get_resource()
1799 /* Bar-0 mapped address */ in brcmf_pcie_get_resource()
1801 /* Bar-1 mapped address */ in brcmf_pcie_get_resource()
1803 /* read Bar-1 mapped memory range */ in brcmf_pcie_get_resource()
1808 return -EINVAL; in brcmf_pcie_get_resource()
1811 devinfo->regs = ioremap(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1812 devinfo->tcm = ioremap(bar1_addr, bar1_size); in brcmf_pcie_get_resource()
1814 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1815 brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1816 devinfo->tcm); in brcmf_pcie_get_resource()
1817 return -EINVAL; in brcmf_pcie_get_resource()
1820 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1822 devinfo->tcm, (unsigned long long)bar1_addr, in brcmf_pcie_get_resource()
1831 if (devinfo->tcm) in brcmf_pcie_release_resource()
1832 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1833 if (devinfo->regs) in brcmf_pcie_release_resource()
1834 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1836 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1844 ret_addr = addr & (BRCMF_PCIE_BAR0_REG_SIZE - 1); in brcmf_pcie_buscore_prep_addr()
1845 addr &= ~(BRCMF_PCIE_BAR0_REG_SIZE - 1); in brcmf_pcie_buscore_prep_addr()
1856 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1865 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1882 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1887 if (core->rev >= 64) in brcmf_pcie_buscore_reset()
1931 /* 4-byte header and two empty strings */ in brcmf_pcie_parse_otp_sys_vendor()
1933 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1936 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1941 idx += strnlen(chip_params, size - idx) + 1; in brcmf_pcie_parse_otp_sys_vendor()
1943 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1948 idx += strnlen(board_params, size - idx); in brcmf_pcie_parse_otp_sys_vendor()
1950 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1952 /* At this point both strings are guaranteed NUL-terminated */ in brcmf_pcie_parse_otp_sys_vendor()
1953 brcmf_dbg(PCIE, "OTP: chip_params='%s' board_params='%s'\n", in brcmf_pcie_parse_otp_sys_vendor()
1963 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1967 len = end - p; in brcmf_pcie_parse_otp_sys_vendor()
1969 /* leave 1 byte for NUL in destination string */ in brcmf_pcie_parse_otp_sys_vendor()
1970 if (len > (BRCMF_OTP_MAX_PARAM_LEN - 1)) in brcmf_pcie_parse_otp_sys_vendor()
1971 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1976 strscpy(devinfo->otp.module, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1979 strscpy(devinfo->otp.vendor, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1982 strscpy(devinfo->otp.version, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1990 brcmf_dbg(PCIE, "OTP: module=%s vendor=%s version=%s\n", in brcmf_pcie_parse_otp_sys_vendor()
1991 devinfo->otp.module, devinfo->otp.vendor, in brcmf_pcie_parse_otp_sys_vendor()
1992 devinfo->otp.version); in brcmf_pcie_parse_otp_sys_vendor()
1994 if (!devinfo->otp.module[0] || in brcmf_pcie_parse_otp_sys_vendor()
1995 !devinfo->otp.vendor[0] || in brcmf_pcie_parse_otp_sys_vendor()
1996 !devinfo->otp.version[0]) in brcmf_pcie_parse_otp_sys_vendor()
1997 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1999 devinfo->otp.valid = true; in brcmf_pcie_parse_otp_sys_vendor()
2004 brcmf_pcie_parse_otp(struct brcmf_pciedev_info *devinfo, u8 *otp, size_t size) in brcmf_pcie_parse_otp() argument
2007 int ret = -EINVAL; in brcmf_pcie_parse_otp()
2011 while (p < (size - 1)) { in brcmf_pcie_parse_otp()
2012 u8 type = otp[p]; in brcmf_pcie_parse_otp()
2013 u8 length = otp[p + 1]; in brcmf_pcie_parse_otp()
2023 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): SYS_VENDOR\n", in brcmf_pcie_parse_otp()
2026 &otp[p + 2], in brcmf_pcie_parse_otp()
2030 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): BRCM_CIS\n", in brcmf_pcie_parse_otp()
2034 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): Unknown type 0x%x\n", in brcmf_pcie_parse_otp()
2047 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_read_otp()
2048 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_read_otp()
2050 u16 *otp; in brcmf_pcie_read_otp() local
2054 switch (devinfo->ci->chip) { in brcmf_pcie_read_otp()
2077 /* OTP not supported on this chip */ in brcmf_pcie_read_otp()
2081 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_read_otp()
2083 brcmf_err(bus, "No OTP core\n"); in brcmf_pcie_read_otp()
2084 return -ENODEV; in brcmf_pcie_read_otp()
2088 /* Chips with OTP accessed via ChipCommon need additional in brcmf_pcie_read_otp()
2089 * handling to access the OTP in brcmf_pcie_read_otp()
2095 /* Chip lacks OTP, try without it... */ in brcmf_pcie_read_otp()
2097 "OTP unavailable, using default firmware\n"); in brcmf_pcie_read_otp()
2101 /* Map OTP to shadow area */ in brcmf_pcie_read_otp()
2106 otp = kcalloc(words, sizeof(u16), GFP_KERNEL); in brcmf_pcie_read_otp()
2107 if (!otp) in brcmf_pcie_read_otp()
2108 return -ENOMEM; in brcmf_pcie_read_otp()
2110 /* Map bus window to SROM/OTP shadow area in core */ in brcmf_pcie_read_otp()
2111 base = brcmf_pcie_buscore_prep_addr(devinfo->pdev, base + core->base); in brcmf_pcie_read_otp()
2113 brcmf_dbg(PCIE, "OTP data:\n"); in brcmf_pcie_read_otp()
2115 otp[idx] = brcmf_pcie_read_reg16(devinfo, base + 2 * idx); in brcmf_pcie_read_otp()
2116 brcmf_dbg(PCIE, "[%8x] 0x%04x\n", base + 2 * idx, otp[idx]); in brcmf_pcie_read_otp()
2124 ret = brcmf_pcie_parse_otp(devinfo, (u8 *)otp, 2 * words); in brcmf_pcie_read_otp()
2125 kfree(otp); in brcmf_pcie_read_otp()
2131 #define BRCMF_PCIE_FW_NVRAM 1
2147 pcie_bus_dev = bus->bus_priv.pcie; in brcmf_pcie_setup()
2148 devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup()
2156 fw = fwreq->items[BRCMF_PCIE_FW_CODE].binary; in brcmf_pcie_setup()
2157 nvram = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.data; in brcmf_pcie_setup()
2158 nvram_len = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.len; in brcmf_pcie_setup()
2159 devinfo->clm_fw = fwreq->items[BRCMF_PCIE_FW_CLM].binary; in brcmf_pcie_setup()
2160 devinfo->txcap_fw = fwreq->items[BRCMF_PCIE_FW_TXCAP].binary; in brcmf_pcie_setup()
2163 ret = brcmf_chip_get_raminfo(devinfo->ci); in brcmf_pcie_setup()
2176 brcmf_pcie_adjust_ramsize(devinfo, (u8 *)fw->data, fw->size); in brcmf_pcie_setup()
2182 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
2199 bus->msgbuf->commonrings[i] = in brcmf_pcie_setup()
2200 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
2202 flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
2207 for (i = 0; i < devinfo->shared.max_flowrings; i++) in brcmf_pcie_setup()
2208 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
2209 bus->msgbuf->flowrings = flowrings; in brcmf_pcie_setup()
2211 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
2212 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
2213 bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings; in brcmf_pcie_setup()
2215 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
2217 ret = brcmf_attach(&devinfo->pdev->dev); in brcmf_pcie_setup()
2239 { ".bin", devinfo->fw_name }, in brcmf_pcie_prepare_fw_request()
2240 { ".txt", devinfo->nvram_name }, in brcmf_pcie_prepare_fw_request()
2241 { ".clm_blob", devinfo->clm_name }, in brcmf_pcie_prepare_fw_request()
2242 { ".txcap_blob", devinfo->txcap_name }, in brcmf_pcie_prepare_fw_request()
2245 fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev, in brcmf_pcie_prepare_fw_request()
2252 fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2253 fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM; in brcmf_pcie_prepare_fw_request()
2254 fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2255 fwreq->items[BRCMF_PCIE_FW_CLM].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2256 fwreq->items[BRCMF_PCIE_FW_CLM].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2257 fwreq->items[BRCMF_PCIE_FW_TXCAP].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2258 fwreq->items[BRCMF_PCIE_FW_TXCAP].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2260 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1; in brcmf_pcie_prepare_fw_request()
2261 fwreq->bus_nr = devinfo->pdev->bus->number; in brcmf_pcie_prepare_fw_request()
2264 if (devinfo->settings->board_type && in brcmf_pcie_prepare_fw_request()
2265 devinfo->settings->antenna_sku && in brcmf_pcie_prepare_fw_request()
2266 devinfo->otp.valid) { in brcmf_pcie_prepare_fw_request()
2267 const struct brcmf_otp_params *otp = &devinfo->otp; in brcmf_pcie_prepare_fw_request() local
2268 struct device *dev = &devinfo->pdev->dev; in brcmf_pcie_prepare_fw_request()
2269 const char **bt = fwreq->board_types; in brcmf_pcie_prepare_fw_request()
2272 devinfo->settings->board_type); in brcmf_pcie_prepare_fw_request()
2274 /* Example: apple,shikoku-RASP-m-6.11-X3 */ in brcmf_pcie_prepare_fw_request()
2275 bt[0] = devm_kasprintf(dev, GFP_KERNEL, "%s-%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 devinfo->settings->antenna_sku); in brcmf_pcie_prepare_fw_request()
2279 bt[1] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2280 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2281 otp->module, otp->vendor, otp->version); in brcmf_pcie_prepare_fw_request()
2282 bt[2] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2283 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2284 otp->module, otp->vendor); in brcmf_pcie_prepare_fw_request()
2285 bt[3] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s", in brcmf_pcie_prepare_fw_request()
2286 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2287 otp->module); in brcmf_pcie_prepare_fw_request()
2288 bt[4] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s", in brcmf_pcie_prepare_fw_request()
2289 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2290 devinfo->settings->antenna_sku); in brcmf_pcie_prepare_fw_request()
2291 bt[5] = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
2293 if (!bt[0] || !bt[1] || !bt[2] || !bt[3] || !bt[4]) { in brcmf_pcie_prepare_fw_request()
2298 brcmf_dbg(PCIE, "Board: %s\n", devinfo->settings->board_type); in brcmf_pcie_prepare_fw_request()
2299 fwreq->board_types[0] = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
2310 if (devinfo->console_active) { in brcmf_pcie_fwcon_timer()
2311 timer_delete_sync(&devinfo->timer); in brcmf_pcie_fwcon_timer()
2312 devinfo->console_active = false; in brcmf_pcie_fwcon_timer()
2318 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP || in brcmf_pcie_fwcon_timer()
2319 !devinfo->console_interval || !BRCMF_FWCON_ON()) in brcmf_pcie_fwcon_timer()
2322 if (!devinfo->console_active) { in brcmf_pcie_fwcon_timer()
2323 devinfo->timer.expires = jiffies + devinfo->console_interval; in brcmf_pcie_fwcon_timer()
2324 add_timer(&devinfo->timer); in brcmf_pcie_fwcon_timer()
2325 devinfo->console_active = true; in brcmf_pcie_fwcon_timer()
2328 mod_timer(&devinfo->timer, jiffies + devinfo->console_interval); in brcmf_pcie_fwcon_timer()
2338 if (!devinfo->console_active) in brcmf_pcie_fwcon()
2344 mod_timer(&devinfo->timer, jiffies + devinfo->console_interval); in brcmf_pcie_fwcon()
2351 *val = devinfo->console_interval; in brcmf_pcie_console_interval_get()
2361 return -EINVAL; in brcmf_pcie_console_interval_set()
2363 devinfo->console_interval = val; in brcmf_pcie_console_interval_set()
2365 if (!val && devinfo->console_active) in brcmf_pcie_console_interval_set()
2381 struct brcmf_pub *drvr = bus_if->drvr; in brcmf_pcie_debugfs_create()
2382 struct brcmf_pciedev *pcie_bus_dev = bus_if->bus_priv.pcie; in brcmf_pcie_debugfs_create()
2383 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_debugfs_create()
2389 devinfo->console_interval = BRCMF_CONSOLE; in brcmf_pcie_debugfs_create()
2452 pci_err(pdev, "Error could not find pci_device_id for %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2453 return -ENODEV; in brcmf_pcie_probe()
2457 brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2459 ret = -ENOMEM; in brcmf_pcie_probe()
2464 devinfo->pdev = pdev; in brcmf_pcie_probe()
2466 devinfo->ci = brcmf_chip_attach(devinfo, pdev->device, in brcmf_pcie_probe()
2468 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
2469 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
2470 devinfo->ci = NULL; in brcmf_pcie_probe()
2474 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_probe()
2475 if (core->rev >= 64) in brcmf_pcie_probe()
2476 devinfo->reginfo = &brcmf_reginfo_64; in brcmf_pcie_probe()
2478 devinfo->reginfo = &brcmf_reginfo_default; in brcmf_pcie_probe()
2482 ret = -ENOMEM; in brcmf_pcie_probe()
2486 devinfo->settings = brcmf_get_module_param(&devinfo->pdev->dev, in brcmf_pcie_probe()
2488 devinfo->ci->chip, in brcmf_pcie_probe()
2489 devinfo->ci->chiprev); in brcmf_pcie_probe()
2490 if (!devinfo->settings) { in brcmf_pcie_probe()
2491 ret = -ENOMEM; in brcmf_pcie_probe()
2494 ret = PTR_ERR_OR_ZERO(devinfo->settings); in brcmf_pcie_probe()
2500 ret = -ENOMEM; in brcmf_pcie_probe()
2503 bus->msgbuf = kzalloc(sizeof(*bus->msgbuf), GFP_KERNEL); in brcmf_pcie_probe()
2504 if (!bus->msgbuf) { in brcmf_pcie_probe()
2505 ret = -ENOMEM; in brcmf_pcie_probe()
2511 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
2512 pcie_bus_dev->bus = bus; in brcmf_pcie_probe()
2513 bus->dev = &pdev->dev; in brcmf_pcie_probe()
2514 bus->bus_priv.pcie = pcie_bus_dev; in brcmf_pcie_probe()
2515 bus->ops = &brcmf_pcie_bus_ops; in brcmf_pcie_probe()
2516 bus->proto_type = BRCMF_PROTO_MSGBUF; in brcmf_pcie_probe()
2517 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
2518 bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot); in brcmf_pcie_probe()
2519 bus->fwvid = drvdata[id->driver_data].vendor; in brcmf_pcie_probe()
2520 devinfo->fwseed = drvdata[id->driver_data].fw_seed; in brcmf_pcie_probe()
2521 dev_set_drvdata(&pdev->dev, bus); in brcmf_pcie_probe()
2523 ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings); in brcmf_pcie_probe()
2527 /* otp read operation */ in brcmf_pcie_probe()
2528 switch (bus->fwvid) { in brcmf_pcie_probe()
2533 brcmf_err(bus, "failed to parse OTP\n"); in brcmf_pcie_probe()
2544 timer_setup(&devinfo->timer, brcmf_pcie_fwcon, 0); in brcmf_pcie_probe()
2549 ret = -ENOMEM; in brcmf_pcie_probe()
2553 ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup); in brcmf_pcie_probe()
2561 brcmf_free(&devinfo->pdev->dev); in brcmf_pcie_probe()
2563 kfree(bus->msgbuf); in brcmf_pcie_probe()
2566 brcmf_err(NULL, "failed %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2568 if (devinfo->ci) in brcmf_pcie_probe()
2569 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
2570 if (devinfo->settings) in brcmf_pcie_probe()
2571 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_probe()
2586 bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_remove()
2590 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
2594 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
2595 if (devinfo->ci) in brcmf_pcie_remove()
2598 brcmf_detach(&pdev->dev); in brcmf_pcie_remove()
2599 brcmf_free(&pdev->dev); in brcmf_pcie_remove()
2601 kfree(bus->bus_priv.pcie); in brcmf_pcie_remove()
2602 kfree(bus->msgbuf->flowrings); in brcmf_pcie_remove()
2603 kfree(bus->msgbuf); in brcmf_pcie_remove()
2611 release_firmware(devinfo->clm_fw); in brcmf_pcie_remove()
2612 release_firmware(devinfo->txcap_fw); in brcmf_pcie_remove()
2614 if (devinfo->ci) in brcmf_pcie_remove()
2615 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
2616 if (devinfo->settings) in brcmf_pcie_remove()
2617 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_remove()
2620 dev_set_drvdata(&pdev->dev, NULL); in brcmf_pcie_remove()
2635 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_enter_D3()
2640 devinfo->mbdata_completed = false; in brcmf_pcie_pm_enter_D3()
2643 wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed, in brcmf_pcie_pm_enter_D3()
2645 if (!devinfo->mbdata_completed) { in brcmf_pcie_pm_enter_D3()
2648 return -EIO; in brcmf_pcie_pm_enter_D3()
2651 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_pm_enter_D3()
2667 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_leave_D3()
2671 if (brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->intmask) != 0) { in brcmf_pcie_pm_leave_D3()
2676 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_pm_leave_D3()
2686 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_pm_leave_D3()
2687 devinfo->ci = NULL; in brcmf_pcie_pm_leave_D3()
2688 pdev = devinfo->pdev; in brcmf_pcie_pm_leave_D3()