龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 2110|回复: 7

关于PCI的问题

[复制链接]
发表于 2007-3-8 22:47:26 | 显示全部楼层 |阅读模式
CPciBus::Init Start
CPciBus::Init Initing...
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0x6861106  //vendor VIATECH                0x1106        VIA 南桥
PCI_STATUS_MASTER_ABORT
nRetID= 0x515A1002 //vendor ATI                0x1002        ATI 显示卡
PCI_STATUS_MASTER_ABORT
nRetID= 0x813910EC //vendor REALTEK                0x10ec        Realtek 网卡
PCI_STATUS_MASTER_ABORT
nRetID= 0x351033 //vendor NEC                0x1033        NEC USB的HOST
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
CPciBus::Init End
CDriverKeyboardI8042 init
CNOS_0.0.0.1
Copyright @ 2007-2008, caimouse

上面已经找到PCI的设备了,不知道为什么还会出PCI_STATUS_MASTER_ABORT的呢?
是否初始化一次就不能再读取?

代码如下:
//
        SetBonito(BONITO_PCICMD,GetBonito(BONITO_PCICMD)|
                PCI_STATUS_MASTER_ABORT | PCI_STATUS_MASTER_TARGET_ABORT);

        SetBonito(BONITO_PCIMAP_CFG,(nAddr >> 16) | nType);

        //
        nRetID = *(volatile ulong*)(0x1fe80000 | 0xa0000000 | (nAddr & 0xfffc));
        nRetID = nRetID >> ((nAddr & 3) << 3);

        g_CNOS.DebugOut(L"nRetID=",nRetID,L"\r\n");

        //
        if (GetBonito(BONITO_PCICMD) | PCI_STATUS_MASTER_ABORT)
        {
                g_CNOS.DebugOut(L"PCI_STATUS_MASTER_ABORT\r\n");

                SetBonito(BONITO_PCICMD,GetBonito(BONITO_PCICMD)|
                        PCI_STATUS_MASTER_ABORT );
                return false;
        }

        if (GetBonito(BONITO_PCICMD) | PCI_STATUS_MASTER_TARGET_ABORT)
        {
                g_CNOS.DebugOut(L"PCI_STATUS_MASTER_TARGET_ABORT\r\n");

                SetBonito(BONITO_PCICMD,GetBonito(BONITO_PCICMD)|
                        PCI_STATUS_MASTER_TARGET_ABORT );
                return false;
        }
发表于 2007-3-8 23:12:23 | 显示全部楼层
有些奇怪,按理不会的

[ 本帖最后由 foxsen 于 2007-3-8 11:15 PM 编辑 ]
 楼主| 发表于 2007-3-8 23:15:41 | 显示全部楼层
原帖由 foxsen 于 2007-3-8 11:12 PM 发表
是试图读不存在的设备返回的信息吧

上面已经读取成功配置信息了,也返回那个出错信息?  奇怪.
比如下面:
nRetID= 0x6861106  //vendor VIATECH                0x1106        VIA 南桥
PCI_STATUS_MASTER_ABORT
 楼主| 发表于 2007-3-8 23:16:33 | 显示全部楼层
我的代码搞错了.

这次搞对了,谢谢提醒.


CPciBus::Init Start
CPciBus::Init Initing...
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0x6861106
Device
nRetID= 0x515A1002
Device
nRetID= 0x813910EC
Device
nRetID= 0x351033
Device
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
nRetID= 0xFFFFFFFF
PCI_STATUS_MASTER_ABORT
CPciBus::Init End
CDriverKeyboardI8042 init
CNOS_0.0.0.1
Copyright @ 2007-2008, caimouse

[ 本帖最后由 caimouse 于 2007-3-8 11:18 PM 编辑 ]
发表于 2007-3-9 18:20:10 | 显示全部楼层
代码什么差别?贴来看看?
 楼主| 发表于 2007-3-10 13:05:32 | 显示全部楼层
原帖由 kingkongmao 于 2007-3-9 06:20 PM 发表
代码什么差别?贴来看看?


if (GetBonito(BONITO_PCICMD) | PCI_STATUS_MASTER_ABORT)
        {
上面这行写错了,不管是否出错,都会进入,应改为下面:
if (GetBonito(BONITO_PCICMD) & PCI_STATUS_MASTER_ABORT)
        {



我已经能枚举所有的PCI设备了,还有很多疑惑的东西。目前,正在学习怎么样写USB的驱动。
我看了PMON里的代码,发现它用UHCI的接口。而我读取USB的接口芯片时,它的类型码是
0x0C031043,0x0C031043,0x0C032040,
分别表示为OHCI,OHCI,EHCI的三种协议,但PMON里好像只使用UHCI协议。这个比较奇怪的。但LINUX的源程序里有这三种协议。
PMON里为什么不是对应三种协议的呢?
发表于 2007-3-10 13:08:29 | 显示全部楼层
原帖由 caimouse 于 2007-3-10 01:05 PM 发表


if (GetBonito(BONITO_PCICMD) | PCI_STATUS_MASTER_ABORT)
        {
上面这行写错了,不管是否出错,都会进入,应改为下面:
if (GetBonito(BONITO_PCICMD) & PCI_STATUS_MASTER_ABORT)
        {
...


uhci是笔记本的键盘驱动,是via 686b自带的usb1.1 控制器

ohci是用于nec usb2.0芯片的,本身是1.1的一个host 控制器标准,和uhci并列的,福珑的优盘支持就用这个。

ehci是2.0支持,还没有在pmon实现
 楼主| 发表于 2007-3-10 13:16:56 | 显示全部楼层
原帖由 foxsen 于 2007-3-10 01:08 PM 发表


uhci是笔记本的键盘驱动,是via 686b自带的usb1.1 控制器

ohci是用于nec usb2.0芯片的,本身是1.1的一个host 控制器标准,和uhci并列的,福珑的优盘支持就用这个。

ehci是2.0支持,还没有在pmon实现

谢谢,
就是说只要我实现ohci,就可以让福珑支持U盘了?

本版积分规则

Archiver|手机版|小黑屋|Lemote Inc.

GMT+8, 2020-9-22 15:32 , Processed in 0.201926 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表