[PATCH] net: xilinx: fix the wrong dma base address issue
Michal Simek
monstr at monstr.eu
Fri Jan 21 17:58:22 CET 2022
čt 20. 1. 2022 v 9:42 odesílatel Andy Chiu <andy.chiu at sifive.com> napsal:
>
> From: Greentime Hu <greentime.hu at sifive.com>
>
> If we just use fdtdec_get_addr_size_fixed to get "reg" it will use
> 64bit address cell to get the base address.
>
> soc {
> #address-cells = <1>;
> #size-cells = <1>;
> compatible ="SiFive,FU500-soc", "fu500-soc", "sifive-soc", "simple-bus";
> ranges;
> L28: axidma at 30010000 {
> #dma-cells = <1>;
> compatible = "xlnx,axi-dma-1.00.a";
> axistream-connected = <&L27>;
> axistream-control-connected = <&L27>;
> clocks = <&L1>;
> interrupt-parent = <&L6>;
> interrupts = <32 33>;
> reg = <0x30010000 0x4000>;
>
> fdtdec_get_addr_size_fixed: reg: addr=3001000000004000
>
> We should get the base address through its parent's address-cells and
> size-cells settings. So we should use fdtdec_get_addr_size_auto_parent()
> to get correct base address.
>
> After applying this patch, we can get the correct base address of dma by
> replacing fdtdec_get_addr_size_fixed() with
> fdtdec_get_addr_size_auto_parent().
>
> fdtdec_get_addr_size_auto_parent:
> na=1, ns=1, fdtdec_get_addr_size_fixed: reg: addr=30010000
>
> Signed-off-by: Greentime Hu <greentime.hu at sifive.com>
> Signed-off-by: Andy Chiu <andy.chiu at sifive.com>
> ---
>
> drivers/net/xilinx_axi_emac.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/xilinx_axi_emac.c
> index 2ec76d0f52..f21addb4d0 100644
> --- a/drivers/net/xilinx_axi_emac.c
> +++ b/drivers/net/xilinx_axi_emac.c
> @@ -832,8 +832,8 @@ static int axi_emac_of_to_plat(struct udevice *dev)
> printf("%s: axistream is not found\n", __func__);
> return -EINVAL;
> }
> - plat->dmatx = (struct axidma_reg *)fdtdec_get_addr(gd->fdt_blob,
> - offset, "reg");
> + plat->dmatx = (struct axidma_reg *)fdtdec_get_addr_size_auto_parent
> + (gd->fdt_blob, 0, offset, "reg", 0, NULL, false);
> if (!plat->dmatx) {
> printf("%s: axi_dma register space not found\n", __func__);
> return -EINVAL;
> --
> 2.34.1
>
Applied.
M
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs
More information about the U-Boot
mailing list