Skip to contentSkip to conversation

riscv: dts: thead: set dma-noncoherent to soc bus

PATCH Superseded Jisheng Zhang 3 participants 8 messages Aug 20, 2023 – Sep 4, 2023

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 riscv: dts: thead: set dma-noncoherent to soc bus

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +
 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
 		interrupt-parent = <&plic>;
 		#address-cells = <2>;
 		#size-cells = <2>;
+		dma-noncoherent;
 		ranges;
 
 		plic: interrupt-controller@ffd8000000 {
Signature · 1 line
2.40.1
#1 lore raw
Quoted 2 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

correct typo in linux-riscv maillist addr
Add linux-riscv, sorry.

Quoted 21 lines
---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +
 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
 		interrupt-parent = <&plic>;
 		#address-cells = <2>;
 		#size-cells = <2>;
+		dma-noncoherent;
 		ranges;
 
 		plic: interrupt-controller@ffd8000000 {
Signature · 1 line
2.40.1

_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv

Tested-by on v1 1/1
#2 lore raw
In reply to Jisheng Zhang
Quoted 23 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +
 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
 		interrupt-parent = <&plic>;
 		#address-cells = <2>;
 		#size-cells = <2>;
+		dma-noncoherent;
 		ranges;
 
 		plic: interrupt-controller@ffd8000000 {
Signature · 1 line
2.40.1

I tried this on the BeagleV Ahead. They system booted as expected and I did not notice any problems in the boot log.

Are there other patches such as the dwmac series that I should test this with?

Also, I think this might have missed patchwork since the original email had a typo for the list, so it might be good to resend it?

Thanks,
Drew

#3 lore raw
Quoted 27 lines · Drew Fustini
Quoted 23 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +
 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
 		interrupt-parent = <&plic>;
 		#address-cells = <2>;
 		#size-cells = <2>;
+		dma-noncoherent;
 		ranges;
 
 		plic: interrupt-controller@ffd8000000 {
Signature · 1 line
2.40.1
Quoted 5 lines

I tried this on the BeagleV Ahead. They system booted as expected and I did not notice any problems in the boot log.

Are there other patches such as the dwmac series that I should test this with?

Hmm, this patch is necessary to test dwmac, emmc ;)

Quoted 3 lines

Also, I think this might have missed patchwork since the original email had a typo for the list, so it might be good to resend it?

This patch was sent after sending PR to soc people, so it was late for linux-6.6-rc1, but this patch is a fix, I may send it as a fix once linux-6.6-rc1 is out.

#4 lore raw
Quoted 28 lines · Jisheng Zhang
Quoted 27 lines · Drew Fustini
Quoted 18 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +

 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
                 interrupt-parent = <&plic>;
                 #address-cells = <2>;
                 #size-cells = <2>;
+               dma-noncoherent;
                 ranges;
Quoted 5 lines


                plic: interrupt-controller@ffd8000000 {

Signature · 1 line
2.40.1
Quoted 7 lines
Quoted 5 lines

I tried this on the BeagleV Ahead. They system booted as expected and I did not notice any problems in the boot log.

Are there other patches such as the dwmac series that I should test this with?

Hmm, this patch is necessary to test dwmac, emmc ;)

Drew: does this fix the "broken DMA" issue you've mentioned in the EMMC support patch?

Signature · 2 lines
Xi Ruoyao <[email protected]>
School of Aerospace Science and Technology, Xidian University
#5 lore raw
Quoted 32 lines · Xi Ruoyao
Quoted 31 lines · Jisheng Zhang
Quoted 30 lines · Drew Fustini
Quoted 18 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +

 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
                 interrupt-parent = <&plic>;
                 #address-cells = <2>;
                 #size-cells = <2>;
+               dma-noncoherent;
                 ranges;
Quoted 5 lines


                plic: interrupt-controller@ffd8000000 {

Signature · 1 line
2.40.1

I tried this on the BeagleV Ahead. They system booted as expected and I did not notice any problems in the boot log.

Quoted 7 lines
Quoted 4 lines
Quoted 2 lines

Are there other patches such as the dwmac series that I should test this with?

Hmm, this patch is necessary to test dwmac, emmc ;)

Drew: does this fix the "broken DMA" issue you've mentioned in the EMMC support patch?

After I sent my reply yesterday, I then tried applying this patch on top of my eMMC series. I removed SDHCI_QUIRK_BROKEN_DMA and I discovered that SDMA did not immediately break and the mmcblk0 partitions appeared in /dev [1]. Note - I am using CONFIG_INITRAMFS_SOURCE set to my buidlroot rootfs.cpio so that the system will boot okay regardless of the emmc.

I was able to mount the emmc boot partition /dev/mmcblk0p2. However, after unmounting it, I noticed that I could not mount it again:

  # mount /dev/mmcblk0p2 /mnt/p2 
  [   41.684899] EXT4-fs (mmcblk0p2): mounted filesystem 6ea98ccf-2178-48a9-a1ad-0eb454f57268 r/w with ordered data mode
  # ls -la /mnt/p2
  total 22696
  drwxr-xr-x    5 root     root          4096 Sep  4  2023 .
  drwxr-xr-x    4 root     root             0 Jan  1 00:00 ..
  -rw-rw-r--    1 1000     1000      26455552 Sep  4  2023 Image
  drwxr-xr-x    2 root     root          4096 Jul 29  2023 extlinux
  <snip>
  # umount /mnt/p2
  [   52.101003] EXT4-fs (mmcblk0p2): unmounting filesystem 6ea98ccf-2178-48a9-a1ad-0eb454f57268.
  # mount /dev/mmcblk0p2 /mnt/p2
  [   58.826078] JBD2: no valid journal superblock found
  [   58.831041] EXT4-fs (mmcblk0p2): Could not load journal inode
  mount: mounting /dev/mmcblk0p2 on /mnt/p2 failed: Invalid argument

I was completely unable to mount the root fs partition /dev/mmcblk0p3:

  # mount /dev/mmcblk0p2 /mnt/p2
  [   58.826078] JBD2: no valid journal superblock found
  [   58.831041] EXT4-fs (mmcblk0p2): Could not load journal inode
  mount: mounting /dev/mmcblk0p2 on /mnt/p2 failed: Invalid argument
  # umount /mnt/p2
  umount: can't unmount /mnt/p2: Invalid argument

I suspect there is some corruption of the buffers happening. I see there are also these patch series from Jisheng so I will try applying them and see if there is any difference:

[PATCH v2 0/2] riscv: errata: improve T-Head CMO [PATCH] riscv: mm: update T-Head memory type definitions

As for ADMA, when I removed SDHCI_QUIRK_BROKEN_ADMA, something fails silently [2] during boot and the mmcblk0 partitions do not appear under /dev.

-Drew

[1] https://gist.github.com/pdp7/6d27c57f8280fe1ae35e585d66e73f61
[2] https://gist.github.com/pdp7/23e2bcc2aba09b5c88eb579b61ea45ce

#6 lore raw
Quoted 76 lines · Drew Fustini
Quoted 32 lines · Xi Ruoyao
Quoted 31 lines · Jisheng Zhang
Quoted 30 lines · Drew Fustini
Quoted 18 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +

 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
                 interrupt-parent = <&plic>;
                 #address-cells = <2>;
                 #size-cells = <2>;
+               dma-noncoherent;
                 ranges;
Quoted 5 lines


                plic: interrupt-controller@ffd8000000 {

Signature · 1 line
2.40.1

I tried this on the BeagleV Ahead. They system booted as expected and I did not notice any problems in the boot log.

Quoted 7 lines
Quoted 4 lines
Quoted 2 lines

Are there other patches such as the dwmac series that I should test this with?

Hmm, this patch is necessary to test dwmac, emmc ;)

Drew: does this fix the "broken DMA" issue you've mentioned in the EMMC support patch?

After I sent my reply yesterday, I then tried applying this patch on top of my eMMC series. I removed SDHCI_QUIRK_BROKEN_DMA and I discovered that SDMA did not immediately break and the mmcblk0 partitions appeared in /dev [1]. Note - I am using CONFIG_INITRAMFS_SOURCE set to my buidlroot rootfs.cpio so that the system will boot okay regardless of the emmc.

I was able to mount the emmc boot partition /dev/mmcblk0p2. However, after unmounting it, I noticed that I could not mount it again:

  # mount /dev/mmcblk0p2 /mnt/p2 
  [   41.684899] EXT4-fs (mmcblk0p2): mounted filesystem 6ea98ccf-2178-48a9-a1ad-0eb454f57268 r/w with ordered data mode
  # ls -la /mnt/p2
  total 22696
  drwxr-xr-x    5 root     root          4096 Sep  4  2023 .
  drwxr-xr-x    4 root     root             0 Jan  1 00:00 ..
  -rw-rw-r--    1 1000     1000      26455552 Sep  4  2023 Image
  drwxr-xr-x    2 root     root          4096 Jul 29  2023 extlinux
  <snip>
  # umount /mnt/p2
  [   52.101003] EXT4-fs (mmcblk0p2): unmounting filesystem 6ea98ccf-2178-48a9-a1ad-0eb454f57268.
  # mount /dev/mmcblk0p2 /mnt/p2
  [   58.826078] JBD2: no valid journal superblock found
  [   58.831041] EXT4-fs (mmcblk0p2): Could not load journal inode
  mount: mounting /dev/mmcblk0p2 on /mnt/p2 failed: Invalid argument

I was completely unable to mount the root fs partition /dev/mmcblk0p3:

  # mount /dev/mmcblk0p2 /mnt/p2
  [   58.826078] JBD2: no valid journal superblock found
  [   58.831041] EXT4-fs (mmcblk0p2): Could not load journal inode
  mount: mounting /dev/mmcblk0p2 on /mnt/p2 failed: Invalid argument
  # umount /mnt/p2
  umount: can't unmount /mnt/p2: Invalid argument
Quoted 6 lines

I suspect there is some corruption of the buffers happening. I see there are also these patch series from Jisheng so I will try applying them and see if there is any difference:

[PATCH v2 0/2] riscv: errata: improve T-Head CMO [PATCH] riscv: mm: update T-Head memory type definitions

Good news, I applied "riscv: errata: improve T-Head CMO" [1] and SDMA is now working correctly. I can mount both boot and rootfs paritions and then is no problem umounting and then remounting [2].

Note - I didn't 'riscv: mm: update T-Head memory type definitions' yet but I will do that next and make sure everything is still working.

I'll post an update to my eMMC series.

-Drew

[1] https://lore.kernel.org/all/[email protected]/
[2] https://gist.github.com/pdp7/c72c91530c46ef560f4d1940ea1964c9

#7 lore raw
In reply to Jisheng Zhang
Quoted 28 lines · Jisheng Zhang
Quoted 27 lines · Drew Fustini
Quoted 23 lines · Jisheng Zhang

riscv select ARCH_DMA_DEFAULT_COHERENT by default, and th1520 isn't dma coherent, so set dma-noncoherent to reflect this fact.

---
 arch/riscv/boot/dts/thead/th1520.dtsi | 1 +
 1 file changed, 1 insertion(+)
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
index 56a73134b49e..58108f0eb3fd 100644
@@ -139,6 +139,7 @@ soc {
 		interrupt-parent = <&plic>;
 		#address-cells = <2>;
 		#size-cells = <2>;
+		dma-noncoherent;
 		ranges;
 
 		plic: interrupt-controller@ffd8000000 {
Signature · 1 line
2.40.1
Quoted 7 lines
Quoted 5 lines

I tried this on the BeagleV Ahead. They system booted as expected and I did not notice any problems in the boot log.

Are there other patches such as the dwmac series that I should test this with?

Hmm, this patch is necessary to test dwmac, emmc ;)

Would you be able to share list of patches you are currently using so that I can apply them all?

Do you have any changes in the device tree that you are using that is not in mainline?

I added the linux,cma node [1] with compatible "shared-dma-pool" from light.dtsi in the thead sdk, but that did not seem to make a difference.

thanks,
drew

[1] https://git.beagleboard.org/beaglev-ahead/kernel/-/blob/master/arch/riscv/boot/dts/thead/light.dtsi#L88