免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2109 | 回复: 4
打印 上一主题 下一主题

[硬件及驱动] local bus片选的配置及片选空间的大小 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-22 15:30 |只看该作者 |倒序浏览
用的是powerpc8309,目前想在localbus总线下挂一个nand, 64K双口ram,128双口ram,外加一个CPLD。目前需要修改此设备树里面localbus相关部分

localbus@e0005000 {
                #address-cells = <2>;
                #size-cells = <1>;
                compatible = "fsl,mpc8315-elbc", "fsl,elbc", "simple-bus";
                reg = <0xe0005000 0x1000>;
                interrupts = <77 0x8>;
                interrupt-parent = <&ipic>;

                // CS0 for NOR flash
                ranges = <0x0 0x0 0xfe000000 0x02000000
                          0x1 0x0 0xfa000000 0x00002000
                          0x2 0x0 0xf9000000 0x00020000>;


                flash@0,0 {
                        #address-cells = <1>;
                        #size-cells = <1>;
                        compatible = "cfi-flash";
                        reg = <0x0 0x0 0x1000000>;
                        bank-width = <2>;
                        device-width = <1>;

                        /*u-boot@0 {
                                reg = <0x0 0x60000>;
                                read-only;
                        };
                        kernel@100000 {
                                reg = <0x100000 0x300000>;
                        };
                        fs@400000 {
                                reg = <0x400000 0x600000>;
                        };
                        dtb@a00000 {
                                reg = <0xa00000 0x20000>;
                        };
                        usr@b00000 {
                                reg = <0xb00000 0x400000>;
                        };*/
                        partition@0 {
                                label = "u-boot";
                                reg = <0x0 0x60000>;
                                read-only;
                        };
                        partition@100000 {
                                label = "kernel";
                                reg = <0x100000 0x300000>;
                        };
                        partition@400000 {
                                label = "ramdisk";
                                reg = <0x400000 0x600000>;
                        };
                        partition@a00000 {
                                label = "dtb";
                                reg = <0xa00000 0x20000>;
                        };
                        partition@b00000 {
                                label = "usr";
                                reg = <0xb00000 0x400000>;
                        };
                };

                // CS1 for read and write buffer/latch
                rwbuffer@1,0 {
                        #address-cells = <1>;
                        #size-cells = <1>;
                        compatible = "rwbuffer";
                        reg = <0x1 0x0000 0x0010>;
                };

                // CS2 for Display
                ssd1289@2,0 {
                        #address-cells = <1>;
                        #size-cells = <1>;
                        compatible = "ssd1289";
                        reg = <0x2 0x0000 0x0002
                               0x2 0x0002 0x0002>;
                };
        };
红字的部分不是很理解,0xfe000000在uboot下的include/configs/8309.h里#define CONFIG_SYS_FLASH_BASE           0xFE000000      /* FLASH base address */,但不知道这个值是从哪里来的,是自己定义的? 还是?????0xfe000000后面的0x02000000这个值是怎么计算出来的,是norflash的最大寻址空间?还有就是我需要挂载4个设备,后面的设备类似于0xFE000000这个值该如何设置,再有谁对localbus这块的内核加载过程及下面设备驱动如何连接这块的东西了解的比较多,让我这菜鸟取取经。。。

论坛徽章:
0
2 [报告]
发表于 2015-07-22 16:48 |只看该作者
搜搜device tree相关资料看看吧

local bus这些参数,用来设置到local bus 控制器里面的,所以要结合CPU的data sheet来看,再结合硬件,看外设是连接到哪个CS。
举例来说,Nor flash 一般都放在地址空间都最高端。 所以大小为0x02000000的nor flash,其起始地址就是0xfe000000。

驱动加载是根据compatible参数来匹配的。

论坛徽章:
0
3 [报告]
发表于 2015-07-23 15:02 |只看该作者
意思就是0xfe000000是根据0x100000000 - norflash大小算出来的结果?还是根本不是按照那个固定大小这么算的?我去设备树的目录里找到好多:
ranges = <0x0 0x0 0xfe000000 0x00800000
                            0x1 0x0 0xe2800000 0x00008000
                            0x2 0x0 0xf0000000 0x00020000
                           0x3 0x0 0xfa000000 0x00008000>;

/* NOR, NAND Flashes and Vitesse 5 port L2 switch */
                  ranges = <0x0 0x0 0x0 0xef000000 0x01000000
                            0x1 0x0 0x0 0xffa00000 0x00040000
                            0x2 0x0 0x0 0xffb00000 0x00020000>;
  
这么看norflash好像是那么算的,但是别的设备,就比如说我找的CS1,CS2,他们两个的地址,大小 我就不会算了。怎么算那?
回复 2# micsonic


   

论坛徽章:
0
4 [报告]
发表于 2015-07-24 17:00 |只看该作者


设备树是根据你实际板卡来配置的,或者说,设计的。
LOCAL BUS在CPU的memory map里有一个总的空间容量(查看CPU data sheet)。在这个总的空间容量里,根据实际使用情况配置(分配设计)。

假设CS1上挂接了一片NVRAM,大小为0x80000.
你可以设置为:
0x1 0x0 0x0 0xffa00000 0x00080000   #CS1的基地址为0xffa00000, CS1所占用的地址空间大小为0x00080000。
然后在你的nvram驱动里,你的read, write函数,访问的起始地址就是0xffa00000。
也可以设置为:
0x1 0x0 0x0 0xffb00000 0x00080000   #CS1的基地址为0xffb00000, CS1所占用的地址空间大小为0x00080000。
然后在你的nvram驱动里,你的read, write函数,访问的起始地址就是0xffb00000。

讲的好罗嗦。。

论坛徽章:
0
5 [报告]
发表于 2015-07-27 09:11 |只看该作者
谢谢谢谢。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP