Adding a "-1" into https://reviews.freebsd.org/D25219 's code looks to make uefi/ACPI handle USB3 SSD reliably

Mark Millard marklmi at yahoo.com
Wed Oct 7 07:26:14 UTC 2020


https://reviews.freebsd.org/D25219 has (in part)

> +	if (bus_dma_tag_create(NULL, 1, 0,
> +		limits.lowaddr, BUS_SPACE_MAXADDR, NULL, NULL,

Based on sysctl hw.busdma output and testing a change for the u-boot/DTB/fdt code context that worked in testing so far, I've tried using limits.lowaddr-1 in the above ACPI handling code instead.

It has worked so far.

So both existing implementations have the same basic
problem as far as I can tell: limits.lowaddr too large
by one, so identifying the wrong page.



What sysctl showed me was the likes of (before
changes that lead to lack of zone2 for u-boot/dtb/fdt):

. . .
hw.busdma.zone2.lowaddr: 0x3c000fff
. . .
hw.busdma.zone1.lowaddr: 0x3fffffff
. . .
hw.busdma.zone0.lowaddr: 0xffffffff
. . .

So I've guessed that lowaddr should identify the
end page of the possibly-use-it-directly region,
not the first do-not-use-it-directly page. If I've
guessed wrong, at most it would bounce one page
that it could avoid bouncing. But, if I guessed
correct, it might bounce a page that it should
instead of not doing so. Thus the "-1" addition.

For reference, after the first duplicate-and-diff test
for uefi/ACPI:

# sysctl hw.busdma
hw.busdma.zone0.alignment: 4096
hw.busdma.zone0.lowaddr: 0xbfffffff
hw.busdma.zone0.total_deferred: 0
hw.busdma.zone0.total_bounced: 762568
hw.busdma.zone0.active_bpages: 12
hw.busdma.zone0.reserved_bpages: 0
hw.busdma.zone0.free_bpages: 824
hw.busdma.zone0.total_bpages: 836
hw.busdma.total_bpages: 836

I'll note that "total_bounced" need not be the
a page count: it is incremented by 1 after
the loop for a bounce, not inside the loop.
Lots of pages of data were bounced.

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-arm mailing list