Line 41... |
Line 41... |
|
|
DEFAULT_DEBUG_CHANNEL(immu);
|
DEFAULT_DEBUG_CHANNEL(immu);
|
|
|
/* Insn MMU */
|
/* Insn MMU */
|
|
|
/* Precalculates some values for use during address translation */
|
|
void init_immu(void)
|
|
{
|
|
config.immu.pagesize_log2 = log2_int(config.immu.pagesize);
|
|
config.immu.page_offset_mask = config.immu.pagesize - 1;
|
|
config.immu.page_mask = ~config.immu.page_offset_mask;
|
|
config.immu.vpn_mask = ~((config.immu.pagesize * config.immu.nsets) - 1);
|
|
config.immu.set_mask = config.immu.nsets - 1;
|
|
config.immu.lru_reload = (config.immu.set_mask << 6) & SPR_ITLBMR_LRU;
|
|
}
|
|
|
|
static inline uorreg_t *immu_find_tlbmr(oraddr_t virtaddr, uorreg_t **itlbmr_lru)
|
static inline uorreg_t *immu_find_tlbmr(oraddr_t virtaddr, uorreg_t **itlbmr_lru)
|
{
|
{
|
int set;
|
int set;
|
int i;
|
int i;
|
Line 336... |
Line 326... |
static void immu_hitdelay(union param_val val, void *dat)
|
static void immu_hitdelay(union param_val val, void *dat)
|
{
|
{
|
config.immu.hitdelay = val.int_val;
|
config.immu.hitdelay = val.int_val;
|
}
|
}
|
|
|
|
static void *immu_start_sec(void)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static void immu_end_sec(void *dat)
|
|
{
|
|
/* Precalculate some values for use during address translation */
|
|
config.immu.pagesize_log2 = log2_int(config.immu.pagesize);
|
|
config.immu.page_offset_mask = config.immu.pagesize - 1;
|
|
config.immu.page_mask = ~config.immu.page_offset_mask;
|
|
config.immu.vpn_mask = ~((config.immu.pagesize * config.immu.nsets) - 1);
|
|
config.immu.set_mask = config.immu.nsets - 1;
|
|
config.immu.lru_reload = (config.immu.set_mask << 6) & SPR_ITLBMR_LRU;
|
|
}
|
|
|
void reg_immu_sec(void)
|
void reg_immu_sec(void)
|
{
|
{
|
struct config_section *sec = reg_config_sec("immu", NULL, NULL);
|
struct config_section *sec = reg_config_sec("immu", immu_start_sec,
|
|
immu_end_sec);
|
|
|
reg_config_param(sec, "enabled", paramt_int, immu_enabled);
|
reg_config_param(sec, "enabled", paramt_int, immu_enabled);
|
reg_config_param(sec, "nsets", paramt_int, immu_nsets);
|
reg_config_param(sec, "nsets", paramt_int, immu_nsets);
|
reg_config_param(sec, "nways", paramt_int, immu_nways);
|
reg_config_param(sec, "nways", paramt_int, immu_nways);
|
reg_config_param(sec, "pagesize", paramt_int, immu_pagesize);
|
reg_config_param(sec, "pagesize", paramt_int, immu_pagesize);
|