Loading drivers/platform/msm/Kconfig +12 −0 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,18 @@ config R8125_IOSS To compile this driver as a module, choose M here. Module will be To compile this driver as a module, choose M here. Module will be called r8125_ioss. If unsure, say N. called r8125_ioss. If unsure, say N. config R8168_IOSS tristate "Realtek R8168 IOSS glue driver" depends on R8168 depends on IOSS help Enables IPA Ethernet Offload path on Realtek R8168 NIC. It is designed to support generic HW processing of UL/DL IP packets for various use cases to reduce the CPU load during E2E IP traffic. To compile this driver as a module, choose M here. Module will be called r8168_ioss. If unsure, say N. config AQFWD_IOSS config AQFWD_IOSS tristate "AQC glue driver for IOSS v2" tristate "AQC glue driver for IOSS v2" depends on AQFWD depends on AQFWD Loading drivers/platform/msm/ep_pcie/ep_pcie_core.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -828,6 +828,9 @@ static void ep_pcie_core_init(struct ep_pcie_dev_t *dev, bool configured) ep_pcie_write_mask(dev->dm_core + PCIE20_L1SUB_CAPABILITY, 0, ep_pcie_write_mask(dev->dm_core + PCIE20_L1SUB_CAPABILITY, 0, 0x1f); 0x1f); /* Set CLK_PM_EN which allows to configure the clock-power-man bit below for EP */ ep_pcie_write_mask(dev->elbi + PCIE20_ELBI_SYS_CTRL, 1, BIT(7)); /* Enable Clock Power Management */ /* Enable Clock Power Management */ ep_pcie_write_reg_field(dev->dm_core, PCIE20_LINK_CAPABILITIES, ep_pcie_write_reg_field(dev->dm_core, PCIE20_LINK_CAPABILITIES, PCIE20_MASK_CLOCK_POWER_MAN, 0x1); PCIE20_MASK_CLOCK_POWER_MAN, 0x1); Loading drivers/usb/gadget/function/f_cdev.c +6 −0 Original line number Original line Diff line number Diff line Loading @@ -1617,6 +1617,7 @@ static long f_cdev_ioctl(struct file *fp, unsigned int cmd, int i = 0; int i = 0; uint32_t val; uint32_t val; struct f_cdev *port; struct f_cdev *port; unsigned long flags; port = fp->private_data; port = fp->private_data; if (!port) { if (!port) { Loading @@ -1638,11 +1639,13 @@ static long f_cdev_ioctl(struct file *fp, unsigned int cmd, break; break; case TIOCMGET: case TIOCMGET: pr_debug("TIOCMGET on port(%s)%pK\n", port->name, port); pr_debug("TIOCMGET on port(%s)%pK\n", port->name, port); spin_lock_irqsave(&port->port_lock, flags); ret = f_cdev_tiocmget(port); ret = f_cdev_tiocmget(port); if (ret >= 0) { if (ret >= 0) { ret = put_user(ret, (uint32_t *)arg); ret = put_user(ret, (uint32_t *)arg); port->cbits_updated = false; port->cbits_updated = false; } } spin_unlock_irqrestore(&port->port_lock, flags); break; break; default: default: pr_err("Received cmd:%d not supported\n", cmd); pr_err("Received cmd:%d not supported\n", cmd); Loading @@ -1658,6 +1661,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits) int temp; int temp; struct f_cdev *port = fport; struct f_cdev *port = fport; struct cserial *cser; struct cserial *cser; unsigned long flags; cser = &port->port_usb; cser = &port->port_usb; if (!port) { if (!port) { Loading @@ -1672,6 +1676,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits) if (temp == port->cbits_to_modem) if (temp == port->cbits_to_modem) return; return; spin_lock_irqsave(&port->port_lock, flags); port->cbits_to_modem = temp; port->cbits_to_modem = temp; port->cbits_updated = true; port->cbits_updated = true; Loading @@ -1686,6 +1691,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits) cser->send_modem_ctrl_bits(cser, cbits_to_laptop); cser->send_modem_ctrl_bits(cser, cbits_to_laptop); } } spin_unlock_irqrestore(&port->port_lock, flags); wake_up(&port->read_wq); wake_up(&port->read_wq); } } Loading include/linux/ipa_eth.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -2,7 +2,7 @@ /* /* * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. * * * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. */ */ #ifndef _IPA_ETH_H_ #ifndef _IPA_ETH_H_ Loading Loading @@ -109,12 +109,14 @@ struct ipa_eth_aqc_setup_info { * @bar_size: bar region size * @bar_size: bar region size * @queue_number: Which RTK queue to check the status on * @queue_number: Which RTK queue to check the status on * @dest_tail_ptr_offs: tail ptr offset * @dest_tail_ptr_offs: tail ptr offset * @num_queues_enabled: Total queues to be enable */ */ struct ipa_eth_realtek_setup_info { struct ipa_eth_realtek_setup_info { phys_addr_t bar_addr; phys_addr_t bar_addr; u32 bar_size; u32 bar_size; u8 queue_number; u8 queue_number; phys_addr_t dest_tail_ptr_offs; phys_addr_t dest_tail_ptr_offs; u8 num_queues_enabled; }; }; Loading Loading
drivers/platform/msm/Kconfig +12 −0 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,18 @@ config R8125_IOSS To compile this driver as a module, choose M here. Module will be To compile this driver as a module, choose M here. Module will be called r8125_ioss. If unsure, say N. called r8125_ioss. If unsure, say N. config R8168_IOSS tristate "Realtek R8168 IOSS glue driver" depends on R8168 depends on IOSS help Enables IPA Ethernet Offload path on Realtek R8168 NIC. It is designed to support generic HW processing of UL/DL IP packets for various use cases to reduce the CPU load during E2E IP traffic. To compile this driver as a module, choose M here. Module will be called r8168_ioss. If unsure, say N. config AQFWD_IOSS config AQFWD_IOSS tristate "AQC glue driver for IOSS v2" tristate "AQC glue driver for IOSS v2" depends on AQFWD depends on AQFWD Loading
drivers/platform/msm/ep_pcie/ep_pcie_core.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -828,6 +828,9 @@ static void ep_pcie_core_init(struct ep_pcie_dev_t *dev, bool configured) ep_pcie_write_mask(dev->dm_core + PCIE20_L1SUB_CAPABILITY, 0, ep_pcie_write_mask(dev->dm_core + PCIE20_L1SUB_CAPABILITY, 0, 0x1f); 0x1f); /* Set CLK_PM_EN which allows to configure the clock-power-man bit below for EP */ ep_pcie_write_mask(dev->elbi + PCIE20_ELBI_SYS_CTRL, 1, BIT(7)); /* Enable Clock Power Management */ /* Enable Clock Power Management */ ep_pcie_write_reg_field(dev->dm_core, PCIE20_LINK_CAPABILITIES, ep_pcie_write_reg_field(dev->dm_core, PCIE20_LINK_CAPABILITIES, PCIE20_MASK_CLOCK_POWER_MAN, 0x1); PCIE20_MASK_CLOCK_POWER_MAN, 0x1); Loading
drivers/usb/gadget/function/f_cdev.c +6 −0 Original line number Original line Diff line number Diff line Loading @@ -1617,6 +1617,7 @@ static long f_cdev_ioctl(struct file *fp, unsigned int cmd, int i = 0; int i = 0; uint32_t val; uint32_t val; struct f_cdev *port; struct f_cdev *port; unsigned long flags; port = fp->private_data; port = fp->private_data; if (!port) { if (!port) { Loading @@ -1638,11 +1639,13 @@ static long f_cdev_ioctl(struct file *fp, unsigned int cmd, break; break; case TIOCMGET: case TIOCMGET: pr_debug("TIOCMGET on port(%s)%pK\n", port->name, port); pr_debug("TIOCMGET on port(%s)%pK\n", port->name, port); spin_lock_irqsave(&port->port_lock, flags); ret = f_cdev_tiocmget(port); ret = f_cdev_tiocmget(port); if (ret >= 0) { if (ret >= 0) { ret = put_user(ret, (uint32_t *)arg); ret = put_user(ret, (uint32_t *)arg); port->cbits_updated = false; port->cbits_updated = false; } } spin_unlock_irqrestore(&port->port_lock, flags); break; break; default: default: pr_err("Received cmd:%d not supported\n", cmd); pr_err("Received cmd:%d not supported\n", cmd); Loading @@ -1658,6 +1661,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits) int temp; int temp; struct f_cdev *port = fport; struct f_cdev *port = fport; struct cserial *cser; struct cserial *cser; unsigned long flags; cser = &port->port_usb; cser = &port->port_usb; if (!port) { if (!port) { Loading @@ -1672,6 +1676,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits) if (temp == port->cbits_to_modem) if (temp == port->cbits_to_modem) return; return; spin_lock_irqsave(&port->port_lock, flags); port->cbits_to_modem = temp; port->cbits_to_modem = temp; port->cbits_updated = true; port->cbits_updated = true; Loading @@ -1686,6 +1691,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits) cser->send_modem_ctrl_bits(cser, cbits_to_laptop); cser->send_modem_ctrl_bits(cser, cbits_to_laptop); } } spin_unlock_irqrestore(&port->port_lock, flags); wake_up(&port->read_wq); wake_up(&port->read_wq); } } Loading
include/linux/ipa_eth.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -2,7 +2,7 @@ /* /* * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. * * * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. */ */ #ifndef _IPA_ETH_H_ #ifndef _IPA_ETH_H_ Loading Loading @@ -109,12 +109,14 @@ struct ipa_eth_aqc_setup_info { * @bar_size: bar region size * @bar_size: bar region size * @queue_number: Which RTK queue to check the status on * @queue_number: Which RTK queue to check the status on * @dest_tail_ptr_offs: tail ptr offset * @dest_tail_ptr_offs: tail ptr offset * @num_queues_enabled: Total queues to be enable */ */ struct ipa_eth_realtek_setup_info { struct ipa_eth_realtek_setup_info { phys_addr_t bar_addr; phys_addr_t bar_addr; u32 bar_size; u32 bar_size; u8 queue_number; u8 queue_number; phys_addr_t dest_tail_ptr_offs; phys_addr_t dest_tail_ptr_offs; u8 num_queues_enabled; }; }; Loading