diff --git a/arch/riscv/boot/dts/spacemit/k1-x.dtsi b/arch/riscv/boot/dts/spacemit/k1-x.dtsi index 8f411e7f01f38a..7979259d281848 100644 --- a/arch/riscv/boot/dts/spacemit/k1-x.dtsi +++ b/arch/riscv/boot/dts/spacemit/k1-x.dtsi @@ -2287,8 +2287,8 @@ #address-cells = <3>; #size-cells = <2>; ranges = <0x01000000 0x0 0xb7002000 0 0xb7002000 0x0 0x100000>, - <0x42000000 0x0 0xa0000000 0 0xa0000000 0x0 0x10000000>, - <0x02000000 0x0 0xb0000000 0 0xb0000000 0x0 0x7000000>; + <0x42000000 0x0 0xa0000000 0 0xa0000000 0x0 0x12000000>, + <0x02000000 0x0 0xb2000000 0 0xb2000000 0x0 0x5000000>; interconnects = <&dram_range2>; interconnect-names = "dma-mem"; diff --git a/arch/riscv/configs/k1_defconfig b/arch/riscv/configs/k1_defconfig index 549a2e03bae720..cf1d92200cc473 100644 --- a/arch/riscv/configs/k1_defconfig +++ b/arch/riscv/configs/k1_defconfig @@ -719,6 +719,10 @@ CONFIG_VIDEO_LINLON_K1X=y CONFIG_DRM=y CONFIG_DRM_RADEON=m CONFIG_DRM_RADEON_USERPTR=y +CONFIG_DRM_AMDGPU=m +CONFIG_DRM_AMDGPU_SI=y +CONFIG_DRM_AMDGPU_CIK=y +CONFIG_DRM_AMDGPU_USERPTR=y CONFIG_DRM_SPACEMIT=y CONFIG_SPACEMIT_MIPI_PANEL=y CONFIG_SPACEMIT_HDMI=y diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index c8180cad0abdd8..60452f05212089 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -1117,7 +1117,7 @@ static struct ttm_tt *amdgpu_ttm_tt_create(struct ttm_buffer_object *bo, caching = ttm_write_combined; else caching = ttm_cached; - + caching = ttm_write_combined; /* allocate space for the uninitialized page entries */ if (ttm_sg_tt_init(>t->ttm, bo, page_flags, caching)) { kfree(gtt); diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c index 697599c46240ed..711b764f329ca0 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c @@ -871,13 +871,13 @@ static int gmc_v10_0_sw_init(struct amdgpu_ip_block *ip_block) */ adev->gmc.mc_mask = 0xffffffffffffULL; /* 48 bit MC */ - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(44)); + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(32)); if (r) { dev_warn(adev->dev, "amdgpu: No suitable DMA available.\n"); return r; } - adev->need_swiotlb = drm_need_swiotlb(44); + adev->need_swiotlb = drm_need_swiotlb(32); r = gmc_v10_0_mc_init(adev); if (r) diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c index f893ab4c14df35..aac969db070730 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c @@ -800,13 +800,13 @@ static int gmc_v11_0_sw_init(struct amdgpu_ip_block *ip_block) */ adev->gmc.mc_mask = 0xffffffffffffULL; /* 48 bit MC */ - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(44)); + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(32)); if (r) { dev_warn(adev->dev, "amdgpu: No suitable DMA available.\n"); return r; } - adev->need_swiotlb = drm_need_swiotlb(44); + adev->need_swiotlb = drm_need_swiotlb(32); r = gmc_v11_0_mc_init(adev); if (r) diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c index ca000b3d1afcd1..8662a2dfb6ec66 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c @@ -838,12 +838,12 @@ static int gmc_v6_0_sw_init(struct amdgpu_ip_block *ip_block) adev->gmc.mc_mask = 0xffffffffffULL; - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40)); + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(32)); if (r) { dev_warn(adev->dev, "No suitable DMA available.\n"); return r; } - adev->need_swiotlb = drm_need_swiotlb(40); + adev->need_swiotlb = drm_need_swiotlb(32); r = gmc_v6_0_init_microcode(adev); if (r) { diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c index b6016f11956ec1..311c8333deb150 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c @@ -1014,12 +1014,12 @@ static int gmc_v7_0_sw_init(struct amdgpu_ip_block *ip_block) */ adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */ - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40)); + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(32)); if (r) { pr_warn("No suitable DMA available\n"); return r; } - adev->need_swiotlb = drm_need_swiotlb(40); + adev->need_swiotlb = drm_need_swiotlb(32); r = gmc_v7_0_init_microcode(adev); if (r) { diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c index 12d5967ecd45fe..dc768e4192798d 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c @@ -1127,12 +1127,12 @@ static int gmc_v8_0_sw_init(struct amdgpu_ip_block *ip_block) */ adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */ - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40)); + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(32)); if (r) { pr_warn("No suitable DMA available\n"); return r; } - adev->need_swiotlb = drm_need_swiotlb(40); + adev->need_swiotlb = drm_need_swiotlb(32); r = gmc_v8_0_init_microcode(adev); if (r) { diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c index 50c5da3020cb31..8a6d9293d8658f 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c @@ -2206,12 +2206,12 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block) IP_VERSION(9, 4, 2) ? 48 : 44; - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(dma_addr_bits)); + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(32)); if (r) { dev_warn(adev->dev, "amdgpu: No suitable DMA available.\n"); return r; } - adev->need_swiotlb = drm_need_swiotlb(dma_addr_bits); + adev->need_swiotlb = drm_need_swiotlb(32); r = gmc_v9_0_mc_init(adev); if (r) diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 5e00cecf1f1af3..bf316da476240b 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -1141,6 +1141,8 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, min_align = calculate_mem_align(aligns, max_order); min_align = max(min_align, win_align); size0 = calculate_memsize(size, min_size, 0, 0, resource_size(b_res), min_align); + if (size0 == 0x18000000U) + size0 = 0x12000000U; //should be enought for rx560 add_align = max(min_align, add_align); if (bus->self && size0 &&