Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Mar 2006 15:47:46 -0600
From:      Eric Anderson <anderson@centtech.com>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: Seagate 4GB CF drive in pccard slot won't work
Message-ID:  <441F2302.8050402@centtech.com>
In-Reply-To: <20060320.115438.97293590.imp@bsdimp.com>
References:  <441ED31B.6030500@centtech.com>	<20060320.091339.133982805.imp@bsdimp.com>	<441ED6F2.3020504@centtech.com> <20060320.115438.97293590.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
M. Warner Losh wrote:
> In message: <441ED6F2.3020504@centtech.com>
>             Eric Anderson <anderson@centtech.com> writes:
> : M. Warner Losh wrote:
> : > In message: <441ED31B.6030500@centtech.com>
> : >             Eric Anderson <anderson@centtech.com> writes:
> : > : M. Warner Losh wrote:
> : > : > In message: <441EBC32.2070508@centtech.com>
> : > : >             Eric Anderson <anderson@centtech.com> writes:
> : > : > : Warner Losh wrote:
> : > : > : >> I'm running the latest 6.1-*, and inserting a cf->pccard reader with a 
> : > : > : >> 4GB seagate cf drive installed gives me these messages:
> : > : > : >>
> : > : > : >> cbb0: ready never happened, status = 0d
> : > : > : >> pcib3: pccard0 requested memory range 0xdfb00000-0xdfbfffff: good
> : > : > : >> pccard0: Card has no functions!
> : > : > : >> cbb0: PC Card card activation failed
> : > : > : >>     
> : > : > : >
> : > : > : > Something bad happened on the way to the forum...  Please set
> : > : > : > hw.cbb.debug=1 and hw.pccard.debug=1 and try again.
> : > : > : >   
> : > : > : 
> : > : > : Here's the latest snippet from /var/log/messages with those two set:
> : > : > : 
> : > : > : Mar 20 08:27:47 neutrino kernel: Status is 0x30001911
> : > : > : Mar 20 08:27:47 neutrino kernel: cbb0: card inserted: event=0x00000000, 
> : > : > : state=30001911
> : > : > : Mar 20 08:27:47 neutrino kernel: pccard0: chip_socket_enable
> : > : > : Mar 20 08:27:47 neutrino kernel: cbb_pcic_socket_enable:
> : > : > : Mar 20 08:27:47 neutrino kernel: cbb0: cbb_power: 2V
> : > : > : Mar 20 08:27:47 neutrino kernel: cbb0: ready never happened, status = 0d
> : > : > : Mar 20 08:27:47 neutrino kernel: pccard0: read_cis
> : > : > : Mar 20 08:27:47 neutrino kernel: pcib3: pccard0 requested memory range 
> : > : > : 0xdfb00000-0xdfbfffff: good
> : > : > : Mar 20 08:27:47 neutrino kernel: pccard0: check_cis_quirks
> : > : > : Mar 20 08:27:47 neutrino kernel: pccard0: Card has no functions!
> : > : > : Mar 20 08:27:47 neutrino kernel: cbb0: PC Card card activation failed
> : > : > : 
> : > : > : 
> : > : > : Anything else I can provide?
> : > : > : 
> : > : > : Also - when inserting this card in the slot, my system freezes for about 
> : > : > : 5-6 seconds.
> : > : >
> : > : > hw.pccard.cis_debug=1 may help.
> : > : >
> : > : > The 2V cbb power looks very wrong, however...
> : > : >
> : > : > Warner
> : > : >   
> : > : 
> : > : Here's what I get with that enabled:
> : > : 
> : > : Mar 20 10:06:16 neutrino kernel: Status is 0x30001911
> : > : Mar 20 10:06:16 neutrino kernel: cbb0: card inserted: event=0x00000000, 
> : > : state=30001911
> : > : Mar 20 10:06:16 neutrino kernel: pccard0: chip_socket_enable
> : > : Mar 20 10:06:16 neutrino kernel: cbb_pcic_socket_enable:
> : > : Mar 20 10:06:16 neutrino kernel: cbb0: cbb_power: 2V
> : > : Mar 20 10:06:16 neutrino kernel: cbb0: ready never happened, status = 0d
> : > : Mar 20 10:06:16 neutrino kernel: pccard0: read_cis
> : > : Mar 20 10:06:16 neutrino kernel: pcib3: pccard0 requested memory range 
> : > : 0xdfb00000-0xdfbfffff: good
> : > : Mar 20 10:06:16 neutrino kernel: cis mem map 0xe7642000 (resource: 
> : > : 0xdfb10000)
> : > : Mar 20 10:06:16 neutrino kernel: pccard0: CIS tuple chain:
> : > : Mar 20 10:06:16 neutrino kernel: CISTPL_END
> : > : Mar 20 10:06:16 neutrino kernel: ff
> : > : Mar 20 10:06:16 neutrino kernel: cis mem map e7642000
> : > : Mar 20 10:06:16 neutrino kernel: CISTPL_LINKTARGET expected, code ff 
> : > : observed
> : > : Mar 20 10:06:16 neutrino kernel: pccard0: check_cis_quirks
> : > : Mar 20 10:06:16 neutrino kernel: pccard0: Card has no functions!
> : > : Mar 20 10:06:16 neutrino kernel: cbb0: PC Card card activation failed
> : > : 
> : > : 
> : > : Thanks for the quick reply!
> : >
> : > Based on what you've provided, here's my current theory of the crime:
> : >
> : > (1) The card is inserted.
> : > (2) The bridge somehow thinks it is a X.X V card.  It reports this as
> : >     2V in the dmesg because I arbitarily assigned numbers to X and Y.
> : > (3) There's two ways this can happen.  One: is that new cards have been
> : >     released that implement this standard and your bridge is detecting
> : >     it, but either the card or bridge fails to implement it
> : >     correctly.  Two: There is a problem with the bridge's memory
> : >     allocation, so the cbb driver is really talking to something
> : >     else.  Three: the bridge has a bug in detecting X.X V cards and
> : >     they should be ignored.
> : >
> : > I'm guessing 'Three' is most likely.  How's your hacking skills?
> : >   
> : 
> : :) well, I'm really good at breaking things.   Point in the direction, 
> : and I'll start looking. 
>
> Try apply the following (you'll have to do it by hand).  This turns
> off the XV and YV bits always.  This code is src/sys/dev/pccbb/pccbb.c
>
> Warner
>
> static int
> cbb_do_power(device_t brdev)
> {
> 	struct cbb_softc *sc = device_get_softc(brdev);
> 	uint32_t voltage, curpwr;
> 	uint32_t status;
>
> 	/* Don't enable OE (output enable) until power stable */
> 	exca_clrb(&sc->exca[0], EXCA_PWRCTL, EXCA_PWRCTL_OE);
>
> -	voltage = cbb_detect_voltage(brdev);
> +	voltage = cbb_detect_voltage(brdev) & ~(CARD_XV_CARD | CARD_YV_CARD);
> 	curpwr = cbb_current_voltage(brdev);
> 	status = cbb_get(sc, CBB_SOCKET_STATE);
> 	if ((status & CBB_STATE_POWER_CYCLE) && (voltage & curpwr))
> 		return 0;
> 	/* Prefer lowest voltage supported */
> 	cbb_power(brdev, CARD_OFF);
> 	if (voltage & CARD_YV_CARD)
> 		cbb_power(brdev, CARD_VCC(YV));
> 	else if (voltage & CARD_XV_CARD)
> 		cbb_power(brdev, CARD_VCC(XV));
> 	else if (voltage & CARD_3V_CARD)
> 		cbb_power(brdev, CARD_VCC(3));
> 	else if (voltage & CARD_5V_CARD)
> 		cbb_power(brdev, CARD_VCC(5));
> 	else {
> 		device_printf(brdev, "Unknown card voltage\n");
> 		return (ENXIO);
> 	}
> 	return (0);
> }
>   

Yep - that makes it find it:

Mar 20 15:43:22 neutrino kernel: pcib3: pccard0 requested memory range 
0xdfb00000-0xdfbfffff: good
Mar 20 15:43:22 neutrino kernel: pccard0: CIS version PCCARD 2.0 or 2.1
Mar 20 15:43:22 neutrino kernel: pccard0: CIS info: SEAGATE, ST1
Mar 20 15:43:22 neutrino kernel: pccard0: Manufacturer code 0x111, 
product 0x0
Mar 20 15:43:22 neutrino kernel: pccard0: function 0: fixed disk, ccr 
addr 200 mask f
Mar 20 15:43:22 neutrino kernel: pccard0: function 0, config table entry 
0: memory card; irq mask 0; mwait_required rdybsy_active powerdown
Mar 20 15:43:22 neutrino kernel: pccard0: function 0, config table entry 
1: I/O card; irq mask ffff; iomask 4, iospace 0-f; rdybsy_active io8 
io16 irqshare irqpulse irqlevel powerdown
Mar 20 15:43:22 neutrino kernel: pccard0: function 0, config table entry 
2: I/O card; irq mask 4000; iomask a, iospace 1f0-1f7 3f6-3f7; 
rdybsy_active io8 io16 irqshare irqpulse irqlevel powerdown
Mar 20 15:43:22 neutrino kernel: pccard0: function 0, config table entry 
3: I/O card; irq mask 4000; iomask a, iospace 170-177 376-377; 
rdybsy_active io8 io16 irqshare irqpulse irqlevel powerdown
Mar 20 15:43:22 neutrino kernel: pcib3: pccard0 requested memory range 
0xdfb00000-0xdfbfffff: good
Mar 20 15:43:22 neutrino kernel: ata2: <SEAGATE ST1> at port 0x100-0x10f 
irq 19 function 0 config 1 on pccard0
Mar 20 15:43:22 neutrino kernel: ata2: reset tp1 mask=01 ostat0=50 ostat1=00
Mar 20 15:43:22 neutrino kernel: ata2: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
Mar 20 15:43:22 neutrino kernel: ata2: reset tp2 stat0=50 stat1=00 
devices=0x1<ATA_MASTER>
Mar 20 15:43:22 neutrino kernel: ata2: [MPSAFE]
Mar 20 15:43:22 neutrino kernel: ata0-master: pio=PIO4 wdma=UNSUPPORTED 
udma=UNSUPPORTED cable=40 wire
Mar 20 15:43:23 neutrino kernel: ata2: reiniting channel ..
Mar 20 15:43:23 neutrino kernel: ata2: reset tp1 mask=01 ostat0=d0 ostat1=00
Mar 20 15:43:23 neutrino kernel: ata2: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
Mar 20 15:43:23 neutrino kernel: ata2: reset tp2 stat0=50 stat1=00 
devices=0x1<ATA_MASTER>
Mar 20 15:43:23 neutrino kernel: ata2: reinit done ..
Mar 20 15:43:23 neutrino kernel: ad4: FAILURE - SETFEATURES ENABLE 
RCACHE timed out
Mar 20 15:43:23 neutrino kernel: ad4: 3906MB <Seagate ST64022CF 3.01> at 
ata2-master PIO4
Mar 20 15:43:23 neutrino kernel: ad4: 7999488 sectors [7936C/16H/63S] 1 
sectors/interrupt 1 depth queue
Mar 20 15:43:23 neutrino kernel: GEOM: new disk ad4

With all the debugging turned on:

Mar 20 15:46:44 neutrino kernel: Status is 0x30001911
Mar 20 15:46:44 neutrino kernel: cbb0: card inserted: event=0x00000000, 
state=30001911
Mar 20 15:46:44 neutrino kernel: pccard0: chip_socket_enable
Mar 20 15:46:44 neutrino kernel: cbb_pcic_socket_enable:
Mar 20 15:46:44 neutrino kernel: cbb0: cbb_power: 3V
Mar 20 15:46:44 neutrino kernel: pccard0: read_cis
Mar 20 15:46:44 neutrino kernel: pcib3: pccard0 requested memory range 
0xdfb00000-0xdfbfffff: good
Mar 20 15:46:44 neutrino kernel: cis mem map 0xe755a000 (resource: 
0xdfb10000)
Mar 20 15:46:44 neutrino kernel: pccard0: CIS tuple chain:
Mar 20 15:46:44 neutrino kernel: CISTPL_DEVICE type=funcspec speed=ext
Mar 20 15:46:44 neutrino kernel: 01 04 df 12 01 ff
Mar 20 15:46:44 neutrino kernel: unhandled CISTPL 1c
Mar 20 15:46:44 neutrino kernel: 1c 05 03 df 12 01 ff
Mar 20 15:46:44 neutrino kernel: unhandled CISTPL 18
Mar 20 15:46:44 neutrino kernel: 18 02 df 01
Mar 20 15:46:44 neutrino kernel: CISTPL_MANFID
Mar 20 15:46:44 neutrino kernel: 20 04 11 01 00 00
Mar 20 15:46:44 neutrino kernel: CISTPL_VERS_1
Mar 20 15:46:44 neutrino kernel: 15 0f 04 01 53 45 41 47 41 54 45 00 53 
54 31 00
Mar 20 15:46:44 neutrino kernel: ff
Mar 20 15:46:44 neutrino kernel: CISTPL_FUNCID
Mar 20 15:46:44 neutrino kernel: 21 02 04 01
Mar 20 15:46:44 neutrino kernel: CISTPL_FUNCE
Mar 20 15:46:44 neutrino kernel: 22 02 01 01
Mar 20 15:46:44 neutrino kernel: CISTPL_FUNCE
Mar 20 15:46:44 neutrino kernel: 22 03 02 08 0f
Mar 20 15:46:44 neutrino kernel: CISTPL_CONFIG
Mar 20 15:46:44 neutrino kernel: 1a 05 01 07 00 02 0f
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 0c c0 c0 a1 27 55 4d 5d b6 1e 08 00 20
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 07 00 01 21 b5 1e b6 1e
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 0e c1 41 99 27 55 4d 5d b6 1e 64 f0 
ff ff 20
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 07 01 01 21 b5 1e b6 1e
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 13 c2 41 99 27 55 4d 5d b6 1e ea 61 
f0 01 07
Mar 20 15:46:44 neutrino kernel: f6 03 01 ee 20
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 07 02 01 21 b5 1e b6 1e
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 13 c3 41 99 27 55 4d 5d b6 1e ea 61 
70 01 07
Mar 20 15:46:44 neutrino kernel: 76 03 01 ee 20
Mar 20 15:46:44 neutrino kernel: CISTPL_CFTABLE_ENTRY
Mar 20 15:46:44 neutrino kernel: 1b 07 03 01 21 b5 1e b6 1e
Mar 20 15:46:44 neutrino kernel: unhandled CISTPL 14
Mar 20 15:46:44 neutrino kernel: CISTPL_NO_LINK
Mar 20 15:46:44 neutrino kernel: 14 00
Mar 20 15:46:44 neutrino kernel: CISTPL_END
Mar 20 15:46:44 neutrino kernel: ff
Mar 20 15:46:44 neutrino kernel: pccard0: check_cis_quirks
Mar 20 15:46:44 neutrino kernel: pccard0: CIS version PCCARD 2.0 or 2.1
Mar 20 15:46:44 neutrino kernel: pccard0: CIS info: SEAGATE, ST1
Mar 20 15:46:44 neutrino kernel: pccard0: Manufacturer code 0x111, 
product 0x0
Mar 20 15:46:44 neutrino kernel: pccard0: function 0: fixed disk, ccr 
addr 200 mask f
Mar 20 15:46:44 neutrino kernel: pccard0: function 0, config table entry 
0: memory card; irq mask 0; mwait_required rdybsy_active powerdown
Mar 20 15:46:44 neutrino kernel: pccard0: function 0, config table entry 
1: I/O card; irq mask ffff; iomask 4, iospace 0-f; rdybsy_active io8 
io16 irqshare irqpulse irqlevel powerdown
Mar 20 15:46:44 neutrino kernel: pccard0: function 0, config table entry 
2: I/O card; irq mask 4000; iomask a, iospace 1f0-1f7 3f6-3f7; 
rdybsy_active io8 io16 irqshare irqpulse irqlevel powerdown
Mar 20 15:46:44 neutrino kernel: pccard0: function 0, config table entry 
3: I/O card; irq mask 4000; iomask a, iospace 170-177 376-377; 
rdybsy_active io8 io16 irqshare irqpulse irqlevel powerdown
Mar 20 15:46:44 neutrino kernel: pccard0: functions scanning
Mar 20 15:46:44 neutrino kernel: pccard0: Card has 1 functions. 
pccard_mfc is 0
Mar 20 15:46:44 neutrino kernel: pccard0: I/O rid 0 start 0 end ffffffff
Mar 20 15:46:44 neutrino kernel: cbb_pcic_socket_enable:
Mar 20 15:46:44 neutrino kernel: cbb0: cbb_power: 0V
Mar 20 15:46:44 neutrino kernel: cbb0: cbb_power: 3V
Mar 20 15:46:44 neutrino kernel: pcib3: pccard0 requested memory range 
0xdfb00000-0xdfbfffff: good
Mar 20 15:46:44 neutrino kernel: pccard0: ccr_res == dfb01000-dfb013ff, 
base=200
Mar 20 15:46:44 neutrino kernel: pccard0: function 0 CCR at 0 offset 
200: 41 80 2e 0, 0 0 0 0, 0
Mar 20 15:46:44 neutrino kernel: ata2: <SEAGATE ST1> at port 0x100-0x10f 
irq 19 function 0 config 1 on pccard0
Mar 20 15:46:44 neutrino kernel: ata2: reset tp1 mask=01 ostat0=50 ostat1=00
Mar 20 15:46:44 neutrino kernel: ata2: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
Mar 20 15:46:44 neutrino kernel: ata2: reset tp2 stat0=50 stat1=00 
devices=0x1<ATA_MASTER>
Mar 20 15:46:44 neutrino kernel: ata2: [MPSAFE]
Mar 20 15:46:44 neutrino kernel: ata0-master: pio=PIO4 wdma=UNSUPPORTED 
udma=UNSUPPORTED cable=40 wire
Mar 20 15:46:46 neutrino kernel: ata2: reiniting channel ..
Mar 20 15:46:46 neutrino kernel: ata2: reset tp1 mask=01 ostat0=d0 ostat1=00
Mar 20 15:46:46 neutrino kernel: ata2: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
Mar 20 15:46:46 neutrino kernel: ata2: reset tp2 stat0=50 stat1=00 
devices=0x1<ATA_MASTER>
Mar 20 15:46:46 neutrino kernel: ata2: reinit done ..
Mar 20 15:46:46 neutrino kernel: ad4: FAILURE - SETFEATURES ENABLE 
RCACHE timed out
Mar 20 15:46:46 neutrino kernel: ad4: 3906MB <Seagate ST64022CF 3.01> at 
ata2-master PIO4
Mar 20 15:46:46 neutrino kernel: ad4: 7999488 sectors [7936C/16H/63S] 1 
sectors/interrupt 1 depth queue
Mar 20 15:46:46 neutrino kernel: GEOM: new disk ad4
Mar 20 15:46:46 neutrino kernel: ad4: Adaptec check1 failed
Mar 20 15:46:46 neutrino kernel: ad4: LSI (v3) check1 failed
Mar 20 15:46:46 neutrino kernel: ad4: LSI (v2) check1 failed
Mar 20 15:46:46 neutrino kernel: ad4: FreeBSD check1 failed
Mar 20 15:46:46 neutrino kernel: pccard0: function 0 CCR at 0 offset 200 
mask f: 41 82 2e 0, 4a 4a 4a 4a, 4a


Anything else you would like me to do?

Eric




-- 
------------------------------------------------------------------------
Eric Anderson        Sr. Systems Administrator        Centaur Technology
Anything that works is better than anything that doesn't.
------------------------------------------------------------------------




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?441F2302.8050402>