16dd52083SGagandeep Singh /* SPDX-License-Identifier: BSD-3-Clause
2f513f620SSachin Saxena * Copyright 2018-2019 NXP
36dd52083SGagandeep Singh */
46dd52083SGagandeep Singh
56dd52083SGagandeep Singh #ifndef _PFE_H_
66dd52083SGagandeep Singh #define _PFE_H_
76dd52083SGagandeep Singh
86dd52083SGagandeep Singh #include "cbus.h"
96dd52083SGagandeep Singh
106dd52083SGagandeep Singh /*
116dd52083SGagandeep Singh * WARNING: non atomic version.
126dd52083SGagandeep Singh */
136dd52083SGagandeep Singh static inline void
set_bit(unsigned long nr,void * addr)146dd52083SGagandeep Singh set_bit(unsigned long nr, void *addr)
156dd52083SGagandeep Singh {
166dd52083SGagandeep Singh int *m = ((int *)addr) + (nr >> 5);
176dd52083SGagandeep Singh *m |= 1 << (nr & 31);
186dd52083SGagandeep Singh }
196dd52083SGagandeep Singh
206dd52083SGagandeep Singh static inline int
test_bit(int nr,const void * addr)216dd52083SGagandeep Singh test_bit(int nr, const void *addr)
226dd52083SGagandeep Singh {
236dd52083SGagandeep Singh return (1UL & (((const int *)addr)[nr >> 5] >> (nr & 31))) != 0UL;
246dd52083SGagandeep Singh }
256dd52083SGagandeep Singh
266dd52083SGagandeep Singh /*
276dd52083SGagandeep Singh * WARNING: non atomic version.
286dd52083SGagandeep Singh */
296dd52083SGagandeep Singh static inline void
clear_bit(unsigned long nr,void * addr)306dd52083SGagandeep Singh clear_bit(unsigned long nr, void *addr)
316dd52083SGagandeep Singh {
326dd52083SGagandeep Singh int *m = ((int *)addr) + (nr >> 5);
336dd52083SGagandeep Singh *m &= ~(1 << (nr & 31));
346dd52083SGagandeep Singh }
356dd52083SGagandeep Singh
366dd52083SGagandeep Singh /*
376dd52083SGagandeep Singh * WARNING: non atomic version.
386dd52083SGagandeep Singh */
396dd52083SGagandeep Singh static inline int
test_and_clear_bit(unsigned long nr,void * addr)406dd52083SGagandeep Singh test_and_clear_bit(unsigned long nr, void *addr)
416dd52083SGagandeep Singh {
426dd52083SGagandeep Singh unsigned long mask = 1 << (nr & 0x1f);
436dd52083SGagandeep Singh int *m = ((int *)addr) + (nr >> 5);
446dd52083SGagandeep Singh int old = *m;
456dd52083SGagandeep Singh
466dd52083SGagandeep Singh *m = old & ~mask;
476dd52083SGagandeep Singh return (old & mask) != 0;
486dd52083SGagandeep Singh }
496dd52083SGagandeep Singh
506dd52083SGagandeep Singh /*
516dd52083SGagandeep Singh * WARNING: non atomic version.
526dd52083SGagandeep Singh */
536dd52083SGagandeep Singh static inline int
test_and_set_bit(unsigned long nr,void * addr)546dd52083SGagandeep Singh test_and_set_bit(unsigned long nr, void *addr)
556dd52083SGagandeep Singh {
566dd52083SGagandeep Singh unsigned long mask = 1 << (nr & 0x1f);
576dd52083SGagandeep Singh int *m = ((int *)addr) + (nr >> 5);
586dd52083SGagandeep Singh int old = *m;
596dd52083SGagandeep Singh
606dd52083SGagandeep Singh *m = old | mask;
616dd52083SGagandeep Singh return (old & mask) != 0;
626dd52083SGagandeep Singh }
636dd52083SGagandeep Singh
646dd52083SGagandeep Singh #ifndef BIT
656dd52083SGagandeep Singh #define BIT(nr) (1UL << (nr))
666dd52083SGagandeep Singh #endif
676dd52083SGagandeep Singh #define CLASS_DMEM_BASE_ADDR(i) (0x00000000 | ((i) << 20))
686dd52083SGagandeep Singh /*
696dd52083SGagandeep Singh * Only valid for mem access register interface
706dd52083SGagandeep Singh */
716dd52083SGagandeep Singh #define CLASS_IMEM_BASE_ADDR(i) (0x00000000 | ((i) << 20))
726dd52083SGagandeep Singh #define CLASS_DMEM_SIZE 0x00002000
736dd52083SGagandeep Singh #define CLASS_IMEM_SIZE 0x00008000
746dd52083SGagandeep Singh
756dd52083SGagandeep Singh #define TMU_DMEM_BASE_ADDR(i) (0x00000000 + ((i) << 20))
766dd52083SGagandeep Singh /*
776dd52083SGagandeep Singh * Only valid for mem access register interface
786dd52083SGagandeep Singh */
796dd52083SGagandeep Singh #define TMU_IMEM_BASE_ADDR(i) (0x00000000 + ((i) << 20))
806dd52083SGagandeep Singh #define TMU_DMEM_SIZE 0x00000800
816dd52083SGagandeep Singh #define TMU_IMEM_SIZE 0x00002000
826dd52083SGagandeep Singh
836dd52083SGagandeep Singh #define UTIL_DMEM_BASE_ADDR 0x00000000
846dd52083SGagandeep Singh #define UTIL_DMEM_SIZE 0x00002000
856dd52083SGagandeep Singh
866dd52083SGagandeep Singh #define PE_LMEM_BASE_ADDR 0xc3010000
876dd52083SGagandeep Singh #define PE_LMEM_SIZE 0x8000
886dd52083SGagandeep Singh #define PE_LMEM_END (PE_LMEM_BASE_ADDR + PE_LMEM_SIZE)
896dd52083SGagandeep Singh
906dd52083SGagandeep Singh #define DMEM_BASE_ADDR 0x00000000
916dd52083SGagandeep Singh #define DMEM_SIZE 0x2000 /* TMU has less... */
926dd52083SGagandeep Singh #define DMEM_END (DMEM_BASE_ADDR + DMEM_SIZE)
936dd52083SGagandeep Singh
946dd52083SGagandeep Singh #define PMEM_BASE_ADDR 0x00010000
956dd52083SGagandeep Singh #define PMEM_SIZE 0x8000 /* TMU has less... */
966dd52083SGagandeep Singh #define PMEM_END (PMEM_BASE_ADDR + PMEM_SIZE)
976dd52083SGagandeep Singh
9893998f3cSTyler Retzlaff #define writel(v, p) __extension__ ({*(volatile unsigned int *)(p) = (v); })
996dd52083SGagandeep Singh #define readl(p) (*(const volatile unsigned int *)(p))
1006dd52083SGagandeep Singh
1016dd52083SGagandeep Singh /* These check memory ranges from PE point of view/memory map */
1026dd52083SGagandeep Singh #define IS_DMEM(addr, len) \
10393998f3cSTyler Retzlaff __extension__ ({ typeof(addr) addr_ = (addr); \
1046dd52083SGagandeep Singh ((unsigned long)(addr_) >= DMEM_BASE_ADDR) && \
1056dd52083SGagandeep Singh (((unsigned long)(addr_) + (len)) <= DMEM_END); })
1066dd52083SGagandeep Singh
1076dd52083SGagandeep Singh #define IS_PMEM(addr, len) \
10893998f3cSTyler Retzlaff __extension__ ({ typeof(addr) addr_ = (addr); \
1096dd52083SGagandeep Singh ((unsigned long)(addr_) >= PMEM_BASE_ADDR) && \
1106dd52083SGagandeep Singh (((unsigned long)(addr_) + (len)) <= PMEM_END); })
1116dd52083SGagandeep Singh
1126dd52083SGagandeep Singh #define IS_PE_LMEM(addr, len) \
11393998f3cSTyler Retzlaff __extension__ ({ typeof(addr) addr_ = (addr); \
1146dd52083SGagandeep Singh ((unsigned long)(addr_) >= \
1156dd52083SGagandeep Singh PE_LMEM_BASE_ADDR) && \
1166dd52083SGagandeep Singh (((unsigned long)(addr_) + \
1176dd52083SGagandeep Singh (len)) <= PE_LMEM_END); })
1186dd52083SGagandeep Singh
1196dd52083SGagandeep Singh #define IS_PFE_LMEM(addr, len) \
12093998f3cSTyler Retzlaff __extension__ ({ typeof(addr) addr_ = (addr); \
1216dd52083SGagandeep Singh ((unsigned long)(addr_) >= \
1226dd52083SGagandeep Singh CBUS_VIRT_TO_PFE(LMEM_BASE_ADDR)) && \
1236dd52083SGagandeep Singh (((unsigned long)(addr_) + (len)) <= \
1246dd52083SGagandeep Singh CBUS_VIRT_TO_PFE(LMEM_END)); })
1256dd52083SGagandeep Singh
1266dd52083SGagandeep Singh #define __IS_PHYS_DDR(addr, len) \
12793998f3cSTyler Retzlaff __extension__ ({ typeof(addr) addr_ = (addr); \
1286dd52083SGagandeep Singh ((unsigned long)(addr_) >= \
1296dd52083SGagandeep Singh DDR_PHYS_BASE_ADDR) && \
1306dd52083SGagandeep Singh (((unsigned long)(addr_) + (len)) <= \
1316dd52083SGagandeep Singh DDR_PHYS_END); })
1326dd52083SGagandeep Singh
1336dd52083SGagandeep Singh #define IS_PHYS_DDR(addr, len) __IS_PHYS_DDR(DDR_PFE_TO_PHYS(addr), len)
1346dd52083SGagandeep Singh
1356dd52083SGagandeep Singh /*
1366dd52083SGagandeep Singh * If using a run-time virtual address for the cbus base address use this code
1376dd52083SGagandeep Singh */
1386dd52083SGagandeep Singh extern void *cbus_base_addr;
1396dd52083SGagandeep Singh extern void *ddr_base_addr;
1406dd52083SGagandeep Singh extern unsigned long ddr_phys_base_addr;
1416dd52083SGagandeep Singh extern unsigned int ddr_size;
1426dd52083SGagandeep Singh
1436dd52083SGagandeep Singh #define CBUS_BASE_ADDR cbus_base_addr
1446dd52083SGagandeep Singh #define DDR_PHYS_BASE_ADDR ddr_phys_base_addr
1456dd52083SGagandeep Singh #define DDR_BASE_ADDR ddr_base_addr
1466dd52083SGagandeep Singh #define DDR_SIZE ddr_size
1476dd52083SGagandeep Singh
1486dd52083SGagandeep Singh #define DDR_PHYS_END (DDR_PHYS_BASE_ADDR + DDR_SIZE)
1496dd52083SGagandeep Singh
1506dd52083SGagandeep Singh #define LS1012A_PFE_RESET_WA /*
1516dd52083SGagandeep Singh * PFE doesn't have global reset and re-init
1526dd52083SGagandeep Singh * should takecare few things to make PFE
1536dd52083SGagandeep Singh * functional after reset
1546dd52083SGagandeep Singh */
1556dd52083SGagandeep Singh #define PFE_CBUS_PHYS_BASE_ADDR 0xc0000000 /* CBUS physical base address
1566dd52083SGagandeep Singh * as seen by PE's.
1576dd52083SGagandeep Singh */
1586dd52083SGagandeep Singh /* CBUS physical base address as seen by PE's. */
1596dd52083SGagandeep Singh #define PFE_CBUS_PHYS_BASE_ADDR_FROM_PFE 0xc0000000
1606dd52083SGagandeep Singh
1616dd52083SGagandeep Singh #define DDR_PHYS_TO_PFE(p) (((unsigned long)(p)) & 0x7FFFFFFF)
1626dd52083SGagandeep Singh #define DDR_PFE_TO_PHYS(p) (((unsigned long)(p)) | 0x80000000)
1636dd52083SGagandeep Singh #define CBUS_PHYS_TO_PFE(p) (((p) - PFE_CBUS_PHYS_BASE_ADDR) + \
1646dd52083SGagandeep Singh PFE_CBUS_PHYS_BASE_ADDR_FROM_PFE)
1656dd52083SGagandeep Singh /* Translates to PFE address map */
1666dd52083SGagandeep Singh
1676dd52083SGagandeep Singh #define DDR_PHYS_TO_VIRT(p) (((p) - DDR_PHYS_BASE_ADDR) + DDR_BASE_ADDR)
1686dd52083SGagandeep Singh #define DDR_VIRT_TO_PHYS(v) (((v) - DDR_BASE_ADDR) + DDR_PHYS_BASE_ADDR)
1696dd52083SGagandeep Singh #define DDR_VIRT_TO_PFE(p) (DDR_PHYS_TO_PFE(DDR_VIRT_TO_PHYS(p)))
1706dd52083SGagandeep Singh
1716dd52083SGagandeep Singh #define CBUS_VIRT_TO_PFE(v) (((v) - CBUS_BASE_ADDR) + \
1726dd52083SGagandeep Singh PFE_CBUS_PHYS_BASE_ADDR)
1736dd52083SGagandeep Singh #define CBUS_PFE_TO_VIRT(p) (((unsigned long)(p) - \
1746dd52083SGagandeep Singh PFE_CBUS_PHYS_BASE_ADDR) + CBUS_BASE_ADDR)
1756dd52083SGagandeep Singh
1766dd52083SGagandeep Singh /* The below part of the code is used in QOS control driver from host */
1776dd52083SGagandeep Singh #define TMU_APB_BASE_ADDR 0xc1000000 /* TMU base address seen by
1786dd52083SGagandeep Singh * pe's
1796dd52083SGagandeep Singh */
1806dd52083SGagandeep Singh
1816dd52083SGagandeep Singh enum {
1826dd52083SGagandeep Singh CLASS0_ID = 0,
1836dd52083SGagandeep Singh CLASS1_ID,
1846dd52083SGagandeep Singh CLASS2_ID,
1856dd52083SGagandeep Singh CLASS3_ID,
1866dd52083SGagandeep Singh CLASS4_ID,
1876dd52083SGagandeep Singh CLASS5_ID,
1886dd52083SGagandeep Singh TMU0_ID,
1896dd52083SGagandeep Singh TMU1_ID,
1906dd52083SGagandeep Singh TMU2_ID,
1916dd52083SGagandeep Singh TMU3_ID,
1926dd52083SGagandeep Singh #if !defined(CONFIG_FSL_PFE_UTIL_DISABLED)
1936dd52083SGagandeep Singh UTIL_ID,
1946dd52083SGagandeep Singh #endif
1956dd52083SGagandeep Singh MAX_PE
1966dd52083SGagandeep Singh };
1976dd52083SGagandeep Singh
1986dd52083SGagandeep Singh #define CLASS_MASK (BIT(CLASS0_ID) | BIT(CLASS1_ID) |\
1996dd52083SGagandeep Singh BIT(CLASS2_ID) | BIT(CLASS3_ID) |\
2006dd52083SGagandeep Singh BIT(CLASS4_ID) | BIT(CLASS5_ID))
2016dd52083SGagandeep Singh #define CLASS_MAX_ID CLASS5_ID
2026dd52083SGagandeep Singh
2036dd52083SGagandeep Singh #define TMU_MASK (BIT(TMU0_ID) | BIT(TMU1_ID) |\
2046dd52083SGagandeep Singh BIT(TMU3_ID))
2056dd52083SGagandeep Singh
2066dd52083SGagandeep Singh #define TMU_MAX_ID TMU3_ID
2076dd52083SGagandeep Singh
2086dd52083SGagandeep Singh #if !defined(CONFIG_FSL_PFE_UTIL_DISABLED)
2096dd52083SGagandeep Singh #define UTIL_MASK BIT(UTIL_ID)
2106dd52083SGagandeep Singh #endif
2116dd52083SGagandeep Singh
212*27595cd8STyler Retzlaff struct __rte_aligned(16) pe_status {
2136dd52083SGagandeep Singh u32 cpu_state;
2146dd52083SGagandeep Singh u32 activity_counter;
2156dd52083SGagandeep Singh u32 rx;
2166dd52083SGagandeep Singh union {
2176dd52083SGagandeep Singh u32 tx;
2186dd52083SGagandeep Singh u32 tmu_qstatus;
2196dd52083SGagandeep Singh };
2206dd52083SGagandeep Singh u32 drop;
2216dd52083SGagandeep Singh #if defined(CFG_PE_DEBUG)
2226dd52083SGagandeep Singh u32 debug_indicator;
2236dd52083SGagandeep Singh u32 debug[16];
2246dd52083SGagandeep Singh #endif
225*27595cd8STyler Retzlaff };
2266dd52083SGagandeep Singh
2276dd52083SGagandeep Singh struct pe_sync_mailbox {
2286dd52083SGagandeep Singh u32 stop;
2296dd52083SGagandeep Singh u32 stopped;
2306dd52083SGagandeep Singh };
2316dd52083SGagandeep Singh
2326dd52083SGagandeep Singh /* Drop counter definitions */
2336dd52083SGagandeep Singh
2346dd52083SGagandeep Singh #define CLASS_NUM_DROP_COUNTERS 13
2356dd52083SGagandeep Singh #define UTIL_NUM_DROP_COUNTERS 8
2366dd52083SGagandeep Singh
2376dd52083SGagandeep Singh /* PE information.
2386dd52083SGagandeep Singh * Structure containing PE's specific information. It is used to create
2396dd52083SGagandeep Singh * generic C functions common to all PE's.
2406dd52083SGagandeep Singh * Before using the library functions this structure needs to be initialized
2416dd52083SGagandeep Singh * with the different registers virtual addresses
2426dd52083SGagandeep Singh * (according to the ARM MMU mmaping). The default initialization supports a
2436dd52083SGagandeep Singh * virtual == physical mapping.
2446dd52083SGagandeep Singh */
2456dd52083SGagandeep Singh struct pe_info {
2466dd52083SGagandeep Singh u32 dmem_base_addr; /* PE's dmem base address */
2476dd52083SGagandeep Singh u32 pmem_base_addr; /* PE's pmem base address */
2486dd52083SGagandeep Singh u32 pmem_size; /* PE's pmem size */
2496dd52083SGagandeep Singh
2506dd52083SGagandeep Singh void *mem_access_wdata; /* PE's _MEM_ACCESS_WDATA register
2516dd52083SGagandeep Singh * address
2526dd52083SGagandeep Singh */
2536dd52083SGagandeep Singh void *mem_access_addr; /* PE's _MEM_ACCESS_ADDR register
2546dd52083SGagandeep Singh * address
2556dd52083SGagandeep Singh */
2566dd52083SGagandeep Singh void *mem_access_rdata; /* PE's _MEM_ACCESS_RDATA register
2576dd52083SGagandeep Singh * address
2586dd52083SGagandeep Singh */
2596dd52083SGagandeep Singh };
2606dd52083SGagandeep Singh
2616dd52083SGagandeep Singh void pe_lmem_read(u32 *dst, u32 len, u32 offset);
2626dd52083SGagandeep Singh void pe_lmem_write(u32 *src, u32 len, u32 offset);
2636dd52083SGagandeep Singh
2646dd52083SGagandeep Singh void pe_dmem_memcpy_to32(int id, u32 dst, const void *src, unsigned int len);
2656dd52083SGagandeep Singh void pe_pmem_memcpy_to32(int id, u32 dst, const void *src, unsigned int len);
2666dd52083SGagandeep Singh
2676dd52083SGagandeep Singh u32 pe_pmem_read(int id, u32 addr, u8 size);
2686dd52083SGagandeep Singh
2696dd52083SGagandeep Singh void pe_dmem_write(int id, u32 val, u32 addr, u8 size);
2706dd52083SGagandeep Singh u32 pe_dmem_read(int id, u32 addr, u8 size);
2716dd52083SGagandeep Singh void class_pe_lmem_memcpy_to32(u32 dst, const void *src, unsigned int len);
2726dd52083SGagandeep Singh void class_pe_lmem_memset(u32 dst, int val, unsigned int len);
2736dd52083SGagandeep Singh void class_bus_write(u32 val, u32 addr, u8 size);
2746dd52083SGagandeep Singh u32 class_bus_read(u32 addr, u8 size);
2756dd52083SGagandeep Singh
2766dd52083SGagandeep Singh #define class_bus_readl(addr) class_bus_read(addr, 4)
2776dd52083SGagandeep Singh #define class_bus_readw(addr) class_bus_read(addr, 2)
2786dd52083SGagandeep Singh #define class_bus_readb(addr) class_bus_read(addr, 1)
2796dd52083SGagandeep Singh
2806dd52083SGagandeep Singh #define class_bus_writel(val, addr) class_bus_write(val, addr, 4)
2816dd52083SGagandeep Singh #define class_bus_writew(val, addr) class_bus_write(val, addr, 2)
2826dd52083SGagandeep Singh #define class_bus_writeb(val, addr) class_bus_write(val, addr, 1)
2836dd52083SGagandeep Singh
2846dd52083SGagandeep Singh #define pe_dmem_readl(id, addr) pe_dmem_read(id, addr, 4)
2856dd52083SGagandeep Singh #define pe_dmem_readw(id, addr) pe_dmem_read(id, addr, 2)
2866dd52083SGagandeep Singh #define pe_dmem_readb(id, addr) pe_dmem_read(id, addr, 1)
2876dd52083SGagandeep Singh
2886dd52083SGagandeep Singh #define pe_dmem_writel(id, val, addr) pe_dmem_write(id, val, addr, 4)
2896dd52083SGagandeep Singh #define pe_dmem_writew(id, val, addr) pe_dmem_write(id, val, addr, 2)
2906dd52083SGagandeep Singh #define pe_dmem_writeb(id, val, addr) pe_dmem_write(id, val, addr, 1)
2916dd52083SGagandeep Singh
2926dd52083SGagandeep Singh /*int pe_load_elf_section(int id, const void *data, elf32_shdr *shdr); */
2936dd52083SGagandeep Singh //int pe_load_elf_section(int id, const void *data, struct elf32_shdr *shdr,
2946dd52083SGagandeep Singh // struct device *dev);
2956dd52083SGagandeep Singh
2966dd52083SGagandeep Singh void pfe_lib_init(void *cbus_base, void *ddr_base, unsigned long ddr_phys_base,
2976dd52083SGagandeep Singh unsigned int ddr_size);
2986dd52083SGagandeep Singh void bmu_init(void *base, struct BMU_CFG *cfg);
2996dd52083SGagandeep Singh void bmu_reset(void *base);
3006dd52083SGagandeep Singh void bmu_enable(void *base);
3016dd52083SGagandeep Singh void bmu_disable(void *base);
3026dd52083SGagandeep Singh void bmu_set_config(void *base, struct BMU_CFG *cfg);
3036dd52083SGagandeep Singh
3046dd52083SGagandeep Singh /*
3056dd52083SGagandeep Singh * An enumerated type for loopback values. This can be one of three values, no
3066dd52083SGagandeep Singh * loopback -normal operation, local loopback with internal loopback module of
3076dd52083SGagandeep Singh * MAC or PHY loopback which is through the external PHY.
3086dd52083SGagandeep Singh */
3096dd52083SGagandeep Singh #ifndef __MAC_LOOP_ENUM__
3106dd52083SGagandeep Singh #define __MAC_LOOP_ENUM__
3116dd52083SGagandeep Singh enum mac_loop {LB_NONE, LB_EXT, LB_LOCAL};
3126dd52083SGagandeep Singh #endif
3136dd52083SGagandeep Singh
3145253fe37SGagandeep Singh void gemac_init(void *base, void *config);
3155253fe37SGagandeep Singh void gemac_disable_rx_checksum_offload(void *base);
3165253fe37SGagandeep Singh void gemac_enable_rx_checksum_offload(void *base);
3175253fe37SGagandeep Singh void gemac_set_mdc_div(void *base, int mdc_div);
3185253fe37SGagandeep Singh void gemac_set_speed(void *base, enum mac_speed gem_speed);
3195253fe37SGagandeep Singh void gemac_set_duplex(void *base, int duplex);
3205253fe37SGagandeep Singh void gemac_set_mode(void *base, int mode);
3215253fe37SGagandeep Singh void gemac_enable(void *base);
3225253fe37SGagandeep Singh void gemac_tx_disable(void *base);
3235253fe37SGagandeep Singh void gemac_tx_enable(void *base);
3245253fe37SGagandeep Singh void gemac_disable(void *base);
3255253fe37SGagandeep Singh void gemac_reset(void *base);
3265253fe37SGagandeep Singh void gemac_set_address(void *base, struct spec_addr *addr);
3275253fe37SGagandeep Singh struct spec_addr gemac_get_address(void *base);
3285253fe37SGagandeep Singh void gemac_set_loop(void *base, enum mac_loop gem_loop);
3295253fe37SGagandeep Singh void gemac_set_laddr1(void *base, struct pfe_mac_addr *address);
3305253fe37SGagandeep Singh void gemac_set_laddr2(void *base, struct pfe_mac_addr *address);
3315253fe37SGagandeep Singh void gemac_set_laddr3(void *base, struct pfe_mac_addr *address);
3325253fe37SGagandeep Singh void gemac_set_laddr4(void *base, struct pfe_mac_addr *address);
3335253fe37SGagandeep Singh void gemac_set_laddrN(void *base, struct pfe_mac_addr *address,
3345253fe37SGagandeep Singh unsigned int entry_index);
3355253fe37SGagandeep Singh void gemac_clear_laddr1(void *base);
3365253fe37SGagandeep Singh void gemac_clear_laddr2(void *base);
3375253fe37SGagandeep Singh void gemac_clear_laddr3(void *base);
3385253fe37SGagandeep Singh void gemac_clear_laddr4(void *base);
3395253fe37SGagandeep Singh void gemac_clear_laddrN(void *base, unsigned int entry_index);
3405253fe37SGagandeep Singh struct pfe_mac_addr gemac_get_hash(void *base);
3415253fe37SGagandeep Singh void gemac_set_hash(void *base, struct pfe_mac_addr *hash);
3425253fe37SGagandeep Singh struct pfe_mac_addr gem_get_laddr1(void *base);
3435253fe37SGagandeep Singh struct pfe_mac_addr gem_get_laddr2(void *base);
3445253fe37SGagandeep Singh struct pfe_mac_addr gem_get_laddr3(void *base);
3455253fe37SGagandeep Singh struct pfe_mac_addr gem_get_laddr4(void *base);
3465253fe37SGagandeep Singh struct pfe_mac_addr gem_get_laddrN(void *base, unsigned int entry_index);
3475253fe37SGagandeep Singh void gemac_set_config(void *base, struct gemac_cfg *cfg);
3485253fe37SGagandeep Singh void gemac_allow_broadcast(void *base);
3495253fe37SGagandeep Singh void gemac_no_broadcast(void *base);
3505253fe37SGagandeep Singh void gemac_enable_1536_rx(void *base);
3515253fe37SGagandeep Singh void gemac_disable_1536_rx(void *base);
3525253fe37SGagandeep Singh int gemac_set_rx(void *base, int mtu);
3535253fe37SGagandeep Singh void gemac_enable_rx_jmb(void *base);
3545253fe37SGagandeep Singh void gemac_disable_rx_jmb(void *base);
3555253fe37SGagandeep Singh void gemac_enable_stacked_vlan(void *base);
3565253fe37SGagandeep Singh void gemac_disable_stacked_vlan(void *base);
3575253fe37SGagandeep Singh void gemac_enable_pause_rx(void *base);
3585253fe37SGagandeep Singh void gemac_disable_pause_rx(void *base);
3595253fe37SGagandeep Singh void gemac_enable_pause_tx(void *base);
3605253fe37SGagandeep Singh void gemac_disable_pause_tx(void *base);
3615253fe37SGagandeep Singh void gemac_enable_copy_all(void *base);
3625253fe37SGagandeep Singh void gemac_disable_copy_all(void *base);
3635253fe37SGagandeep Singh void gemac_set_bus_width(void *base, int width);
3645253fe37SGagandeep Singh void gemac_set_wol(void *base, u32 wol_conf);
3655253fe37SGagandeep Singh
3665253fe37SGagandeep Singh void gpi_init(void *base, struct gpi_cfg *cfg);
3675253fe37SGagandeep Singh void gpi_reset(void *base);
3685253fe37SGagandeep Singh void gpi_enable(void *base);
3695253fe37SGagandeep Singh void gpi_disable(void *base);
3705253fe37SGagandeep Singh void gpi_set_config(void *base, struct gpi_cfg *cfg);
3715253fe37SGagandeep Singh
3725253fe37SGagandeep Singh void hif_init(void);
3735253fe37SGagandeep Singh void hif_tx_enable(void);
3745253fe37SGagandeep Singh void hif_tx_disable(void);
3755253fe37SGagandeep Singh void hif_rx_enable(void);
3765253fe37SGagandeep Singh void hif_rx_disable(void);
3775253fe37SGagandeep Singh
3786dd52083SGagandeep Singh /* Get Chip Revision level
3796dd52083SGagandeep Singh *
3806dd52083SGagandeep Singh */
CHIP_REVISION(void)3816dd52083SGagandeep Singh static inline unsigned int CHIP_REVISION(void)
3826dd52083SGagandeep Singh {
3836dd52083SGagandeep Singh /*For LS1012A return always 1 */
3846dd52083SGagandeep Singh return 1;
3856dd52083SGagandeep Singh }
3866dd52083SGagandeep Singh
3876dd52083SGagandeep Singh /* Start HIF rx DMA
3886dd52083SGagandeep Singh *
3896dd52083SGagandeep Singh */
hif_rx_dma_start(void)3906dd52083SGagandeep Singh static inline void hif_rx_dma_start(void)
3916dd52083SGagandeep Singh {
3926dd52083SGagandeep Singh writel(HIF_CTRL_DMA_EN | HIF_CTRL_BDP_CH_START_WSTB, HIF_RX_CTRL);
3936dd52083SGagandeep Singh }
3946dd52083SGagandeep Singh
3956dd52083SGagandeep Singh /* Start HIF tx DMA
3966dd52083SGagandeep Singh *
3976dd52083SGagandeep Singh */
hif_tx_dma_start(void)3986dd52083SGagandeep Singh static inline void hif_tx_dma_start(void)
3996dd52083SGagandeep Singh {
4006dd52083SGagandeep Singh writel(HIF_CTRL_DMA_EN | HIF_CTRL_BDP_CH_START_WSTB, HIF_TX_CTRL);
4016dd52083SGagandeep Singh }
4026dd52083SGagandeep Singh
4035253fe37SGagandeep Singh
pfe_mem_ptov(phys_addr_t paddr)4045253fe37SGagandeep Singh static inline void *pfe_mem_ptov(phys_addr_t paddr)
4055253fe37SGagandeep Singh {
4065253fe37SGagandeep Singh return rte_mem_iova2virt(paddr);
4075253fe37SGagandeep Singh }
4085253fe37SGagandeep Singh
409f2fc83b4SThomas Monjalon static phys_addr_t pfe_mem_vtop(uint64_t vaddr) __rte_unused;
4105253fe37SGagandeep Singh
pfe_mem_vtop(uint64_t vaddr)4115253fe37SGagandeep Singh static inline phys_addr_t pfe_mem_vtop(uint64_t vaddr)
4125253fe37SGagandeep Singh {
4135253fe37SGagandeep Singh const struct rte_memseg *memseg;
4145253fe37SGagandeep Singh
4155253fe37SGagandeep Singh memseg = rte_mem_virt2memseg((void *)(uintptr_t)vaddr, NULL);
4165253fe37SGagandeep Singh if (memseg)
41772f82c43SThomas Monjalon return memseg->iova + RTE_PTR_DIFF(vaddr, memseg->addr);
4185253fe37SGagandeep Singh
4195253fe37SGagandeep Singh return (size_t)NULL;
4205253fe37SGagandeep Singh }
4215253fe37SGagandeep Singh
4226dd52083SGagandeep Singh #endif /* _PFE_H_ */
423