Comment #135 for bugzilla 237666 : a USB3-handling problem with a investigatory fix for a cortex-a72 context
Mark Millard
marklmi at yahoo.com
Sun Sep 20 20:34:02 UTC 2020
On 2020-Sep-20, at 06:15, Klaus Cucinauomo <maciphone2 at googlemail.com> wrote:
>
>
>> Am 20.09.2020 um 03:32 schrieb Mark Millard <marklmi at yahoo.com>:
>>
>> ...So: unrelated fixes. ...
>
>> For the u-boot context, my guess is that the patch that
>> restricted the size of the DMA region to 1 GiByte or so
>> to allow things to progress there is effectively a work
>> around that avoids touching another bug(s) some place.
>> (NetBSD and Linux do not have such a small size limit.
>> OpenBSD choose its small limit for other reasons.)
>
>
> Ah, O.K., thanks, got it...
>
> ..the bug is that dma of 1GB is always safe but there is no "OS-pre-implementation"
> for 3GB buffer in 64-bit for RPI4… while , the pcie-device itself DOESN`t have the
> 1GB - limit like other peripherals..
> ..
> NetBSD also did it that (OpenBSD-)way at first , not for other but the same reason,
> I GUESS(!).. while , as you know,guessing(and dma) isn't really my area of expertise ;-) :
FYI: Here is what I found about OpenBSD's choice of its limit:
"OpenBSD can deal with the 3GB limit. In fact it imposes a 1GB DMA limit because there are additional DMA restrictions for the SD controller." ( Mark Kettenis Aug 24, 2020; 4:29am Re: Discuss UEFI settingsin arm64.html/INSTALL.arm64 )
(Not that I have background knowledge that would confirm or deny the claim.)
> https://github.com/NetBSD/src/commit/5cb936da2a4720fa51984394998fa62c62aea7cd#diff-8e16a107fed72481ef0342727619cfa8 :
>
> #define BCM2711_DMA_SIZE 0x3c000000 …,( which is 1GB)
>
> jmcneill seems to have then added some voodoo in NetBSD :
> https://github.com/NetBSD/src/commit/9bf4ec11d132c8b296a3926483aa0b8d43fa43ad
>
> the Tux has fixed it there :
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/acpi/arm64/iort.c?h=v5.8&id=bcf876870b95592b52519ed4aafcf9d95999bc9c#n1125
> ..they have things like dma_zone or so...
>
> So hardcoding the 1GB constraint into https://reviews.freebsd.org/D25219
> or
> give it a fine grain dma range to 3GB should fix it...
An interesting item from the Fedora 33 branch (late Oct. release planned):
Note below the 3 GiByte wide DMA32 range is listed as shifted by 1 GiByte.
This is for a 5.8.7-300.fc33.aarch64 kernel. (I used the uefi/ACPI v1.20 to
boot Fedora server, not limiting to 3072 MiB.)
[ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x00000001ffffffff]
[ 0.000000] NUMA: NODE_DATA [mem 0x1fefec8c0-0x1ff002fff]
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000000000000-0x000000003fffffff]
[ 0.000000] DMA32 [mem 0x0000000040000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x00000001ffffffff]
[ 0.000000] Device empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x00000000001fffff]
[ 0.000000] node 0: [mem 0x0000000000200000-0x00000000337d7fff]
[ 0.000000] node 0: [mem 0x00000000337d8000-0x000000003387ffff]
[ 0.000000] node 0: [mem 0x0000000033880000-0x000000003390ffff]
[ 0.000000] node 0: [mem 0x0000000033910000-0x000000003398ffff]
[ 0.000000] node 0: [mem 0x0000000033990000-0x00000000339affff]
[ 0.000000] node 0: [mem 0x00000000339b0000-0x0000000033a2ffff]
[ 0.000000] node 0: [mem 0x0000000033a30000-0x0000000036efffff]
[ 0.000000] node 0: [mem 0x0000000036f00000-0x00000000372dffff]
[ 0.000000] node 0: [mem 0x00000000372e0000-0x000000003b2fffff]
[ 0.000000] node 0: [mem 0x0000000040000000-0x00000000fbffffff]
[ 0.000000] node 0: [mem 0x0000000100000000-0x00000001ffffffff]
[ 0.000000] Zeroed struct page in unavailable ranges: 552 pages
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x00000001ffffffff]
I don't know enough to know if this indicates a problem
in/for Fedora for an RPi4B or not.
I just did a "yum update" and the 5.8.10-300.fc33.aarch64 kernel
that resulted boots reporting the same for DMA32:
[ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x00000001ffffffff]
[ 0.000000] NUMA: NODE_DATA [mem 0x1fefed8c0-0x1ff003fff]
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000000000000-0x000000003fffffff]
[ 0.000000] DMA32 [mem 0x0000000040000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x00000001ffffffff]
[ 0.000000] Device empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x00000000001fffff]
[ 0.000000] node 0: [mem 0x0000000000200000-0x00000000337e7fff]
[ 0.000000] node 0: [mem 0x00000000337e8000-0x000000003388ffff]
[ 0.000000] node 0: [mem 0x0000000033890000-0x000000003390ffff]
[ 0.000000] node 0: [mem 0x0000000033910000-0x000000003398ffff]
[ 0.000000] node 0: [mem 0x0000000033990000-0x00000000339affff]
[ 0.000000] node 0: [mem 0x00000000339b0000-0x0000000033a2ffff]
[ 0.000000] node 0: [mem 0x0000000033a30000-0x0000000036efffff]
[ 0.000000] node 0: [mem 0x0000000036f00000-0x00000000372dffff]
[ 0.000000] node 0: [mem 0x00000000372e0000-0x000000003b2fffff]
[ 0.000000] node 0: [mem 0x0000000040000000-0x00000000fbffffff]
[ 0.000000] node 0: [mem 0x0000000100000000-0x00000001ffffffff]
[ 0.000000] Zeroed struct page in unavailable ranges: 536 pages
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x00000001ffffffff]
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)
More information about the freebsd-arm
mailing list