Skip to content
This repository has been archived by the owner on Jul 7, 2021. It is now read-only.

Commit

Permalink
techpack: data: Merge tag 'LA.UM.8.9.r1-07100-SM6xx.0' into neutrino-…
Browse files Browse the repository at this point in the history
…msm-hotdogb-4.14

"LA.UM.8.9.r1-07100-SM6xx.0"

* tag 'LA.UM.8.9.r1-07100-SM6xx.0':
  rmnet_shs: add userspace flow movement and slow start support
  data-kernel:EMAC: Fix the mac addr parser.
  data-kernel:emac: Support for reading MAC addr from config ini
  data-kernel: EMAC: Check NAPI before calling netif_rx_skb
  drivers: rmnet_perf: Take lock during DL marker handling
  drivers: rmnet_perf: Avoid recursive spinlock in legacy mode

Signed-off-by: Adam W. Willis <return.of.octobot@gmail.com>
  • Loading branch information
0ctobot committed Dec 27, 2019
2 parents d98d038 + 5a4b9ef commit b77b8a4
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 46 deletions.
18 changes: 11 additions & 7 deletions techpack/data/drivers/emac-dwc-eqos/DWC_ETH_QOS_ipa.c
Expand Up @@ -684,15 +684,19 @@ static void ntn_ipa_notify_cb(void *priv, enum ipa_dp_evt_type evt,

/* Submit packet to network stack */
/* If its a ping packet submit it via rx_ni else use rx */
if (ip_hdr->protocol == IPPROTO_ICMP) {
stat = netif_rx_ni(skb);
} else if ((pdata->dev->stats.rx_packets %
IPA_ETH_RX_SOFTIRQ_THRESH) == 0){
stat = netif_rx_ni(skb);
/* If NAPI is enabled call receive_skb */
if(ipa_get_lan_rx_napi()){
stat = netif_receive_skb(skb);
} else {
stat = netif_rx(skb);
if (ip_hdr->protocol == IPPROTO_ICMP) {
stat = netif_rx_ni(skb);
} else if ((pdata->dev->stats.rx_packets %
IPA_ETH_RX_SOFTIRQ_THRESH) == 0){
stat = netif_rx_ni(skb);
} else {
stat = netif_rx(skb);
}
}

if(stat == NET_RX_DROP) {
pdata->dev->stats.rx_dropped++;
} else {
Expand Down
100 changes: 61 additions & 39 deletions techpack/data/drivers/emac-dwc-eqos/DWC_ETH_QOS_platform.c
Expand Up @@ -51,10 +51,13 @@

void *ipc_emac_log_ctxt;

static UCHAR dev_addr[6] = {0, 0x55, 0x7b, 0xb5, 0x7d, 0xf7};
#define MAC_ADDR_CFG_FPATH "/data/emac_config.ini"
static UCHAR dev_addr[ETH_ALEN] = {0, 0x55, 0x7b, 0xb5, 0x7d, 0xf7};
struct DWC_ETH_QOS_res_data dwc_eth_qos_res_data = {0, };
static struct msm_bus_scale_pdata *emac_bus_scale_vec = NULL;

UCHAR config_dev_addr[ETH_ALEN];

ULONG dwc_eth_qos_base_addr;
ULONG dwc_rgmii_io_csr_base_addr;
struct DWC_ETH_QOS_prv_data *gDWC_ETH_QOS_prv_data;
Expand Down Expand Up @@ -89,38 +92,6 @@ MODULE_PARM_DESC(phy_interrupt_en,

struct ip_params pparams = {};
#ifdef DWC_ETH_QOS_BUILTIN
/*!
* \brief API to extract MAC Address from given string
*
* \param[in] pointer to MAC Address string
*
* \return None
*/
void DWC_ETH_QOS_extract_macid(char *mac_addr)
{
char *input = NULL;
int i = 0;
UCHAR mac_id = 0;

if (!mac_addr)
return;

/* Extract MAC ID byte by byte */
input = strsep(&mac_addr, ":");
while(input != NULL && i < DWC_ETH_QOS_MAC_ADDR_LEN) {
sscanf(input, "%x", &mac_id);
pparams.mac_addr[i++] = mac_id;
input = strsep(&mac_addr, ":");
}
if (!is_valid_ether_addr(pparams.mac_addr)) {
EMACERR("Invalid Mac address programmed: %s\n", mac_addr);
return;
} else
pparams.is_valid_mac_addr = true;

return;
}

static int __init set_early_ethernet_ipv4(char *ipv4_addr_in)
{
int ret = 1;
Expand Down Expand Up @@ -170,17 +141,25 @@ __setup("eipv6=", set_early_ethernet_ipv6);
static int __init set_early_ethernet_mac(char* mac_addr)
{
int ret = 1;
char temp_mac_addr[DWC_ETH_QOS_MAC_ADDR_STR_LEN];
pparams.is_valid_mac_addr = false;
bool valid_mac = false;

pparams.is_valid_mac_addr = false;
if(!mac_addr)
return ret;

strlcpy(temp_mac_addr, mac_addr, sizeof(temp_mac_addr));
EMACDBG("Early ethernet MAC address assigned: %s\n", temp_mac_addr);
temp_mac_addr[DWC_ETH_QOS_MAC_ADDR_STR_LEN-1] = '\0';
valid_mac = mac_pton(mac_addr, pparams.mac_addr);
if(!valid_mac)
goto fail;

valid_mac = is_valid_ether_addr(pparams.mac_addr);
if (!valid_mac)
goto fail;

DWC_ETH_QOS_extract_macid(temp_mac_addr);
pparams.is_valid_mac_addr = true;
return ret;

fail:
EMACERR("Invalid Mac address programmed: %s\n", mac_addr);
return ret;
}
__setup("ermac=", set_early_ethernet_mac);
Expand Down Expand Up @@ -1604,6 +1583,47 @@ u32 l3mdev_fib_table1 (const struct net_device *dev)

const struct l3mdev_ops l3mdev_op1 = {.l3mdev_fib_table = l3mdev_fib_table1};

/*!
* \brief Parse the config file to obtain the MAC address
*
* \param[in] None
*
* \return None
*
*/

static void DWC_ETH_QOS_read_mac_addr_from_config(void)
{
int ret = -ENOENT;
void *data = NULL;
char *file_path = MAC_ADDR_CFG_FPATH;
loff_t size = 0;
loff_t max_size = 30;

EMACDBG("Enter\n");

ret = kernel_read_file_from_path(file_path, &data, &size,
max_size, READING_POLICY);

if (ret < 0) {
EMACINFO("unable to open file: %s (%d)\n", file_path, ret);
goto ret;
}

if (!mac_pton(data, config_dev_addr) && !is_valid_ether_addr(config_dev_addr)) {
EMACERR("Invalid mac addr found in emac_config.ini\n");
goto ret;
}

EMACDBG("mac address read from config.ini successfully\n");
ether_addr_copy(dev_addr, config_dev_addr);

ret:
if (data)
vfree(data);
return;
}

static int DWC_ETH_QOS_configure_netdevice(struct platform_device *pdev)
{
struct DWC_ETH_QOS_prv_data *pdata = NULL;
Expand All @@ -1629,6 +1649,8 @@ static int DWC_ETH_QOS_configure_netdevice(struct platform_device *pdev)

if (pparams.is_valid_mac_addr == true)
ether_addr_copy(dev_addr, pparams.mac_addr);
else
DWC_ETH_QOS_read_mac_addr_from_config();

dev->dev_addr[0] = dev_addr[0];
dev->dev_addr[1] = dev_addr[1];
Expand Down
14 changes: 14 additions & 0 deletions techpack/data/drivers/rmnet/perf/rmnet_perf_core.c
Expand Up @@ -498,6 +498,10 @@ rmnet_perf_core_handle_map_control_start(struct rmnet_map_dl_ind_hdr *dlhdr)
struct rmnet_perf *perf = rmnet_perf_config_get_perf();
struct rmnet_perf_core_burst_marker_state *bm_state;

/* If handling deaggregation, we're already locked */
if (!rmnet_perf_core_is_deag_mode())
rmnet_perf_core_grab_lock();

bm_state = perf->core_meta->bm_state;
/* if we get two starts in a row, without an end, then we flush
* and carry on
Expand All @@ -516,6 +520,9 @@ rmnet_perf_core_handle_map_control_start(struct rmnet_map_dl_ind_hdr *dlhdr)
trace_rmnet_perf_low(RMNET_PERF_MODULE, RMNET_PERF_START_DL_MRK,
bm_state->expect_packets, 0xDEF, 0xDEF, 0xDEF,
NULL, NULL);

if (!rmnet_perf_core_is_deag_mode())
rmnet_perf_core_release_lock();
}

void rmnet_perf_core_handle_map_control_end_v2(struct rmnet_map_dl_ind_trl *dltrl,
Expand All @@ -529,6 +536,10 @@ void rmnet_perf_core_handle_map_control_end(struct rmnet_map_dl_ind_trl *dltrl)
struct rmnet_perf *perf = rmnet_perf_config_get_perf();
struct rmnet_perf_core_burst_marker_state *bm_state;

/* If handling deaggregation, we're already locked */
if (!rmnet_perf_core_is_deag_mode())
rmnet_perf_core_grab_lock();

bm_state = perf->core_meta->bm_state;
rmnet_perf_opt_flush_all_flow_nodes();
rmnet_perf_core_flush_reason_cnt[RMNET_PERF_CORE_DL_MARKER_FLUSHES]++;
Expand All @@ -537,6 +548,9 @@ void rmnet_perf_core_handle_map_control_end(struct rmnet_map_dl_ind_trl *dltrl)
bm_state->expect_packets = 0;
trace_rmnet_perf_low(RMNET_PERF_MODULE, RMNET_PERF_END_DL_MRK, 0xDEF,
0xDEF, 0xDEF, 0xDEF, NULL, NULL);

if (!rmnet_perf_core_is_deag_mode())
rmnet_perf_core_release_lock();
}

int rmnet_perf_core_validate_pkt_csum(struct sk_buff *skb,
Expand Down
Empty file modified techpack/data/drivers/rmnet/shs/rmnet_shs_wq.c 100644 → 100755
Empty file.

0 comments on commit b77b8a4

Please sign in to comment.