[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pbsd-mg2] Re: Cassiopeia E-500 (Re: GIU-ISA bridge)



 | uch> としてみるとか。MC-R300やFreestyleの場合は、foundが3,4なので、step 0x1000でもこれで
 | uch> ふるいにかけれます。(本当にControler 1 Socket Aだけだったらだめですけど)
 | 
 | アドバイスありがとうございます。
 | 
 | 0x1000刻みと 0x100刻みを試してみたのですが、残念ながら foundが1を越える
 | ケースはありませんでした。。

 下のような感じで、0x82,0x83のみサーチあるいは、found>1 で2刻みに全部
調べてみるとどうでしょう?  これでみつからなければ、なんのPCICが載って
るのか中を調べた方がいいかも...
---
UCHIYAMA Yasushi
uch@nop.or.jp 

#ifdef DEBUG_FIND_PCIC
#warning DEBUG_FIND_PCIC
static void
__find_pcic(void)
{
    int i, j, step, found;
    u_int32_t addr;
    u_int8_t reg;
    int __read_revid (u_int32_t port) 
	{
	    addr = MIPS_PHYS_TO_KSEG1(i + port);
//	    printf("%#x\r", i);
	    for (found = 0, j = 0; j < 0x100; j += 0x40) {
		*((volatile u_int8_t*)addr) = j;
		reg = *((volatile u_int8_t*)(addr + 1));
#ifdef DEBUG_FIND_PCIC_I82365SL_ONLY
		if (reg == 0x82 || reg == 0x83) {
#else
		if ((reg & 0xc0) == 0x80) {
#endif
		    found++;
		}
	    }
#if 0
	    if (found>1)
#else
	    if (found)
#endif
		printf("\nfound %d socket at %#x (base from %#x)\n", found, addr,
		       i + port - VR_ISA_PORT_BASE);
	};
    step = 0x2;
    printf("\nFinding PCIC. Trying ISA port %#x-%#x step %#x\n", 
	   VR_ISA_PORT_BASE, VR_ISA_PORT_BASE + VR_ISA_PORT_SIZE, step);
    for (i = VR_ISA_PORT_BASE; i < VR_ISA_PORT_BASE+VR_ISA_PORT_SIZE; i+= step) {
	__read_revid (0);
    }
}
#endif