Module Name:    src
Committed By:   jakllsch
Date:           Mon Feb 17 19:01:04 UTC 2025

Modified Files:
        src/sys/arch/i386/conf: LEGACY
        src/sys/dev/ata: ata.c files.ata

Log Message:
Restore ATA DMA mode downgrade support everywhere; it's a necessary part
of any system supporting (parallel) ATA DMA.  There is hardware out there,
including cobalt, macppc, and sparc64 where this functionality is
necessary to avoid non-functional disks, either in as-shipped hardware
configurations or with add-in cards, or perhaps just with compromised
IDE/PATA cables.

Should address:
  PR 58767
  PR 59023
  PR 59078

If anyone really insists on not having this support they can now turn it
off themselves with `options ATA_NO_DOWNGRADE_MODE`


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/i386/conf/LEGACY
cvs rdiff -u -r1.170 -r1.171 src/sys/dev/ata/ata.c
cvs rdiff -u -r1.32 -r1.33 src/sys/dev/ata/files.ata

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/i386/conf/LEGACY
diff -u src/sys/arch/i386/conf/LEGACY:1.4 src/sys/arch/i386/conf/LEGACY:1.5
--- src/sys/arch/i386/conf/LEGACY:1.4	Mon May 13 21:50:47 2024
+++ src/sys/arch/i386/conf/LEGACY	Mon Feb 17 19:01:04 2025
@@ -1,4 +1,4 @@
-#	$NetBSD: LEGACY,v 1.4 2024/05/13 21:50:47 nia Exp $
+#	$NetBSD: LEGACY,v 1.5 2025/02/17 19:01:04 jakllsch Exp $
 
 # LEGACY kernel -- includes vga@isa and pcdisplay@isa for pre-PCI
 # systems, due to significant pain making them fail to attach when
@@ -10,9 +10,6 @@ vga0		at isa?
 pcdisplay0	at isa?			# CGA, MDA, EGA, HGA
 wsdisplay*	at pcdisplay? console ?
 
-# Enable DMA -> PIO downgrade after a certain number of DMA errors.
-options 	ATA_DOWNGRADE_MODE
-
 # XXX we could turn off all sorts of other modern features in this
 # configuration, but that is left for future work.
 

Index: src/sys/dev/ata/ata.c
diff -u src/sys/dev/ata/ata.c:1.170 src/sys/dev/ata/ata.c:1.171
--- src/sys/dev/ata/ata.c:1.170	Mon Feb 17 18:45:01 2025
+++ src/sys/dev/ata/ata.c	Mon Feb 17 19:01:04 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: ata.c,v 1.170 2025/02/17 18:45:01 jakllsch Exp $	*/
+/*	$NetBSD: ata.c,v 1.171 2025/02/17 19:01:04 jakllsch Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.  All rights reserved.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata.c,v 1.170 2025/02/17 18:45:01 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata.c,v 1.171 2025/02/17 19:01:04 jakllsch Exp $");
 
 #include "opt_ata.h"
 
@@ -84,7 +84,7 @@ int atadebug_mask = ATADEBUG_MASK;
 #define ATADEBUG_PRINT(args, level)
 #endif
 
-#if defined(ATA_DOWNGRADE_MODE) && NATA_DMA
+#if !defined(ATA_NO_DOWNGRADE_MODE) && NATA_DMA
 static int	ata_downgrade_mode(struct ata_drive_datas *, int);
 #endif
 
@@ -966,7 +966,7 @@ ata_dmaerr(struct ata_drive_datas *drvp,
 	 */
 	drvp->n_dmaerrs++;
 	if (drvp->n_dmaerrs >= NERRS_MAX && drvp->n_xfers <= NXFER) {
-#ifdef ATA_DOWNGRADE_MODE
+#if !defined(ATA_NO_DOWNGRADE_MODE)
 		ata_downgrade_mode(drvp, flags);
 		drvp->n_dmaerrs = NERRS_MAX-1;
 #else
@@ -1769,7 +1769,7 @@ ata_print_modes(struct ata_channel *chp)
 	}
 }
 
-#if defined(ATA_DOWNGRADE_MODE) && NATA_DMA
+#if !defined(ATA_NO_DOWNGRADE_MODE) && NATA_DMA
 /*
  * downgrade the transfer mode of a drive after an error. return 1 if
  * downgrade was possible, 0 otherwise.

Index: src/sys/dev/ata/files.ata
diff -u src/sys/dev/ata/files.ata:1.32 src/sys/dev/ata/files.ata:1.33
--- src/sys/dev/ata/files.ata:1.32	Sun Sep 22 17:37:08 2024
+++ src/sys/dev/ata/files.ata	Mon Feb 17 19:01:04 2025
@@ -1,4 +1,4 @@
-#	$NetBSD: files.ata,v 1.32 2024/09/22 17:37:08 uwe Exp $
+#	$NetBSD: files.ata,v 1.33 2025/02/17 19:01:04 jakllsch Exp $
 #
 # Config file and device description for machine-independent devices
 # which attach to ATA busses.  Included by ports that need it.  Ports
@@ -14,7 +14,7 @@ file	dev/ata/ata_wdc.c		wd & atabus & wd
 defflag	opt_wd.h	WD_SOFTBADSECT
 defflag	opt_wd.h	WD_CHAOS_MONKEY
 
-defflag	opt_ata.h	ATA_DOWNGRADE_MODE
+defflag	opt_ata.h	ATA_NO_DOWNGRADE_MODE
 defparam opt_ata.h	ATADEBUG_WD_MASK
 
 file	dev/ata/ata.c			(ata_hl | atapi) & atabus

Reply via email to