linux/drivers
Ping-Ke Shih f28eab6ae4 wifi: rtw89: mac: add to access efuse for WiFi 7 chips
MAC address, hardware type, calibration values and etc are stored in efuse,
so we read them at probe stage and use them as capabilities to register
hardware.

There are two physical efuse -- one is the main efuse for digital hardware
part, and the other is for analog part. Because they are very similar, we
only describe the main efuse below.

The main efuse is split into two regions -- one is for logic map, and the
other is for physical map. For both regions, we use the same method to read
data, but need additional parser to get logic map. To allow reading
operation, we need to convert power state to active, and turn to idle state
after reading.

For WiFi 7 chips, we introduce efuse blocks to define feature group easier,
and these blocks are discontinue. For example, RF block is from 0x1_0000 ~
0x1_0240, and the next block PCIE_SDIO is starting from 0x2_0000.
Comparing to old one used by WiFi 6 chips, there is only single one logic
map, it would be a little hard to add an new field to a group if we don't
reserve a room in advance.

The relationship between efuse, region and block is shown as below:

                                           (logical map)
 +------------+    +---------------+    +-----------------+
 | main efuse |    |   region 1    |    | block 0x1_0000~ |
 | (digital)  |    |(to logcal map)|    +-----------------+
 |            |    |               | => +-----------------+
 |            | => |               |    | block 0x2_0000~ |
 |            |    |               |    +-----------------+
 |            |    |---------------|             :
 |            |    |    region 2   |
 +------------+    +---------------+

 +------------+                         +-----------------+
 | 2nd efuse  | ======================> | block 0x7_0000~ |
 | (analog)   |                         +-----------------+
 +------------+

The parser converting from raw data to logic map is to decode block page,
block page offset, and word_en bits. Each word_en bit indicates two
following bytes as data of logic map, so total four word_en bits can
represent eight bytes. Thus, block page offset is 8-byte alignment.
The layout of a tuple is shown as below

  +--------+--------+--------+--------+--------+--------+
  | fixed 3 byte header      |        |        |        |
  |                          |        |        |        |
  | [19:17] block_page       |        |        |  ...   |
  | [16:4]  block_page_offset|        |        |        |
  | [3:0]   word_en          |   ^    |    ^   |        |
  +----|---+--------+--------+---|----+----|---+--------+
       |                         |         |
       +-------------------------+---------+
         a word_en bit indicates two bytes as data

