Commit 75bda360 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'soc-fsl-next-v4.20-2' of...

Merge tag 'soc-fsl-next-v4.20-2' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux into next/drivers

NXP/FSL SoC drivers updates for v4.20 take 2

- Update qbman driver to better work with CPU hotplug
- Add Kconfig dependency of 64-bit DMA addressing for qbman driver
- Use last reponse to determine valid bit for qbman driver
- Defer bman_portals probe if bman is not probed
- Add interrupt coalescing APIs to qbman driver

* tag 'soc-fsl-next-v4.20-2' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux:
  soc: fsl: qbman: add interrupt coalesce changing APIs
  soc: fsl: bman_portals: defer probe after bman's probe
  soc: fsl: qbman: Use last response to determine valid bit
  soc: fsl: qbman: Add 64 bit DMA addressing requirement to QBMan
  soc: fsl: qbman: replace CPU 0 with any online CPU in hotplug handlers
  soc: fsl: qbman: Check if CPU is offline when initializing portals
  soc: fsl: qman_portals: defer probe after qman's probe
  soc: fsl: qbman: add APIs to retrieve the probing status
  soc: fsl: qe: Fix copy/paste bug in ucc_get_tdm_sync_shift()
  soc: fsl: qbman: qman: avoid allocating from non existing gen_pool
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents e51e8d5d 6d06009c
...@@ -1251,7 +1251,7 @@ N: meson ...@@ -1251,7 +1251,7 @@ N: meson
ARM/Annapurna Labs ALPINE ARCHITECTURE ARM/Annapurna Labs ALPINE ARCHITECTURE
M: Tsahee Zidenberg <tsahee@annapurnalabs.com> M: Tsahee Zidenberg <tsahee@annapurnalabs.com>
M: Antoine Tenart <antoine.tenart@free-electrons.com> M: Antoine Tenart <antoine.tenart@bootlin.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: arch/arm/mach-alpine/ F: arch/arm/mach-alpine/
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "sama5d2-pinfunc.h" #include "sama5d2-pinfunc.h"
#include <dt-bindings/mfd/atmel-flexcom.h> #include <dt-bindings/mfd/atmel-flexcom.h>
#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/at91.h>
/ { / {
model = "Atmel SAMA5D2 PTC EK"; model = "Atmel SAMA5D2 PTC EK";
...@@ -299,6 +300,7 @@ re_we_data { ...@@ -299,6 +300,7 @@ re_we_data {
<PIN_PA30__NWE_NANDWE>, <PIN_PA30__NWE_NANDWE>,
<PIN_PB2__NRD_NANDOE>; <PIN_PB2__NRD_NANDOE>;
bias-pull-up; bias-pull-up;
atmel,drive-strength = <ATMEL_PIO_DRVSTR_ME>;
}; };
ale_cle_rdy_cs { ale_cle_rdy_cs {
......
...@@ -106,21 +106,23 @@ gic: interrupt-controller@1e100 { ...@@ -106,21 +106,23 @@ gic: interrupt-controller@1e100 {
global_timer: timer@1e200 { global_timer: timer@1e200 {
compatible = "arm,cortex-a9-global-timer"; compatible = "arm,cortex-a9-global-timer";
reg = <0x1e200 0x20>; reg = <0x1e200 0x20>;
interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>;
clocks = <&axi_clk>; clocks = <&axi_clk>;
}; };
local_timer: local-timer@1e600 { local_timer: local-timer@1e600 {
compatible = "arm,cortex-a9-twd-timer"; compatible = "arm,cortex-a9-twd-timer";
reg = <0x1e600 0x20>; reg = <0x1e600 0x20>;
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) |
IRQ_TYPE_EDGE_RISING)>;
clocks = <&axi_clk>; clocks = <&axi_clk>;
}; };
twd_watchdog: watchdog@1e620 { twd_watchdog: watchdog@1e620 {
compatible = "arm,cortex-a9-twd-wdt"; compatible = "arm,cortex-a9-twd-wdt";
reg = <0x1e620 0x20>; reg = <0x1e620 0x20>;
interrupts = <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) |
IRQ_TYPE_LEVEL_HIGH)>;
}; };
armpll: armpll { armpll: armpll {
...@@ -158,7 +160,7 @@ timer: timer@80 { ...@@ -158,7 +160,7 @@ timer: timer@80 {
serial0: serial@600 { serial0: serial@600 {
compatible = "brcm,bcm6345-uart"; compatible = "brcm,bcm6345-uart";
reg = <0x600 0x1b>; reg = <0x600 0x1b>;
interrupts = <GIC_SPI 32 0>; interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&periph_clk>; clocks = <&periph_clk>;
clock-names = "periph"; clock-names = "periph";
status = "disabled"; status = "disabled";
...@@ -167,7 +169,7 @@ serial0: serial@600 { ...@@ -167,7 +169,7 @@ serial0: serial@600 {
serial1: serial@620 { serial1: serial@620 {
compatible = "brcm,bcm6345-uart"; compatible = "brcm,bcm6345-uart";
reg = <0x620 0x1b>; reg = <0x620 0x1b>;
interrupts = <GIC_SPI 33 0>; interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&periph_clk>; clocks = <&periph_clk>;
clock-names = "periph"; clock-names = "periph";
status = "disabled"; status = "disabled";
...@@ -180,7 +182,7 @@ nand: nand@2000 { ...@@ -180,7 +182,7 @@ nand: nand@2000 {
reg = <0x2000 0x600>, <0xf0 0x10>; reg = <0x2000 0x600>, <0xf0 0x10>;
reg-names = "nand", "nand-int-base"; reg-names = "nand", "nand-int-base";
status = "disabled"; status = "disabled";
interrupts = <GIC_SPI 38 0>; interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "nand"; interrupt-names = "nand";
}; };
......
...@@ -800,8 +800,7 @@ hdmi_out: port@1 { ...@@ -800,8 +800,7 @@ hdmi_out: port@1 {
}; };
hdmi_phy: hdmi-phy@1ef0000 { hdmi_phy: hdmi-phy@1ef0000 {
compatible = "allwinner,sun8i-r40-hdmi-phy", compatible = "allwinner,sun8i-r40-hdmi-phy";
"allwinner,sun50i-a64-hdmi-phy";
reg = <0x01ef0000 0x10000>; reg = <0x01ef0000 0x10000>;
clocks = <&ccu CLK_BUS_HDMI1>, <&ccu CLK_HDMI_SLOW>, clocks = <&ccu CLK_BUS_HDMI1>, <&ccu CLK_HDMI_SLOW>,
<&ccu 7>, <&ccu 16>; <&ccu 7>, <&ccu 16>;
......
menuconfig FSL_DPAA menuconfig FSL_DPAA
bool "QorIQ DPAA1 framework support" bool "QorIQ DPAA1 framework support"
depends on (FSL_SOC_BOOKE || ARCH_LAYERSCAPE) depends on ((FSL_SOC_BOOKE || ARCH_LAYERSCAPE) && ARCH_DMA_ADDR_T_64BIT)
select GENERIC_ALLOCATOR select GENERIC_ALLOCATOR
help help
The Freescale Data Path Acceleration Architecture (DPAA) is a set of The Freescale Data Path Acceleration Architecture (DPAA) is a set of
......
...@@ -562,11 +562,9 @@ static int bman_create_portal(struct bman_portal *portal, ...@@ -562,11 +562,9 @@ static int bman_create_portal(struct bman_portal *portal,
dev_err(c->dev, "request_irq() failed\n"); dev_err(c->dev, "request_irq() failed\n");
goto fail_irq; goto fail_irq;
} }
if (c->cpu != -1 && irq_can_set_affinity(c->irq) &&
irq_set_affinity(c->irq, cpumask_of(c->cpu))) { if (dpaa_set_portal_irq_affinity(c->dev, c->irq, c->cpu))
dev_err(c->dev, "irq_set_affinity() failed\n");
goto fail_affinity; goto fail_affinity;
}
/* Need RCR to be empty before continuing */ /* Need RCR to be empty before continuing */
ret = bm_rcr_get_fill(p); ret = bm_rcr_get_fill(p);
......
...@@ -120,6 +120,7 @@ static void bm_set_memory(u64 ba, u32 size) ...@@ -120,6 +120,7 @@ static void bm_set_memory(u64 ba, u32 size)
*/ */
static dma_addr_t fbpr_a; static dma_addr_t fbpr_a;
static size_t fbpr_sz; static size_t fbpr_sz;
static int __bman_probed;
static int bman_fbpr(struct reserved_mem *rmem) static int bman_fbpr(struct reserved_mem *rmem)
{ {
...@@ -166,6 +167,12 @@ static irqreturn_t bman_isr(int irq, void *ptr) ...@@ -166,6 +167,12 @@ static irqreturn_t bman_isr(int irq, void *ptr)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
int bman_is_probed(void)
{
return __bman_probed;
}
EXPORT_SYMBOL_GPL(bman_is_probed);
static int fsl_bman_probe(struct platform_device *pdev) static int fsl_bman_probe(struct platform_device *pdev)
{ {
int ret, err_irq; int ret, err_irq;
...@@ -175,6 +182,8 @@ static int fsl_bman_probe(struct platform_device *pdev) ...@@ -175,6 +182,8 @@ static int fsl_bman_probe(struct platform_device *pdev)
u16 id, bm_pool_cnt; u16 id, bm_pool_cnt;
u8 major, minor; u8 major, minor;
__bman_probed = -1;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) { if (!res) {
dev_err(dev, "Can't get %pOF property 'IORESOURCE_MEM'\n", dev_err(dev, "Can't get %pOF property 'IORESOURCE_MEM'\n",
...@@ -255,6 +264,8 @@ static int fsl_bman_probe(struct platform_device *pdev) ...@@ -255,6 +264,8 @@ static int fsl_bman_probe(struct platform_device *pdev)
return ret; return ret;
} }
__bman_probed = 1;
return 0; return 0;
}; };
......
...@@ -65,7 +65,9 @@ static int bman_offline_cpu(unsigned int cpu) ...@@ -65,7 +65,9 @@ static int bman_offline_cpu(unsigned int cpu)
if (!pcfg) if (!pcfg)
return 0; return 0;
irq_set_affinity(pcfg->irq, cpumask_of(0)); /* use any other online CPU */
cpu = cpumask_any_but(cpu_online_mask, cpu);
irq_set_affinity(pcfg->irq, cpumask_of(cpu));
return 0; return 0;
} }
...@@ -91,7 +93,15 @@ static int bman_portal_probe(struct platform_device *pdev) ...@@ -91,7 +93,15 @@ static int bman_portal_probe(struct platform_device *pdev)
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
struct bm_portal_config *pcfg; struct bm_portal_config *pcfg;
struct resource *addr_phys[2]; struct resource *addr_phys[2];
int irq, cpu; int irq, cpu, err;
err = bman_is_probed();
if (!err)
return -EPROBE_DEFER;
if (err < 0) {
dev_err(&pdev->dev, "failing probe due to bman probe error\n");
return -ENODEV;
}
pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL); pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL);
if (!pcfg) if (!pcfg)
......
...@@ -111,4 +111,24 @@ int qbman_init_private_mem(struct device *dev, int idx, dma_addr_t *addr, ...@@ -111,4 +111,24 @@ int qbman_init_private_mem(struct device *dev, int idx, dma_addr_t *addr,
#define QBMAN_MEMREMAP_ATTR MEMREMAP_WC #define QBMAN_MEMREMAP_ATTR MEMREMAP_WC
#endif #endif
static inline int dpaa_set_portal_irq_affinity(struct device *dev,
int irq, int cpu)
{
int ret = 0;
if (!irq_can_set_affinity(irq)) {
dev_err(dev, "unable to set IRQ affinity\n");
return -EINVAL;
}
if (cpu == -1 || !cpu_online(cpu))
cpu = cpumask_any(cpu_online_mask);
ret = irq_set_affinity(irq, cpumask_of(cpu));
if (ret)
dev_err(dev, "irq_set_affinity() on CPU %d failed\n", cpu);
return ret;
}
#endif /* __DPAA_SYS_H */ #endif /* __DPAA_SYS_H */
...@@ -850,12 +850,24 @@ static inline void qm_mr_set_ithresh(struct qm_portal *portal, u8 ithresh) ...@@ -850,12 +850,24 @@ static inline void qm_mr_set_ithresh(struct qm_portal *portal, u8 ithresh)
static inline int qm_mc_init(struct qm_portal *portal) static inline int qm_mc_init(struct qm_portal *portal)
{ {
u8 rr0, rr1;
struct qm_mc *mc = &portal->mc; struct qm_mc *mc = &portal->mc;
mc->cr = portal->addr.ce + QM_CL_CR; mc->cr = portal->addr.ce + QM_CL_CR;
mc->rr = portal->addr.ce + QM_CL_RR0; mc->rr = portal->addr.ce + QM_CL_RR0;
mc->rridx = (mc->cr->_ncw_verb & QM_MCC_VERB_VBIT) /*
? 0 : 1; * The expected valid bit polarity for the next CR command is 0
* if RR1 contains a valid response, and is 1 if RR0 contains a
* valid response. If both RR contain all 0, this indicates either
* that no command has been executed since reset (in which case the
* expected valid bit polarity is 1)
*/
rr0 = mc->rr->verb;
rr1 = (mc->rr+1)->verb;
if ((rr0 == 0 && rr1 == 0) || rr0 != 0)
mc->rridx = 1;
else
mc->rridx = 0;
mc->vbit = mc->rridx ? QM_MCC_VERB_VBIT : 0; mc->vbit = mc->rridx ? QM_MCC_VERB_VBIT : 0;
#ifdef CONFIG_FSL_DPAA_CHECKING #ifdef CONFIG_FSL_DPAA_CHECKING
mc->state = qman_mc_idle; mc->state = qman_mc_idle;
...@@ -1000,6 +1012,37 @@ static inline void put_affine_portal(void) ...@@ -1000,6 +1012,37 @@ static inline void put_affine_portal(void)
static struct workqueue_struct *qm_portal_wq; static struct workqueue_struct *qm_portal_wq;
void qman_dqrr_set_ithresh(struct qman_portal *portal, u8 ithresh)
{
if (!portal)
return;
qm_dqrr_set_ithresh(&portal->p, ithresh);
portal->p.dqrr.ithresh = ithresh;
}
EXPORT_SYMBOL(qman_dqrr_set_ithresh);
void qman_dqrr_get_ithresh(struct qman_portal *portal, u8 *ithresh)
{
if (portal && ithresh)
*ithresh = portal->p.dqrr.ithresh;
}
EXPORT_SYMBOL(qman_dqrr_get_ithresh);
void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod)
{
if (portal && iperiod)
*iperiod = qm_in(&portal->p, QM_REG_ITPR);
}
EXPORT_SYMBOL(qman_portal_get_iperiod);
void qman_portal_set_iperiod(struct qman_portal *portal, u32 iperiod)
{
if (portal)
qm_out(&portal->p, QM_REG_ITPR, iperiod);
}
EXPORT_SYMBOL(qman_portal_set_iperiod);
int qman_wq_alloc(void) int qman_wq_alloc(void)
{ {
qm_portal_wq = alloc_workqueue("qman_portal_wq", 0, 1); qm_portal_wq = alloc_workqueue("qman_portal_wq", 0, 1);
...@@ -1210,11 +1253,9 @@ static int qman_create_portal(struct qman_portal *portal, ...@@ -1210,11 +1253,9 @@ static int qman_create_portal(struct qman_portal *portal,
dev_err(c->dev, "request_irq() failed\n"); dev_err(c->dev, "request_irq() failed\n");
goto fail_irq; goto fail_irq;
} }
if (c->cpu != -1 && irq_can_set_affinity(c->irq) &&
irq_set_affinity(c->irq, cpumask_of(c->cpu))) { if (dpaa_set_portal_irq_affinity(c->dev, c->irq, c->cpu))
dev_err(c->dev, "irq_set_affinity() failed\n");
goto fail_affinity; goto fail_affinity;
}
/* Need EQCR to be empty before continuing */ /* Need EQCR to be empty before continuing */
isdr &= ~QM_PIRQ_EQCI; isdr &= ~QM_PIRQ_EQCI;
...@@ -2729,6 +2770,9 @@ static int qman_alloc_range(struct gen_pool *p, u32 *result, u32 cnt) ...@@ -2729,6 +2770,9 @@ static int qman_alloc_range(struct gen_pool *p, u32 *result, u32 cnt)
{ {
unsigned long addr; unsigned long addr;
if (!p)
return -ENODEV;
addr = gen_pool_alloc(p, cnt); addr = gen_pool_alloc(p, cnt);
if (!addr) if (!addr)
return -ENOMEM; return -ENOMEM;
......
...@@ -273,6 +273,7 @@ static const struct qman_error_info_mdata error_mdata[] = { ...@@ -273,6 +273,7 @@ static const struct qman_error_info_mdata error_mdata[] = {
static u32 __iomem *qm_ccsr_start; static u32 __iomem *qm_ccsr_start;
/* A SDQCR mask comprising all the available/visible pool channels */ /* A SDQCR mask comprising all the available/visible pool channels */
static u32 qm_pools_sdqcr; static u32 qm_pools_sdqcr;
static int __qman_probed;
static inline u32 qm_ccsr_in(u32 offset) static inline u32 qm_ccsr_in(u32 offset)
{ {
...@@ -686,6 +687,12 @@ static int qman_resource_init(struct device *dev) ...@@ -686,6 +687,12 @@ static int qman_resource_init(struct device *dev)
return 0; return 0;
} }
int qman_is_probed(void)
{
return __qman_probed;
}
EXPORT_SYMBOL_GPL(qman_is_probed);
static int fsl_qman_probe(struct platform_device *pdev) static int fsl_qman_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
...@@ -695,6 +702,8 @@ static int fsl_qman_probe(struct platform_device *pdev) ...@@ -695,6 +702,8 @@ static int fsl_qman_probe(struct platform_device *pdev)
u16 id; u16 id;
u8 major, minor; u8 major, minor;
__qman_probed = -1;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) { if (!res) {
dev_err(dev, "Can't get %pOF property 'IORESOURCE_MEM'\n", dev_err(dev, "Can't get %pOF property 'IORESOURCE_MEM'\n",
...@@ -828,6 +837,8 @@ static int fsl_qman_probe(struct platform_device *pdev) ...@@ -828,6 +837,8 @@ static int fsl_qman_probe(struct platform_device *pdev)
if (ret) if (ret)
return ret; return ret;
__qman_probed = 1;
return 0; return 0;
} }
......
...@@ -195,8 +195,10 @@ static int qman_offline_cpu(unsigned int cpu) ...@@ -195,8 +195,10 @@ static int qman_offline_cpu(unsigned int cpu)
if (p) { if (p) {
pcfg = qman_get_qm_portal_config(p); pcfg = qman_get_qm_portal_config(p);
if (pcfg) { if (pcfg) {
irq_set_affinity(pcfg->irq, cpumask_of(0)); /* select any other online CPU */
qman_portal_update_sdest(pcfg, 0); cpu = cpumask_any_but(cpu_online_mask, cpu);
irq_set_affinity(pcfg->irq, cpumask_of(cpu));
qman_portal_update_sdest(pcfg, cpu);
} }
} }
return 0; return 0;
...@@ -227,6 +229,14 @@ static int qman_portal_probe(struct platform_device *pdev) ...@@ -227,6 +229,14 @@ static int qman_portal_probe(struct platform_device *pdev)
int irq, cpu, err; int irq, cpu, err;
u32 val; u32 val;
err = qman_is_probed();
if (!err)
return -EPROBE_DEFER;
if (err < 0) {
dev_err(&pdev->dev, "failing probe due to qman probe error\n");
return -ENODEV;
}
pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL); pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL);
if (!pcfg) if (!pcfg)
return -ENOMEM; return -ENOMEM;
......
...@@ -626,7 +626,7 @@ static u32 ucc_get_tdm_sync_shift(enum comm_dir mode, u32 tdm_num) ...@@ -626,7 +626,7 @@ static u32 ucc_get_tdm_sync_shift(enum comm_dir mode, u32 tdm_num)
{ {
u32 shift; u32 shift;
shift = (mode == COMM_DIR_RX) ? RX_SYNC_SHIFT_BASE : RX_SYNC_SHIFT_BASE; shift = (mode == COMM_DIR_RX) ? RX_SYNC_SHIFT_BASE : TX_SYNC_SHIFT_BASE;
shift -= tdm_num * 2; shift -= tdm_num * 2;
return shift; return shift;
......
...@@ -126,4 +126,12 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num); ...@@ -126,4 +126,12 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num);
*/ */
int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num); int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num);
/**
* bman_is_probed - Check if bman is probed
*
* Returns 1 if the bman driver successfully probed, -1 if the bman driver
* failed to probe or 0 if the bman driver did not probed yet.
*/
int bman_is_probed(void);
#endif /* __FSL_BMAN_H */ #endif /* __FSL_BMAN_H */
...@@ -1186,4 +1186,40 @@ int qman_alloc_cgrid_range(u32 *result, u32 count); ...@@ -1186,4 +1186,40 @@ int qman_alloc_cgrid_range(u32 *result, u32 count);
*/ */
int qman_release_cgrid(u32 id); int qman_release_cgrid(u32 id);
/**
* qman_is_probed - Check if qman is probed
*
* Returns 1 if the qman driver successfully probed, -1 if the qman driver
* failed to probe or 0 if the qman driver did not probed yet.
*/
int qman_is_probed(void);
/**
* qman_dqrr_get_ithresh - Get coalesce interrupt threshold
* @portal: portal to get the value for
* @ithresh: threshold pointer
*/
void qman_dqrr_get_ithresh(struct qman_portal *portal, u8 *ithresh);
/**
* qman_dqrr_set_ithresh - Set coalesce interrupt threshold
* @portal: portal to set the new value on
* @ithresh: new threshold value
*/
void qman_dqrr_set_ithresh(struct qman_portal *portal, u8 ithresh);
/**
* qman_dqrr_get_iperiod - Get coalesce interrupt period
* @portal: portal to get the value for
* @iperiod: period pointer
*/
void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod);
/**
* qman_dqrr_set_iperiod - Set coalesce interrupt period
* @portal: portal to set the new value on
* @ithresh: new period value
*/
void qman_portal_set_iperiod(struct qman_portal *portal, u32 iperiod);
#endif /* __FSL_QMAN_H */ #endif /* __FSL_QMAN_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment