From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 03:04:41 +0000 Subject: [PATCH] rk3568 rt init --- kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c | 265 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 188 insertions(+), 77 deletions(-) diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c index 33307c8..f05a119 100644 --- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c +++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c @@ -141,7 +141,7 @@ {BCM43751_CHIP_ID, 1, DONT_CARE, "bcm43751a1_pcie_ag", ""}, {BCM43751_CHIP_ID, 2, DONT_CARE, "bcm43751a2_pcie_ag", ""}, {BCM43752_CHIP_ID, 1, DONT_CARE, "bcm43752a1_pcie_ag", ""}, - {BCM43752_CHIP_ID, 2, DONT_CARE, "bcm43752a2_pcie_ag", "AP6275P"}, + {BCM43752_CHIP_ID, 2, DONT_CARE, "bcm43752a2_pcie_ag", "ap6275p"}, {BCM4375_CHIP_ID, 5, DONT_CARE, "bcm4375b4_pcie_ag", ""}, #endif #ifdef BCMDBUS @@ -271,7 +271,6 @@ chip == BCM4334_CHIP_ID || chip == BCM43340_CHIP_ID || chip == BCM43341_CHIP_ID || chip == BCM4324_CHIP_ID || chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID || - chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID || chip == BCM43143_CHIP_ID || chip == BCM43242_CHIP_ID || chip == BCM43569_CHIP_ID) { return false; @@ -282,7 +281,7 @@ #endif #ifdef BCMSDIO -bool +static void dhd_conf_disable_slpauto(dhd_pub_t *dhd) { uint chip = dhd->conf->chip; @@ -296,10 +295,9 @@ chip == BCM43430_CHIP_ID || chip == BCM4345_CHIP_ID || chip == BCM43454_CHIP_ID || chip == BCM4359_CHIP_ID) { - return false; + dhd_slpauto = FALSE; } - - return true; + CONFIG_MSG("dhd_slpauto = %d\n", dhd_slpauto); } #endif @@ -1377,7 +1375,6 @@ return; } - #endif /* DHD_LINUX_STD_FW_API */ void @@ -1415,7 +1412,6 @@ #endif #ifdef DHD_LINUX_STD_FW_API - // preprocess the filename to only left 'name' dhd_conf_add_filepath(dhd, fw_path); dhd_conf_add_filepath(dhd, nv_path); dhd_conf_add_filepath(dhd, dhd->clm_path); @@ -2464,12 +2460,24 @@ int *hostsleep_set, int *hostsleep_val, int *ret) { if (dhd->conf->insuspend & (NO_TXCTL_IN_SUSPEND | WOWL_IN_SUSPEND)) { + int wowl_dngldown = 0; +#ifdef WL_EXT_WOWL + wowl_dngldown = dhd_conf_wowl_dngldown(dhd); +#endif if (cmd == WLC_SET_VAR) { char *psleep = NULL; - psleep = strstr(buf, "hostsleep"); - if (psleep) { - *hostsleep_set = 1; - memcpy(hostsleep_val, psleep+strlen("hostsleep")+1, sizeof(int)); + if (wowl_dngldown) { + psleep = strstr(buf, "wowl_activate"); + if (psleep) { + *hostsleep_set = 1; + memcpy(hostsleep_val, psleep+strlen("wowl_activate")+1, sizeof(int)); + } + } else { + psleep = strstr(buf, "hostsleep"); + if (psleep) { + *hostsleep_set = 1; + memcpy(hostsleep_val, psleep+strlen("hostsleep")+1, sizeof(int)); + } } } if (dhd->hostsleep && (!*hostsleep_set || *hostsleep_val)) { @@ -2710,6 +2718,21 @@ } return ret; +} + +int +dhd_conf_wowl_dngldown(dhd_pub_t *dhd) +{ + int wowl_dngldown = 0; +#ifdef BCMDBUS + uint insuspend = 0; + insuspend = dhd_conf_get_insuspend(dhd, ALL_IN_SUSPEND); + if ((insuspend & WOWL_IN_SUSPEND) && dhd_master_mode) { + wowl_dngldown = dhd->conf->wowl_dngldown; + } +#endif + + return wowl_dngldown; } #endif @@ -2971,8 +2994,12 @@ for(i=0; i<conf->pkt_filter_add.count; i++) { dhd_conf_wowl_pattern(dhd, ifidx, TRUE, conf->pkt_filter_add.filter[i]); } + CONFIG_MSG("wowl = 0x%x\n", conf->wowl); dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl", conf->wowl, 0, FALSE); - dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_activate", 1, 0, FALSE); +#ifdef BCMDBUS + CONFIG_MSG("wowl_dngldown = %d\n", conf->wowl_dngldown); + dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_dngldown", conf->wowl_dngldown, 1, FALSE); +#endif dhd_conf_wowl_wakeind(dhd, ifidx, TRUE); } #endif @@ -2988,7 +3015,7 @@ #ifdef WL_EXT_WOWL if (insuspend & WOWL_IN_SUSPEND) { dhd_conf_wowl_wakeind(dhd, ifidx, FALSE); - dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_activate", 0, 0, FALSE); +// dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_activate", 0, 0, FALSE); dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl", 0, 0, FALSE); dhd_conf_wowl_pattern(dhd, ifidx, FALSE, "clr"); } @@ -3038,19 +3065,32 @@ if (suspend) { if (insuspend & (WOWL_IN_SUSPEND | NO_TXCTL_IN_SUSPEND)) { -#ifdef BCMSDIO uint32 intstatus = 0; - int ret = 0; -#endif - int hostsleep = 2; + int ret = 0, hostsleep = 2, wowl_dngldown = 0; #ifdef WL_EXT_WOWL hostsleep = 1; + if ((insuspend & WOWL_IN_SUSPEND) && dhd_master_mode) { + dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "wowl_activate", 1, 0, FALSE); +#ifdef BCMDBUS + wowl_dngldown = dhd->conf->wowl_dngldown; #endif - dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "hostsleep", hostsleep, 0, FALSE); + } +#endif + if (!wowl_dngldown) { + dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "hostsleep", hostsleep, 0, FALSE); + } #ifdef BCMSDIO ret = dhd_bus_sleep(dhd, TRUE, &intstatus); - CONFIG_TRACE("ret = %d, intstatus = 0x%x\n", ret, intstatus); #endif +#ifdef BCMPCIE + ret = dhd_bus_sleep(dhd, TRUE, NULL); +#endif +#ifdef BCMDBUS + if (wowl_dngldown) { + ret = dhd_bus_sleep(dhd, TRUE, NULL); + } +#endif + CONFIG_MSG("ret = %d, intstatus = 0x%x\n", ret, intstatus); } } else { if (insuspend & (WOWL_IN_SUSPEND | NO_TXCTL_IN_SUSPEND)) { @@ -3976,9 +4016,9 @@ CONFIG_MSG("dhd_doflow = %d\n", dhd_doflow); } else if (!strncmp("dhd_slpauto=", full_param, len_param)) { - if (!strncmp(data, "0", 1)) - dhd_slpauto = FALSE; - else if (dhd_conf_disable_slpauto(dhd)) + if (!strncmp(data, "0", 1)) { + dhd_conf_disable_slpauto(dhd); + } else dhd_slpauto = TRUE; CONFIG_MSG("dhd_slpauto = %d\n", dhd_slpauto); } @@ -4150,6 +4190,14 @@ conf->enq_hdr_pkt = (int)simple_strtol(data, NULL, 0); CONFIG_MSG("enq_hdr_pkt = 0x%x\n", conf->enq_hdr_pkt); } + else if (!strncmp("aspm=", full_param, len_param)) { + conf->aspm = (int)simple_strtol(data, NULL, 0); + CONFIG_MSG("aspm = %d\n", conf->aspm); + } + else if (!strncmp("l1ss=", full_param, len_param)) { + conf->l1ss = (int)simple_strtol(data, NULL, 0); + CONFIG_MSG("l1ss = %d\n", conf->l1ss); + } else return false; @@ -4208,6 +4256,12 @@ conf->wowl = (int)simple_strtol(data, NULL, 0); CONFIG_MSG("wowl = 0x%x\n", conf->wowl); } +#ifdef BCMDBUS + else if (!strncmp("wowl_dngldown=", full_param, len_param)) { + conf->wowl_dngldown = (int)simple_strtol(data, NULL, 0); + CONFIG_MSG("wowl_dngldown = 0x%x\n", conf->wowl_dngldown); + } +#endif #endif else if (!strncmp("rekey_offload=", full_param, len_param)) { if (!strncmp(data, "1", 1)) @@ -4819,7 +4873,108 @@ } } + +static void +dhd_conf_set_ampdu_mpdu(dhd_pub_t *dhd) +{ + uint chip = dhd->conf->chip; + char ampdu_mpdu[32] = "ampdu_mpdu="; + int val = -1; + + if (chip == BCM43362_CHIP_ID || chip == BCM4330_CHIP_ID || + chip == BCM4334_CHIP_ID || chip == BCM43340_CHIP_ID || + chip == BCM43341_CHIP_ID || chip == BCM4324_CHIP_ID || + chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID || + chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID || + chip == BCM4371_CHIP_ID || + chip == BCM43430_CHIP_ID || + chip == BCM4345_CHIP_ID || chip == BCM43454_CHIP_ID || + chip == BCM4359_CHIP_ID || chip == BCM43012_CHIP_ID) { + val = 16; + } else if (chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID) { + val = 32; + } + + if (val > 0) { + snprintf(ampdu_mpdu+strlen(ampdu_mpdu), sizeof(ampdu_mpdu), "%d", val); + dhd_conf_set_wl_cmd(dhd, ampdu_mpdu, TRUE); + } +} + +#if defined(SDIO_ISR_THREAD) +static void +dhd_conf_set_intr_extn(dhd_pub_t *dhd) +{ + uint chip = dhd->conf->chip; + + if (chip == BCM43012_CHIP_ID || + chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID || + chip == BCM43454_CHIP_ID || chip == BCM4345_CHIP_ID || + chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID || + chip == BCM4345_CHIP_ID || chip == BCM4371_CHIP_ID || + chip == BCM4359_CHIP_ID || + chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID || + chip == BCM4375_CHIP_ID) { + CONFIG_TRACE("enable intr_extn\n"); + dhd->conf->intr_extn = TRUE; + } +} +#endif /* SDIO_ISR_THREAD */ #endif + +static void +dhd_conf_set_txbf(dhd_pub_t *dhd) +{ + uint chip = dhd->conf->chip; + + if (chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID || + chip == BCM4371_CHIP_ID || chip == BCM4359_CHIP_ID || + chip == BCM43569_CHIP_ID || + chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID || + chip == BCM4375_CHIP_ID) { + CONFIG_TRACE("enable txbf\n"); + dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "txbf", 1, 0, FALSE); + } +} + +static void +dhd_conf_tput_improve(dhd_pub_t *dhd) +{ + struct dhd_conf *conf = dhd->conf; + uint chip = conf->chip; + uint chiprev = conf->chiprev; + + if ((chip == BCM43430_CHIP_ID && chiprev == 2) || + chip == BCM43012_CHIP_ID || + chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID || + chip == BCM43454_CHIP_ID || chip == BCM4345_CHIP_ID || + chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID || + chip == BCM4345_CHIP_ID || chip == BCM4371_CHIP_ID || + chip == BCM43569_CHIP_ID || chip == BCM4359_CHIP_ID || + chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID || + chip == BCM4375_CHIP_ID) { + CONFIG_TRACE("enable tput parameters\n"); +#ifdef DHDTCPACK_SUPPRESS +#ifdef BCMSDIO + conf->tcpack_sup_mode = TCPACK_SUP_REPLACE; +#endif +#endif +#if defined(BCMSDIO) || defined(BCMPCIE) + dhd_rxbound = 128; + dhd_txbound = 64; +#endif + conf->frameburst = 1; +#ifdef BCMSDIO + conf->dhd_txminmax = -1; + conf->txinrx_thres = 128; +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) + conf->orphan_move = 1; +#else + conf->orphan_move = 0; +#endif + } +} #ifdef UPDATE_MODULE_NAME #if defined(BCMSDIO) || defined(BCMPCIE) @@ -4915,26 +5070,14 @@ dhd_conf_preinit_ioctls_sta(dhd, 0); dhd_conf_set_wl_cmd(dhd, wl_preinit, TRUE); #if defined(BCMSDIO) - if (conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID) { - char ampdu_mpdu[] = "ampdu_mpdu=32"; - dhd_conf_set_wl_cmd(dhd, ampdu_mpdu, TRUE); - } else { - char ampdu_mpdu[] = "ampdu_mpdu=16"; - dhd_conf_set_wl_cmd(dhd, ampdu_mpdu, TRUE); - } + dhd_conf_set_ampdu_mpdu(dhd); #endif #ifdef DHD_TPUT_PATCH if (dhd->conf->mtu) dhd_change_mtu(dhd, dhd->conf->mtu, 0); #endif - if (conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID || - conf->chip == BCM4371_CHIP_ID || conf->chip == BCM4359_CHIP_ID || - conf->chip == BCM43569_CHIP_ID || - conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID || - conf->chip == BCM4375_CHIP_ID) { - dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "txbf", 1, 0, FALSE); - } + dhd_conf_set_txbf(dhd); if (conf->chip == BCM4375_CHIP_ID) { char he_cmd[] = "110=1, nmode=1, vhtmode=1, he=enab 1"; dhd_conf_set_wl_cmd(dhd, he_cmd, TRUE); @@ -5115,10 +5258,12 @@ #endif #endif #ifdef BCMPCIE - conf->bus_deepsleep_disable = 1; + conf->bus_deepsleep_disable = -1; conf->flow_ring_queue_threshold = FLOW_RING_QUEUE_THRESHOLD; conf->d2h_intr_method = -1; conf->d2h_intr_control = -1; + conf->aspm = -1; + conf->l1ss = -1; conf->enq_hdr_pkt = 0; #endif conf->dpc_cpucore = -1; @@ -5135,6 +5280,9 @@ #ifdef WL_EXT_WOWL dhd_master_mode = TRUE; conf->wowl = WL_WOWL_NET|WL_WOWL_DIS|WL_WOWL_BCN; +#ifdef BCMDBUS + conf->wowl_dngldown = 0; +#endif conf->insuspend |= (WOWL_IN_SUSPEND | NO_TXDATA_IN_SUSPEND); #endif if (conf->suspend_mode == PM_NOTIFIER || conf->suspend_mode == SUSPEND_MODE_2) @@ -5226,46 +5374,9 @@ memset(conf->isam_enable, 0, sizeof(conf->isam_enable)); #endif #if defined(SDIO_ISR_THREAD) - if (conf->chip == BCM43012_CHIP_ID || - conf->chip == BCM4335_CHIP_ID || conf->chip == BCM4339_CHIP_ID || - conf->chip == BCM43454_CHIP_ID || conf->chip == BCM4345_CHIP_ID || - conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID || - conf->chip == BCM4345_CHIP_ID || conf->chip == BCM4371_CHIP_ID || - conf->chip == BCM4359_CHIP_ID || - conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID || - conf->chip == BCM4375_CHIP_ID) { - conf->intr_extn = TRUE; - } + dhd_conf_set_intr_extn(dhd); #endif - if ((conf->chip == BCM43430_CHIP_ID && conf->chiprev == 2) || - conf->chip == BCM43012_CHIP_ID || - conf->chip == BCM4335_CHIP_ID || conf->chip == BCM4339_CHIP_ID || - conf->chip == BCM43454_CHIP_ID || conf->chip == BCM4345_CHIP_ID || - conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID || - conf->chip == BCM4345_CHIP_ID || conf->chip == BCM4371_CHIP_ID || - conf->chip == BCM43569_CHIP_ID || conf->chip == BCM4359_CHIP_ID || - conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID || - conf->chip == BCM4375_CHIP_ID) { -#ifdef DHDTCPACK_SUPPRESS -#ifdef BCMSDIO - conf->tcpack_sup_mode = TCPACK_SUP_REPLACE; -#endif -#endif -#if defined(BCMSDIO) || defined(BCMPCIE) - dhd_rxbound = 128; - dhd_txbound = 64; -#endif - conf->frameburst = 1; -#ifdef BCMSDIO - conf->dhd_txminmax = -1; - conf->txinrx_thres = 128; -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) - conf->orphan_move = 1; -#else - conf->orphan_move = 0; -#endif - } + dhd_conf_tput_improve(dhd); #ifdef DHD_TPUT_PATCH if (conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID || conf->chip == BCM4375_CHIP_ID) { -- Gitblit v1.6.2