Skip to content

Commit f47cac3

Browse files
Add efuse map install support
1 parent 89f38a1 commit f47cac3

5 files changed

Lines changed: 128 additions & 5 deletions

File tree

Makefile

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ EXTRA_CFLAGS += -Wno-unused-function
1515
EXTRA_CFLAGS += -Wno-unused
1616
EXTRA_CFLAGS += -Wno-uninitialized
1717
EXTRA_CFLAGS += -Wno-declaration-after-statement
18+
EXTRA_CFLAGS += -Wno-missing-prototypes
19+
EXTRA_CFLAGS += -Wno-missing-declarations
1820

1921
# Let the OS decide the regd instead of phy "self-managed"
2022
EXTRA_CFLAGS += -DCONFIG_REGD_SRC_FROM_OS
@@ -126,10 +128,10 @@ EXTRA_CFLAGS += -DCONFIG_RTW_ANDROID=$(CONFIG_RTW_ANDROID)
126128
endif
127129

128130
########################## Debug ###########################
129-
CONFIG_RTW_DEBUG = n
131+
CONFIG_RTW_DEBUG = y
130132
# default log level is _DRV_INFO_ = 4,
131133
# please refer to "How_to_set_driver_debug_log_level.doc" to set the available level.
132-
CONFIG_RTW_LOG_LEVEL = 4
134+
CONFIG_RTW_LOG_LEVEL = 7
133135

134136
# enable /proc/net/rtlxxxx/ debug interfaces
135137
CONFIG_PROC_DEBUG = y
@@ -1152,6 +1154,8 @@ endif
11521154

11531155
EXTRA_CFLAGS += -DCONFIG_EFUSE_CONFIG_FILE
11541156
EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/etc/wifi/wifi_efuse_$(MODULE_NAME).map\"
1157+
EFUSE_MAP_INSTALL_DIR ?= /etc/wifi
1158+
EFUSE_MAP_SRC ?= efuse/wifi_efuse_$(MODULE_NAME).map
11551159

11561160
#WIFIMAC_PATH
11571161
USER_WIFIMAC_PATH ?=
@@ -2619,10 +2623,15 @@ strip:
26192623

26202624
install:
26212625
install -p -m 644 $(MODULE_NAME).ko $(MODDESTDIR)
2626+
@if [ -f "$(EFUSE_MAP_SRC)" ]; then \
2627+
install -d "$(EFUSE_MAP_INSTALL_DIR)"; \
2628+
install -p -m 644 "$(EFUSE_MAP_SRC)" "$(EFUSE_MAP_INSTALL_DIR)/wifi_efuse_$(MODULE_NAME).map"; \
2629+
fi
26222630
/sbin/depmod -a ${KVER}
26232631

26242632
uninstall:
26252633
rm -f $(MODDESTDIR)/$(MODULE_NAME).ko
2634+
rm -f $(EFUSE_MAP_INSTALL_DIR)/wifi_efuse_$(MODULE_NAME).map
26262635
/sbin/depmod -a ${KVER}
26272636

26282637
modules_install:

efuse/wifi_efuse_88x2eu_ohd.map

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
29 81 00 8F FF 00 09 00 9A 04 E4 31 10 03 F1 E8
2+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3+
FF FF 50 50 50 50 48 48 48 48 48 48 4C 4D 4F 50
4+
12 EE FF FF F0 FF F0 E0 FF FF FF FF FF FF FF FF
5+
FF FF FF FF FF FF FF FF FF FF FF FF 53 53 53 53
6+
44 44 44 44 44 44 40 40 3F 3F 12 EE FF FF F0 FF
7+
F0 E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
8+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
9+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
10+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
11+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
12+
FF FF FF FF FF FF FF FF 7F 30 FF 00 FF FF FF FF
13+
FF 01 00 10 00 00 FF FF 00 33 15 FF FF FF FF FF
14+
13 12 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
15+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
16+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
17+
F0 F8 A5 D3 88 C8 64 0C 0D F0 FF FF FF FF FF FF
18+
30 30 FC 90 D8 D8 FD FF 35 9D FF FF FF FF FF FF
19+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
20+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
21+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
22+
DA 0B 1A A8 FF 7E 02 78 22 88 5D D3 82 09 03 52
23+
65 61 6C 74 65 6B 0E 03 38 30 32 2E 31 31 61 63
24+
20 4E 49 43 08 03 31 32 33 34 35 36 FF FF FF FF
25+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
26+
BD FE FF FF 00 00 21 0F FF FF FF FF FF FF FF FF
27+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
28+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
29+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
30+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
31+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
32+
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
33+
9B 58 9B CD 6C 71 01 71 25 70 88 31 48 0F 58 E3
34+
FF FF 00 00 15 81 53 48 EC 8C 00 11 9B 15 00 0A
35+
00 49 40 FF FF FF FF FF FF FF FF FF FF FF FF FF

