diff --git a/1001-nvme.patch b/1001-nvme.patch new file mode 100644 index 0000000..e5916d5 --- /dev/null +++ b/1001-nvme.patch @@ -0,0 +1,69 @@ +Link: https://bugzilla.kernel.org/show_bug.cgi?id=214509 +Cc: Sven Peter +Reported-by: Orlando Chamberlain +Reported-by: Aditya Garg +Signed-off-by: Keith Busch +--- +v1->v2: fixed logical bug checking the quirk setting + + drivers/nvme/host/core.c | 4 +++- + drivers/nvme/host/nvme.h | 6 ++++++ + drivers/nvme/host/pci.c | 3 ++- + 3 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c +index e486845d2c7e..7712a8f78337 100644 +--- a/drivers/nvme/host/core.c ++++ b/drivers/nvme/host/core.c +@@ -978,6 +978,7 @@ EXPORT_SYMBOL_GPL(nvme_cleanup_cmd); + blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req) + { + struct nvme_command *cmd = nvme_req(req)->cmd; ++ struct nvme_ctrl *ctrl = nvme_req(req)->ctrl; + blk_status_t ret = BLK_STS_OK; + + if (!(req->rq_flags & RQF_DONTPREP)) { +@@ -1026,7 +1027,8 @@ blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req) + return BLK_STS_IOERR; + } + +- nvme_req(req)->genctr++; ++ if (!(ctrl->quirks & NVME_QUIRK_SKIP_CID_GEN)) ++ nvme_req(req)->genctr++; + cmd->common.command_id = nvme_cid(req); + trace_nvme_setup_cmd(req, cmd); + return ret; +diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h +index 9871c0c9374c..ed79a6c7e804 100644 +--- a/drivers/nvme/host/nvme.h ++++ b/drivers/nvme/host/nvme.h +@@ -138,6 +138,12 @@ enum nvme_quirks { + * 48 bits. + */ + NVME_QUIRK_DMA_ADDRESS_BITS_48 = (1 << 16), ++ ++ /* ++ * The controller requires the command_id value be be limited, so skip ++ * encoding the generation sequence number. ++ */ ++ NVME_QUIRK_SKIP_CID_GEN = (1 << 17), + }; + + /* +diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c +index b82492cd7503..456a0e8a5718 100644 +--- a/drivers/nvme/host/pci.c ++++ b/drivers/nvme/host/pci.c +@@ -3369,7 +3369,8 @@ static const struct pci_device_id nvme_id_table[] = { + { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2005), + .driver_data = NVME_QUIRK_SINGLE_VECTOR | + NVME_QUIRK_128_BYTES_SQES | +- NVME_QUIRK_SHARED_TAGS }, ++ NVME_QUIRK_SHARED_TAGS | ++ NVME_QUIRK_SKIP_CID_GEN }, + + { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) }, + { 0, } +-- +2.25.4 + diff --git a/1001-revert-nvme.patch b/1001-revert-nvme.patch deleted file mode 100644 index 7678783..0000000 --- a/1001-revert-nvme.patch +++ /dev/null @@ -1,237 +0,0 @@ -From 9e9464bd0b7c6f205d49089503059b90d3f654ce Mon Sep 17 00:00:00 2001 -From: Aditya Garg <85610623+AdityaGarg8@users.noreply.github.com> -Date: Fri, 24 Sep 2021 15:36:45 +0530 -Subject: [PATCH] Revert nvme to 5.10.66 - ---- - drivers/nvme/host/core.c | 3 +-- - drivers/nvme/host/nvme.h | 47 +------------------------------------- - drivers/nvme/host/pci.c | 2 +- - drivers/nvme/host/rdma.c | 4 ++-- - drivers/nvme/host/tcp.c | 38 ++++++++++++++++++------------ - drivers/nvme/target/loop.c | 4 ++-- - 6 files changed, 30 insertions(+), 68 deletions(-) - -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index 5a9b2f1b1..ff5a16b17 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -878,8 +878,7 @@ blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req, - return BLK_STS_IOERR; - } - -- nvme_req(req)->genctr++; -- cmd->common.command_id = nvme_cid(req); -+ cmd->common.command_id = req->tag; - trace_nvme_setup_cmd(req, cmd); - return ret; - } -diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h -index 8c735c55c..3cb3c8206 100644 ---- a/drivers/nvme/host/nvme.h -+++ b/drivers/nvme/host/nvme.h -@@ -153,7 +153,6 @@ enum nvme_quirks { - struct nvme_request { - struct nvme_command *cmd; - union nvme_result result; -- u8 genctr; - u8 retries; - u8 flags; - u16 status; -@@ -470,49 +469,6 @@ struct nvme_ctrl_ops { - int (*get_address)(struct nvme_ctrl *ctrl, char *buf, int size); - }; - --/* -- * nvme command_id is constructed as such: -- * | xxxx | xxxxxxxxxxxx | -- * gen request tag -- */ --#define nvme_genctr_mask(gen) (gen & 0xf) --#define nvme_cid_install_genctr(gen) (nvme_genctr_mask(gen) << 12) --#define nvme_genctr_from_cid(cid) ((cid & 0xf000) >> 12) --#define nvme_tag_from_cid(cid) (cid & 0xfff) -- --static inline u16 nvme_cid(struct request *rq) --{ -- return nvme_cid_install_genctr(nvme_req(rq)->genctr) | rq->tag; --} -- --static inline struct request *nvme_find_rq(struct blk_mq_tags *tags, -- u16 command_id) --{ -- u8 genctr = nvme_genctr_from_cid(command_id); -- u16 tag = nvme_tag_from_cid(command_id); -- struct request *rq; -- -- rq = blk_mq_tag_to_rq(tags, tag); -- if (unlikely(!rq)) { -- pr_err("could not locate request for tag %#x\n", -- tag); -- return NULL; -- } -- if (unlikely(nvme_genctr_mask(nvme_req(rq)->genctr) != genctr)) { -- dev_err(nvme_req(rq)->ctrl->device, -- "request %#x genctr mismatch (got %#x expected %#x)\n", -- tag, genctr, nvme_genctr_mask(nvme_req(rq)->genctr)); -- return NULL; -- } -- return rq; --} -- --static inline struct request *nvme_cid_to_rq(struct blk_mq_tags *tags, -- u16 command_id) --{ -- return blk_mq_tag_to_rq(tags, nvme_tag_from_cid(command_id)); --} -- - #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS - void nvme_fault_inject_init(struct nvme_fault_inject *fault_inj, - const char *dev_name); -@@ -610,8 +566,7 @@ static inline void nvme_put_ctrl(struct nvme_ctrl *ctrl) - - static inline bool nvme_is_aen_req(u16 qid, __u16 command_id) - { -- return !qid && -- nvme_tag_from_cid(command_id) >= NVME_AQ_BLK_MQ_DEPTH; -+ return !qid && command_id >= NVME_AQ_BLK_MQ_DEPTH; - } - - void nvme_complete_rq(struct request *req); -diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c -index 09767a805..fb48a88d1 100644 ---- a/drivers/nvme/host/pci.c -+++ b/drivers/nvme/host/pci.c -@@ -1012,7 +1012,7 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx) - return; - } - -- req = nvme_find_rq(nvme_queue_tagset(nvmeq), command_id); -+ req = blk_mq_tag_to_rq(nvme_queue_tagset(nvmeq), command_id); - if (unlikely(!req)) { - dev_warn(nvmeq->dev->ctrl.device, - "invalid id %d completed on queue %d\n", -diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c -index 9c356be7f..c6c2e2361 100644 ---- a/drivers/nvme/host/rdma.c -+++ b/drivers/nvme/host/rdma.c -@@ -1738,10 +1738,10 @@ static void nvme_rdma_process_nvme_rsp(struct nvme_rdma_queue *queue, - struct request *rq; - struct nvme_rdma_request *req; - -- rq = nvme_find_rq(nvme_rdma_tagset(queue), cqe->command_id); -+ rq = blk_mq_tag_to_rq(nvme_rdma_tagset(queue), cqe->command_id); - if (!rq) { - dev_err(queue->ctrl->ctrl.device, -- "got bad command_id %#x on QP %#x\n", -+ "tag 0x%x on QP %#x not found\n", - cqe->command_id, queue->qp->qp_num); - nvme_rdma_error_recovery(queue->ctrl); - return; -diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c -index c9a925999..5b11d8a23 100644 ---- a/drivers/nvme/host/tcp.c -+++ b/drivers/nvme/host/tcp.c -@@ -484,11 +484,11 @@ static int nvme_tcp_process_nvme_cqe(struct nvme_tcp_queue *queue, - { - struct request *rq; - -- rq = nvme_find_rq(nvme_tcp_tagset(queue), cqe->command_id); -+ rq = blk_mq_tag_to_rq(nvme_tcp_tagset(queue), cqe->command_id); - if (!rq) { - dev_err(queue->ctrl->ctrl.device, -- "got bad cqe.command_id %#x on queue %d\n", -- cqe->command_id, nvme_tcp_queue_id(queue)); -+ "queue %d tag 0x%x not found\n", -+ nvme_tcp_queue_id(queue), cqe->command_id); - nvme_tcp_error_recovery(&queue->ctrl->ctrl); - return -EINVAL; - } -@@ -505,11 +505,11 @@ static int nvme_tcp_handle_c2h_data(struct nvme_tcp_queue *queue, - { - struct request *rq; - -- rq = nvme_find_rq(nvme_tcp_tagset(queue), pdu->command_id); -+ rq = blk_mq_tag_to_rq(nvme_tcp_tagset(queue), pdu->command_id); - if (!rq) { - dev_err(queue->ctrl->ctrl.device, -- "got bad c2hdata.command_id %#x on queue %d\n", -- pdu->command_id, nvme_tcp_queue_id(queue)); -+ "queue %d tag %#x not found\n", -+ nvme_tcp_queue_id(queue), pdu->command_id); - return -ENOENT; - } - -@@ -603,7 +603,7 @@ static int nvme_tcp_setup_h2c_data_pdu(struct nvme_tcp_request *req, - data->hdr.plen = - cpu_to_le32(data->hdr.hlen + hdgst + req->pdu_len + ddgst); - data->ttag = pdu->ttag; -- data->command_id = nvme_cid(rq); -+ data->command_id = rq->tag; - data->data_offset = cpu_to_le32(req->data_sent); - data->data_length = cpu_to_le32(req->pdu_len); - return 0; -@@ -616,11 +616,11 @@ static int nvme_tcp_handle_r2t(struct nvme_tcp_queue *queue, - struct request *rq; - int ret; - -- rq = nvme_find_rq(nvme_tcp_tagset(queue), pdu->command_id); -+ rq = blk_mq_tag_to_rq(nvme_tcp_tagset(queue), pdu->command_id); - if (!rq) { - dev_err(queue->ctrl->ctrl.device, -- "got bad r2t.command_id %#x on queue %d\n", -- pdu->command_id, nvme_tcp_queue_id(queue)); -+ "queue %d tag %#x not found\n", -+ nvme_tcp_queue_id(queue), pdu->command_id); - return -ENOENT; - } - req = blk_mq_rq_to_pdu(rq); -@@ -699,9 +699,17 @@ static int nvme_tcp_recv_data(struct nvme_tcp_queue *queue, struct sk_buff *skb, - unsigned int *offset, size_t *len) - { - struct nvme_tcp_data_pdu *pdu = (void *)queue->pdu; -- struct request *rq = -- nvme_cid_to_rq(nvme_tcp_tagset(queue), pdu->command_id); -- struct nvme_tcp_request *req = blk_mq_rq_to_pdu(rq); -+ struct nvme_tcp_request *req; -+ struct request *rq; -+ -+ rq = blk_mq_tag_to_rq(nvme_tcp_tagset(queue), pdu->command_id); -+ if (!rq) { -+ dev_err(queue->ctrl->ctrl.device, -+ "queue %d tag %#x not found\n", -+ nvme_tcp_queue_id(queue), pdu->command_id); -+ return -ENOENT; -+ } -+ req = blk_mq_rq_to_pdu(rq); - - while (true) { - int recv_len, ret; -@@ -793,8 +801,8 @@ static int nvme_tcp_recv_ddgst(struct nvme_tcp_queue *queue, - } - - if (pdu->hdr.flags & NVME_TCP_F_DATA_SUCCESS) { -- struct request *rq = nvme_cid_to_rq(nvme_tcp_tagset(queue), -- pdu->command_id); -+ struct request *rq = blk_mq_tag_to_rq(nvme_tcp_tagset(queue), -+ pdu->command_id); - - nvme_tcp_end_request(rq, NVME_SC_SUCCESS); - queue->nr_cqe++; -diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c -index ff3258c3e..16d71cc5a 100644 ---- a/drivers/nvme/target/loop.c -+++ b/drivers/nvme/target/loop.c -@@ -107,10 +107,10 @@ static void nvme_loop_queue_response(struct nvmet_req *req) - } else { - struct request *rq; - -- rq = nvme_find_rq(nvme_loop_tagset(queue), cqe->command_id); -+ rq = blk_mq_tag_to_rq(nvme_loop_tagset(queue), cqe->command_id); - if (!rq) { - dev_err(queue->ctrl->ctrl.device, -- "got bad command_id %#x on queue %d\n", -+ "tag 0x%x on queue %d not found\n", - cqe->command_id, nvme_loop_queue_idx(queue)); - return; - } diff --git a/1002-reapply-tcp-patch.patch b/1002-reapply-tcp-patch.patch deleted file mode 100644 index 034d044..0000000 --- a/1002-reapply-tcp-patch.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c -index 8cb15ee5b249e..d649b446da66c 100644 ---- a/drivers/nvme/host/tcp.c -+++ b/drivers/nvme/host/tcp.c -@@ -702,17 +702,9 @@ static int nvme_tcp_recv_data(struct nvme_tcp_queue *queue, struct sk_buff *skb, - unsigned int *offset, size_t *len) - { - struct nvme_tcp_data_pdu *pdu = (void *)queue->pdu; -- struct nvme_tcp_request *req; -- struct request *rq; -- -- rq = blk_mq_tag_to_rq(nvme_tcp_tagset(queue), pdu->command_id); -- if (!rq) { -- dev_err(queue->ctrl->ctrl.device, -- "queue %d tag %#x not found\n", -- nvme_tcp_queue_id(queue), pdu->command_id); -- return -ENOENT; -- } -- req = blk_mq_rq_to_pdu(rq); -+ struct request *rq = -+ blk_mq_tag_to_rq(nvme_tcp_tagset(queue), pdu->command_id); -+ struct nvme_tcp_request *req = blk_mq_rq_to_pdu(rq); - - while (true) { - int recv_len, ret; diff --git a/8002-Add-support-for-BCM4377.patch b/8002-Add-support-for-BCM4377.patch new file mode 100644 index 0000000..aa4b84b --- /dev/null +++ b/8002-Add-support-for-BCM4377.patch @@ -0,0 +1,147 @@ +From a128c070e189999215e9ebd9dbb0cec795f5d175 Mon Sep 17 00:00:00 2001 +From: Aditya Garg +Date: Tue, 28 Sep 2021 16:23:49 +0530 +Subject: [PATCH] Add support for BCM4377 + +Co-authored-by: Aun-Ali Zaidi +Co-authored-by: Houjun Liu +Co-authored-by: emergenz +Co-authored-by: Orlando Chamberlain +--- + .../broadcom/brcm80211/brcmfmac/chip.c | 4 +++ + .../broadcom/brcm80211/brcmfmac/pcie.c | 32 +++++++++++++++---- + .../broadcom/brcm80211/include/brcm_hw_ids.h | 2 ++ + 3 files changed, 31 insertions(+), 7 deletions(-) + +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c +index 1bf0fa8f0..1e1b23bf4 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c +@@ -727,6 +727,8 @@ static u32 brcmf_chip_tcm_rambase(struct brcmf_chip_priv *ci) + case BRCM_CC_4364_CHIP_ID: + case CY_CC_4373_CHIP_ID: + return 0x160000; ++ case BRCM_CC_4377_CHIP_ID: ++ return 0x170000; + case BRCM_CC_4378_CHIP_ID: + return 0x352000; + default: +@@ -1428,6 +1430,8 @@ bool brcmf_chip_sr_capable(struct brcmf_chip *pub) + reg = chip->ops->read32(chip->ctx, addr); + return (reg & (PMU_RCTL_MACPHY_DISABLE_MASK | + PMU_RCTL_LOGIC_DISABLE_MASK)) == 0; ++ case BRCM_CC_4377_CHIP_ID: ++ return false; + case BRCM_CC_4378_CHIP_ID: + return false; + } +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +index ce8c552c6..6f0166b33 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +@@ -59,6 +59,7 @@ BRCMF_FW_DEF(4365C, "brcmfmac4365c-pcie"); + BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie"); + BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie"); + BRCMF_FW_DEF(4371, "brcmfmac4371-pcie"); ++BRCMF_FW_DEF(4377, "brcmfmac4377-pcie"); + BRCMF_FW_DEF(4378, "brcmfmac4378-pcie"); + + static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { +@@ -81,6 +82,7 @@ static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { + BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C), + BRCMF_FW_ENTRY(BRCM_CC_43666_CHIP_ID, 0xFFFFFFF0, 4366C), + BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371), ++ BRCMF_FW_ENTRY(BRCM_CC_4377_CHIP_ID, 0xFFFFFFFF, 4377), + BRCMF_FW_ENTRY(BRCM_CC_4378_CHIP_ID, 0xFFFFFFFF, 4378), + }; + +@@ -586,23 +588,33 @@ brcmf_pcie_reg_map(struct brcmf_pciedev_info *devinfo, u32 reg) + { + switch(reg) { + case BRCMF_PCIE_PCIE2REG_INTMASK: +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ return BRCMF_PCIE_64_PCIE2REG_INTMASK; ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + return BRCMF_PCIE_64_PCIE2REG_INTMASK; + return reg; + case BRCMF_PCIE_PCIE2REG_MAILBOXINT: +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ return BRCMF_PCIE_64_PCIE2REG_MAILBOXINT; ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + return BRCMF_PCIE_64_PCIE2REG_MAILBOXINT; + return reg; + case BRCMF_PCIE_PCIE2REG_MAILBOXMASK: +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ return BRCMF_PCIE_64_PCIE2REG_MAILBOXMASK; ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + return BRCMF_PCIE_64_PCIE2REG_MAILBOXMASK; + return reg; + case BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0: +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ return BRCMF_PCIE_64_PCIE2REG_H2D_MAILBOX_0; ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + return BRCMF_PCIE_64_PCIE2REG_H2D_MAILBOX_0; + return reg; + case BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1: +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ return BRCMF_PCIE_64_PCIE2REG_H2D_MAILBOX_1; ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + return BRCMF_PCIE_64_PCIE2REG_H2D_MAILBOX_1; + return reg; + default: +@@ -1018,7 +1030,10 @@ static void brcmf_pcie_intr_disable(struct brcmf_pciedev_info *devinfo) + + static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) + { +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_64_PCIE2REG_MAILBOXMASK, ++ BRCMF_PCIE_64_MB_INT_D2H_DB); ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_64_PCIE2REG_MAILBOXMASK, + BRCMF_PCIE_64_MB_INT_D2H_DB); + else +@@ -1053,7 +1068,9 @@ static irqreturn_t brcmf_pcie_isr_thread(int irq, void *arg) + struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; + u32 status, mask; + +- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) ++ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) ++ mask = BRCMF_PCIE_64_MB_INT_D2H_DB; ++ else if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) + mask = BRCMF_PCIE_64_MB_INT_D2H_DB; + else + mask = BRCMF_PCIE_MB_INT_D2H_DB; +@@ -2363,6 +2380,7 @@ static const struct pci_device_id brcmf_pcie_devid_table[] = { + BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_2G_DEVICE_ID), + BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_5G_DEVICE_ID), + BRCMF_PCIE_DEVICE(BRCM_PCIE_4371_DEVICE_ID), ++ BRCMF_PCIE_DEVICE(BRCM_PCIE_4377_DEVICE_ID), + BRCMF_PCIE_DEVICE(BRCM_PCIE_4378_DEVICE_ID), + { /* end: all zeroes */ } + }; +diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h +index 242df778f..eb3f361a2 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h ++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h +@@ -50,6 +50,7 @@ + #define BRCM_CC_43664_CHIP_ID 43664 + #define BRCM_CC_43666_CHIP_ID 43666 + #define BRCM_CC_4371_CHIP_ID 0x4371 ++#define BRCM_CC_4377_CHIP_ID 0x4377 + #define BRCM_CC_4378_CHIP_ID 0x4378 + #define CY_CC_4373_CHIP_ID 0x4373 + #define CY_CC_43012_CHIP_ID 43012 +@@ -85,6 +86,7 @@ + #define BRCM_PCIE_4366_2G_DEVICE_ID 0x43c4 + #define BRCM_PCIE_4366_5G_DEVICE_ID 0x43c5 + #define BRCM_PCIE_4371_DEVICE_ID 0x440d ++#define BRCM_PCIE_4377_DEVICE_ID 0x4488 + #define BRCM_PCIE_4378_DEVICE_ID 0x4425 + + diff --git a/8002-brcmfmac-4377-mod.patch b/8002-brcmfmac-4377-mod.patch deleted file mode 100644 index 4b37b82..0000000 --- a/8002-brcmfmac-4377-mod.patch +++ /dev/null @@ -1,85 +0,0 @@ -From ef2dddd7ecd61ffa5b055e1dabeba806f2de0a69 Mon Sep 17 00:00:00 2001 -From: Aun-Ali Zaidi -Date: Sun, 1 Nov 2020 01:39:09 -0400 -Subject: [PATCH 2/2] brcmfmac: Add initial support for the BRCM4377 - -This commit adds the required device IDs and rambase address -for the BRCM4377 Wifi/BT combo chip. Additional changes are -required to fully support this chip. - -Signed-off-by: Aun-Ali Zaidi ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 2 ++ - drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 3 +++ - drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 2 ++ - 3 files changed, 7 insertions(+) - -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c -index 6c39415a69d6..d2392a8fdbbb 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c -@@ -727,6 +727,8 @@ static u32 brcmf_chip_tcm_rambase(struct brcmf_chip_priv *ci) - case BRCM_CC_4364_CHIP_ID: - case CY_CC_4373_CHIP_ID: - return 0x160000; -+ case BRCM_CC_4377_CHIP_ID: -+ return 0x170000; - case BRCM_CC_4378_CHIP_ID: - return 0x352000; - default: -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -index 60e3b0ce4fd7..a262e2eb36af 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -59,6 +59,7 @@ BRCMF_FW_DEF(4365C, "brcmfmac4365c-pcie"); - BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie"); - BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie"); - BRCMF_FW_DEF(4371, "brcmfmac4371-pcie"); -+BRCMF_FW_DEF(4377, "brcmfmac4377-pcie"); - BRCMF_FW_DEF(4378, "brcmfmac4378-pcie"); - - static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { - BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602), -@@ -82,6 +82,7 @@ static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { - BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C), - BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C), - BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371), -+ BRCMF_FW_ENTRY(BRCM_CC_4377_CHIP_ID, 0xFFFFFFFF, 4377), - BRCMF_FW_ENTRY(BRCM_CC_4378_CHIP_ID, 0xFFFFFFFF, 4378), - }; - - #define BRCMF_PCIE_FW_UP_TIMEOUT 5000 /* msec */ -@@ -2119,6 +2121,7 @@ static const struct pci_device_id brcmf_pcie_devid_table[] = { - BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_2G_DEVICE_ID), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_5G_DEVICE_ID), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4371_DEVICE_ID), -+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4377_DEVICE_ID), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4378_DEVICE_ID), - { /* end: all zeroes */ } - }; - -diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h -index 777ffdbce230..7b50e2edf6e2 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h -+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h -@@ -50,6 +50,7 @@ - #define BRCM_CC_43664_CHIP_ID 43664 - #define BRCM_CC_43666_CHIP_ID 43666 - #define BRCM_CC_4371_CHIP_ID 0x4371 -+#define BRCM_CC_4377_CHIP_ID 0x4377 - #define BRCM_CC_4378_CHIP_ID 0x4378 - #define CY_CC_4373_CHIP_ID 0x4373 - #define CY_CC_43012_CHIP_ID 43012 - -@@ -85,6 +86,7 @@ - #define BRCM_PCIE_4366_2G_DEVICE_ID 0x43c4 - #define BRCM_PCIE_4366_5G_DEVICE_ID 0x43c5 - #define BRCM_PCIE_4371_DEVICE_ID 0x440d -+#define BRCM_PCIE_4377_DEVICE_ID 0x4488 - #define BRCM_PCIE_4378_DEVICE_ID 0x4425 - - - /* brcmsmac IDs */ --- -2.29.1 - diff --git a/8003-brcmfmac-4377-64bit-regs.patch b/8003-brcmfmac-4377-64bit-regs.patch deleted file mode 100644 index a3638f8..0000000 --- a/8003-brcmfmac-4377-64bit-regs.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c -@@ -1429,7 +1429,7 @@ bool brcmf_chip_sr_capable(struct brcmf_chip *pub) - reg = chip->ops->read32(chip->ctx, addr); - return (reg & (PMU_RCTL_MACPHY_DISABLE_MASK | - PMU_RCTL_LOGIC_DISABLE_MASK)) == 0; -- case BRCM_CC_4378_CHIP_ID: -+ case BRCM_CC_4377_CHIP_ID: - return false; - } - } ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -586,23 +586,23 @@ - { - switch(reg) { - case BRCMF_PCIE_PCIE2REG_INTMASK: -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - return BRCMF_PCIE_64_PCIE2REG_INTMASK; - return reg; - case BRCMF_PCIE_PCIE2REG_MAILBOXINT: -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - return BRCMF_PCIE_64_PCIE2REG_MAILBOXINT; - return reg; - case BRCMF_PCIE_PCIE2REG_MAILBOXMASK: -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - return BRCMF_PCIE_64_PCIE2REG_MAILBOXMASK; - return reg; - case BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0: -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - return BRCMF_PCIE_64_PCIE2REG_H2D_MAILBOX_0; - return reg; - case BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1: -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - return BRCMF_PCIE_64_PCIE2REG_H2D_MAILBOX_1; - return reg; - default: -@@ -1017,7 +1017,7 @@ - - static void brcmf_pcie_intr_enable(struct brcmf_pciedev_info *devinfo) - { -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_64_PCIE2REG_MAILBOXMASK, - BRCMF_PCIE_64_MB_INT_D2H_DB); - else -@@ -1052,7 +1052,7 @@ - struct brcmf_pciedev_info *devinfo = (struct brcmf_pciedev_info *)arg; - u32 status, mask; - -- if(devinfo->ci->chip == BRCM_CC_4378_CHIP_ID) -+ if(devinfo->ci->chip == BRCM_CC_4377_CHIP_ID) - mask = BRCMF_PCIE_64_MB_INT_D2H_DB; - else - mask = BRCMF_PCIE_MB_INT_D2H_DB; diff --git a/8004-brcmfmac-4377-chip-ids.patch b/8004-brcmfmac-4377-chip-ids.patch deleted file mode 100644 index 4950ebb..0000000 --- a/8004-brcmfmac-4377-chip-ids.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 8cd0a13487afd37a021d8f685d0724990773d9e5 Mon Sep 17 00:00:00 2001 -From: Houjun Liu -Date: Wed, 11 Aug 2021 11:28:01 -0700 -Subject: [PATCH] added @aunali1 patches that didn't apply correctly - -Co-authored-by: Aun-Ali Zaidi -Co-authored-by: emergenz ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 ++ - drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 1 + - 2 files changed, 3 insertions(+) - -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -index d64f9e902..99a86a56e 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -82,6 +82,7 @@ static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = { - BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C), - BRCMF_FW_ENTRY(BRCM_CC_43666_CHIP_ID, 0xFFFFFFF0, 4366C), - BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371), -+ BRCMF_FW_ENTRY(BRCM_CC_4377_CHIP_ID, 0xFFFFFFFF, 4377), - BRCMF_FW_ENTRY(BRCM_CC_4378_CHIP_ID, 0xFFFFFFFF, 4378), - }; - -@@ -2364,6 +2365,7 @@ static const struct pci_device_id brcmf_pcie_devid_table[] = { - BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_2G_DEVICE_ID), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_5G_DEVICE_ID), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4371_DEVICE_ID), -+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4377_DEVICE_ID), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4378_DEVICE_ID), - { /* end: all zeroes */ } - }; -diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h -index 5a13c98b5..eb3f361a2 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h -+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h -@@ -86,6 +86,7 @@ - #define BRCM_PCIE_4366_2G_DEVICE_ID 0x43c4 - #define BRCM_PCIE_4366_5G_DEVICE_ID 0x43c5 - #define BRCM_PCIE_4371_DEVICE_ID 0x440d -+#define BRCM_PCIE_4377_DEVICE_ID 0x4488 - #define BRCM_PCIE_4378_DEVICE_ID 0x4425 - - --- -2.32.0 - diff --git a/PKGBUILD b/PKGBUILD index 3847e3d..5e8b4c2 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,7 +5,7 @@ pkgbase=mbp-16.1-linux-wifi pkgver=5.14.8 _srcname=linux-${pkgver} -pkgrel=2 +pkgrel=1 pkgdesc='Linux for MBP 16.1 Wifi' _srctag=v${pkgver%.*}-${pkgver##*.} url="https://git.archlinux.org/linux.git/log/?h=v$_srctag" @@ -28,8 +28,7 @@ source=( 0002-HID-quirks-Add-Apple-Magic-Trackpad-2-to-hid_have_sp.patch #NVMe fix - 1001-revert-nvme.patch - 1002-reapply-tcp-patch.patch + 1001-nvme.patch # Hack for AMD DC eDP link rate bug 2001-drm-amd-display-Force-link_rate-as-LINK_RATE_RBR2-fo.patch @@ -61,9 +60,7 @@ source=( # Broadcom WIFI/BT device support 8001-corellium-wifi-bigsur.patch - 8002-brcmfmac-4377-mod.patch - 8003-brcmfmac-4377-64bit-regs.patch - 8004-brcmfmac-4377-chip-ids.patch + 8002-Add-support-for-BCM4377.patch 9001-bluetooth-disable-read-LE-MinMax-Tx-Power.patch ) @@ -247,8 +244,7 @@ sha256sums=('ca0eda14c512efa7fc054e9eb89dd8f6a6e7075aef1e39d30b5f243f7bde9b89' '1ddd4443470ad66aff8075e0528ad7757de41d474152db1362e23be72e243919' '6b4da532421cac5600d09c0c52742aa52d848af098f7853abe60c02e9d0a3752' '2184069ab00ef43d9674756e9b7a56d15188bc4494d34425f04ddc779c52acd8' - '78ea4702928d87bfdd41c6998154d7c2e1396c823a012d3891f1b803198712aa' - 'ec658c85b9cfaa32acda11ec768e608bafe5b53a7511523b55c8c082d8dce04a' + '50bab6fa754e857c462fb1cf88a74b88bd85b5a34fdebbc54e4ded7a9a04e004' '786dfc22e4c6ece883e7dedd0ba3f6c14018584df95450b2cb78f3da8b01f7cb' '7366a08383900a09f8e742b1e4f0a02e0839a385e68e70a89d1815c197df3300' '8d8401a99a9dfbc41aa2dc5b6a409a19860b1b918465e19de4a4ff18de075ea3' @@ -268,7 +264,5 @@ sha256sums=('ca0eda14c512efa7fc054e9eb89dd8f6a6e7075aef1e39d30b5f243f7bde9b89' '9640178d6251686c980c30fc528b3d70beac6ce8246bf433506a3f843808326c' '90a6012cdd8a64ede8e0bbaf7331960bd68f628e0973b65459188eb1ccb5b829' '903c9e2d141ddb4ebc7f60fd08b54d97306a187a06bfc8832bc8f442f00027e3' - 'e82c6bc63ef94745a576b7433f691c17ab2065b99b1b944e25ee005b0b662dec' - 'a57c31b207fcb62fc2b764b3e69058cf6f0291a34724105252d65e7fa06b1905' - 'c8442b069604d2f6ad566e64eb6ebbafbd44e04799ff625419b3552154d713c1' + 'fbbbb17f657d72a36677b556b2b61594a3389191d05de4e4a3a446daab260667' 'f1b8accfe1a38aeaf00867577e488a9b958efd22dbe6e95bc7ce5d369cbf6b19')