From 716ca530e1c4515d8683c9d5be3d56b301758b66 Mon Sep 17 00:00:00 2001 From: James <> Date: Wed, 4 Nov 2015 11:49:21 +0000 Subject: trunk-47381 --- .../patches-4.1/0134-vchiq-Use-firmware-API.patch | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 target/linux/brcm2708/patches-4.1/0134-vchiq-Use-firmware-API.patch (limited to 'target/linux/brcm2708/patches-4.1/0134-vchiq-Use-firmware-API.patch') diff --git a/target/linux/brcm2708/patches-4.1/0134-vchiq-Use-firmware-API.patch b/target/linux/brcm2708/patches-4.1/0134-vchiq-Use-firmware-API.patch new file mode 100644 index 0000000..b8e5e55 --- /dev/null +++ b/target/linux/brcm2708/patches-4.1/0134-vchiq-Use-firmware-API.patch @@ -0,0 +1,112 @@ +From 5334f431eec498e36a589867e73adb36b476fa3f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 20 Jul 2015 12:13:18 +0200 +Subject: [PATCH 134/203] vchiq: Use firmware API +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Use the new firmware API instead of the legacy mailbox API. + +Signed-off-by: Noralf Trønnes +--- + arch/arm/boot/dts/bcm2708_common.dtsi | 1 + + .../vc04_services/interface/vchiq_arm/vchiq_2835_arm.c | 17 +++++++++-------- + .../misc/vc04_services/interface/vchiq_arm/vchiq_arm.c | 17 +++++++++++++++++ + 3 files changed, 27 insertions(+), 8 deletions(-) + +--- a/arch/arm/boot/dts/bcm2708_common.dtsi ++++ b/arch/arm/boot/dts/bcm2708_common.dtsi +@@ -225,6 +225,7 @@ + reg = <0x7e00b840 0xf>; + interrupts = <0 2>; + cache-line-size = <32>; ++ firmware = <&firmware>; + }; + + thermal: thermal { +--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c ++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c +@@ -39,11 +39,11 @@ + #include + #include + #include +-#include + #include + #include + #include + #include ++#include + + #define TOTAL_SLOTS (VCHIQ_SLOT_ZERO_SLOTS + 2 * 32) + +@@ -89,10 +89,12 @@ free_pagelist(PAGELIST_T *pagelist, int + int vchiq_platform_init(struct platform_device *pdev, VCHIQ_STATE_T *state) + { + struct device *dev = &pdev->dev; ++ struct rpi_firmware *fw = platform_get_drvdata(pdev); + VCHIQ_SLOT_ZERO_T *vchiq_slot_zero; + struct resource *res; + void *slot_mem; + dma_addr_t slot_phys; ++ u32 channelbase; + int slot_mem_size, frag_mem_size; + int err, irq, i; + +@@ -157,13 +159,12 @@ int vchiq_platform_init(struct platform_ + } + + /* Send the base address of the slots to VideoCore */ +- +- dsb(); /* Ensure all writes have completed */ +- +- err = bcm_mailbox_write(MBOX_CHAN_VCHIQ, (unsigned int)slot_phys); +- if (err) { +- dev_err(dev, "mailbox write failed\n"); +- return err; ++ channelbase = slot_phys; ++ err = rpi_firmware_property(fw, RPI_FIRMWARE_VCHIQ_INIT, ++ &channelbase, sizeof(channelbase)); ++ if (err || channelbase) { ++ dev_err(dev, "failed to set channelbase\n"); ++ return err ? : -ENXIO; + } + + vchiq_log_info(vchiq_arm_log_level, +--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c ++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c +@@ -45,7 +45,9 @@ + #include + #include + #include ++#include + #include ++#include + + #include "vchiq_core.h" + #include "vchiq_ioctl.h" +@@ -2793,9 +2795,24 @@ void vchiq_platform_conn_state_changed(V + + static int vchiq_probe(struct platform_device *pdev) + { ++ struct device_node *fw_node; ++ struct rpi_firmware *fw; + int err; + void *ptr_err; + ++ fw_node = of_parse_phandle(pdev->dev.of_node, "firmware", 0); ++/* Remove comment when booting without Device Tree is no longer supported ++ if (!fw_node) { ++ dev_err(&pdev->dev, "Missing firmware node\n"); ++ return -ENOENT; ++ } ++*/ ++ fw = rpi_firmware_get(fw_node); ++ if (!fw) ++ return -EPROBE_DEFER; ++ ++ platform_set_drvdata(pdev, fw); ++ + /* create debugfs entries */ + err = vchiq_debugfs_init(); + if (err != 0) -- cgit v1.2.3