hal/hal_com.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15660,14 +15660,33 @@ void rtw_dump_cur_efuse(PADAPTER padapter)
1566015660
{
1566115661
int mapsize =0;
1566215662
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(padapter);
15663+
const char *src = "HW EFUSE";
1566315664

1566415665
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN , (void *)&mapsize, _FALSE);
1566515666

1566615667
if (mapsize <= 0 || mapsize > EEPROM_MAX_SIZE) {
1566715668
RTW_ERR("wrong map size %d\n", mapsize);
15669+
printk(KERN_ERR DRIVER_PREFIX "EFUSE dump skipped: wrong map size %d\n", mapsize);
1566815670
return;
1566915671
}
1567015672

15673+
if (hal_data->efuse_file_status == EFUSE_FILE_LOADED)
15674+
src = "EFUSE FILE";
15675+
#ifdef CONFIG_MP_INCLUDED
15676+
else {
15677+
struct mp_priv *mpp = NULL;
15678+
15679+
mpp = (struct mp_priv *)&padapter->mppriv;
15680+
if (rtw_mp_mode_check(padapter) && mpp->efuse_update_on)
15681+
src = "FAKE EFUSE";
15682+
}
15683+
#endif
15684+
printk(KERN_INFO DRIVER_PREFIX "%s dump: map_size=%d first 256 bytes follow\n", src, mapsize);
15685+
print_hex_dump(KERN_INFO, DRIVER_PREFIX "efuse: ",
15686+
DUMP_PREFIX_OFFSET, 16, 1,
15687+
hal_data->efuse_eeprom_data,
15688+
mapsize > 256 ? 256 : mapsize, false);
15689+
1567115690
#ifdef CONFIG_RTW_DEBUG
1567215691
if (hal_data->efuse_file_status == EFUSE_FILE_LOADED)
1567315692
RTW_MAP_DUMP_SEL(RTW_DBGDUMP, "EFUSE FILE", hal_data->efuse_eeprom_data, mapsize);
@@ -15692,28 +15711,42 @@ u32 Hal_readPGDataFromConfigFile(PADAPTER padapter)
1569215711
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(padapter);
1569315712
u32 ret = _FALSE;
1569415713
u32 maplen = 0;
15714+
const char *path = EFUSE_MAP_PATH;
1569515715
#ifdef CONFIG_MP_INCLUDED
1569615716
struct mp_priv *pmp_priv = &padapter->mppriv;
1569715717
#endif
1569815718

1569915719
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN , (void *)&maplen, _FALSE);
15720+
printk(KERN_INFO DRIVER_PREFIX "%s: maplen=%u default_path=%s\n",
15721+
__func__, maplen, EFUSE_MAP_PATH);
1570015722

1570115723
if (maplen < 256 || maplen > EEPROM_MAX_SIZE) {
1570215724
RTW_ERR("eFuse length error :%d\n", maplen);
15725+
printk(KERN_ERR DRIVER_PREFIX "%s: eFuse length error:%u\n",
15726+
__func__, maplen);
1570315727
return _FALSE;
1570415728
}
1570515729
#ifdef CONFIG_MP_INCLUDED
1570615730
if (pmp_priv->efuse_update_file == _TRUE && (rtw_mp_mode_check(padapter))) {
1570715731
RTW_INFO("%s, eFuse read from file :%s\n", __func__, pmp_priv->efuse_file_path);
15732+
path = pmp_priv->efuse_file_path;
15733+
printk(KERN_INFO DRIVER_PREFIX "%s: MP eFuse read from file:%s\n",
15734+
__func__, path);
1570815735
ret = rtw_read_efuse_from_file(pmp_priv->efuse_file_path, hal_data->efuse_eeprom_data, maplen);
1570915736
pmp_priv->efuse_update_file = _FALSE;
1571015737
} else
1571115738
#endif
1571215739
{
15740+
printk(KERN_INFO DRIVER_PREFIX "%s: eFuse read from file:%s\n",
15741+
__func__, path);
1571315742
ret = rtw_read_efuse_from_file(EFUSE_MAP_PATH, hal_data->efuse_eeprom_data, maplen);
1571415743
}
1571515744

1571615745
hal_data->efuse_file_status = ((ret == _FAIL) ? EFUSE_FILE_FAILED : EFUSE_FILE_LOADED);
15746+
printk(KERN_INFO DRIVER_PREFIX "%s: eFuse file %s from %s\n",
15747+
__func__,
15748+
hal_data->efuse_file_status == EFUSE_FILE_LOADED ? "LOADED" : "FAILED",
15749+
path);
1571715750

1571815751
if (hal_data->efuse_file_status == EFUSE_FILE_LOADED)
1571915752
rtw_dump_cur_efuse(padapter);

hal/rtl8822e/rtl8822e_ops.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,9 @@ u8 rtl8822e_read_efuse(PADAPTER adapter)
792792
val8 = rtw_read8(adapter, REG_SYS_EEPROM_CTRL_8822E);
793793
hal->EepromOrEfuse = (val8 & BIT_EERPOMSEL_8822E) ? _TRUE : _FALSE;
794794
hal->bautoload_fail_flag = (val8 & BIT_AUTOLOAD_SUS_8822E) ? _FALSE : _TRUE;
795+
printk(KERN_INFO DRIVER_PREFIX "%s: REG_SYS_EEPROM_CTRL=0x%02x source=%s autoload=%s\n",
796+
__func__, val8, hal->EepromOrEfuse ? "EEPROM" : "EFUSE",
797+
hal->bautoload_fail_flag ? "FAIL" : "OK");
795798
if (hal->bautoload_fail_flag == _TRUE)
796799
RTW_ERR("%s: HW %s AUTO LOAD FAIL!!\n", __func__, hal->EepromOrEfuse ? "EEPROM" : "EFUSE");
797800

@@ -802,6 +805,9 @@ u8 rtl8822e_read_efuse(PADAPTER adapter)
802805

803806
/* 2. Read eFuse */
804807
EFUSE_ShadowMapUpdate(adapter, EFUSE_WIFI, 0);
808+
printk(KERN_INFO DRIVER_PREFIX "%s: HW shadow efuse after EFUSE_ShadowMapUpdate\n",
809+
__func__);
810+
rtw_dump_cur_efuse(adapter);
805811

806812
#ifdef CONFIG_RTL8822E_XCAP_NEW_POLICY
807813
h_efuse_xcap_b9 = efuse_map[EEPROM_XTAL_B9_8822E];
@@ -811,6 +817,8 @@ u8 rtl8822e_read_efuse(PADAPTER adapter)
811817
/* 3. Read Efuse file if necessary */
812818
#ifdef CONFIG_EFUSE_CONFIG_FILE
813819
if (check_phy_efuse_tx_power_info_valid(adapter) == _FALSE) {
820+
printk(KERN_INFO DRIVER_PREFIX "%s: phy efuse tx power info invalid; trying file efuse\n",
821+
__func__);
814822
if (Hal_readPGDataFromConfigFile(adapter) != _SUCCESS)
815823
RTW_WARN("%s: invalid phy efuse and read from file fail, will use driver default!!\n", __FUNCTION__);
816824
#ifdef CONFIG_RTL8822E_XCAP_NEW_POLICY
@@ -819,7 +827,9 @@ u8 rtl8822e_read_efuse(PADAPTER adapter)
819827
f_efuse_xcap_110_111 = ((efuse_map[EEPROM_XTAL_111_8822E] << 8) | efuse_map[EEPROM_XTAL_110_8822E]);
820828
}
821829
#endif
822-
}
830+
} else
831+
printk(KERN_INFO DRIVER_PREFIX "%s: phy efuse tx power info valid; not loading efuse file %s\n",
832+
__func__, EFUSE_MAP_PATH);
823833
#endif /* CONFIG_EFUSE_CONFIG_FILE */
824834

