0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef __DPAA_SYS_H
0032 #define __DPAA_SYS_H
0033
0034 #include <linux/cpu.h>
0035 #include <linux/slab.h>
0036 #include <linux/module.h>
0037 #include <linux/interrupt.h>
0038 #include <linux/kthread.h>
0039 #include <linux/sched/signal.h>
0040 #include <linux/vmalloc.h>
0041 #include <linux/platform_device.h>
0042 #include <linux/of.h>
0043 #include <linux/of_reserved_mem.h>
0044 #include <linux/prefetch.h>
0045 #include <linux/genalloc.h>
0046 #include <asm/cacheflush.h>
0047 #include <linux/io.h>
0048 #include <linux/delay.h>
0049
0050
0051 #define DPAA_PORTAL_CE 0
0052 #define DPAA_PORTAL_CI 1
0053
0054 static inline void dpaa_flush(void *p)
0055 {
0056
0057
0058
0059
0060 #ifdef CONFIG_PPC
0061 flush_dcache_range((unsigned long)p, (unsigned long)p+64);
0062 #endif
0063 }
0064
0065 #define dpaa_invalidate(p) dpaa_flush(p)
0066
0067 #define dpaa_zero(p) memset(p, 0, 64)
0068
0069 static inline void dpaa_touch_ro(void *p)
0070 {
0071 #if (L1_CACHE_BYTES == 32)
0072 prefetch(p+32);
0073 #endif
0074 prefetch(p);
0075 }
0076
0077
0078 static inline void dpaa_invalidate_touch_ro(void *p)
0079 {
0080 dpaa_invalidate(p);
0081 dpaa_touch_ro(p);
0082 }
0083
0084
0085 #ifdef CONFIG_FSL_DPAA_CHECKING
0086 #define DPAA_ASSERT(x) WARN_ON(!(x))
0087 #else
0088 #define DPAA_ASSERT(x)
0089 #endif
0090
0091
0092 static inline u8 dpaa_cyc_diff(u8 ringsize, u8 first, u8 last)
0093 {
0094
0095 if (first <= last)
0096 return last - first;
0097 return ringsize + last - first;
0098 }
0099
0100
0101 #define DPAA_GENALLOC_OFF 0x80000000
0102
0103
0104 int qbman_init_private_mem(struct device *dev, int idx, dma_addr_t *addr,
0105 size_t *size);
0106
0107
0108 #ifdef CONFIG_PPC
0109 #define QBMAN_MEMREMAP_ATTR MEMREMAP_WB
0110 #else
0111 #define QBMAN_MEMREMAP_ATTR MEMREMAP_WC
0112 #endif
0113
0114 static inline int dpaa_set_portal_irq_affinity(struct device *dev,
0115 int irq, int cpu)
0116 {
0117 int ret = 0;
0118
0119 if (!irq_can_set_affinity(irq)) {
0120 dev_err(dev, "unable to set IRQ affinity\n");
0121 return -EINVAL;
0122 }
0123
0124 if (cpu == -1 || !cpu_online(cpu))
0125 cpu = cpumask_any(cpu_online_mask);
0126
0127 ret = irq_set_affinity(irq, cpumask_of(cpu));
0128 if (ret)
0129 dev_err(dev, "irq_set_affinity() on CPU %d failed\n", cpu);
0130
0131 return ret;
0132 }
0133
0134 #endif