主题 : 提问2410或者2440的LCD的DMA地址怎么确定。 复制链接 | 浏览器收藏 | 打印
加油
级别: 新手上路
UID: 16582
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2010-03-19
最后登录: 2013-07-09
楼主  发表于: 2010-10-28 17:41

 提问2410或者2440的LCD的DMA地址怎么确定。

大家好,有个疑问。希望能帮我一下。。

看了一下,LCD控制器的驱动,有一点没弄明白。DMA是怎么知道内存的地址的?
saddr1  = info->fix.smem_start >> 1;
    saddr2  = info->fix.smem_start;
    saddr2 += info->fix.line_length * info->var.yres;
    saddr2 >>= 1;
    saddr3 = S3C2410_OFFSIZE(0) |
         S3C2410_PAGEWIDTH((info->fix.line_length / 2) & 0x3ff);
    writel(saddr1, regs + S3C2410_LCDSADDR1);
    writel(saddr2, regs + S3C2410_LCDSADDR2);
    writel(saddr3, regs + S3C2410_LCDSADDR3);
上面的代码根据2410的LCD控制介绍,在对LCDSADDR1和LCDSADDR2写了总线地址后。LCD控制器只知道总线地址的(30~22)位和(21~1)位。而不知道具体的地址.怎么能对应到向内核申请的framebuffer进行数据传输呢?

再看
    info->fix.smem_start = map_dma;
    info->screen_base = dma_alloc_writecombine(fbi->dev, map_size,
                           &map_dma, GFP_KERNEL);

map_dma的地址按2440的接线nGCS6,也就是说地址是0x30000000~0x31000000 (64M)

交给了LCD的DMA的地址只有30~1,这30个位。DMA地址怎么定的呢???



加油
级别: 新手上路
UID: 16582
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2010-03-19
最后登录: 2013-07-09
1楼  发表于: 2010-10-28 17:52
说错了,,ap_dma的地址按2440的接线nGCS6,也就是说地址是0x30000000~0x31000000 (64M)

不是0x30000000~0x31000000间。。而是0x30000000~0x34000000间