825835
/* 4. Parse Efuse data */
@@ -4299,4 +4309,3 @@ void rtl8822e_set_hal_ops(PADAPTER adapter)
42994309
ops->reqtxrpt = rtl8822e_req_txrpt_cmd;
43004310

43014311
}
4302-

os_dep/linux/usb_intf.c

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ static struct usb_device_id rtw_usb_id_tbl[] = {
315315
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0xE822, 0xff, 0xff, 0xff), .driver_info = RTL8822E}, /* Default ID for USB multi-function */
316316
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0xA82A, 0xff, 0xff, 0xff), .driver_info = RTL8822E}, /* Default ID for USB multi-function */
317317
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0xA81A, 0xff, 0xff, 0xff), .driver_info = RTL8822E}, /* 8812EU */
318+
{USB_DEVICE(USB_VENDER_ID_REALTEK, 0xA81A), .driver_info = RTL8822E}, /* Match even if interface descriptors are not vendor-specific */
318319
#endif /* CONFIG_RTL8822E */
319320

320321

@@ -565,6 +566,11 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf, const s
565566
/* pdvobjpriv->nr_endpoint = 6; */
566567

567568
pdev_desc = &pusbd->descriptor;
569+
printk(KERN_INFO DRV_NAME": usb_dvobj_init: dev=%u-%u vid=%04x pid=%04x bcd=%04x speed=%d configs=%u\n",
570+
pusbd->bus->busnum, pusbd->devnum,
571+
le16_to_cpu(pdev_desc->idVendor), le16_to_cpu(pdev_desc->idProduct),
572+
le16_to_cpu(pdev_desc->bcdDevice), pusbd->speed,
573+
pdev_desc->bNumConfigurations);
568574

569575
#if 0
570576
RTW_INFO("\n8712_usb_device_descriptor:\n");
@@ -592,6 +598,10 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf, const s
592598

593599
phost_iface = &usb_intf->altsetting[0];
594600
piface_desc = &phost_iface->desc;
601+
printk(KERN_INFO DRV_NAME": usb_dvobj_init: intf=%u alt=%u class=%02x subclass=%02x proto=%02x endpoints=%u\n",
602+
piface_desc->bInterfaceNumber, piface_desc->bAlternateSetting,
603+
piface_desc->bInterfaceClass, piface_desc->bInterfaceSubClass,
604+
piface_desc->bInterfaceProtocol, piface_desc->bNumEndpoints);
595605

596606
pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;
597607

@@ -601,6 +611,9 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf, const s
601611
phost_endp = phost_iface->endpoint + i;
602612
if (phost_endp) {
603613
pendp_desc = &phost_endp->desc;
614+
printk(KERN_INFO DRV_NAME": usb_dvobj_init: ep%d addr=0x%02x attr=0x%02x maxpkt=%u interval=%u\n",
615+
i, pendp_desc->bEndpointAddress, pendp_desc->bmAttributes,
616+
le16_to_cpu(pendp_desc->wMaxPacketSize), pendp_desc->bInterval);
604617

605618
RTW_INFO("\nusb_endpoint_descriptor(%d):\n", i);
606619
RTW_INFO("bLength=%x\n", pendp_desc->bLength);
@@ -630,6 +643,9 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf, const s
630643
}
631644