For example,
  block_page = 0x3
  block_page_offset = 0x80 (must 8-byte alignment)
  word_en = 0x6 (b'0110; 0 means data is presented)
  following 4 bytes = 34 56 78 90
  Then,
    0x3_0080 = 34 56
    0x3_0086 = 78 90

A special block page is RTW89_EFUSE_BLOCK_ADIE (7) that uses different
but similar format, because its real efuse size is smaller than main efuse.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20231117024029.113845-4-pkshih@realtek.com
2023-11-22 17:51:16 +02:00
..
accel accel/ivpu: Extend address range for MMU mmap 2023-10-19 08:01:20 +02:00
accessibility
acpi ACPI: NFIT: Install Notify() handler before getting NFIT table 2023-10-22 12:47:43 +02:00
amba
android binder: fix memory leaks of spam and pending work 2023-10-05 12:48:08 +02:00
ata ata: pata_parport: fit3: implement IDE command set registers 2023-10-10 14:42:22 +09:00
atm atm: fore200e: Drop unnecessary of_match_device() 2023-10-10 12:41:17 +02:00
auxdisplay
base regmap: Fix for v6.6 2023-10-18 09:30:03 -07:00
bcma
block block-6.6-2023-10-06 2023-10-06 15:43:19 -07:00
bluetooth Bluetooth: btmtksdio: enable bluetooth wakeup in system suspend 2023-10-23 11:04:51 -07:00
bus
cache
cdrom
cdx
char
clk
clocksource
comedi
connector Fix NULL pointer dereference in cn_filter() 2023-10-24 10:53:45 +02:00
counter First set of Counter fixes for 6.6 2023-10-02 13:13:15 +02:00
cpufreq
cpuidle
crypto virtio-crypto: handle config changed by work queue 2023-10-18 11:30:06 -04:00
cxl cxl/acpi: Annotate struct cxl_cxims_data with __counted_by 2023-09-22 14:31:04 -07:00
dax
dca
devfreq
dio
dma dmaengine fixes for v6.6 2023-10-13 08:52:57 -07:00
dma-buf dma-buf: add dma_fence_timestamp helper 2023-10-05 11:05:58 +02:00
dpll dpll: netlink/core: change pin frequency set behavior 2023-10-15 16:08:25 +01:00
edac
eisa
extcon
firewire scsi: sd: Differentiate system and runtime start/stop management 2023-09-28 21:23:00 +09:00
firmware Final set of EFI tweaks for v6.6: 2023-10-22 07:05:28 -10:00
fpga
fsi
gnss
gpio gpiolib: acpi: Add missing memset(0) to acpi_get_gpiod_from_data() 2023-10-20 11:24:16 +02:00
gpu Mediatek DRM Fixes - 20231017 2023-10-20 14:24:35 +10:00
greybus
hid HID: logitech-hidpp: Fix kernel crash on receiver USB disconnect 2023-10-06 16:09:14 +02:00
hsi
hte
hv
hwmon hwmon: (nct6775) Fix non-existent ALARM warning 2023-09-18 11:52:18 -07:00
hwspinlock
hwtracing coresight: tmc-etr: Disable warnings for allocation failures 2023-09-20 10:46:30 +01:00
i2c i2c: npcm7xx: Fix callback completion ordering 2023-09-27 21:32:06 +02:00
i3c i3c: Add support for bus enumeration & notification 2023-10-17 12:45:03 +02:00
idle
iio iio: pressure: ms5611: ms5611_prom_is_valid false negative bug 2023-10-05 18:06:46 +01:00
infiniband Merge branch 'mlx5-next' of https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux 2023-10-13 09:35:34 -07:00
input Input updates for v6.6-rc5 2023-10-13 23:19:16 -07:00
interconnect
iommu iommu/vt-d: Avoid memory allocation in iommu_suspend() 2023-09-25 16:10:36 +02:00
ipack
irqchip A set of updates for interrupt chip drivers: 2023-10-10 11:14:07 -07:00
isdn isdn: mISDN: hfcsusb: Spelling fix in comment 2023-10-23 09:39:46 +01:00
leds leds: Drop BUG_ON check for LED_COLOR_ID_MULTI 2023-09-19 15:16:23 +01:00
macintosh
mailbox
mcb mcb: remove is_added flag from mcb_device struct 2023-10-05 09:50:14 +02:00
md This push fixes a 6.5 regression in dm-crypt. 2023-10-10 10:47:35 -07:00
media media: i2c: ov8858: Don't set fwnode in the driver 2023-10-11 15:26:16 +02:00
memory
memstick
message
mfd Couple of small fixes, including: 2023-10-05 11:03:20 -07:00
misc misc: rtsx: Fix some platforms can not boot and move the l1ss judgment to probe 2023-09-25 10:48:19 +02:00
mmc mmc: core: Capture correct oemid-bits for eMMC cards 2023-09-27 12:17:04 +02:00
most
mtd In the raw NAND subsystem, the major fix prevents using cached reads 2023-10-20 13:12:34 -07:00
mux
net wifi: rtw89: mac: add to access efuse for WiFi 7 chips 2023-11-22 17:51:16 +02:00
nfc
ntb
nubus
nvdimm
nvme nvme-pci: add BOGUS_NID for Intel 0a54 device 2023-10-18 14:08:39 -07:00
nvmem
of of: overlay: Reorder struct fragment fields kerneldoc 2023-10-02 11:34:23 -05:00
opp
parisc
parport
pci pci-v6.6-fixes-2 2023-10-06 09:11:13 -07:00
pcmcia
peci
perf RISC-V Fixes for 6.6-rc6 2023-10-13 09:17:48 -07:00
phy phy fixes for 6.6 2023-10-22 07:11:10 -10:00
pinctrl Revert "pinctrl: avoid unsafe code pattern in find_pinctrl()" 2023-10-19 10:12:48 +02:00
platform platform/mellanox: mlxbf-tmfifo: Fix a warning message 2023-10-18 15:38:09 +02:00
pmdomain pmdomain: imx: scu-pd: correct DMA2 channel 2023-10-05 00:28:52 +02:00
pnp
power power: supply: qcom_battmgr: fix enable request endianness 2023-09-30 21:00:20 +02:00
powercap
pps
ps3
ptp ptp: prevent string overflow 2023-10-19 15:51:52 -07:00
pwm
rapidio
ras
regulator regulator/core: Revert "fix kobject release warning and memory leak in regulator_register()" 2023-09-26 17:26:08 +02:00
remoteproc
reset
rpmsg
rtc
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-26 13:46:28 -07:00
sbus
scsi SCSI fixes on 20231020 2023-10-20 13:24:50 -07:00
sh
siox
slimbus
soc ARM: SoC fixes for 6.6, part 2 2023-10-12 11:52:23 -07:00
soundwire soundwire: bus: Make IRQ handling conditionally built 2023-09-21 11:31:33 +02:00
spi spi: npcm-fiu: Fix UMA reads when dummy.nbytes == 0 2023-10-02 15:03:19 +01:00
spmi
ssb ssb: relax SSB_EMBEDDED dependencies 2023-10-19 10:26:26 +03:00
staging staging: qlge: devlink health: use retained error fmsg API 2023-10-20 11:34:50 +01:00
target scsi: target: core: Fix deadlock due to recursive locking 2023-09-27 10:55:29 -04:00
tc
tee ARM: SoC fixes for 6.6, part 2 2023-10-12 11:52:23 -07:00
thermal thermal: sysfs: Fix trip_point_hyst_store() 2023-09-18 13:13:05 +02:00
thunderbolt thunderbolt: Fix for v6.6-rc7 2023-10-17 19:25:42 +02:00
tty serial: core: Fix checks for tx runtime PM state 2023-10-07 11:23:47 +02:00
ufs scsi: ufs: core: Correct clear TM error log 2023-10-09 21:33:30 -04:00
uio
usb USB-serial device ids for 6.6-rc7 2023-10-20 07:52:44 +02:00
vdpa vdpa/mlx5: Fix firmware error on creation of 1k VQs 2023-10-18 11:29:41 -04:00
vfio vfio/mdev: Fix a null-ptr-deref bug for mdev_unregister_parent() 2023-09-22 12:48:04 -06:00
vhost Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-26 13:46:28 -07:00
video fbdev fixes and cleanups for 6.6-rc7: 2023-10-17 17:14:22 -07:00
virt
virtio virtio_pci: fix the common cfg map size 2023-10-18 11:30:12 -04:00
vlynq
w1
watchdog
xen xen/events: replace evtchn_rwlock with RCU 2023-10-09 09:21:16 +02:00
zorro
Kconfig dpll: core: Add DPLL framework base functions 2023-09-17 11:50:20 +01:00
Makefile dpll: core: Add DPLL framework base functions 2023-09-17 11:50:20 +01:00