forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.63 Manually rebased: bcm27xx/patches-6.6/950-0297-staging-vchiq_arm-Add-36-bit-address-support.patch All other patches automatically rebased. Build system: x86/64 Build-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Run-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Signed-off-by: John Audia <[email protected]>
- Loading branch information
Showing
11 changed files
with
37 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
LINUX_VERSION-6.6 = .62 | ||
LINUX_KERNEL_HASH-6.6.62 = e2c35611775534941b9d4dd871f3ae5b988b6594dc9033b5ca784366e07d9336 | ||
LINUX_VERSION-6.6 = .63 | ||
LINUX_KERNEL_HASH-6.6.63 = d1054ab4803413efe2850f50f1a84349c091631ec50a1cf9e891d1b1f9061835 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,15 +22,15 @@ Signed-off-by: Dave Stevenson <[email protected]> | |
|
||
struct vchiq_drvdata { | ||
const unsigned int cache_line_size; | ||
@@ -1838,6 +1839,7 @@ static int vchiq_probe(struct platform_d | ||
@@ -1825,6 +1826,7 @@ static int vchiq_probe(struct platform_d | ||
goto error_exit; | ||
} | ||
|
||
+ vcsm_cma = vchiq_register_child(pdev, "vcsm-cma"); | ||
bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera"); | ||
bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio"); | ||
|
||
@@ -1853,6 +1855,7 @@ static void vchiq_remove(struct platform | ||
@@ -1840,6 +1842,7 @@ static void vchiq_remove(struct platform | ||
{ | ||
platform_device_unregister(bcm2835_audio); | ||
platform_device_unregister(bcm2835_camera); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,15 +22,15 @@ Signed-off-by: Dave Stevenson <[email protected]> | |
static struct platform_device *vcsm_cma; | ||
|
||
struct vchiq_drvdata { | ||
@@ -1840,6 +1841,7 @@ static int vchiq_probe(struct platform_d | ||
@@ -1827,6 +1828,7 @@ static int vchiq_probe(struct platform_d | ||
} | ||
|
||
vcsm_cma = vchiq_register_child(pdev, "vcsm-cma"); | ||
+ bcm2835_codec = vchiq_register_child(pdev, "bcm2835-codec"); | ||
bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera"); | ||
bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio"); | ||
|
||
@@ -1855,6 +1857,7 @@ static void vchiq_remove(struct platform | ||
@@ -1842,6 +1844,7 @@ static void vchiq_remove(struct platform | ||
{ | ||
platform_device_unregister(bcm2835_audio); | ||
platform_device_unregister(bcm2835_camera); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,7 +18,7 @@ Signed-off-by: Dave Stevenson <[email protected]> | |
|
||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
@@ -1790,6 +1790,12 @@ vchiq_register_child(struct platform_dev | ||
@@ -1777,6 +1777,12 @@ vchiq_register_child(struct platform_dev | ||
child = NULL; | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,15 +17,15 @@ Signed-off-by: Dave Stevenson <[email protected]> | |
|
||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
@@ -1776,6 +1776,7 @@ vchiq_register_child(struct platform_dev | ||
@@ -1763,6 +1763,7 @@ vchiq_register_child(struct platform_dev | ||
{ | ||
struct platform_device_info pdevinfo; | ||
struct platform_device *child; | ||
+ struct device_node *np; | ||
|
||
memset(&pdevinfo, 0, sizeof(pdevinfo)); | ||
|
||
@@ -1791,10 +1792,20 @@ vchiq_register_child(struct platform_dev | ||
@@ -1778,10 +1779,20 @@ vchiq_register_child(struct platform_dev | ||
} | ||
|
||
/* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
|
||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
@@ -1785,12 +1785,20 @@ vchiq_register_child(struct platform_dev | ||
@@ -1772,12 +1772,20 @@ vchiq_register_child(struct platform_dev | ||
pdevinfo.id = PLATFORM_DEVID_NONE; | ||
pdevinfo.dma_mask = DMA_BIT_MASK(32); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,15 +21,15 @@ Signed-off-by: Naushir Patuck <[email protected]> | |
|
||
struct vchiq_drvdata { | ||
const unsigned int cache_line_size; | ||
@@ -1869,6 +1870,7 @@ static int vchiq_probe(struct platform_d | ||
@@ -1856,6 +1857,7 @@ static int vchiq_probe(struct platform_d | ||
bcm2835_codec = vchiq_register_child(pdev, "bcm2835-codec"); | ||
bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera"); | ||
bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio"); | ||
+ bcm2835_isp = vchiq_register_child(pdev, "bcm2835-isp"); | ||
|
||
return 0; | ||
|
||
@@ -1880,6 +1882,7 @@ error_exit: | ||
@@ -1867,6 +1869,7 @@ error_exit: | ||
|
||
static void vchiq_remove(struct platform_device *pdev) | ||
{ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -36,10 +36,10 @@ Signed-off-by: Phil Elwell <[email protected]> | |
+ .use_36bit_addrs = true, | ||
+}; | ||
+ | ||
struct vchiq_2835_state { | ||
int inited; | ||
struct vchiq_arm_state arm_state; | ||
@@ -147,10 +153,12 @@ static void __iomem *g_regs; | ||
struct vchiq_pagelist_info { | ||
struct pagelist *pagelist; | ||
size_t pagelist_buffer_size; | ||
@@ -142,10 +148,12 @@ static void __iomem *g_regs; | ||
* of 32. | ||
*/ | ||
static unsigned int g_cache_line_size = 32; | ||
|
@@ -52,7 +52,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
|
||
static DEFINE_SEMAPHORE(g_free_fragments_mutex, 1); | ||
|
||
@@ -180,7 +188,7 @@ static void | ||
@@ -175,7 +183,7 @@ static void | ||
cleanup_pagelistinfo(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagelistinfo) | ||
{ | ||
if (pagelistinfo->scatterlist_mapped) { | ||
|
@@ -61,7 +61,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
pagelistinfo->num_pages, pagelistinfo->dma_dir); | ||
} | ||
|
||
@@ -340,7 +348,7 @@ create_pagelist(struct vchiq_instance *i | ||
@@ -335,7 +343,7 @@ create_pagelist(struct vchiq_instance *i | ||
count -= len; | ||
} | ||
|
||
|
@@ -70,7 +70,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
scatterlist, | ||
num_pages, | ||
pagelistinfo->dma_dir); | ||
@@ -354,22 +362,61 @@ create_pagelist(struct vchiq_instance *i | ||
@@ -349,22 +357,61 @@ create_pagelist(struct vchiq_instance *i | ||
|
||
/* Combine adjacent blocks for performance */ | ||
k = 0; | ||
|
@@ -148,7 +148,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
} | ||
|
||
/* Partial cache lines (fragments) require special measures */ | ||
@@ -413,7 +460,7 @@ free_pagelist(struct vchiq_instance *ins | ||
@@ -408,7 +455,7 @@ free_pagelist(struct vchiq_instance *ins | ||
* NOTE: dma_unmap_sg must be called before the | ||
* cpu can touch any of the data/pages. | ||
*/ | ||
|
@@ -157,15 +157,15 @@ Signed-off-by: Phil Elwell <[email protected]> | |
pagelistinfo->num_pages, pagelistinfo->dma_dir); | ||
pagelistinfo->scatterlist_mapped = 0; | ||
|
||
@@ -468,6 +515,7 @@ free_pagelist(struct vchiq_instance *ins | ||
@@ -463,6 +510,7 @@ free_pagelist(struct vchiq_instance *ins | ||
static int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state *state) | ||
{ | ||
struct device *dev = &pdev->dev; | ||
+ struct device *dma_dev = NULL; | ||
struct vchiq_drvdata *drvdata = platform_get_drvdata(pdev); | ||
struct rpi_firmware *fw = drvdata->fw; | ||
struct vchiq_slot_zero *vchiq_slot_zero; | ||
@@ -489,6 +537,24 @@ static int vchiq_platform_init(struct pl | ||
@@ -484,6 +532,24 @@ static int vchiq_platform_init(struct pl | ||
g_cache_line_size = drvdata->cache_line_size; | ||
g_fragments_size = 2 * g_cache_line_size; | ||
|
||
|
@@ -190,7 +190,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
/* Allocate space for the channels in coherent memory */ | ||
slot_mem_size = PAGE_ALIGN(TOTAL_SLOTS * VCHIQ_SLOT_SIZE); | ||
frag_mem_size = PAGE_ALIGN(g_fragments_size * MAX_FRAGMENTS); | ||
@@ -501,13 +567,14 @@ static int vchiq_platform_init(struct pl | ||
@@ -496,13 +562,14 @@ static int vchiq_platform_init(struct pl | ||
} | ||
|
||
WARN_ON(((unsigned long)slot_mem & (PAGE_SIZE - 1)) != 0); | ||
|
@@ -206,15 +206,15 @@ Signed-off-by: Phil Elwell <[email protected]> | |
vchiq_slot_zero->platform_data[VCHIQ_PLATFORM_FRAGMENTS_COUNT_IDX] = | ||
MAX_FRAGMENTS; | ||
|
||
@@ -541,7 +608,6 @@ static int vchiq_platform_init(struct pl | ||
@@ -536,7 +603,6 @@ static int vchiq_platform_init(struct pl | ||
} | ||
|
||
/* Send the base address of the slots to VideoCore */ | ||
- channelbase = slot_phys; | ||
err = rpi_firmware_property(fw, RPI_FIRMWARE_VCHIQ_INIT, | ||
&channelbase, sizeof(channelbase)); | ||
if (err) { | ||
@@ -555,6 +621,8 @@ static int vchiq_platform_init(struct pl | ||
@@ -550,6 +616,8 @@ static int vchiq_platform_init(struct pl | ||
return -ENXIO; | ||
} | ||
|
||
|
@@ -223,15 +223,15 @@ Signed-off-by: Phil Elwell <[email protected]> | |
vchiq_log_info(vchiq_arm_log_level, "vchiq_init - done (slots %pK, phys %pad)", | ||
vchiq_slot_zero, &slot_phys); | ||
|
||
@@ -1768,6 +1836,7 @@ void vchiq_platform_conn_state_changed(s | ||
@@ -1755,6 +1823,7 @@ void vchiq_platform_conn_state_changed(s | ||
static const struct of_device_id vchiq_of_match[] = { | ||
{ .compatible = "brcm,bcm2835-vchiq", .data = &bcm2835_drvdata }, | ||
{ .compatible = "brcm,bcm2836-vchiq", .data = &bcm2836_drvdata }, | ||
+ { .compatible = "brcm,bcm2711-vchiq", .data = &bcm2711_drvdata }, | ||
{}, | ||
}; | ||
MODULE_DEVICE_TABLE(of, vchiq_of_match); | ||
@@ -1800,22 +1869,8 @@ vchiq_register_child(struct platform_dev | ||
@@ -1787,22 +1856,8 @@ vchiq_register_child(struct platform_dev | ||
|
||
child->dev.of_node = np; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell <[email protected]> | |
|
||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | ||
@@ -1869,8 +1869,18 @@ vchiq_register_child(struct platform_dev | ||
@@ -1856,8 +1856,18 @@ vchiq_register_child(struct platform_dev | ||
|
||
child->dev.of_node = np; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -37,23 +37,23 @@ Signed-off-by: Oliver Gjoneski <[email protected]> | |
/* Override the default prefix, which would be vchiq_arm (from the filename) */ | ||
#undef MODULE_PARAM_PREFIX | ||
#define MODULE_PARAM_PREFIX DEVICE_NAME "." | ||
@@ -133,6 +136,7 @@ struct vchiq_pagelist_info { | ||
@@ -128,6 +131,7 @@ struct vchiq_pagelist_info { | ||
struct pagelist *pagelist; | ||
size_t pagelist_buffer_size; | ||
dma_addr_t dma_addr; | ||
+ bool is_from_pool; | ||
enum dma_data_direction dma_dir; | ||
unsigned int num_pages; | ||
unsigned int pages_need_release; | ||
@@ -153,6 +157,7 @@ static void __iomem *g_regs; | ||
@@ -148,6 +152,7 @@ static void __iomem *g_regs; | ||
* of 32. | ||
*/ | ||
static unsigned int g_cache_line_size = 32; | ||
+static struct dma_pool *g_dma_pool; | ||
static unsigned int g_use_36bit_addrs = 0; | ||
static unsigned int g_fragments_size; | ||
static char *g_fragments_base; | ||
@@ -195,8 +200,13 @@ cleanup_pagelistinfo(struct vchiq_instan | ||
@@ -190,8 +195,13 @@ cleanup_pagelistinfo(struct vchiq_instan | ||
if (pagelistinfo->pages_need_release) | ||
unpin_user_pages(pagelistinfo->pages, pagelistinfo->num_pages); | ||
|
||
|
@@ -69,15 +69,15 @@ Signed-off-by: Oliver Gjoneski <[email protected]> | |
} | ||
|
||
static inline bool | ||
@@ -231,6 +241,7 @@ create_pagelist(struct vchiq_instance *i | ||
@@ -226,6 +236,7 @@ create_pagelist(struct vchiq_instance *i | ||
u32 *addrs; | ||
unsigned int num_pages, offset, i, k; | ||
int actual_pages; | ||
+ bool is_from_pool; | ||
size_t pagelist_size; | ||
struct scatterlist *scatterlist, *sg; | ||
int dma_buffers; | ||
@@ -260,8 +271,14 @@ create_pagelist(struct vchiq_instance *i | ||
@@ -255,8 +266,14 @@ create_pagelist(struct vchiq_instance *i | ||
/* Allocate enough storage to hold the page pointers and the page | ||
* list | ||
*/ | ||
|
@@ -94,15 +94,15 @@ Signed-off-by: Oliver Gjoneski <[email protected]> | |
|
||
vchiq_log_trace(vchiq_arm_log_level, "%s - %pK", __func__, pagelist); | ||
|
||
@@ -282,6 +299,7 @@ create_pagelist(struct vchiq_instance *i | ||
@@ -277,6 +294,7 @@ create_pagelist(struct vchiq_instance *i | ||
pagelistinfo->pagelist = pagelist; | ||
pagelistinfo->pagelist_buffer_size = pagelist_size; | ||
pagelistinfo->dma_addr = dma_addr; | ||
+ pagelistinfo->is_from_pool = is_from_pool; | ||
pagelistinfo->dma_dir = (type == PAGELIST_WRITE) ? | ||
DMA_TO_DEVICE : DMA_FROM_DEVICE; | ||
pagelistinfo->num_pages = num_pages; | ||
@@ -622,6 +640,13 @@ static int vchiq_platform_init(struct pl | ||
@@ -617,6 +635,13 @@ static int vchiq_platform_init(struct pl | ||
} | ||
|
||
g_dma_dev = dma_dev ?: dev; | ||
|