632645
RTW_INFO("nr_endpoint=%d, in_num=%d, out_num=%d\n\n", pdvobjpriv->nr_endpoint, pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
646+
printk(KERN_INFO DRV_NAME": usb_dvobj_init: pipes in=%u out=%u nr_endpoint=%u\n",
647+
pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes,
648+
pdvobjpriv->nr_endpoint);
633649

634650
switch (pusbd->speed) {
635651
case USB_SPEED_LOW:
@@ -1310,29 +1326,42 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
13101326
_adapter *padapter = NULL;
13111327
int status = _FAIL;
13121328
struct dvobj_priv *dvobj;
1329+
struct usb_device *udev = interface_to_usbdev(pusb_intf);
1330+
struct usb_interface_descriptor *idesc = &pusb_intf->cur_altsetting->desc;
13131331
#ifdef CONFIG_CONCURRENT_MODE
13141332
int i;
13151333
#endif
13161334

13171335
/* RTW_INFO("+rtw_drv_init\n"); */
1336+
printk(KERN_INFO DRV_NAME": probe start: dev=%u-%u vid=%04x pid=%04x intf=%u class=%02x subclass=%02x proto=%02x driver_info=0x%lx\n",
1337+
udev->bus->busnum, udev->devnum,
1338+
le16_to_cpu(udev->descriptor.idVendor),
1339+
le16_to_cpu(udev->descriptor.idProduct),
1340+
idesc->bInterfaceNumber, idesc->bInterfaceClass,
1341+
idesc->bInterfaceSubClass, idesc->bInterfaceProtocol,
1342+
(unsigned long)pdid->driver_info);
13181343

13191344
/* step 0. */
13201345
process_spec_devid(pdid);
13211346

13221347
/* Initialize dvobj_priv */
13231348
dvobj = usb_dvobj_init(pusb_intf, pdid);
13241349
if (dvobj == NULL) {
1350+
printk(KERN_ERR DRV_NAME": probe failed: usb_dvobj_init returned NULL\n");
13251351
goto exit;
13261352
}
13271353

13281354
padapter = rtw_usb_primary_adapter_init(dvobj, pusb_intf);
13291355
if (padapter == NULL) {
1356+
printk(KERN_ERR DRV_NAME": probe failed: rtw_usb_primary_adapter_init returned NULL\n");
13301357
RTW_INFO("rtw_usb_primary_adapter_init Failed!\n");
13311358
goto free_dvobj;
13321359
}
13331360

1334-
if (usb_reprobe_switch_usb_mode(padapter) == _TRUE)
1361+
if (usb_reprobe_switch_usb_mode(padapter) == _TRUE) {
1362+
printk(KERN_INFO DRV_NAME": probe stopped: usb_reprobe_switch_usb_mode requested reprobe\n");
13351363
goto free_if_prim;
1364+
}
13361365

13371366
#ifdef CONFIG_CONCURRENT_MODE
13381367
if (padapter->registrypriv.virtual_iface_num > (CONFIG_IFACE_NUMBER - 1))
@@ -1368,6 +1397,8 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
13681397

13691398

13701399
status = _SUCCESS;
1400+
printk(KERN_INFO DRV_NAME": probe success: ifaces=%u mac=%pM\n",
1401+
dvobj->iface_nums, adapter_mac_addr(padapter));
13711402

13721403
#if 0 /* not used now */
13731404
os_ndevs_deinit:
@@ -1376,6 +1407,7 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
13761407
#endif
13771408
free_if_vir:
13781409
if (status != _SUCCESS) {
1410+
printk(KERN_ERR DRV_NAME": probe cleanup: status failed after adapter init\n");
13791411
#ifdef CONFIG_CONCURRENT_MODE
13801412
rtw_drv_stop_vir_ifaces(dvobj);
13811413
rtw_drv_free_vir_ifaces(dvobj);
@@ -1390,6 +1422,8 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
13901422
if (status != _SUCCESS)
13911423
usb_dvobj_deinit(pusb_intf);
13921424
exit:
1425+
if (status != _SUCCESS)
1426+
printk(KERN_ERR DRV_NAME": probe end: returning -ENODEV\n");
13931427
return status == _SUCCESS ? 0 : -ENODEV;
13941428
}
13951429

@@ -1468,6 +1502,7 @@ static int __init rtw_drv_entry(void)
14681502
{
14691503
int ret = 0;
14701504

1505+
printk(KERN_INFO DRV_NAME": module init start\n");
14711506
RTW_PRINT("module init start\n");
14721507
dump_drv_version(RTW_DBGDUMP);
14731508
#ifdef BTCOEXVERSION
@@ -1495,6 +1530,7 @@ static int __init rtw_drv_entry(void)
14951530
rtw_inetaddr_notifier_register();
14961531

14971532
ret = usb_register(&usb_drv.usbdrv);
1533+
printk(KERN_INFO DRV_NAME": usb_register ret=%d\n", ret);
14981534

14991535
if (ret != 0) {
15001536
usb_drv.drv_registered = _FALSE;
@@ -1510,6 +1546,7 @@ static int __init rtw_drv_entry(void)
15101546
}
15111547

15121548
exit:
1549+
printk(KERN_INFO DRV_NAME": module init ret=%d\n", ret);
15131550
RTW_PRINT("module init ret=%d\n", ret);
15141551
return ret;
15151552
}

0 commit comments

Comments
 (0)