blob: 383ba1409c8050816c1c68ae5d789e1ec9070f7b [file] [log] [blame]
#include "pfe_mod.h"
#include "pfe_hw.h"
/* Functions to handle most of pfe hw register initialization */
int pfe_hw_init(struct pfe *pfe)
{
CLASS_CFG class_cfg = {
.pe_sys_clk_ratio = PE_SYS_CLK_RATIO,
.route_table_baseaddr = pfe->ddr_phys_baseaddr + ROUTE_TABLE_BASEADDR,
.route_table_hash_bits = ROUTE_TABLE_HASH_BITS,
};
TMU_CFG tmu_cfg = {
.pe_sys_clk_ratio = PE_SYS_CLK_RATIO,
.llm_base_addr = pfe->ddr_phys_baseaddr + TMU_LLM_BASEADDR,
.llm_queue_len = TMU_LLM_QUEUE_LEN,
};
#if !defined(CONFIG_UTIL_DISABLED)
UTIL_CFG util_cfg = {
.pe_sys_clk_ratio = PE_SYS_CLK_RATIO,
};
#endif
BMU_CFG bmu1_cfg = {
.baseaddr = CBUS_VIRT_TO_PFE(LMEM_BASE_ADDR + BMU1_LMEM_BASEADDR),
.count = BMU1_BUF_COUNT,
.size = BMU1_BUF_SIZE,
};
BMU_CFG bmu2_cfg = {
.baseaddr = pfe->ddr_phys_baseaddr + BMU2_DDR_BASEADDR,
.count = BMU2_BUF_COUNT,
.size = BMU2_BUF_SIZE,
};
GPI_CFG egpi1_cfg = {
.lmem_rtry_cnt = EGPI1_LMEM_RTRY_CNT,
.tmlf_txthres = EGPI1_TMLF_TXTHRES,
.aseq_len = EGPI1_ASEQ_LEN,
};
GPI_CFG egpi2_cfg = {
.lmem_rtry_cnt = EGPI2_LMEM_RTRY_CNT,
.tmlf_txthres = EGPI2_TMLF_TXTHRES,
.aseq_len = EGPI2_ASEQ_LEN,
};
GPI_CFG egpi3_cfg = {
.lmem_rtry_cnt = EGPI3_LMEM_RTRY_CNT,
.tmlf_txthres = EGPI3_TMLF_TXTHRES,
.aseq_len = EGPI3_ASEQ_LEN,
};
GPI_CFG hgpi_cfg = {
.lmem_rtry_cnt = HGPI_LMEM_RTRY_CNT,
.tmlf_txthres = HGPI_TMLF_TXTHRES,
.aseq_len = HGPI_ASEQ_LEN,
};
printk(KERN_INFO "%s\n", __func__);
if (lro_mode)
class_cfg.toe_mode = 1;
printk(KERN_INFO "CLASS version: %x\n", readl(CLASS_VERSION));
printk(KERN_INFO "TMU version: %x\n", readl(TMU_VERSION));
printk(KERN_INFO "BMU1 version: %x\n", readl(BMU1_BASE_ADDR + BMU_VERSION));
printk(KERN_INFO "BMU2 version: %x\n", readl(BMU2_BASE_ADDR + BMU_VERSION));
printk(KERN_INFO "EMAC1 network cfg: %x\n", readl(EMAC1_BASE_ADDR + EMAC_NETWORK_CONFIG));
printk(KERN_INFO "EMAC2 network cfg: %x\n", readl(EMAC2_BASE_ADDR + EMAC_NETWORK_CONFIG));
#if !defined(CONFIG_PLATFORM_PCI)
printk(KERN_INFO "EMAC3 network cfg: %x\n", readl(EMAC3_BASE_ADDR + EMAC_NETWORK_CONFIG));
#endif
printk(KERN_INFO "EGPI1 version: %x\n", readl(EGPI1_BASE_ADDR + GPI_VERSION));
printk(KERN_INFO "EGPI2 version: %x\n", readl(EGPI2_BASE_ADDR + GPI_VERSION));
#if !defined(CONFIG_PLATFORM_PCI)
printk(KERN_INFO "EGPI3 version: %x\n", readl(EGPI3_BASE_ADDR + GPI_VERSION));
#endif
printk(KERN_INFO "HGPI version: %x\n", readl(HGPI_BASE_ADDR + GPI_VERSION));
#if !defined(CONFIG_PLATFORM_PCI)
printk(KERN_INFO "GPT version: %x\n", readl(CBUS_GPT_VERSION));
#endif
printk(KERN_INFO "HIF version: %x\n", readl(HIF_VERSION));
printk(KERN_INFO "HIF NOPCY version: %x\n", readl(HIF_NOCPY_VERSION));
#if !defined(CONFIG_UTIL_DISABLED)
printk(KERN_INFO "UTIL version: %x\n", readl(UTIL_VERSION));
#endif
bmu_init(BMU1_BASE_ADDR, &bmu1_cfg);
printk(KERN_INFO "bmu_init(1) done\n");
bmu_init(BMU2_BASE_ADDR, &bmu2_cfg);
printk(KERN_INFO "bmu_init(2) done\n");
class_init(&class_cfg);
printk(KERN_INFO "class_init() done\n");
tmu_init(&tmu_cfg);
printk(KERN_INFO "tmu_init() done\n");
#if !defined(CONFIG_UTIL_DISABLED)
util_init(&util_cfg);
printk(KERN_INFO "util_init() done\n");
#endif
gpi_init(EGPI1_BASE_ADDR, &egpi1_cfg);
printk(KERN_INFO "gpi_init(1) done\n");
gpi_init(EGPI2_BASE_ADDR, &egpi2_cfg);
printk(KERN_INFO "gpi_init(2) done\n");
#if !defined(CONFIG_PLATFORM_PCI)
gpi_init(EGPI3_BASE_ADDR, &egpi3_cfg);
printk(KERN_INFO "gpi_init(3) done\n");
#endif
gpi_init(HGPI_BASE_ADDR, &hgpi_cfg);
printk(KERN_INFO "gpi_init(hif) done\n");
bmu_enable(BMU1_BASE_ADDR);
printk(KERN_INFO "bmu_enable(1) done\n");
bmu_enable(BMU2_BASE_ADDR);
printk(KERN_INFO "bmu_enable(2) done\n");
return 0;
}
void pfe_hw_exit(struct pfe *pfe)
{
printk(KERN_INFO "%s\n", __func__);
bmu_disable(BMU1_BASE_ADDR);
bmu_reset(BMU1_BASE_ADDR);
bmu_disable(BMU2_BASE_ADDR);
bmu_reset(BMU2_BASE_ADDR);
}