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(4377B3, "brcmfmac4377b3-pcie");
70 BRCMF_FW_CLM_DEF(4378B1, "brcmfmac4378b1-pcie");
71 BRCMF_FW_CLM_DEF(4378B3, "brcmfmac4378b3-pcie");
72 BRCMF_FW_CLM_DEF(4387C2, "brcmfmac4387c2-pcie");
75 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.txt");
76 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");
78 /* per-board firmware binaries */
79 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.bin");
80 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.clm_blob");
81 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txcap_blob");
236 #define BRCMF_RING_D2H_RING_COUNT_OFFSET 1
360 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()
674 if (!devinfo->ci) in brcmf_pcie_reset_device()
679 pci_read_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
682 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
692 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_LINK_STATUS_CTRL, in brcmf_pcie_reset_device()
695 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_reset_device()
696 if (core->rev <= 13) { in brcmf_pcie_reset_device()
723 device_wakeup_enable(&devinfo->pdev->dev); in brcmf_pcie_attach()
729 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_enter_download_state()
749 if (devinfo->ci->chip == BRCM_CC_43602_CHIP_ID) { in brcmf_pcie_exit_download_state()
750 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_INTERNAL_MEM); in brcmf_pcie_exit_download_state()
754 if (!brcmf_chip_set_active(devinfo->ci, resetintr)) in brcmf_pcie_exit_download_state()
755 return -EIO; in brcmf_pcie_exit_download_state()
769 shared = &devinfo->shared; in brcmf_pcie_send_mb_data()
770 addr = shared->htod_mb_data_addr; in brcmf_pcie_send_mb_data()
782 return -EIO; in brcmf_pcie_send_mb_data()
787 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
790 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_send_mb_data()
791 if (core->rev <= 13) in brcmf_pcie_send_mb_data()
792 pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1); in brcmf_pcie_send_mb_data()
804 shared = &devinfo->shared; in brcmf_pcie_handle_mb_data()
805 addr = shared->dtoh_mb_data_addr; in brcmf_pcie_handle_mb_data()
823 devinfo->mbdata_completed = true; in brcmf_pcie_handle_mb_data()
824 wake_up(&devinfo->mbdata_resp_wait); in brcmf_pcie_handle_mb_data()
828 brcmf_fw_crashed(&devinfo->pdev->dev); in brcmf_pcie_handle_mb_data()
839 shared = &devinfo->shared; in brcmf_pcie_bus_console_init()
840 console = &shared->console; in brcmf_pcie_bus_console_init()
841 addr = shared->tcm_base_address + BRCMF_SHARED_CONSOLE_ADDR_OFFSET; in brcmf_pcie_bus_console_init()
842 console->base_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
844 addr = console->base_addr + BRCMF_CONSOLE_BUFADDR_OFFSET; in brcmf_pcie_bus_console_init()
845 console->buf_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
846 addr = console->base_addr + BRCMF_CONSOLE_BUFSIZE_OFFSET; in brcmf_pcie_bus_console_init()
847 console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_bus_console_init()
850 console->base_addr, console->buf_addr, console->bufsize); in brcmf_pcie_bus_console_init()
854 * brcmf_pcie_bus_console_read - reads firmware messages
862 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_bus_console_read()
863 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_bus_console_read()
872 console = &devinfo->shared.console; in brcmf_pcie_bus_console_read()
873 if (!console->base_addr) in brcmf_pcie_bus_console_read()
875 addr = console->base_addr + BRCMF_CONSOLE_WRITEIDX_OFFSET; in brcmf_pcie_bus_console_read()
877 while (newidx != console->read_idx) { in brcmf_pcie_bus_console_read()
878 addr = console->buf_addr + console->read_idx; in brcmf_pcie_bus_console_read()
880 console->read_idx++; in brcmf_pcie_bus_console_read()
881 if (console->read_idx == console->bufsize) in brcmf_pcie_bus_console_read()
882 console->read_idx = 0; in brcmf_pcie_bus_console_read()
885 console->log_str[console->log_idx] = ch; in brcmf_pcie_bus_console_read()
886 console->log_idx++; in brcmf_pcie_bus_console_read()
888 (console->log_idx == (sizeof(console->log_str) - 2))) { in brcmf_pcie_bus_console_read()
890 console->log_str[console->log_idx] = ch; in brcmf_pcie_bus_console_read()
891 console->log_idx++; in brcmf_pcie_bus_console_read()
894 console->log_str[console->log_idx] = 0; in brcmf_pcie_bus_console_read()
897 console->log_str); in brcmf_pcie_bus_console_read()
899 pr_debug("CONSOLE: %s", console->log_str); in brcmf_pcie_bus_console_read()
900 console->log_idx = 0; in brcmf_pcie_bus_console_read()
908 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxmask, 0); in brcmf_pcie_intr_disable()
914 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxmask, in brcmf_pcie_intr_enable()
915 devinfo->reginfo->int_d2h_db | in brcmf_pcie_intr_enable()
916 devinfo->reginfo->int_fn0); in brcmf_pcie_intr_enable()
921 if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1) in brcmf_pcie_hostready()
923 devinfo->reginfo->h2d_mailbox_1, 1); in brcmf_pcie_hostready()
930 if (brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint)) { in brcmf_pcie_quick_check_isr()
944 devinfo->in_irq = true; in brcmf_pcie_isr_thread()
945 status = brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint); in brcmf_pcie_isr_thread()
948 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxint, in brcmf_pcie_isr_thread()
950 if (status & devinfo->reginfo->int_fn0) in brcmf_pcie_isr_thread()
952 if (status & devinfo->reginfo->int_d2h_db) { in brcmf_pcie_isr_thread()
953 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
955 &devinfo->pdev->dev); in brcmf_pcie_isr_thread()
959 if (devinfo->state == BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_isr_thread()
961 devinfo->in_irq = false; in brcmf_pcie_isr_thread()
968 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_request_irq()
969 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_request_irq()
976 if (request_threaded_irq(pdev->irq, brcmf_pcie_quick_check_isr, in brcmf_pcie_request_irq()
980 brcmf_err(bus, "Failed to request IRQ %d\n", pdev->irq); in brcmf_pcie_request_irq()
981 return -EIO; in brcmf_pcie_request_irq()
983 devinfo->irq_allocated = true; in brcmf_pcie_request_irq()
990 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_release_irq()
991 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_release_irq()
995 if (!devinfo->irq_allocated) in brcmf_pcie_release_irq()
999 free_irq(pdev->irq, devinfo); in brcmf_pcie_release_irq()
1004 while ((devinfo->in_irq) && (count < 20)) { in brcmf_pcie_release_irq()
1008 if (devinfo->in_irq) in brcmf_pcie_release_irq()
1011 status = brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->mailboxint); in brcmf_pcie_release_irq()
1012 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->mailboxint, status); in brcmf_pcie_release_irq()
1014 devinfo->irq_allocated = false; in brcmf_pcie_release_irq()
1021 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_rptr()
1022 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_write_rptr()
1024 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_rptr()
1025 return -EIO; in brcmf_pcie_ring_mb_write_rptr()
1027 brcmf_dbg(PCIE, "W r_ptr %d (%d), ring %d\n", commonring->r_ptr, in brcmf_pcie_ring_mb_write_rptr()
1028 commonring->w_ptr, ring->id); in brcmf_pcie_ring_mb_write_rptr()
1030 devinfo->write_ptr(devinfo, ring->r_idx_addr, commonring->r_ptr); in brcmf_pcie_ring_mb_write_rptr()
1039 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_write_wptr()
1040 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_write_wptr()
1042 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_write_wptr()
1043 return -EIO; in brcmf_pcie_ring_mb_write_wptr()
1045 brcmf_dbg(PCIE, "W w_ptr %d (%d), ring %d\n", commonring->w_ptr, in brcmf_pcie_ring_mb_write_wptr()
1046 commonring->r_ptr, ring->id); in brcmf_pcie_ring_mb_write_wptr()
1048 devinfo->write_ptr(devinfo, ring->w_idx_addr, commonring->w_ptr); in brcmf_pcie_ring_mb_write_wptr()
1057 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_ring_bell()
1059 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_ring_bell()
1060 return -EIO; in brcmf_pcie_ring_mb_ring_bell()
1063 /* Any arbitrary value will do, lets use 1 */ in brcmf_pcie_ring_mb_ring_bell()
1064 brcmf_pcie_write_reg32(devinfo, devinfo->reginfo->h2d_mailbox_0, 1); in brcmf_pcie_ring_mb_ring_bell()
1073 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_rptr()
1074 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_update_rptr()
1076 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_rptr()
1077 return -EIO; in brcmf_pcie_ring_mb_update_rptr()
1079 commonring->r_ptr = devinfo->read_ptr(devinfo, ring->r_idx_addr); in brcmf_pcie_ring_mb_update_rptr()
1081 brcmf_dbg(PCIE, "R r_ptr %d (%d), ring %d\n", commonring->r_ptr, in brcmf_pcie_ring_mb_update_rptr()
1082 commonring->w_ptr, ring->id); in brcmf_pcie_ring_mb_update_rptr()
1091 struct brcmf_pciedev_info *devinfo = ring->devinfo; in brcmf_pcie_ring_mb_update_wptr()
1092 struct brcmf_commonring *commonring = &ring->commonring; in brcmf_pcie_ring_mb_update_wptr()
1094 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP) in brcmf_pcie_ring_mb_update_wptr()
1095 return -EIO; in brcmf_pcie_ring_mb_update_wptr()
1097 commonring->w_ptr = devinfo->read_ptr(devinfo, ring->w_idx_addr); in brcmf_pcie_ring_mb_update_wptr()
1099 brcmf_dbg(PCIE, "R w_ptr %d (%d), ring %d\n", commonring->w_ptr, in brcmf_pcie_ring_mb_update_wptr()
1100 commonring->r_ptr, ring->id); in brcmf_pcie_ring_mb_update_wptr()
1114 ring = dma_alloc_coherent(&devinfo->pdev->dev, size, dma_handle, in brcmf_pcie_init_dmabuffer_for_device()
1139 if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7) in brcmf_pcie_alloc_dma_and_ring()
1158 dma_free_coherent(&devinfo->pdev->dev, size, dma_buf, in brcmf_pcie_alloc_dma_and_ring()
1162 brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id], in brcmf_pcie_alloc_dma_and_ring()
1164 ring->dma_handle = dma_handle; in brcmf_pcie_alloc_dma_and_ring()
1165 ring->devinfo = devinfo; in brcmf_pcie_alloc_dma_and_ring()
1166 brcmf_commonring_register_cb(&ring->commonring, in brcmf_pcie_alloc_dma_and_ring()
1186 dma_buf = ring->commonring.buf_addr; in brcmf_pcie_release_ringbuffer()
1188 size = ring->commonring.depth * ring->commonring.item_len; in brcmf_pcie_release_ringbuffer()
1189 dma_free_coherent(dev, size, dma_buf, ring->dma_handle); in brcmf_pcie_release_ringbuffer()
1200 brcmf_pcie_release_ringbuffer(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1201 devinfo->shared.commonrings[i]); in brcmf_pcie_release_ringbuffers()
1202 devinfo->shared.commonrings[i] = NULL; in brcmf_pcie_release_ringbuffers()
1204 kfree(devinfo->shared.flowrings); in brcmf_pcie_release_ringbuffers()
1205 devinfo->shared.flowrings = NULL; in brcmf_pcie_release_ringbuffers()
1206 if (devinfo->idxbuf) { in brcmf_pcie_release_ringbuffers()
1207 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_ringbuffers()
1208 devinfo->idxbuf_sz, in brcmf_pcie_release_ringbuffers()
1209 devinfo->idxbuf, in brcmf_pcie_release_ringbuffers()
1210 devinfo->idxbuf_dmahandle); in brcmf_pcie_release_ringbuffers()
1211 devinfo->idxbuf = NULL; in brcmf_pcie_release_ringbuffers()
1218 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_ringbuffers()
1235 memcpy_fromio(&ringinfo, devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1237 if (devinfo->shared.version >= 6) { in brcmf_pcie_init_ringbuffers()
1243 max_flowrings = max_submissionrings - in brcmf_pcie_init_ringbuffers()
1249 return -EIO; in brcmf_pcie_init_ringbuffers()
1252 if (devinfo->dma_idx_sz != 0) { in brcmf_pcie_init_ringbuffers()
1254 devinfo->dma_idx_sz * 2; in brcmf_pcie_init_ringbuffers()
1255 devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz, in brcmf_pcie_init_ringbuffers()
1256 &devinfo->idxbuf_dmahandle, in brcmf_pcie_init_ringbuffers()
1258 if (!devinfo->idxbuf) in brcmf_pcie_init_ringbuffers()
1259 devinfo->dma_idx_sz = 0; in brcmf_pcie_init_ringbuffers()
1262 if (devinfo->dma_idx_sz == 0) { in brcmf_pcie_init_ringbuffers()
1268 devinfo->write_ptr = brcmf_pcie_write_tcm16; in brcmf_pcie_init_ringbuffers()
1269 devinfo->read_ptr = brcmf_pcie_read_tcm16; in brcmf_pcie_init_ringbuffers()
1272 memset(devinfo->idxbuf, 0, bufsz); in brcmf_pcie_init_ringbuffers()
1273 devinfo->idxbuf_sz = bufsz; in brcmf_pcie_init_ringbuffers()
1274 idx_offset = devinfo->dma_idx_sz; in brcmf_pcie_init_ringbuffers()
1275 devinfo->write_ptr = brcmf_pcie_write_idx; in brcmf_pcie_init_ringbuffers()
1276 devinfo->read_ptr = brcmf_pcie_read_idx; in brcmf_pcie_init_ringbuffers()
1279 address = (u64)devinfo->idxbuf_dmahandle; in brcmf_pcie_init_ringbuffers()
1309 memcpy_toio(devinfo->tcm + devinfo->shared.ring_info_addr, in brcmf_pcie_init_ringbuffers()
1320 ring->w_idx_addr = h2d_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1321 ring->r_idx_addr = h2d_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1322 ring->id = i; in brcmf_pcie_init_ringbuffers()
1323 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1335 ring->w_idx_addr = d2h_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1336 ring->r_idx_addr = d2h_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1337 ring->id = i; in brcmf_pcie_init_ringbuffers()
1338 devinfo->shared.commonrings[i] = ring; in brcmf_pcie_init_ringbuffers()
1345 devinfo->shared.max_flowrings = max_flowrings; in brcmf_pcie_init_ringbuffers()
1346 devinfo->shared.max_submissionrings = max_submissionrings; in brcmf_pcie_init_ringbuffers()
1347 devinfo->shared.max_completionrings = max_completionrings; in brcmf_pcie_init_ringbuffers()
1356 ring->devinfo = devinfo; in brcmf_pcie_init_ringbuffers()
1357 ring->id = i + BRCMF_H2D_MSGRING_FLOWRING_IDSTART; in brcmf_pcie_init_ringbuffers()
1358 brcmf_commonring_register_cb(&ring->commonring, in brcmf_pcie_init_ringbuffers()
1365 ring->w_idx_addr = h2d_w_idx_ptr; in brcmf_pcie_init_ringbuffers()
1366 ring->r_idx_addr = h2d_r_idx_ptr; in brcmf_pcie_init_ringbuffers()
1370 devinfo->shared.flowrings = rings; in brcmf_pcie_init_ringbuffers()
1377 return -ENOMEM; in brcmf_pcie_init_ringbuffers()
1384 if (devinfo->shared.scratch) in brcmf_pcie_release_scratchbuffers()
1385 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1387 devinfo->shared.scratch, in brcmf_pcie_release_scratchbuffers()
1388 devinfo->shared.scratch_dmahandle); in brcmf_pcie_release_scratchbuffers()
1389 if (devinfo->shared.ringupd) in brcmf_pcie_release_scratchbuffers()
1390 dma_free_coherent(&devinfo->pdev->dev, in brcmf_pcie_release_scratchbuffers()
1392 devinfo->shared.ringupd, in brcmf_pcie_release_scratchbuffers()
1393 devinfo->shared.ringupd_dmahandle); in brcmf_pcie_release_scratchbuffers()
1398 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_scratchbuffers()
1402 devinfo->shared.scratch = in brcmf_pcie_init_scratchbuffers()
1403 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1405 &devinfo->shared.scratch_dmahandle, in brcmf_pcie_init_scratchbuffers()
1407 if (!devinfo->shared.scratch) in brcmf_pcie_init_scratchbuffers()
1410 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1412 address = (u64)devinfo->shared.scratch_dmahandle; in brcmf_pcie_init_scratchbuffers()
1415 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1419 devinfo->shared.ringupd = in brcmf_pcie_init_scratchbuffers()
1420 dma_alloc_coherent(&devinfo->pdev->dev, in brcmf_pcie_init_scratchbuffers()
1422 &devinfo->shared.ringupd_dmahandle, in brcmf_pcie_init_scratchbuffers()
1424 if (!devinfo->shared.ringupd) in brcmf_pcie_init_scratchbuffers()
1427 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1429 address = (u64)devinfo->shared.ringupd_dmahandle; in brcmf_pcie_init_scratchbuffers()
1432 addr = devinfo->shared.tcm_base_address + in brcmf_pcie_init_scratchbuffers()
1440 return -ENOMEM; in brcmf_pcie_init_scratchbuffers()
1447 struct brcmf_pciedev *pcie_bus_dev = bus_if->bus_priv.pcie; in brcmf_pcie_down()
1448 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_down()
1456 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_preinit()
1460 brcmf_pcie_intr_enable(buspub->devinfo); in brcmf_pcie_preinit()
1461 brcmf_pcie_hostready(buspub->devinfo); in brcmf_pcie_preinit()
1489 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_wowl_config()
1490 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_wowl_config()
1493 devinfo->wowl_enabled = enabled; in brcmf_pcie_wowl_config()
1500 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_ramsize()
1501 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_ramsize()
1503 return devinfo->ci->ramsize - devinfo->ci->srsize; in brcmf_pcie_get_ramsize()
1510 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_memdump()
1511 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_memdump()
1513 brcmf_dbg(PCIE, "dump at 0x%08X: len=%zu\n", devinfo->ci->rambase, len); in brcmf_pcie_get_memdump()
1514 brcmf_pcie_copy_dev_tomem(devinfo, devinfo->ci->rambase, data, len); in brcmf_pcie_get_memdump()
1522 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_get_blob()
1523 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_get_blob()
1527 *fw = devinfo->clm_fw; in brcmf_pcie_get_blob()
1528 devinfo->clm_fw = NULL; in brcmf_pcie_get_blob()
1531 *fw = devinfo->txcap_fw; in brcmf_pcie_get_blob()
1532 devinfo->txcap_fw = NULL; in brcmf_pcie_get_blob()
1535 return -ENOENT; in brcmf_pcie_get_blob()
1539 return -ENOENT; in brcmf_pcie_get_blob()
1547 struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; in brcmf_pcie_reset()
1548 struct brcmf_pciedev_info *devinfo = buspub->devinfo; in brcmf_pcie_reset()
1566 return -ENOMEM; in brcmf_pcie_reset()
1611 devinfo->ci->ramsize = newsize; in brcmf_pcie_adjust_ramsize()
1619 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_init_share_ram_info()
1623 shared = &devinfo->shared; in brcmf_pcie_init_share_ram_info()
1624 shared->tcm_base_address = sharedram_addr; in brcmf_pcie_init_share_ram_info()
1626 shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr); in brcmf_pcie_init_share_ram_info()
1627 shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK); in brcmf_pcie_init_share_ram_info()
1628 brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version); in brcmf_pcie_init_share_ram_info()
1629 if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) || in brcmf_pcie_init_share_ram_info()
1630 (shared->version < BRCMF_PCIE_MIN_SHARED_VERSION)) { in brcmf_pcie_init_share_ram_info()
1632 shared->version); in brcmf_pcie_init_share_ram_info()
1633 return -EINVAL; in brcmf_pcie_init_share_ram_info()
1637 if (shared->flags & BRCMF_PCIE_SHARED_DMA_INDEX) { in brcmf_pcie_init_share_ram_info()
1638 if (shared->flags & BRCMF_PCIE_SHARED_DMA_2B_IDX) in brcmf_pcie_init_share_ram_info()
1639 devinfo->dma_idx_sz = sizeof(u16); in brcmf_pcie_init_share_ram_info()
1641 devinfo->dma_idx_sz = sizeof(u32); in brcmf_pcie_init_share_ram_info()
1645 shared->max_rxbufpost = brcmf_pcie_read_tcm16(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1646 if (shared->max_rxbufpost == 0) in brcmf_pcie_init_share_ram_info()
1647 shared->max_rxbufpost = BRCMF_DEF_MAX_RXBUFPOST; in brcmf_pcie_init_share_ram_info()
1650 shared->rx_dataoffset = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1653 shared->htod_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1656 shared->dtoh_mb_data_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1659 shared->ring_info_addr = brcmf_pcie_read_tcm32(devinfo, addr); in brcmf_pcie_init_share_ram_info()
1662 shared->max_rxbufpost, shared->rx_dataoffset); in brcmf_pcie_init_share_ram_info()
1682 struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev); in brcmf_pcie_download_fw_nvram()
1695 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); in brcmf_pcie_download_fw_nvram()
1696 memcpy_toio(devinfo->tcm + devinfo->ci->rambase, in brcmf_pcie_download_fw_nvram()
1697 (void *)fw->data, fw->size); in brcmf_pcie_download_fw_nvram()
1699 resetintr = get_unaligned_le32(fw->data); in brcmf_pcie_download_fw_nvram()
1705 brcmf_pcie_write_ram32(devinfo, devinfo->ci->ramsize - 4, 0); in brcmf_pcie_download_fw_nvram()
1708 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1709 address = devinfo->ci->rambase + devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1711 memcpy_toio(devinfo->tcm + address, nvram, nvram_len); in brcmf_pcie_download_fw_nvram()
1714 if (devinfo->otp.valid) { in brcmf_pcie_download_fw_nvram()
1727 address -= sizeof(footer); in brcmf_pcie_download_fw_nvram()
1728 memcpy_toio(devinfo->tcm + address, &footer, in brcmf_pcie_download_fw_nvram()
1731 address -= rand_len; in brcmf_pcie_download_fw_nvram()
1734 memcpy_toio(devinfo->tcm + address, randbuf, rand_len); in brcmf_pcie_download_fw_nvram()
1739 devinfo->nvram_name); in brcmf_pcie_download_fw_nvram()
1743 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1756 devinfo->ci->ramsize - in brcmf_pcie_download_fw_nvram()
1758 loop_counter--; in brcmf_pcie_download_fw_nvram()
1762 return -ENODEV; in brcmf_pcie_download_fw_nvram()
1764 if (sharedram_addr < devinfo->ci->rambase || in brcmf_pcie_download_fw_nvram()
1765 sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) { in brcmf_pcie_download_fw_nvram()
1768 return -ENODEV; in brcmf_pcie_download_fw_nvram()
1778 struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_get_resource()
1779 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_get_resource()
1792 /* Bar-0 mapped address */ in brcmf_pcie_get_resource()
1794 /* Bar-1 mapped address */ in brcmf_pcie_get_resource()
1796 /* read Bar-1 mapped memory range */ in brcmf_pcie_get_resource()
1801 return -EINVAL; in brcmf_pcie_get_resource()
1804 devinfo->regs = ioremap(bar0_addr, BRCMF_PCIE_REG_MAP_SIZE); in brcmf_pcie_get_resource()
1805 devinfo->tcm = ioremap(bar1_addr, bar1_size); in brcmf_pcie_get_resource()
1807 if (!devinfo->regs || !devinfo->tcm) { in brcmf_pcie_get_resource()
1808 brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs, in brcmf_pcie_get_resource()
1809 devinfo->tcm); in brcmf_pcie_get_resource()
1810 return -EINVAL; in brcmf_pcie_get_resource()
1813 devinfo->regs, (unsigned long long)bar0_addr); in brcmf_pcie_get_resource()
1815 devinfo->tcm, (unsigned long long)bar1_addr, in brcmf_pcie_get_resource()
1824 if (devinfo->tcm) in brcmf_pcie_release_resource()
1825 iounmap(devinfo->tcm); in brcmf_pcie_release_resource()
1826 if (devinfo->regs) in brcmf_pcie_release_resource()
1827 iounmap(devinfo->regs); in brcmf_pcie_release_resource()
1829 pci_disable_device(devinfo->pdev); in brcmf_pcie_release_resource()
1837 ret_addr = addr & (BRCMF_PCIE_BAR0_REG_SIZE - 1); in brcmf_pcie_buscore_prep_addr()
1838 addr &= ~(BRCMF_PCIE_BAR0_REG_SIZE - 1); in brcmf_pcie_buscore_prep_addr()
1849 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_read32()
1858 addr = brcmf_pcie_buscore_prep_addr(devinfo->pdev, addr); in brcmf_pcie_buscore_write32()
1875 devinfo->ci = chip; in brcmf_pcie_buscore_reset()
1880 if (core->rev >= 64) in brcmf_pcie_buscore_reset()
1924 /* 4-byte header and two empty strings */ in brcmf_pcie_parse_otp_sys_vendor()
1926 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1929 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1934 idx += strnlen(chip_params, size - idx) + 1; in brcmf_pcie_parse_otp_sys_vendor()
1936 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1941 idx += strnlen(board_params, size - idx); in brcmf_pcie_parse_otp_sys_vendor()
1943 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1945 /* At this point both strings are guaranteed NUL-terminated */ in brcmf_pcie_parse_otp_sys_vendor()
1946 brcmf_dbg(PCIE, "OTP: chip_params='%s' board_params='%s'\n", in brcmf_pcie_parse_otp_sys_vendor()
1956 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1960 len = end - p; in brcmf_pcie_parse_otp_sys_vendor()
1962 /* leave 1 byte for NUL in destination string */ in brcmf_pcie_parse_otp_sys_vendor()
1963 if (len > (BRCMF_OTP_MAX_PARAM_LEN - 1)) in brcmf_pcie_parse_otp_sys_vendor()
1964 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1969 strscpy(devinfo->otp.module, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1972 strscpy(devinfo->otp.vendor, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1975 strscpy(devinfo->otp.version, p, len + 1); in brcmf_pcie_parse_otp_sys_vendor()
1983 brcmf_dbg(PCIE, "OTP: module=%s vendor=%s version=%s\n", in brcmf_pcie_parse_otp_sys_vendor()
1984 devinfo->otp.module, devinfo->otp.vendor, in brcmf_pcie_parse_otp_sys_vendor()
1985 devinfo->otp.version); in brcmf_pcie_parse_otp_sys_vendor()
1987 if (!devinfo->otp.module[0] || in brcmf_pcie_parse_otp_sys_vendor()
1988 !devinfo->otp.vendor[0] || in brcmf_pcie_parse_otp_sys_vendor()
1989 !devinfo->otp.version[0]) in brcmf_pcie_parse_otp_sys_vendor()
1990 return -EINVAL; in brcmf_pcie_parse_otp_sys_vendor()
1992 devinfo->otp.valid = true; in brcmf_pcie_parse_otp_sys_vendor()
1997 brcmf_pcie_parse_otp(struct brcmf_pciedev_info *devinfo, u8 *otp, size_t size) in brcmf_pcie_parse_otp() argument
2000 int ret = -EINVAL; in brcmf_pcie_parse_otp()
2004 while (p < (size - 1)) { in brcmf_pcie_parse_otp()
2005 u8 type = otp[p]; in brcmf_pcie_parse_otp()
2006 u8 length = otp[p + 1]; in brcmf_pcie_parse_otp()
2016 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): SYS_VENDOR\n", in brcmf_pcie_parse_otp()
2019 &otp[p + 2], in brcmf_pcie_parse_otp()
2023 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): BRCM_CIS\n", in brcmf_pcie_parse_otp()
2027 brcmf_dbg(PCIE, "OTP @ 0x%x (%d): Unknown type 0x%x\n", in brcmf_pcie_parse_otp()
2040 const struct pci_dev *pdev = devinfo->pdev; in brcmf_pcie_read_otp()
2041 struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_read_otp()
2043 u16 *otp; in brcmf_pcie_read_otp() local
2047 switch (devinfo->ci->chip) { in brcmf_pcie_read_otp()
2070 /* OTP not supported on this chip */ in brcmf_pcie_read_otp()
2074 core = brcmf_chip_get_core(devinfo->ci, coreid); in brcmf_pcie_read_otp()
2076 brcmf_err(bus, "No OTP core\n"); in brcmf_pcie_read_otp()
2077 return -ENODEV; in brcmf_pcie_read_otp()
2081 /* Chips with OTP accessed via ChipCommon need additional in brcmf_pcie_read_otp()
2082 * handling to access the OTP in brcmf_pcie_read_otp()
2088 /* Chip lacks OTP, try without it... */ in brcmf_pcie_read_otp()
2090 "OTP unavailable, using default firmware\n"); in brcmf_pcie_read_otp()
2094 /* Map OTP to shadow area */ in brcmf_pcie_read_otp()
2099 otp = kcalloc(words, sizeof(u16), GFP_KERNEL); in brcmf_pcie_read_otp()
2100 if (!otp) in brcmf_pcie_read_otp()
2101 return -ENOMEM; in brcmf_pcie_read_otp()
2103 /* Map bus window to SROM/OTP shadow area in core */ in brcmf_pcie_read_otp()
2104 base = brcmf_pcie_buscore_prep_addr(devinfo->pdev, base + core->base); in brcmf_pcie_read_otp()
2106 brcmf_dbg(PCIE, "OTP data:\n"); in brcmf_pcie_read_otp()
2108 otp[idx] = brcmf_pcie_read_reg16(devinfo, base + 2 * idx); in brcmf_pcie_read_otp()
2109 brcmf_dbg(PCIE, "[%8x] 0x%04x\n", base + 2 * idx, otp[idx]); in brcmf_pcie_read_otp()
2117 ret = brcmf_pcie_parse_otp(devinfo, (u8 *)otp, 2 * words); in brcmf_pcie_read_otp()
2118 kfree(otp); in brcmf_pcie_read_otp()
2124 #define BRCMF_PCIE_FW_NVRAM 1
2140 pcie_bus_dev = bus->bus_priv.pcie; in brcmf_pcie_setup()
2141 devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_setup()
2149 fw = fwreq->items[BRCMF_PCIE_FW_CODE].binary; in brcmf_pcie_setup()
2150 nvram = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.data; in brcmf_pcie_setup()
2151 nvram_len = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.len; in brcmf_pcie_setup()
2152 devinfo->clm_fw = fwreq->items[BRCMF_PCIE_FW_CLM].binary; in brcmf_pcie_setup()
2153 devinfo->txcap_fw = fwreq->items[BRCMF_PCIE_FW_TXCAP].binary; in brcmf_pcie_setup()
2156 ret = brcmf_chip_get_raminfo(devinfo->ci); in brcmf_pcie_setup()
2169 brcmf_pcie_adjust_ramsize(devinfo, (u8 *)fw->data, fw->size); in brcmf_pcie_setup()
2175 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_setup()
2192 bus->msgbuf->commonrings[i] = in brcmf_pcie_setup()
2193 &devinfo->shared.commonrings[i]->commonring; in brcmf_pcie_setup()
2195 flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings), in brcmf_pcie_setup()
2200 for (i = 0; i < devinfo->shared.max_flowrings; i++) in brcmf_pcie_setup()
2201 flowrings[i] = &devinfo->shared.flowrings[i].commonring; in brcmf_pcie_setup()
2202 bus->msgbuf->flowrings = flowrings; in brcmf_pcie_setup()
2204 bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset; in brcmf_pcie_setup()
2205 bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost; in brcmf_pcie_setup()
2206 bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings; in brcmf_pcie_setup()
2208 init_waitqueue_head(&devinfo->mbdata_resp_wait); in brcmf_pcie_setup()
2210 ret = brcmf_attach(&devinfo->pdev->dev); in brcmf_pcie_setup()
2232 { ".bin", devinfo->fw_name }, in brcmf_pcie_prepare_fw_request()
2233 { ".txt", devinfo->nvram_name }, in brcmf_pcie_prepare_fw_request()
2234 { ".clm_blob", devinfo->clm_name }, in brcmf_pcie_prepare_fw_request()
2235 { ".txcap_blob", devinfo->txcap_name }, in brcmf_pcie_prepare_fw_request()
2238 fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev, in brcmf_pcie_prepare_fw_request()
2245 fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2246 fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM; in brcmf_pcie_prepare_fw_request()
2247 fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2248 fwreq->items[BRCMF_PCIE_FW_CLM].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2249 fwreq->items[BRCMF_PCIE_FW_CLM].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2250 fwreq->items[BRCMF_PCIE_FW_TXCAP].type = BRCMF_FW_TYPE_BINARY; in brcmf_pcie_prepare_fw_request()
2251 fwreq->items[BRCMF_PCIE_FW_TXCAP].flags = BRCMF_FW_REQF_OPTIONAL; in brcmf_pcie_prepare_fw_request()
2253 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1; in brcmf_pcie_prepare_fw_request()
2254 fwreq->bus_nr = devinfo->pdev->bus->number; in brcmf_pcie_prepare_fw_request()
2257 if (devinfo->settings->board_type && in brcmf_pcie_prepare_fw_request()
2258 devinfo->settings->antenna_sku && in brcmf_pcie_prepare_fw_request()
2259 devinfo->otp.valid) { in brcmf_pcie_prepare_fw_request()
2260 const struct brcmf_otp_params *otp = &devinfo->otp; in brcmf_pcie_prepare_fw_request() local
2261 struct device *dev = &devinfo->pdev->dev; in brcmf_pcie_prepare_fw_request()
2262 const char **bt = fwreq->board_types; in brcmf_pcie_prepare_fw_request()
2265 devinfo->settings->board_type); in brcmf_pcie_prepare_fw_request()
2267 /* Example: apple,shikoku-RASP-m-6.11-X3 */ in brcmf_pcie_prepare_fw_request()
2268 bt[0] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2269 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2270 otp->module, otp->vendor, otp->version, in brcmf_pcie_prepare_fw_request()
2271 devinfo->settings->antenna_sku); in brcmf_pcie_prepare_fw_request()
2272 bt[1] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s", in brcmf_pcie_prepare_fw_request()
2273 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2274 otp->module, otp->vendor, otp->version); in brcmf_pcie_prepare_fw_request()
2275 bt[2] = devm_kasprintf(dev, GFP_KERNEL, "%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); in brcmf_pcie_prepare_fw_request()
2278 bt[3] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s", in brcmf_pcie_prepare_fw_request()
2279 devinfo->settings->board_type, in brcmf_pcie_prepare_fw_request()
2280 otp->module); in brcmf_pcie_prepare_fw_request()
2281 bt[4] = 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 devinfo->settings->antenna_sku); in brcmf_pcie_prepare_fw_request()
2284 bt[5] = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
2286 if (!bt[0] || !bt[1] || !bt[2] || !bt[3] || !bt[4]) { in brcmf_pcie_prepare_fw_request()
2291 brcmf_dbg(PCIE, "Board: %s\n", devinfo->settings->board_type); in brcmf_pcie_prepare_fw_request()
2292 fwreq->board_types[0] = devinfo->settings->board_type; in brcmf_pcie_prepare_fw_request()
2303 if (devinfo->console_active) { in brcmf_pcie_fwcon_timer()
2304 del_timer_sync(&devinfo->timer); in brcmf_pcie_fwcon_timer()
2305 devinfo->console_active = false; in brcmf_pcie_fwcon_timer()
2311 if (devinfo->state != BRCMFMAC_PCIE_STATE_UP || in brcmf_pcie_fwcon_timer()
2312 !devinfo->console_interval || !BRCMF_FWCON_ON()) in brcmf_pcie_fwcon_timer()
2315 if (!devinfo->console_active) { in brcmf_pcie_fwcon_timer()
2316 devinfo->timer.expires = jiffies + devinfo->console_interval; in brcmf_pcie_fwcon_timer()
2317 add_timer(&devinfo->timer); in brcmf_pcie_fwcon_timer()
2318 devinfo->console_active = true; in brcmf_pcie_fwcon_timer()
2321 mod_timer(&devinfo->timer, jiffies + devinfo->console_interval); in brcmf_pcie_fwcon_timer()
2330 if (!devinfo->console_active) in brcmf_pcie_fwcon()
2336 mod_timer(&devinfo->timer, jiffies + devinfo->console_interval); in brcmf_pcie_fwcon()
2343 *val = devinfo->console_interval; in brcmf_pcie_console_interval_get()
2353 return -EINVAL; in brcmf_pcie_console_interval_set()
2355 devinfo->console_interval = val; in brcmf_pcie_console_interval_set()
2357 if (!val && devinfo->console_active) in brcmf_pcie_console_interval_set()
2373 struct brcmf_pub *drvr = bus_if->drvr; in brcmf_pcie_debugfs_create()
2374 struct brcmf_pciedev *pcie_bus_dev = bus_if->bus_priv.pcie; in brcmf_pcie_debugfs_create()
2375 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; in brcmf_pcie_debugfs_create()
2381 devinfo->console_interval = BRCMF_CONSOLE; in brcmf_pcie_debugfs_create()
2413 pci_err(pdev, "Error could not find pci_device_id for %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2414 return -ENODEV; in brcmf_pcie_probe()
2418 brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2420 ret = -ENOMEM; in brcmf_pcie_probe()
2425 devinfo->pdev = pdev; in brcmf_pcie_probe()
2427 devinfo->ci = brcmf_chip_attach(devinfo, pdev->device, in brcmf_pcie_probe()
2429 if (IS_ERR(devinfo->ci)) { in brcmf_pcie_probe()
2430 ret = PTR_ERR(devinfo->ci); in brcmf_pcie_probe()
2431 devinfo->ci = NULL; in brcmf_pcie_probe()
2435 core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2); in brcmf_pcie_probe()
2436 if (core->rev >= 64) in brcmf_pcie_probe()
2437 devinfo->reginfo = &brcmf_reginfo_64; in brcmf_pcie_probe()
2439 devinfo->reginfo = &brcmf_reginfo_default; in brcmf_pcie_probe()
2443 ret = -ENOMEM; in brcmf_pcie_probe()
2447 devinfo->settings = brcmf_get_module_param(&devinfo->pdev->dev, in brcmf_pcie_probe()
2449 devinfo->ci->chip, in brcmf_pcie_probe()
2450 devinfo->ci->chiprev); in brcmf_pcie_probe()
2451 if (!devinfo->settings) { in brcmf_pcie_probe()
2452 ret = -ENOMEM; in brcmf_pcie_probe()
2458 ret = -ENOMEM; in brcmf_pcie_probe()
2461 bus->msgbuf = kzalloc(sizeof(*bus->msgbuf), GFP_KERNEL); in brcmf_pcie_probe()
2462 if (!bus->msgbuf) { in brcmf_pcie_probe()
2463 ret = -ENOMEM; in brcmf_pcie_probe()
2469 pcie_bus_dev->devinfo = devinfo; in brcmf_pcie_probe()
2470 pcie_bus_dev->bus = bus; in brcmf_pcie_probe()
2471 bus->dev = &pdev->dev; in brcmf_pcie_probe()
2472 bus->bus_priv.pcie = pcie_bus_dev; in brcmf_pcie_probe()
2473 bus->ops = &brcmf_pcie_bus_ops; in brcmf_pcie_probe()
2474 bus->proto_type = BRCMF_PROTO_MSGBUF; in brcmf_pcie_probe()
2475 bus->fwvid = id->driver_data; in brcmf_pcie_probe()
2476 bus->chip = devinfo->coreid; in brcmf_pcie_probe()
2477 bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot); in brcmf_pcie_probe()
2478 dev_set_drvdata(&pdev->dev, bus); in brcmf_pcie_probe()
2480 ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings); in brcmf_pcie_probe()
2486 brcmf_err(bus, "failed to parse OTP\n"); in brcmf_pcie_probe()
2492 timer_setup(&devinfo->timer, brcmf_pcie_fwcon, 0); in brcmf_pcie_probe()
2497 ret = -ENOMEM; in brcmf_pcie_probe()
2501 ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup); in brcmf_pcie_probe()
2509 brcmf_free(&devinfo->pdev->dev); in brcmf_pcie_probe()
2511 kfree(bus->msgbuf); in brcmf_pcie_probe()
2514 brcmf_err(NULL, "failed %x:%x\n", pdev->vendor, pdev->device); in brcmf_pcie_probe()
2516 if (devinfo->ci) in brcmf_pcie_probe()
2517 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_probe()
2518 if (devinfo->settings) in brcmf_pcie_probe()
2519 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_probe()
2534 bus = dev_get_drvdata(&pdev->dev); in brcmf_pcie_remove()
2538 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_remove()
2542 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_remove()
2543 if (devinfo->ci) in brcmf_pcie_remove()
2546 brcmf_detach(&pdev->dev); in brcmf_pcie_remove()
2547 brcmf_free(&pdev->dev); in brcmf_pcie_remove()
2549 kfree(bus->bus_priv.pcie); in brcmf_pcie_remove()
2550 kfree(bus->msgbuf->flowrings); in brcmf_pcie_remove()
2551 kfree(bus->msgbuf); in brcmf_pcie_remove()
2559 release_firmware(devinfo->clm_fw); in brcmf_pcie_remove()
2560 release_firmware(devinfo->txcap_fw); in brcmf_pcie_remove()
2562 if (devinfo->ci) in brcmf_pcie_remove()
2563 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_remove()
2564 if (devinfo->settings) in brcmf_pcie_remove()
2565 brcmf_release_module_param(devinfo->settings); in brcmf_pcie_remove()
2568 dev_set_drvdata(&pdev->dev, NULL); in brcmf_pcie_remove()
2583 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_enter_D3()
2588 devinfo->mbdata_completed = false; in brcmf_pcie_pm_enter_D3()
2591 wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed, in brcmf_pcie_pm_enter_D3()
2593 if (!devinfo->mbdata_completed) { in brcmf_pcie_pm_enter_D3()
2596 return -EIO; in brcmf_pcie_pm_enter_D3()
2599 devinfo->state = BRCMFMAC_PCIE_STATE_DOWN; in brcmf_pcie_pm_enter_D3()
2615 devinfo = bus->bus_priv.pcie->devinfo; in brcmf_pcie_pm_leave_D3()
2619 if (brcmf_pcie_read_reg32(devinfo, devinfo->reginfo->intmask) != 0) { in brcmf_pcie_pm_leave_D3()
2624 devinfo->state = BRCMFMAC_PCIE_STATE_UP; in brcmf_pcie_pm_leave_D3()
2634 brcmf_chip_detach(devinfo->ci); in brcmf_pcie_pm_leave_D3()
2635 devinfo->ci = NULL; in brcmf_pcie_pm_leave_D3()
2636 pdev = devinfo->pdev; in brcmf_pcie_pm_leave_D3()