You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
Update 8002-Apple-T2-platform-support.patch
This commit is contained in:
@@ -128,86 +128,3 @@ index aa25abffc..7167fd4f8 100644
|
||||
u8 brcmf_map_prio_to_aci(void *cfg, u8 prio);
|
||||
--
|
||||
2.37.2
|
||||
|
||||
|
||||
From bc2d29dd147b6eb88ed96a7ae2215336772176d7 Mon Sep 17 00:00:00 2001
|
||||
From: Hector Martin <marcan@marcan.st>
|
||||
Date: Tue, 14 Feb 2023 17:00:34 +0900
|
||||
Subject: [PATCH 2/2] brcmfmac: pcie: Provide a buffer of random bytes to the
|
||||
device
|
||||
|
||||
Newer Apple firmwares on chipsets without a hardware RNG require the
|
||||
host to provide a buffer of 256 random bytes to the device on
|
||||
initialization. This buffer is present immediately before NVRAM,
|
||||
suffixed by a footer containing a magic number and the buffer length.
|
||||
|
||||
This won't affect chips/firmwares that do not use this feature, so do it
|
||||
unconditionally for all Apple platforms (those with an Apple OTP).
|
||||
|
||||
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
Signed-off-by: Hector Martin <marcan@marcan.st>
|
||||
Reviewed-by: Julian Calaby <julian.calaby@gmail.com>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/pcie.c | 32 +++++++++++++++++++
|
||||
1 file changed, 32 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
index a9b9b2dc6..2835ef4ed 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/sched/signal.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/io.h>
|
||||
+#include <linux/random.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include <soc.h>
|
||||
@@ -1653,6 +1654,13 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+struct brcmf_random_seed_footer {
|
||||
+ __le32 length;
|
||||
+ __le32 magic;
|
||||
+};
|
||||
+
|
||||
+#define BRCMF_RANDOM_SEED_MAGIC 0xfeedc0de
|
||||
+#define BRCMF_RANDOM_SEED_LENGTH 0x100
|
||||
|
||||
static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
|
||||
const struct firmware *fw, void *nvram,
|
||||
@@ -1689,6 +1697,30 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
|
||||
nvram_len;
|
||||
memcpy_toio(devinfo->tcm + address, nvram, nvram_len);
|
||||
brcmf_fw_nvram_free(nvram);
|
||||
+
|
||||
+ if (devinfo->otp.valid) {
|
||||
+ size_t rand_len = BRCMF_RANDOM_SEED_LENGTH;
|
||||
+ struct brcmf_random_seed_footer footer = {
|
||||
+ .length = cpu_to_le32(rand_len),
|
||||
+ .magic = cpu_to_le32(BRCMF_RANDOM_SEED_MAGIC),
|
||||
+ };
|
||||
+ void *randbuf;
|
||||
+
|
||||
+ /* Some Apple chips/firmwares expect a buffer of random
|
||||
+ * data to be present before NVRAM
|
||||
+ */
|
||||
+ brcmf_dbg(PCIE, "Download random seed\n");
|
||||
+
|
||||
+ address -= sizeof(footer);
|
||||
+ memcpy_toio(devinfo->tcm + address, &footer,
|
||||
+ sizeof(footer));
|
||||
+
|
||||
+ address -= rand_len;
|
||||
+ randbuf = kzalloc(rand_len, GFP_KERNEL);
|
||||
+ get_random_bytes(randbuf, rand_len);
|
||||
+ memcpy_toio(devinfo->tcm + address, randbuf, rand_len);
|
||||
+ kfree(randbuf);
|
||||
+ }
|
||||
} else {
|
||||
brcmf_dbg(PCIE, "No matching NVRAM file found %s\n",
|
||||
devinfo->nvram_name);
|
||||
--
|
||||
2.37.2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user