реклама на сайте
подробности

 
 
> Модуль обращения к LocalBus, MPC8377
sabbatazh
сообщение Dec 20 2011, 10:34
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 20-12-11
Пользователь №: 68 986



Здравствуйте уважаемые Знатоки!
Прошу вашей помощи!
только познакомился с продукцией Freecale, а именно с процессором MPC8377. и пытаюсь написать модуль доступа к LocalBus, возникла ошибка:
Цитата
Kernle: module startup...
Kernel: Device registered. Major number is 252
Kernel: mmio =0xd1064000
Machine check in kernel mode.
Caused by (from SRR1=49030): Transfer error ack signal
Oops: Machine check, sig: 7 [#1]
MPC837x RDB
Modules linked in: LocalBus(+) [last unloaded: LocalBus]
NIP: d1084118 LR: d10840f8 CTR: c0208f24
REGS: cfba5dc0 TRAP: 0200 Not tainted (2.6.25)
MSR: 00049030 <EE,ME,IR,DR> CR: 24004428 XER: 00000000
TASK = cf8b4810[1442] 'insmod' THREAD: cfba4000
GPR00: 00000001 cfba5e70 cf8b4810 d1084338 00000000 ffffffff c020c048 00004000
GPR08: 00000034 d1064000 00001ca1 d1002500 24004422 10018d88 0000001d d108246c
GPR16: cf9feb80 d1079254 00000000 0000002d 0000002d d1078cad c003dd7c d1064000
GPR24: 0000001f 0000001f d1078dcc d1084960 00000000 d1084960 cfb34800 d1080000
NIP [d1084118] _init_module+0x9c/0x174 [LocalBus]
LR [d10840f8] _init_module+0x7c/0x174 [LocalBus]
Call Trace:
[cfba5e70] [d10840f8] _init_module+0x7c/0x174 [LocalBus] (unreliable)
[cfba5e80] [c003e6f4] sys_init_module+0x130/0x17b8
[cfba5f40] [c000f70c] ret_from_syscall+0x0/0x38
--- Exception: c01 at 0xff6f218
LR = 0x10000950
Instruction dump:
386342e0 7c040378 901f4ae4 4800009d 813f4ae4 2f890000 419e0074 38000001
3c60d108 98090010 38634338 88890001 <48000079> 813f4ae4 3c60d108 38634344
---[ end trace 8933fae98ac0b4a5 ]---
Bus error

объясняли, что необходимо еще сделать некоторые операции по настройке чипселектов, до меня не дошло! Кто сталкивался с такой штукой подскажите что и как?! Модуль выглядит так:
Код
#define MODULE
#define __KERNEL__

//#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/stddef.h>
#include <linux/interrupt.h>
#include <linux/err.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/proc_fs.h>

#include <asm/io.h>
#include <asm/immap_qe.h>
#include <asm/qe.h>


#define DEV_NAME "my_dev"

#define _MBAR_BASE 0xe0000000

#define _CS0_BASE 0xf0000000
#define _CS0_COUNT 0x30

#define _OR0_CFG_VAL 0xFFF00000

#define SUCCESS 0

static int major;
struct file_operations fops;
int _immr_pa;

//unsigned volatile char *mmio;
byte *mmio;
//__be32 __iomem *reg_map;

int _init_module(void )
{
    printk("Kernle: module startup...\n");
    major = register_chrdev(0, DEV_NAME, &fops);
   if (major < 0)
   { // Проверка успешности регистрации
        printk("Kernel: Register failed\n");
        return major;
   };
   printk("Kernel: Device registered. Major number is %d\n",major);

   if(!request_mem_region(_CS0_BASE/*базовый адрес*/, _CS0_COUNT/*размер*/, DEV_NAME));
        {
        //тут ругаемся на то, что ядро не дает память
          printk("Kernel: request_mem_region");
          return 0;
        };

   //reg_map = ioremap_nocache(_CS0_BASE/*базовый адрес*/, _CS0_COUNT/*размер*/);
   mmio = (byte*)ioremap(_CS0_BASE/*базовый адрес*/, _CS0_COUNT/*размер*/);
          printk ("Kernel: mmio =0x%p\n", mmio);

   if (mmio == NULL)
       {
         printk ("Kernel: Could not map base registers at beggining of address=0x%X\n", _CS0_BASE);
         return -ENOMEM;
       };
  
  unsigned int val = 0;

  mmio[0x10] = 1; /*пишем по адресу*/
    printk("Write 0x%p\n", mmio[0x01]);

  val = mmio[0x10];
    printk("Read %d\n", val);

  iounmap(mmio);
}

void _stop_module()
{
   // Снимаем захват памяти
   release_mem_region(_CS0_BASE, _CS0_COUNT);
   printk("Kernel: release memio ports\n");
   // Снимаем регистрацию устройства
   if (unregister_chrdev(major, DEV_NAME) < 0){
       printk("Kernel: unregister device failed\n");
      };
  
  printk("Kernel: device unregistered\n");
  printk("Kernel: module3 is dead \n");

return;
}

module_init(_init_module);
module_exit(_stop_module);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Driver CS");

Спасибо!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_SY_
сообщение Dec 22 2011, 05:25
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 10-10-07
Из: Новосибирск
Пользователь №: 31 240



Ну да, по-хорошему нада бы еще че-то с железом поделать, т.е. если это LCS[0], то надо прописать регистры BR0 и OR0.
Плюс не забыть сделать local bus window в регистрах LBLAWBAR и LBLAWAR

"Transfer error ack" это софт попытался полезть по адресу, который не назначен ни на один из мем контролеров, и не получил transfer acknowledge в положенное время.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016