这个函数的实现为:
/* helper function */
static void __fill_code_cplbtab(struct cplb_tab *t, int i, u32 a_start, u32 a_end)
{
if (cplb_data[i].psize) {
fill_cplbtab(t,
cplb_data[i].start,
cplb_data[i].end,
cplb_data[i].psize,
cplb_data[i].i_conf);
#if defined(CONFIG_BFIN_ICACHE)
if (ANOMALY_05000263 && i == SDRAM_KERN) {
fill_cplbtab(t,
cplb_data[i].start,
cplb_data[i].end,
SIZE_4M,
cplb_data[i].i_conf);
} else
#endif
} else {
fill_cplbtab(t,
cplb_data[i].start,
a_start,
SIZE_1M,
cplb_data[i].i_conf);
fill_cplbtab(t,
a_start,
a_end,
SIZE_4M,
cplb_data[i].i_conf);
fill_cplbtab(t, a_end,
cplb_data[i].end,
SIZE_1M,
cplb_data[i].i_conf);
}
}
static unsigned short __init
fill_cplbtab(struct cplb_tab *table,
unsigned long start, unsigned long end,
unsigned long block_size, unsigned long cplb_data)
{
int i;
switch (block_size) {
case SIZE_4M:
i = 3;
break;
case SIZE_1M:
i = 2;
break;
case SIZE_4K:
i = 1;
break;
case SIZE_1K:
default:
i = 0;
break;
}
cplb_data = (cplb_data & ~(3 << 16)) | (i << 16);
while ((start < end) && (table->pos < table->size)) {
table->tab[table->pos++] = start;
if (lock_kernel_check(start, start + block_size) == IN_KERNEL)
table->tab[table->pos++] =
cplb_data | CPLB_LOCK | CPLB_DIRTY;
else
table->tab[table->pos++] = cplb_data;
start += block_size;
}
return 0;
}
1 L1 I-Memory
当
{
.start = L1_CODE_START,
.end = L1_CODE_START + L1_CODE_LENGTH,
.psize = SIZE_4M,
.attr = INITIAL_T | SWITCH_T | I_CPLB,
.i_conf = L1_IMEMORY,
.d_conf = 0,
.valid = 1,
.name = "L1 I-Memory",
},
这个块传递进来时,它将直接调用
fill_cplbtab(t,
cplb_data[i].start,
cplb_data[i].end,
cplb_data[i].psize,
cplb_data[i].i_conf);
从fill_cplbtab这个函数可以看出此时ICPLB_ADDR的值将为L1_CODE_START,也就是0xffa0 0000,而ICPLB_DATA的值将为0x0003 0007,这个值的意义是:
16位和17位的值为11,即页面大小为4M。
第0位,也即CPLB_VALID,为1,表示Valid CPLB Entry。
第1位,也即CPLB_LOCK,为1,表示CPLB Entry Should not be replaced。
第2位,也即CPLB_USER_RD,为1,表示User mode read access permitted。
2 Kernel Memory
当
{
.start = 0,
.end = 0, /* dynamic */
.psize = 0,
.attr = INITIAL_T | SWITCH_T | I_CPLB | D_CPLB,
.i_conf = SDRAM_IGENERIC,
.d_conf = SDRAM_DGENERIC,
.valid = 1,
.name = "Kernel Memory",
},
这个块传进来的时候,它将调用
fill_cplbtab(t,
cplb_data[i].start,
cplb_data[i].end,
SIZE_4M,
cplb_data[i].i_conf);
此时将生成15个SDRAM的块,每个都是4M,且从0开始递增。此时它们的CPLB_DATA值将为0x0003 1205,这个值的意义是:
16位和17位的值为11,即页面大小为4M。
第0位,也即CPLB_VALID,为1,表示Valid CPLB Entry。
第1位,也即CPLB_LOCK,为0,表示CPLB Entry can be replaced。
第2位,也即CPLB_USER_RD,为1,表示User mode read access permitted。
第9位,也即CPLB_MEM_LEV,为1,表示Determins Line Buffer, Low Priority。
第12位,也即CPLB_L1_CHBL,为1,表示Cacherable in l1。
uclinux-2008r1(bf561)内核的icache支持(3):__fill_code_cplbtab相关推荐
- 再读内核存储管理(7):icache支持
快乐虾 http://blog.csdn.net/lights_joy/ lights@hb165.com 本文适用于 ADI bf561 DSP uclinux-2008r1-rc8 (移植到vds ...
- RTL9300 修改内核和busybox支持 vlan if接口注册到内核
//修改内核+busybox,支持vlan if虚接口//Note:开启8021q-vlan功能.|| make menuconfig赞未支持8021q kconfig也未配置其依赖.0.make 9 ...
- 分离内核和虚拟机支持安全的关键任务边缘计算
分离内核和虚拟机支持安全的关键任务边缘计算 Separation kernels and VMs enable secure mission critical edge computing Lynx软 ...
- harmonyos资料整理:HarmonyOS采用多内核设计,支持针对不同资源受限设备选用适合的OS内核(linux是一个内核,不是一个完整的操作系统,例如ubuntu 是操作系统,内核是Linux)
文章目录 前言 技术特性 硬件互助,资源共享 一次开发,多端部署 统一OS,弹性部署 技术架构 系统安全 see also 前言 HarmonyOS是一款"面向未来".面向全场景( ...
- X5浏览器支持HTML5吗,腾讯X5 Blink内核 加强H5支持和渲染性能支撑
原标题:腾讯X5 Blink内核 加强H5支持和渲染性能支撑 腾讯浏览服务TBS2.0即日全量发布,X5内核升级到Blink版本,H5能力和渲染性能全面提升.随着TBS2.0的发布,使用TBS浏览服务 ...
- linux内核4.0,新闻|Linux内核4.0功能:实时内核补丁,支持PS3
Linux Torvalds 在Linux内核邮件列表里发布了Linux内核新的稳定版. Linux 4.0,代号为'Hurr durr I'm a sheep',带来了一小系列新硬件支持,驱动改进, ...
- linux内核5.3支持cpu,Linux 5.3版内核重磅发布:支持中国兆芯x86 CPU
经过两个月的开发和八个RC候选版本之后,Linus Torvalds今天终于正式发布了Linux Kernel 5.3版内核.虽然因为旅游耽误了一个星期,但是这个版本带来了诸多重磅更新,值得等待和升级 ...
- 第二部分 s3c2440 移植linux内核 添加网卡支持 yaffs2文件系统支持
三.内核的移植 说明:针对的是百问网的jz2440 gcc:4.9.1 1.移植内核 首先,下载源码包:https://www.kernel.org/ 现在时间为2014年12月20日其主界面截图为: ...
- 定制 kali nethunter内核 (官方不支持的手机)
Kali Linux NetHunter内核编译指南 发表于 2021-09-12 更新于 2022-10-08 分类于 kali 阅读次数: 阅读次数: 1890 Valine: ...
最新文章
- Nature回应南大花120万发特刊!被骂上热搜,南大到底委不委屈?
- excel单元格调用mysql数据_Excel 使用单元格的值 查询MySQL数据库并返回数据给相应的单元格...
- 区域赛铜牌专题(一)
- Mysql数据库——数据类型和约束
- escape character.
- 电子地图“顽疾”难治,会“传染”自动驾驶专用高精地图吗?
- Filco圣手二代双模蓝牙机械键盘|科大讯飞鼠标连接Mac方法
- 最新麦子学院嵌入式开发系列培训教程
- linux戒游戏下载,苍月之戒手游下载-苍月之戒公测版v1.0-Linux公社
- 抢红包算法 c++_“抠抠族”的出行利器,斤斤计较的几何C为了节能果然够拼
- 数据加密-国密SM2对数据进行加解密
- headfirst 笔记 第七章
- 【中国数据创新琅琊榜】数联易康医疗大数据平台,创新健康医疗产业变革的推动者和见证者!
- chmod 权限777 -rwxrwxrwx是什么意思
- ManualResetEvent用法详解
- 如何进行第一次单片机烧录
- 技术员 Ghost Win10 x64 装机版/纯净版 201710
- 解决触摸板synatipics与键盘驱动相冲突问题——win8.1
- Lucene 搜索词分词
- A tutorial on Principal Components Analysis | 主成分分析(PCA)教程
热门文章
- 思科华为设备端口聚合配置命令对比
- 搭建Joomla基础管理平台
- Windows结束任务管理器进程后,桌面消失如何解决?
- 谷歌中国全球首发Google音乐
- ubuntu桌面图标管理(以pycharm图标为例)
- vue+element-UI实现右键菜单
- 2021-05-25
- ZYNQ7020-linux下使用pl端扩展串口,内核无法启动,串口无反应解决方案-2-问题探究
- 如何用一条命令将网页转成电脑 App
- html5页面转appstore,跳转App Store那些事儿