NetBSD-Bugs archive

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

port-arm/52057: wd0: Identify failed for Xscale pcic controller



>Number:         52057
>Category:       port-arm
>Synopsis:       wd0: Identify failed for Xscale pcic controller
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-arm-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 09 20:55:00 +0000 2017
>Originator:     Stephan Meisinger
>Release:        NetBSD 7 (and later)
>Organization:
>Environment:
>Description:
full description here:
http://mail-index.netbsd.org/tech-kern/2017/03/06/msg021658.html

bug was properply unnoticed because
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/ata/wd.c.diff?r1=1.393&r2=1.394&only_with_tag=MAIN&f=h

missing statement:

if (wd->drvp->drive_type != DRIVET_OLD)
 return 1;

was a workaround for this issue. See full description on mailing list.


>How-To-Repeat:
- boot system
- attach a CF Card into PCMCIA adapter
- mount or execute disklabel command on disk
-> observer wd0: IDENTIFY failed

>Fix:
this patch disables ATAC_CAP_DATA32 for pxapcic, which doesn't support this type of access:

Index: arch/arm/xscale/pxa2x0_pcic.c
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/xscale/pxa2x0_pcic.c,v
retrieving revision 1.12
diff -u -r1.12 pxa2x0_pcic.c
--- arch/arm/xscale/pxa2x0_pcic.c	13 Oct 2013 06:55:34 -0000	1.12
+++ arch/arm/xscale/pxa2x0_pcic.c	9 Mar 2017 20:38:06 -0000
@@ -400,6 +400,7 @@
 {
 	struct pxapcic_softc *sc = device_private(self);
 	struct pxapcic_socket *sock;
+	prop_dictionary_t dict;
 	int s[PXAPCIC_NSLOT];
 	int i;
 	u_int cs;
@@ -419,6 +420,9 @@
 
 		config_pending_incr(self);
 
+		dict = device_properties(sock->pcmcia);
+		prop_dictionary_set_bool(dict, "is_cap_data32", false);
+
 		/* If there's a card there, attach it. */
 		cs = (*sock->pcictag->read)(sock, PXAPCIC_CARD_STATUS);
 		if (cs == PXAPCIC_CARD_VALID)

Index: arch/arm/xscale/pxa2x0_pcic.c
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/xscale/pxa2x0_pcic.c,v
retrieving revision 1.12
diff -u -r1.12 pxa2x0_pcic.c
--- arch/arm/xscale/pxa2x0_pcic.c	13 Oct 2013 06:55:34 -0000	1.12
+++ arch/arm/xscale/pxa2x0_pcic.c	9 Mar 2017 20:38:06 -0000
@@ -400,6 +400,7 @@
 {
 	struct pxapcic_softc *sc = device_private(self);
 	struct pxapcic_socket *sock;
+	prop_dictionary_t dict;
 	int s[PXAPCIC_NSLOT];
 	int i;
 	u_int cs;
@@ -419,6 +420,9 @@
 
 		config_pending_incr(self);
 
+		dict = device_properties(sock->pcmcia);
+		prop_dictionary_set_bool(dict, "is_cap_data32", false);
+
 		/* If there's a card there, attach it. */
 		cs = (*sock->pcictag->read)(sock, PXAPCIC_CARD_STATUS);
 		if (cs == PXAPCIC_CARD_VALID)



Home | Main Index | Thread Index | Old Index