Date: Thu, 28 Jan 2016 08:45:11 -0700 From: Ian Lepore <ian@freebsd.org> To: Norbert Koch <nkoch@demig.de>, freebsd-hackers@FreeBSD.org Subject: Re: impossible to set pata dma mode? Message-ID: <1453995911.1275.14.camel@freebsd.org> In-Reply-To: <56A9D502.7010809@demig.de> References: <56A9D502.7010809@demig.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2016-01-28 at 09:44 +0100, Norbert Koch wrote: > Hello. > > I have to reduce dma mode from udma to wdma2 > for a flash device. > > In the past this was easy using atacontrol > but, afaiks it seems to be impossible using camcontrol. > > camcontrol negotiate ada0 -M wdma > ...You can only modify user parameters > > camcontrol negotiate ada0 -NM wdma > Works, but I see no way how those user > parameters become active parameters as the > driver only reads then in attach as far as > I can see. > > It seems like the ata driver's interface > allows to change the current settings > (XPT_SET_TRAN_SETTINGS/CTS_TYPE_CURRENT_SETTINGS) > so, why is camcontrol so restrictive? > > Thank you, > Norbert Koch I don't know about changing it on the fly with camcontrol (I've never done that), but you can configure it at boot time with a tunable in loader.conf of the form dev.ada.0.mode="modestr" Where modestr is one of these (from dev/ata/ata-all.c): if (!strcasecmp(str, "PIO0")) return (ATA_PIO0); if (!strcasecmp(str, "PIO1")) return (ATA_PIO1); if (!strcasecmp(str, "PIO2")) return (ATA_PIO2); if (!strcasecmp(str, "PIO3")) return (ATA_PIO3); if (!strcasecmp(str, "PIO4")) return (ATA_PIO4); if (!strcasecmp(str, "WDMA0")) return (ATA_WDMA0); if (!strcasecmp(str, "WDMA1")) return (ATA_WDMA1); if (!strcasecmp(str, "WDMA2")) return (ATA_WDMA2); if (!strcasecmp(str, "UDMA0")) return (ATA_UDMA0); if (!strcasecmp(str, "UDMA16")) return (ATA_UDMA0); if (!strcasecmp(str, "UDMA1")) return (ATA_UDMA1); if (!strcasecmp(str, "UDMA25")) return (ATA_UDMA1); if (!strcasecmp(str, "UDMA2")) return (ATA_UDMA2); if (!strcasecmp(str, "UDMA33")) return (ATA_UDMA2); if (!strcasecmp(str, "UDMA3")) return (ATA_UDMA3); if (!strcasecmp(str, "UDMA44")) return (ATA_UDMA3); if (!strcasecmp(str, "UDMA4")) return (ATA_UDMA4); if (!strcasecmp(str, "UDMA66")) return (ATA_UDMA4); if (!strcasecmp(str, "UDMA5")) return (ATA_UDMA5); if (!strcasecmp(str, "UDMA100")) return (ATA_UDMA5); if (!strcasecmp(str, "UDMA6")) return (ATA_UDMA6); if (!strcasecmp(str, "UDMA133")) return (ATA_UDMA6); -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1453995911.1275.14.camel>