linux/drivers/net
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
..
arcnet
bonding netlink: make range pointers in policies const 2023-10-26 16:24:09 -07:00
caif
can Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-12 17:07:34 -07:00
dsa net: dsa: microchip: ksz9477: add Wake on LAN support 2023-10-25 08:47:33 +01:00
ethernet ice: Hook up 4 E830 devices by adding their IDs 2023-10-26 20:32:39 -07:00
fddi
fjes netdev: replace napi_reschedule with napi_schedule 2023-10-11 17:28:06 -07:00
hamradio hamradio: replace deprecated strncpy with strscpy_pad 2023-10-17 17:59:55 -07:00
hippi
hyperv hv_netvsc: fix netvsc_send_completion to avoid multiple message length checks 2023-10-11 09:19:01 +01:00
ieee802154 net: ieee802154: adf7242: Fix some potential buffer overflow in adf7242_stats_show() 2023-10-22 11:28:43 +01:00
ipa net: ipa: Annotate struct ipa_power with __counted_by 2023-10-02 11:24:54 -07:00
ipvlan
mctp mctp i3c: MCTP I3C driver 2023-10-17 12:45:03 +02:00
mdio net: mdio: xgene: Fix unused xgene_mdio_of_match warning for !CONFIG_OF 2023-10-23 10:16:47 -07:00
netdevsim netdevsim: devlink health: use retained error fmsg API 2023-10-20 11:34:49 +01:00
pcs
phy net: phy: micrel: Fix forced link mode for KSZ886X switches 2023-10-20 11:50:46 +01:00
plip
ppp
pse-pd
slip
team
thunderbolt
usb Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-26 13:46:28 -07:00
vmxnet3
vxlan netlink: make range pointers in policies const 2023-10-26 16:24:09 -07:00
wan netdev: replace napi_reschedule with napi_schedule 2023-10-11 17:28:06 -07:00
wireguard
wireless wifi: rtw89: mac: add to access efuse for WiFi 7 chips 2023-11-22 17:51:16 +02:00
wwan net: wwan: replace deprecated strncpy with strscpy 2023-10-20 18:15:05 -07:00
xen-netback xen-netback: add software timestamp capabilities 2023-10-13 10:19:50 +01:00
amt.c
bareudp.c bareudp: use ports to lookup route 2023-10-26 15:21:09 +02:00
dummy.c
eql.c
geneve.c geneve: use generic function for tunnel IPv6 route lookup 2023-10-23 08:48:57 +01:00
gtp.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-26 13:46:28 -07:00
ifb.c
Kconfig netkit, bpf: Add bpf programmable net device 2023-10-24 16:06:03 -07:00
LICENSE.SRC
loopback.c
macsec.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-12 17:07:34 -07:00
macvlan.c
macvtap.c
Makefile netkit, bpf: Add bpf programmable net device 2023-10-24 16:06:03 -07:00
mdio.c
mhi_net.c
mii.c
net_failover.c
netconsole.c netconsole: Attach cmdline target to dynamic target 2023-10-13 17:26:38 -07:00
netkit.c netkit: Remove explicit active/peer ptr initialization 2023-10-26 15:58:39 +02:00
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c net: appletalk: remove cops support 2023-10-04 11:49:20 -07:00
sungem_phy.c
tap.c
tun.c tun: prevent negative ifindex 2023-10-17 17:44:51 -07:00
veth.c net: veth: use newly added page pool API for veth with xdp 2023-10-23 19:14:49 -07:00
virtio_net.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-10-19 13:29:01 -07:00
vrf.c
vsockmon.c
xen-netfront.c