Commit c011dd53 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'arm-soc-5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull 32-bit ARM SoC updates from Arnd Bergmann:
 "These updates are for platform specific code in arch/arm/, mostly
  fixing minor issues.

  The at91 platform gains support for better power management on the
  lan966 platform and new firmware on the sama5 platform. The mediatek
  soc drivers in turn are enabled for the new mt8195 SoC"

* tag 'arm-soc-5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (34 commits)
  ARM: at91: debug: add lan966 support
  ARM: at91: pm: add support for sama5d2 secure suspend
  ARM: at91: add code to handle secure calls
  ARM: at91: Kconfig: implement PIT64B selection
  ARM: at91: pm: add quirks for pm
  ARM: at91: pm: use kernel documentation style
  ARM: at91: pm: introduce macros for pm mode replacement
  ARM: at91: pm: keep documentation inline with structure members
  orion5x: fix typos in comments
  ARM: hisi: Add missing of_node_put after of_find_compatible_node
  ARM: shmobile: rcar-gen2: Drop comma after OF match table sentinel
  ARM: shmobile: Drop commas after dt_compat sentinels
  soc: mediatek: mutex: remove mt8195 MOD0 and SOF0 definition
  MAINTAINERS: Add Broadcom BCMBCA entry
  arm: bcmbca: add arch bcmbca machine entry
  MAINTAINERS: Broadcom internal lists aren't maintainers
  dt-bindings: pwrap: mediatek: Update pwrap document for mt8195
  soc: mediatek: add DDP_DOMPONENT_DITHER0 enum for mt8195 vdosys0
  soc: mediatek: add mtk-mutex support for mt8195 vdosys0
  soc: mediatek: add mtk-mmsys support for mt8195 vdosys0
  ...
parents 3378323b 426ecc58
...@@ -31,6 +31,7 @@ properties: ...@@ -31,6 +31,7 @@ properties:
- mediatek,mt8183-mmsys - mediatek,mt8183-mmsys
- mediatek,mt8186-mmsys - mediatek,mt8186-mmsys
- mediatek,mt8192-mmsys - mediatek,mt8192-mmsys
- mediatek,mt8195-mmsys
- mediatek,mt8365-mmsys - mediatek,mt8365-mmsys
- const: syscon - const: syscon
- items: - items:
...@@ -41,6 +42,30 @@ properties: ...@@ -41,6 +42,30 @@ properties:
reg: reg:
maxItems: 1 maxItems: 1
power-domains:
description:
A phandle and PM domain specifier as defined by bindings
of the power controller specified by phandle. See
Documentation/devicetree/bindings/power/power-domain.yaml for details.
mboxes:
description:
Using mailbox to communicate with GCE, it should have this
property and list of phandle, mailbox specifiers. See
Documentation/devicetree/bindings/mailbox/mtk-gce.txt for details.
$ref: /schemas/types.yaml#/definitions/phandle-array
mediatek,gce-client-reg:
description:
The register of client driver can be configured by gce with 4 arguments
defined in this property, such as phandle of gce, subsys id,
register offset and size.
Each subsys id is mapping to a base address of display function blocks
register which is defined in the gce header
include/dt-bindings/gce/<chip>-gce.h.
$ref: /schemas/types.yaml#/definitions/phandle-array
maxItems: 1
"#clock-cells": "#clock-cells":
const: 1 const: 1
...@@ -56,9 +81,16 @@ additionalProperties: false ...@@ -56,9 +81,16 @@ additionalProperties: false
examples: examples:
- | - |
#include <dt-bindings/power/mt8173-power.h>
#include <dt-bindings/gce/mt8173-gce.h>
mmsys: syscon@14000000 { mmsys: syscon@14000000 {
compatible = "mediatek,mt8173-mmsys", "syscon"; compatible = "mediatek,mt8173-mmsys", "syscon";
reg = <0x14000000 0x1000>; reg = <0x14000000 0x1000>;
power-domains = <&spm MT8173_POWER_DOMAIN_MM>;
#clock-cells = <1>; #clock-cells = <1>;
#reset-cells = <1>; #reset-cells = <1>;
mboxes = <&gce 0 CMDQ_THR_PRIO_HIGHEST>,
<&gce 1 CMDQ_THR_PRIO_HIGHEST>;
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0 0x1000>;
}; };
...@@ -31,20 +31,20 @@ Required properties in pwrap device node. ...@@ -31,20 +31,20 @@ Required properties in pwrap device node.
"mediatek,mt8195-pwrap" for MT8195 SoCs "mediatek,mt8195-pwrap" for MT8195 SoCs
"mediatek,mt8516-pwrap" for MT8516 SoCs "mediatek,mt8516-pwrap" for MT8516 SoCs
- interrupts: IRQ for pwrap in SOC - interrupts: IRQ for pwrap in SOC
- reg-names: Must include the following entries: - reg-names: "pwrap" is required; "pwrap-bridge" is optional.
"pwrap": Main registers base "pwrap": Main registers base
"pwrap-bridge": bridge base (IP Pairing) "pwrap-bridge": bridge base (IP Pairing)
- reg: Must contain an entry for each entry in reg-names. - reg: Must contain an entry for each entry in reg-names.
- reset-names: Must include the following entries:
"pwrap"
"pwrap-bridge" (IP Pairing)
- resets: Must contain an entry for each entry in reset-names.
- clock-names: Must include the following entries: - clock-names: Must include the following entries:
"spi": SPI bus clock "spi": SPI bus clock
"wrap": Main module clock "wrap": Main module clock
- clocks: Must contain an entry for each entry in clock-names. - clocks: Must contain an entry for each entry in clock-names.
Optional properities: Optional properities:
- reset-names: Some SoCs include the following entries:
"pwrap"
"pwrap-bridge" (IP Pairing)
- resets: Must contain an entry for each entry in reset-names.
- pmic: Using either MediaTek PMIC MFD as the child device of pwrap - pmic: Using either MediaTek PMIC MFD as the child device of pwrap
See the following for child node definitions: See the following for child node definitions:
Documentation/devicetree/bindings/mfd/mt6397.txt Documentation/devicetree/bindings/mfd/mt6397.txt
......
This diff is collapsed.
...@@ -210,6 +210,26 @@ choice ...@@ -210,6 +210,26 @@ choice
Say Y here if you want kernel low-level debugging support Say Y here if you want kernel low-level debugging support
on the FLEXCOM3 port of SAMA7G5. on the FLEXCOM3 port of SAMA7G5.
config DEBUG_AT91_LAN966_FLEXCOM
bool "Kernel low-level debugging on LAN966 FLEXCOM USART"
select DEBUG_AT91_UART
depends on SOC_LAN966
help
Say Y here if you want kernel low-level debugging support
on the FLEXCOM port of LAN966.
DEBUG_UART_PHYS | DEBUG_UART_VIRT
0xe0040200 | 0xfd040200 | FLEXCOM0
0xe0044200 | 0xfd044200 | FLEXCOM1
0xe0060200 | 0xfd060200 | FLEXCOM2
0xe0064200 | 0xfd064200 | FLEXCOM3
0xe0070200 | 0xfd070200 | FLEXCOM4
By default, enabling FLEXCOM3 port. Based on requirement, use
DEBUG_UART_PHYS and DEBUG_UART_VIRT configurations from above
table.
config DEBUG_BCM2835 config DEBUG_BCM2835
bool "Kernel low-level debugging on BCM2835 PL011 UART" bool "Kernel low-level debugging on BCM2835 PL011 UART"
depends on ARCH_BCM2835 && ARCH_MULTI_V6 depends on ARCH_BCM2835 && ARCH_MULTI_V6
...@@ -1685,6 +1705,7 @@ config DEBUG_UART_PHYS ...@@ -1685,6 +1705,7 @@ config DEBUG_UART_PHYS
default 0xd4017000 if DEBUG_MMP_UART2 default 0xd4017000 if DEBUG_MMP_UART2
default 0xd4018000 if DEBUG_MMP_UART3 default 0xd4018000 if DEBUG_MMP_UART3
default 0xe0000000 if DEBUG_SPEAR13XX default 0xe0000000 if DEBUG_SPEAR13XX
default 0xe0064200 if DEBUG_AT91_LAN966_FLEXCOM
default 0xe1824200 if DEBUG_AT91_SAMA7G5_FLEXCOM3 default 0xe1824200 if DEBUG_AT91_SAMA7G5_FLEXCOM3
default 0xe4007000 if DEBUG_HIP04_UART default 0xe4007000 if DEBUG_HIP04_UART
default 0xe6c40000 if DEBUG_RMOBILE_SCIFA0 default 0xe6c40000 if DEBUG_RMOBILE_SCIFA0
...@@ -1805,6 +1826,7 @@ config DEBUG_UART_VIRT ...@@ -1805,6 +1826,7 @@ config DEBUG_UART_VIRT
default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT
default 0xfcfe8600 if DEBUG_BCM63XX_UART default 0xfcfe8600 if DEBUG_BCM63XX_UART
default 0xfd000000 if DEBUG_SPEAR3XX || DEBUG_SPEAR13XX default 0xfd000000 if DEBUG_SPEAR3XX || DEBUG_SPEAR13XX
default 0xfd064200 if DEBUG_AT91_LAN966_FLEXCOM
default 0xfd531000 if DEBUG_STIH41X_SBC_ASC1 default 0xfd531000 if DEBUG_STIH41X_SBC_ASC1
default 0xfd883000 if DEBUG_ALPINE_UART0 default 0xfd883000 if DEBUG_ALPINE_UART0
default 0xfdd32000 if DEBUG_STIH41X_ASC2 default 0xfdd32000 if DEBUG_STIH41X_ASC2
......
...@@ -6,7 +6,6 @@ CONFIG_BLK_DEV_INITRD=y ...@@ -6,7 +6,6 @@ CONFIG_BLK_DEV_INITRD=y
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_ARCH_S3C24XX=y CONFIG_ARCH_S3C24XX=y
CONFIG_S3C_ADC=y CONFIG_S3C_ADC=y
CONFIG_S3C24XX_PWM=y
# CONFIG_CPU_S3C2410 is not set # CONFIG_CPU_S3C2410 is not set
CONFIG_CPU_S3C2440=y CONFIG_CPU_S3C2440=y
CONFIG_MACH_MINI2440=y CONFIG_MACH_MINI2440=y
...@@ -228,6 +227,8 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y ...@@ -228,6 +227,8 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_S3C=y CONFIG_RTC_DRV_S3C=y
CONFIG_DMADEVICES=y CONFIG_DMADEVICES=y
CONFIG_S3C24XX_DMAC=y CONFIG_S3C24XX_DMAC=y
CONFIG_PWM=y
CONFIG_PWM_SAMSUNG=y
CONFIG_EXT2_FS=m CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT2_FS_POSIX_ACL=y
......
...@@ -358,6 +358,8 @@ CONFIG_RTC_CLASS=y ...@@ -358,6 +358,8 @@ CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_S3C=y CONFIG_RTC_DRV_S3C=y
CONFIG_DMADEVICES=y CONFIG_DMADEVICES=y
CONFIG_S3C24XX_DMAC=y CONFIG_S3C24XX_DMAC=y
CONFIG_PWM=y
CONFIG_PWM_SAMSUNG=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT2_FS_POSIX_ACL=y
......
...@@ -165,6 +165,15 @@ config ATMEL_CLOCKSOURCE_TCB ...@@ -165,6 +165,15 @@ config ATMEL_CLOCKSOURCE_TCB
to make a single 32-bit timer. to make a single 32-bit timer.
It can also be used as a clock event device supporting oneshot mode. It can also be used as a clock event device supporting oneshot mode.
config MICROCHIP_CLOCKSOURCE_PIT64B
bool "64-bit Periodic Interval Timer (PIT64B) support"
default SOC_SAM9X60 || SOC_SAMA7
select MICROCHIP_PIT64B
help
Select this to get a high resolution clockevent (SAM9X60) or
clocksource and clockevent (SAMA7G5) based on Microchip 64-bit
Periodic Interval Timer.
config HAVE_AT91_UTMI config HAVE_AT91_UTMI
bool bool
...@@ -209,7 +218,16 @@ config SOC_SAMA5 ...@@ -209,7 +218,16 @@ config SOC_SAMA5
select SRAM if PM select SRAM if PM
config ATMEL_PM config ATMEL_PM
bool bool "Atmel PM support"
config ATMEL_SECURE_PM
bool "Atmel Secure PM support"
depends on SOC_SAMA5D2 && ATMEL_PM
select ARM_PSCI
help
When running under a TEE, the suspend mode must be requested to be set
at TEE level. When enable, this option will use secure monitor calls
to set the suspend level. PSCI is then used to enter suspend.
config SOC_SAMA7 config SOC_SAMA7
bool bool
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
obj-$(CONFIG_SOC_AT91RM9200) += at91rm9200.o obj-$(CONFIG_SOC_AT91RM9200) += at91rm9200.o
obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o
obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o
obj-$(CONFIG_SOC_SAMA5) += sama5.o obj-$(CONFIG_SOC_SAMA5) += sama5.o sam_secure.o
obj-$(CONFIG_SOC_SAMA7) += sama7.o obj-$(CONFIG_SOC_SAMA7) += sama7.o
obj-$(CONFIG_SOC_SAMV7) += samv7.o obj-$(CONFIG_SOC_SAMV7) += samv7.o
......
This diff is collapsed.
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2022, Microchip
*/
#include <linux/arm-smccc.h>
#include <linux/of.h>
#include "sam_secure.h"
static bool optee_available;
#define SAM_SIP_SMC_STD_CALL_VAL(func_num) \
ARM_SMCCC_CALL_VAL(ARM_SMCCC_STD_CALL, ARM_SMCCC_SMC_32, \
ARM_SMCCC_OWNER_SIP, (func_num))
struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1)
{
struct arm_smccc_res res = {.a0 = -1};
if (WARN_ON(!optee_available))
return res;
arm_smccc_smc(SAM_SIP_SMC_STD_CALL_VAL(fn), arg0, arg1, 0, 0, 0, 0, 0,
&res);
return res;
}
void __init sam_secure_init(void)
{
struct device_node *np;
/*
* We only check that the OP-TEE node is present and available. The
* OP-TEE kernel driver is not needed for the type of interaction made
* with OP-TEE here so the driver's status is not checked.
*/
np = of_find_node_by_path("/firmware/optee");
if (np && of_device_is_available(np))
optee_available = true;
of_node_put(np);
if (optee_available)
pr_info("Running under OP-TEE firmware\n");
}
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2022, Microchip
*/
#ifndef SAM_SECURE_H
#define SAM_SECURE_H
#include <linux/arm-smccc.h>
/* Secure Monitor mode APIs */
#define SAMA5_SMC_SIP_SET_SUSPEND_MODE 0x400
#define SAMA5_SMC_SIP_GET_SUSPEND_MODE 0x401
void __init sam_secure_init(void);
struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1);
#endif /* SAM_SECURE_H */
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <asm/system_misc.h> #include <asm/system_misc.h>
#include "generic.h" #include "generic.h"
#include "sam_secure.h"
static void __init sama5_dt_device_init(void) static void __init sama5_dt_device_init(void)
{ {
...@@ -47,6 +48,7 @@ MACHINE_END ...@@ -47,6 +48,7 @@ MACHINE_END
static void __init sama5d2_init(void) static void __init sama5d2_init(void)
{ {
of_platform_default_populate(NULL, NULL, NULL); of_platform_default_populate(NULL, NULL, NULL);
sam_secure_init();
sama5d2_pm_init(); sama5d2_pm_init();
} }
......
...@@ -218,4 +218,16 @@ config ARCH_BRCMSTB ...@@ -218,4 +218,16 @@ config ARCH_BRCMSTB
This enables support for Broadcom ARM-based set-top box chipsets, This enables support for Broadcom ARM-based set-top box chipsets,
including the 7445 family of chips. including the 7445 family of chips.
config ARCH_BCMBCA
bool "Broadcom Broadband SoC"
depends on ARCH_MULTI_V7
select ARM_AMBA
select ARM_GIC
select HAVE_ARM_ARCH_TIMER
help
Say Y if you intend to run the kernel on a Broadcom Broadband ARM-based
BCA chipset.
This enables support for Broadcom BCA ARM-based broadband chipsets,
including the DSL, PON and Wireless family of chips.
endif endif
...@@ -59,7 +59,7 @@ static u32 hif_cont_reg; ...@@ -59,7 +59,7 @@ static u32 hif_cont_reg;
/* /*
* We must quiesce a dying CPU before it can be killed by the boot CPU. Because * We must quiesce a dying CPU before it can be killed by the boot CPU. Because
* one or more cache may be disabled, we must flush to ensure coherency. We * one or more cache may be disabled, we must flush to ensure coherency. We
* cannot use traditionl completion structures or spinlocks as they rely on * cannot use traditional completion structures or spinlocks as they rely on
* coherency. * coherency.
*/ */
static DEFINE_PER_CPU_ALIGNED(int, per_cpu_sw_state); static DEFINE_PER_CPU_ALIGNED(int, per_cpu_sw_state);
......
...@@ -67,14 +67,17 @@ static void __init hi3xxx_smp_prepare_cpus(unsigned int max_cpus) ...@@ -67,14 +67,17 @@ static void __init hi3xxx_smp_prepare_cpus(unsigned int max_cpus)
} }
ctrl_base = of_iomap(np, 0); ctrl_base = of_iomap(np, 0);
if (!ctrl_base) { if (!ctrl_base) {
of_node_put(np);
pr_err("failed to map address\n"); pr_err("failed to map address\n");
return; return;
} }
if (of_property_read_u32(np, "smp-offset", &offset) < 0) { if (of_property_read_u32(np, "smp-offset", &offset) < 0) {
of_node_put(np);
pr_err("failed to find smp-offset property\n"); pr_err("failed to find smp-offset property\n");
return; return;
} }
ctrl_base += offset; ctrl_base += offset;
of_node_put(np);
} }
} }
...@@ -160,6 +163,7 @@ static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -160,6 +163,7 @@ static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle)
if (WARN_ON(!node)) if (WARN_ON(!node))
return -1; return -1;
ctrl_base = of_iomap(node, 0); ctrl_base = of_iomap(node, 0);
of_node_put(node);
/* set the secondary core boot from DDR */ /* set the secondary core boot from DDR */
remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL); remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL);
......
...@@ -320,8 +320,10 @@ int __init omap2_cm_base_init(void) ...@@ -320,8 +320,10 @@ int __init omap2_cm_base_init(void)
data = (struct omap_prcm_init_data *)match->data; data = (struct omap_prcm_init_data *)match->data;
ret = of_address_to_resource(np, 0, &res); ret = of_address_to_resource(np, 0, &res);
if (ret) if (ret) {
of_node_put(np);
return ret; return ret;
}
if (data->index == TI_CLKM_CM) if (data->index == TI_CLKM_CM)
mem = &cm_base; mem = &cm_base;
...@@ -367,8 +369,10 @@ int __init omap_cm_init(void) ...@@ -367,8 +369,10 @@ int __init omap_cm_init(void)
continue; continue;
ret = omap2_clk_provider_init(np, data->index, NULL, data->mem); ret = omap2_clk_provider_init(np, data->index, NULL, data->mem);
if (ret) if (ret) {
of_node_put(np);
return ret; return ret;
}
} }
return 0; return 0;
......
...@@ -769,8 +769,10 @@ int __init omap2_control_base_init(void) ...@@ -769,8 +769,10 @@ int __init omap2_control_base_init(void)
data = (struct control_init_data *)match->data; data = (struct control_init_data *)match->data;
mem = of_iomap(np, 0); mem = of_iomap(np, 0);
if (!mem) if (!mem) {
of_node_put(np);
return -ENOMEM; return -ENOMEM;
}
if (data->index == TI_CLKM_CTRL) { if (data->index == TI_CLKM_CTRL) {
omap2_ctrl_base = mem; omap2_ctrl_base = mem;
...@@ -810,22 +812,24 @@ int __init omap_control_init(void) ...@@ -810,22 +812,24 @@ int __init omap_control_init(void)
if (scm_conf) { if (scm_conf) {
syscon = syscon_node_to_regmap(scm_conf); syscon = syscon_node_to_regmap(scm_conf);
if (IS_ERR(syscon)) if (IS_ERR(syscon)) {
return PTR_ERR(syscon); ret = PTR_ERR(syscon);
goto of_node_put;
}
if (of_get_child_by_name(scm_conf, "clocks")) { if (of_get_child_by_name(scm_conf, "clocks")) {
ret = omap2_clk_provider_init(scm_conf, ret = omap2_clk_provider_init(scm_conf,
data->index, data->index,
syscon, NULL); syscon, NULL);
if (ret) if (ret)
return ret; goto of_node_put;
} }
} else { } else {
/* No scm_conf found, direct access */ /* No scm_conf found, direct access */
ret = omap2_clk_provider_init(np, data->index, NULL, ret = omap2_clk_provider_init(np, data->index, NULL,
data->mem); data->mem);
if (ret) if (ret)
return ret; goto of_node_put;
} }
} }
...@@ -836,6 +840,11 @@ int __init omap_control_init(void) ...@@ -836,6 +840,11 @@ int __init omap_control_init(void)
} }
return 0; return 0;
of_node_put:
of_node_put(np);
return ret;
} }
/** /**
......
...@@ -96,9 +96,6 @@ static void _add_clkdev(struct omap_device *od, const char *clk_alias, ...@@ -96,9 +96,6 @@ static void _add_clkdev(struct omap_device *od, const char *clk_alias,
* omap_device, this function adds an entry in the clkdev table of the * omap_device, this function adds an entry in the clkdev table of the
* form <dev-id=dev_name, con-id=role> if it does not exist already. * form <dev-id=dev_name, con-id=role> if it does not exist already.
* *
* The function is called from inside omap_device_build_ss(), after
* omap_device_register.
*
* This allows drivers to get a pointer to its optional clocks based on its role * This allows drivers to get a pointer to its optional clocks based on its role
* by calling clk_get(<dev*>, <role>). * by calling clk_get(<dev*>, <role>).
* In the case of the main clock, a "fck" alias is used. * In the case of the main clock, a "fck" alias is used.
...@@ -473,23 +470,6 @@ struct dev_pm_domain omap_device_pm_domain = { ...@@ -473,23 +470,6 @@ struct dev_pm_domain omap_device_pm_domain = {
} }
}; };
/**
* omap_device_register - register an omap_device with one omap_hwmod
* @pdev: the platform device (omap_device) to register.
*
* Register the omap_device structure. This currently just calls
* platform_device_register() on the underlying platform_device.
* Returns the return value of platform_device_register().
*/
int omap_device_register(struct platform_device *pdev)
{
pr_debug("omap_device: %s: registering\n", pdev->name);
dev_pm_domain_set(&pdev->dev, &omap_device_pm_domain);
return platform_device_add(pdev);
}
/* Public functions for use by device drivers through struct platform_data */ /* Public functions for use by device drivers through struct platform_data */
/** /**
......
...@@ -71,7 +71,6 @@ int omap_device_idle(struct platform_device *pdev); ...@@ -71,7 +71,6 @@ int omap_device_idle(struct platform_device *pdev);
struct omap_device *omap_device_alloc(struct platform_device *pdev, struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt); struct omap_hwmod **ohs, int oh_cnt);
void omap_device_delete(struct omap_device *od); void omap_device_delete(struct omap_device *od);
int omap_device_register(struct platform_device *pdev);
struct device *omap_device_get_by_hwmod_name(const char *oh_name); struct device *omap_device_get_by_hwmod_name(const char *oh_name);
......
...@@ -752,8 +752,10 @@ int __init omap2_prm_base_init(void) ...@@ -752,8 +752,10 @@ int __init omap2_prm_base_init(void)
data = (struct omap_prcm_init_data *)match->data; data = (struct omap_prcm_init_data *)match->data;
ret = of_address_to_resource(np, 0, &res); ret = of_address_to_resource(np, 0, &res);
if (ret) if (ret) {
of_node_put(np);
return ret; return ret;
}
data->mem = ioremap(res.start, resource_size(&res)); data->mem = ioremap(res.start, resource_size(&res));
...@@ -799,8 +801,10 @@ int __init omap_prcm_init(void) ...@@ -799,8 +801,10 @@ int __init omap_prcm_init(void)
data = match->data; data = match->data;
ret = omap2_clk_provider_init(np, data->index, NULL, data->mem); ret = omap2_clk_provider_init(np, data->index, NULL, data->mem);
if (ret) if (ret) {
of_node_put(np);
return ret; return ret;
}
} }
omap_cm_init(); omap_cm_init();
......
...@@ -696,12 +696,12 @@ static void __init dns323_init(void) ...@@ -696,12 +696,12 @@ static void __init dns323_init(void)
pr_err("DNS-323: failed to setup power-off GPIO\n"); pr_err("DNS-323: failed to setup power-off GPIO\n");
pm_power_off = dns323c_power_off; pm_power_off = dns323c_power_off;
/* Now, -this- should theorically be done by the sata_mv driver /* Now, -this- should theoretically be done by the sata_mv driver
* once I figure out what's going on there. Maybe the behaviour * once I figure out what's going on there. Maybe the behaviour
* of the LEDs should be somewhat passed via the platform_data. * of the LEDs should be somewhat passed via the platform_data.
* for now, just whack the register and make the LEDs happy * for now, just whack the register and make the LEDs happy
* *
* Note: AFAIK, rev B1 needs the same treatement but I'll let * Note: AFAIK, rev B1 needs the same treatment but I'll let
* somebody else test it. * somebody else test it.
*/ */
writel(0x5, ORION5X_SATA_VIRT_BASE + 0x2c); writel(0x5, ORION5X_SATA_VIRT_BASE + 0x2c);
......
...@@ -137,7 +137,7 @@ static int rockchip_boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -137,7 +137,7 @@ static int rockchip_boot_secondary(unsigned int cpu, struct task_struct *idle)
/* /*
* We communicate with the bootrom to active the cpus other * We communicate with the bootrom to active the cpus other
* than cpu0, after a blob of initialize code, they will * than cpu0, after a blob of initialize code, they will
* stay at wfe state, once they are actived, they will check * stay at wfe state, once they are activated, they will check
* the mailbox: * the mailbox:
* sram_base_addr + 4: 0xdeadbeaf * sram_base_addr + 4: 0xdeadbeaf
* sram_base_addr + 8: start address for pc * sram_base_addr + 8: start address for pc
......
...@@ -207,14 +207,6 @@ config SAMSUNG_DEV_PWM ...@@ -207,14 +207,6 @@ config SAMSUNG_DEV_PWM
help help
Compile in platform device definition for PWM Timer Compile in platform device definition for PWM Timer
config S3C24XX_PWM
bool "PWM device support"
select PWM
select PWM_SAMSUNG
help
Support for exporting the PWM timer blocks via the pwm device
system
config GPIO_SAMSUNG config GPIO_SAMSUNG
def_bool y def_bool y
......
...@@ -532,7 +532,6 @@ config MACH_NEO1973_GTA02 ...@@ -532,7 +532,6 @@ config MACH_NEO1973_GTA02
select MFD_PCF50633 select MFD_PCF50633
select PCF50633_GPIO select PCF50633_GPIO
select POWER_SUPPLY select POWER_SUPPLY
select S3C24XX_PWM
select S3C_DEV_USB_HOST select S3C_DEV_USB_HOST
help help
Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone
...@@ -544,7 +543,6 @@ config MACH_RX1950 ...@@ -544,7 +543,6 @@ config MACH_RX1950
select S3C2410_COMMON_DCLK select S3C2410_COMMON_DCLK
select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ
select S3C2440_XTAL_16934400 select S3C2440_XTAL_16934400
select S3C24XX_PWM
select S3C_DEV_NAND select S3C_DEV_NAND
help help
Say Y here if you're using HP iPAQ rx1950 Say Y here if you're using HP iPAQ rx1950
......
...@@ -259,7 +259,7 @@ static const unsigned int tacc_tab[] = { ...@@ -259,7 +259,7 @@ static const unsigned int tacc_tab[] = {
/** /**
* get_tacc - turn tACC value into cycle time * get_tacc - turn tACC value into cycle time
* @hclk_tns: The cycle time for HCLK, in 10ths of nanoseconds. * @hclk_tns: The cycle time for HCLK, in 10ths of nanoseconds.
* @val: The bank timing register value, shifed down. * @val: The bank timing register value, shifted down.
*/ */
static unsigned int get_tacc(unsigned long hclk_tns, static unsigned int get_tacc(unsigned long hclk_tns,
unsigned long val) unsigned long val)
......
...@@ -323,7 +323,7 @@ void s3c_pm_arch_update_uart(void __iomem *regs, struct pm_uart_save *save) ...@@ -323,7 +323,7 @@ void s3c_pm_arch_update_uart(void __iomem *regs, struct pm_uart_save *save)
/* S3C64XX UART blocks only support level interrupts, so ensure that /* S3C64XX UART blocks only support level interrupts, so ensure that
* when we restore unused UART blocks we force the level interrupt * when we restore unused UART blocks we force the level interrupt
* settigs. */ * settings. */
save->ucon |= S3C2410_UCON_TXILEVEL | S3C2410_UCON_RXILEVEL; save->ucon |= S3C2410_UCON_TXILEVEL | S3C2410_UCON_RXILEVEL;
/* We have a constraint on changing the clock type of the UART /* We have a constraint on changing the clock type of the UART
......
...@@ -146,7 +146,7 @@ static struct map_desc s3c_iodesc[] __initdata __maybe_unused = { ...@@ -146,7 +146,7 @@ static struct map_desc s3c_iodesc[] __initdata __maybe_unused = {
IODESC_ENT(UART) IODESC_ENT(UART)
}; };
/* read cpu identificaiton code */ /* read cpu identification code */
static unsigned long s3c24xx_read_idcode_v5(void) static unsigned long s3c24xx_read_idcode_v5(void)
{ {
......
...@@ -67,7 +67,7 @@ static const struct of_device_id rcar_gen2_quirk_match[] = { ...@@ -67,7 +67,7 @@ static const struct of_device_id rcar_gen2_quirk_match[] = {
{ .compatible = "dlg,da9063", .data = &da9063_msg }, { .compatible = "dlg,da9063", .data = &da9063_msg },
{ .compatible = "dlg,da9063l", .data = &da9063_msg }, { .compatible = "dlg,da9063l", .data = &da9063_msg },
{ .compatible = "dlg,da9210", .data = &da9210_msg }, { .compatible = "dlg,da9210", .data = &da9210_msg },
{}, { /* sentinel */ }
}; };
static int regulator_quirk_notify(struct notifier_block *nb, static int regulator_quirk_notify(struct notifier_block *nb,
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
static const char *const emev2_boards_compat_dt[] __initconst = { static const char *const emev2_boards_compat_dt[] __initconst = {
"renesas,emev2", "renesas,emev2",
NULL, NULL
}; };
DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)")
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
static const char *const r7s72100_boards_compat_dt[] __initconst = { static const char *const r7s72100_boards_compat_dt[] __initconst = {
"renesas,r7s72100", "renesas,r7s72100",
NULL, NULL
}; };
DT_MACHINE_START(R7S72100_DT, "Generic R7S72100 (Flattened Device Tree)") DT_MACHINE_START(R7S72100_DT, "Generic R7S72100 (Flattened Device Tree)")
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
static const char *const r7s9210_boards_compat_dt[] __initconst = { static const char *const r7s9210_boards_compat_dt[] __initconst = {
"renesas,r7s9210", "renesas,r7s9210",
NULL, NULL
}; };
DT_MACHINE_START(R7S72100_DT, "Generic R7S9210 (Flattened Device Tree)") DT_MACHINE_START(R7S72100_DT, "Generic R7S9210 (Flattened Device Tree)")
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
static const char *const r8a73a4_boards_compat_dt[] __initconst = { static const char *const r8a73a4_boards_compat_dt[] __initconst = {
"renesas,r8a73a4", "renesas,r8a73a4",
NULL, NULL
}; };
DT_MACHINE_START(R8A73A4_DT, "Generic R8A73A4 (Flattened Device Tree)") DT_MACHINE_START(R8A73A4_DT, "Generic R8A73A4 (Flattened Device Tree)")
......
...@@ -72,7 +72,7 @@ static void __init r8a7740_generic_init(void) ...@@ -72,7 +72,7 @@ static void __init r8a7740_generic_init(void)
static const char *const r8a7740_boards_compat_dt[] __initconst = { static const char *const r8a7740_boards_compat_dt[] __initconst = {
"renesas,r8a7740", "renesas,r8a7740",
NULL, NULL
}; };
DT_MACHINE_START(R8A7740_DT, "Generic R8A7740 (Flattened Device Tree)") DT_MACHINE_START(R8A7740_DT, "Generic R8A7740 (Flattened Device Tree)")
......
...@@ -43,7 +43,7 @@ static void __init r8a7778_init_irq_dt(void) ...@@ -43,7 +43,7 @@ static void __init r8a7778_init_irq_dt(void)
static const char *const r8a7778_compat_dt[] __initconst = { static const char *const r8a7778_compat_dt[] __initconst = {
"renesas,r8a7778", "renesas,r8a7778",
NULL, NULL
}; };
DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)") DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)")
......
...@@ -49,7 +49,7 @@ static void __init r8a7779_init_irq_dt(void) ...@@ -49,7 +49,7 @@ static void __init r8a7779_init_irq_dt(void)
static const char *const r8a7779_compat_dt[] __initconst = { static const char *const r8a7779_compat_dt[] __initconst = {
"renesas,r8a7779", "renesas,r8a7779",
NULL, NULL
}; };
DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)") DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)")
......
...@@ -199,7 +199,7 @@ static const char * const rcar_gen2_boards_compat_dt[] __initconst = { ...@@ -199,7 +199,7 @@ static const char * const rcar_gen2_boards_compat_dt[] __initconst = {
"renesas,r8a7792", "renesas,r8a7792",
"renesas,r8a7793", "renesas,r8a7793",
"renesas,r8a7794", "renesas,r8a7794",
NULL, NULL
}; };
DT_MACHINE_START(RCAR_GEN2_DT, "Generic R-Car Gen2 (Flattened Device Tree)") DT_MACHINE_START(RCAR_GEN2_DT, "Generic R-Car Gen2 (Flattened Device Tree)")
...@@ -215,7 +215,7 @@ static const char * const rz_g1_boards_compat_dt[] __initconst = { ...@@ -215,7 +215,7 @@ static const char * const rz_g1_boards_compat_dt[] __initconst = {
"renesas,r8a7744", "renesas,r8a7744",
"renesas,r8a7745", "renesas,r8a7745",
"renesas,r8a77470", "renesas,r8a77470",
NULL, NULL
}; };
DT_MACHINE_START(RZ_G1_DT, "Generic RZ/G1 (Flattened Device Tree)") DT_MACHINE_START(RZ_G1_DT, "Generic RZ/G1 (Flattened Device Tree)")
......
...@@ -32,7 +32,7 @@ static void __init sh73a0_generic_init(void) ...@@ -32,7 +32,7 @@ static void __init sh73a0_generic_init(void)
static const char *const sh73a0_boards_compat_dt[] __initconst = { static const char *const sh73a0_boards_compat_dt[] __initconst = {
"renesas,sh73a0", "renesas,sh73a0",
NULL, NULL
}; };
DT_MACHINE_START(SH73A0_DT, "Generic SH73A0 (Flattened Device Tree)") DT_MACHINE_START(SH73A0_DT, "Generic SH73A0 (Flattened Device Tree)")
......
...@@ -83,7 +83,7 @@ static int tegra30_boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -83,7 +83,7 @@ static int tegra30_boot_secondary(unsigned int cpu, struct task_struct *idle)
* For warm boot CPU that was resumed from CPU hotplug, the * For warm boot CPU that was resumed from CPU hotplug, the
* power will be resumed automatically after un-halting the * power will be resumed automatically after un-halting the
* flow controller of the warm boot CPU. We need to wait for * flow controller of the warm boot CPU. We need to wait for
* the confirmaiton that the CPU is powered then removing * the confirmation that the CPU is powered then removing
* the IO clamps. * the IO clamps.
* For cold boot CPU, do not wait. After the cold boot CPU be * For cold boot CPU, do not wait. After the cold boot CPU be
* booted, it will run to tegra_secondary_init() and set * booted, it will run to tegra_secondary_init() and set
......
...@@ -74,7 +74,7 @@ static inline void __b15_rac_flush(void) ...@@ -74,7 +74,7 @@ static inline void __b15_rac_flush(void)
__raw_writel(FLUSH_RAC, b15_rac_base + rac_flush_offset); __raw_writel(FLUSH_RAC, b15_rac_base + rac_flush_offset);
do { do {
/* This dmb() is required to force the Bus Interface Unit /* This dmb() is required to force the Bus Interface Unit
* to clean oustanding writes, and forces an idle cycle * to clean outstanding writes, and forces an idle cycle
* to be inserted. * to be inserted.
*/ */
dmb(); dmb();
......
...@@ -18,7 +18,7 @@ static const struct mtk_mmsys_routes mt8167_mmsys_routing_table[] = { ...@@ -18,7 +18,7 @@ static const struct mtk_mmsys_routes mt8167_mmsys_routing_table[] = {
DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0, DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0,
MT8167_DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, OVL0_MOUT_EN_COLOR0, MT8167_DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, OVL0_MOUT_EN_COLOR0,
}, { }, {
DDP_COMPONENT_DITHER, DDP_COMPONENT_RDMA0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_RDMA0,
MT8167_DISP_REG_CONFIG_DISP_DITHER_MOUT_EN, MT8167_DITHER_MOUT_EN_RDMA0 MT8167_DISP_REG_CONFIG_DISP_DITHER_MOUT_EN, MT8167_DITHER_MOUT_EN_RDMA0
}, { }, {
DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0, DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0,
......
...@@ -41,7 +41,7 @@ static const struct mtk_mmsys_routes mmsys_mt8183_routing_table[] = { ...@@ -41,7 +41,7 @@ static const struct mtk_mmsys_routes mmsys_mt8183_routing_table[] = {
MT8183_DISP_OVL1_2L_MOUT_EN, MT8183_OVL1_2L_MOUT_EN_RDMA1, MT8183_DISP_OVL1_2L_MOUT_EN, MT8183_OVL1_2L_MOUT_EN_RDMA1,
MT8183_OVL1_2L_MOUT_EN_RDMA1 MT8183_OVL1_2L_MOUT_EN_RDMA1
}, { }, {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8183_DISP_DITHER0_MOUT_EN, MT8183_DITHER0_MOUT_IN_DSI0, MT8183_DISP_DITHER0_MOUT_EN, MT8183_DITHER0_MOUT_IN_DSI0,
MT8183_DITHER0_MOUT_IN_DSI0 MT8183_DITHER0_MOUT_IN_DSI0
}, { }, {
......
...@@ -76,12 +76,12 @@ static const struct mtk_mmsys_routes mmsys_mt8186_routing_table[] = { ...@@ -76,12 +76,12 @@ static const struct mtk_mmsys_routes mmsys_mt8186_routing_table[] = {
MT8186_RDMA0_SOUT_TO_COLOR0 MT8186_RDMA0_SOUT_TO_COLOR0
}, },
{ {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8186_DISP_DITHER0_MOUT_EN, MT8186_DITHER0_MOUT_EN_MASK, MT8186_DISP_DITHER0_MOUT_EN, MT8186_DITHER0_MOUT_EN_MASK,
MT8186_DITHER0_MOUT_TO_DSI0, MT8186_DITHER0_MOUT_TO_DSI0,
}, },
{ {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8186_DISP_DSI0_SEL_IN, MT8186_DSI0_SEL_IN_MASK, MT8186_DISP_DSI0_SEL_IN, MT8186_DSI0_SEL_IN_MASK,
MT8186_DSI0_FROM_DITHER0 MT8186_DSI0_FROM_DITHER0
}, },
......
...@@ -40,7 +40,7 @@ static const struct mtk_mmsys_routes mmsys_mt8192_routing_table[] = { ...@@ -40,7 +40,7 @@ static const struct mtk_mmsys_routes mmsys_mt8192_routing_table[] = {
MT8192_DISP_OVL2_2L_MOUT_EN, MT8192_OVL2_2L_MOUT_EN_RDMA4, MT8192_DISP_OVL2_2L_MOUT_EN, MT8192_OVL2_2L_MOUT_EN_RDMA4,
MT8192_OVL2_2L_MOUT_EN_RDMA4 MT8192_OVL2_2L_MOUT_EN_RDMA4
}, { }, {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8192_DISP_DITHER0_MOUT_EN, MT8192_DITHER0_MOUT_IN_DSI0, MT8192_DISP_DITHER0_MOUT_EN, MT8192_DITHER0_MOUT_IN_DSI0,
MT8192_DITHER0_MOUT_IN_DSI0 MT8192_DITHER0_MOUT_IN_DSI0
}, { }, {
...@@ -52,7 +52,7 @@ static const struct mtk_mmsys_routes mmsys_mt8192_routing_table[] = { ...@@ -52,7 +52,7 @@ static const struct mtk_mmsys_routes mmsys_mt8192_routing_table[] = {
MT8192_DISP_AAL0_SEL_IN, MT8192_AAL0_SEL_IN_CCORR0, MT8192_DISP_AAL0_SEL_IN, MT8192_AAL0_SEL_IN_CCORR0,
MT8192_AAL0_SEL_IN_CCORR0 MT8192_AAL0_SEL_IN_CCORR0
}, { }, {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8192_DISP_DSI0_SEL_IN, MT8192_DSI0_SEL_IN_DITHER0, MT8192_DISP_DSI0_SEL_IN, MT8192_DSI0_SEL_IN_DITHER0,
MT8192_DSI0_SEL_IN_DITHER0 MT8192_DSI0_SEL_IN_DITHER0
}, { }, {
......
This diff is collapsed.
...@@ -41,12 +41,12 @@ static const struct mtk_mmsys_routes mt8365_mmsys_routing_table[] = { ...@@ -41,12 +41,12 @@ static const struct mtk_mmsys_routes mt8365_mmsys_routing_table[] = {
MT8365_DISP_COLOR_SEL_IN_COLOR0,MT8365_DISP_COLOR_SEL_IN_COLOR0 MT8365_DISP_COLOR_SEL_IN_COLOR0,MT8365_DISP_COLOR_SEL_IN_COLOR0
}, },
{ {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8365_DISP_REG_CONFIG_DISP_DITHER0_MOUT_EN, MT8365_DISP_REG_CONFIG_DISP_DITHER0_MOUT_EN,
MT8365_DITHER_MOUT_EN_DSI0, MT8365_DITHER_MOUT_EN_DSI0 MT8365_DITHER_MOUT_EN_DSI0, MT8365_DITHER_MOUT_EN_DSI0
}, },
{ {
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
MT8365_DISP_REG_CONFIG_DISP_DSI0_SEL_IN, MT8365_DISP_REG_CONFIG_DISP_DSI0_SEL_IN,
MT8365_DSI0_SEL_IN_DITHER, MT8365_DSI0_SEL_IN_DITHER MT8365_DSI0_SEL_IN_DITHER, MT8365_DSI0_SEL_IN_DITHER
}, },
......
...@@ -425,34 +425,11 @@ int cmdq_pkt_finalize(struct cmdq_pkt *pkt) ...@@ -425,34 +425,11 @@ int cmdq_pkt_finalize(struct cmdq_pkt *pkt)
} }
EXPORT_SYMBOL(cmdq_pkt_finalize); EXPORT_SYMBOL(cmdq_pkt_finalize);
static void cmdq_pkt_flush_async_cb(struct cmdq_cb_data data) int cmdq_pkt_flush_async(struct cmdq_pkt *pkt)
{
struct cmdq_pkt *pkt = (struct cmdq_pkt *)data.data;
struct cmdq_task_cb *cb = &pkt->cb;
struct cmdq_client *client = (struct cmdq_client *)pkt->cl;
dma_sync_single_for_cpu(client->chan->mbox->dev, pkt->pa_base,
pkt->cmd_buf_size, DMA_TO_DEVICE);
if (cb->cb) {
data.data = cb->data;
cb->cb(data);
}
}
int cmdq_pkt_flush_async(struct cmdq_pkt *pkt, cmdq_async_flush_cb cb,
void *data)
{ {
int err; int err;
struct cmdq_client *client = (struct cmdq_client *)pkt->cl; struct cmdq_client *client = (struct cmdq_client *)pkt->cl;
pkt->cb.cb = cb;
pkt->cb.data = data;
pkt->async_cb.cb = cmdq_pkt_flush_async_cb;
pkt->async_cb.data = pkt;
dma_sync_single_for_device(client->chan->mbox->dev, pkt->pa_base,
pkt->cmd_buf_size, DMA_TO_DEVICE);
err = mbox_send_message(client->chan, pkt); err = mbox_send_message(client->chan, pkt);
if (err < 0) if (err < 0)
return err; return err;
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "mt8183-mmsys.h" #include "mt8183-mmsys.h"
#include "mt8186-mmsys.h" #include "mt8186-mmsys.h"
#include "mt8192-mmsys.h" #include "mt8192-mmsys.h"
#include "mt8195-mmsys.h"
#include "mt8365-mmsys.h" #include "mt8365-mmsys.h"
static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
...@@ -25,26 +26,61 @@ static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = { ...@@ -25,26 +26,61 @@ static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
.num_routes = ARRAY_SIZE(mmsys_default_routing_table), .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
}; };
static const struct mtk_mmsys_match_data mt2701_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt2701_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
.clk_driver = "clk-mt2712-mm", .clk_driver = "clk-mt2712-mm",
.routes = mmsys_default_routing_table, .routes = mmsys_default_routing_table,
.num_routes = ARRAY_SIZE(mmsys_default_routing_table), .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
}; };
static const struct mtk_mmsys_match_data mt2712_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt2712_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt6779_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt6779_mmsys_driver_data = {
.clk_driver = "clk-mt6779-mm", .clk_driver = "clk-mt6779-mm",
}; };
static const struct mtk_mmsys_match_data mt6779_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt6779_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt6797_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt6797_mmsys_driver_data = {
.clk_driver = "clk-mt6797-mm", .clk_driver = "clk-mt6797-mm",
}; };
static const struct mtk_mmsys_match_data mt6797_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt6797_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt8167_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt8167_mmsys_driver_data = {
.clk_driver = "clk-mt8167-mm", .clk_driver = "clk-mt8167-mm",
.routes = mt8167_mmsys_routing_table, .routes = mt8167_mmsys_routing_table,
.num_routes = ARRAY_SIZE(mt8167_mmsys_routing_table), .num_routes = ARRAY_SIZE(mt8167_mmsys_routing_table),
}; };
static const struct mtk_mmsys_match_data mt8167_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt8167_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
.clk_driver = "clk-mt8173-mm", .clk_driver = "clk-mt8173-mm",
.routes = mmsys_default_routing_table, .routes = mmsys_default_routing_table,
...@@ -52,6 +88,13 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = { ...@@ -52,6 +88,13 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
.sw0_rst_offset = MT8183_MMSYS_SW0_RST_B, .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
}; };
static const struct mtk_mmsys_match_data mt8173_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt8173_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
.clk_driver = "clk-mt8183-mm", .clk_driver = "clk-mt8183-mm",
.routes = mmsys_mt8183_routing_table, .routes = mmsys_mt8183_routing_table,
...@@ -59,6 +102,13 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = { ...@@ -59,6 +102,13 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
.sw0_rst_offset = MT8183_MMSYS_SW0_RST_B, .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
}; };
static const struct mtk_mmsys_match_data mt8183_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt8183_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
.clk_driver = "clk-mt8186-mm", .clk_driver = "clk-mt8186-mm",
.routes = mmsys_mt8186_routing_table, .routes = mmsys_mt8186_routing_table,
...@@ -66,10 +116,45 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = { ...@@ -66,10 +116,45 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B, .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
}; };
static const struct mtk_mmsys_match_data mt8186_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt8186_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
.clk_driver = "clk-mt8192-mm", .clk_driver = "clk-mt8192-mm",
.routes = mmsys_mt8192_routing_table, .routes = mmsys_mt8192_routing_table,
.num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table), .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
};
static const struct mtk_mmsys_match_data mt8192_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt8192_mmsys_driver_data,
},
};
static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
.io_start = 0x1c01a000,
.clk_driver = "clk-mt8195-vdo0",
.routes = mmsys_mt8195_routing_table,
.num_routes = ARRAY_SIZE(mmsys_mt8195_routing_table),
};
static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
.io_start = 0x1c100000,
.clk_driver = "clk-mt8195-vdo1",
};
static const struct mtk_mmsys_match_data mt8195_mmsys_match_data = {
.num_drv_data = 2,
.drv_data = {
&mt8195_vdosys0_driver_data,
&mt8195_vdosys1_driver_data,
},
}; };
static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = { static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = {
...@@ -78,13 +163,33 @@ static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = { ...@@ -78,13 +163,33 @@ static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = {
.num_routes = ARRAY_SIZE(mt8365_mmsys_routing_table), .num_routes = ARRAY_SIZE(mt8365_mmsys_routing_table),
}; };
static const struct mtk_mmsys_match_data mt8365_mmsys_match_data = {
.num_drv_data = 1,
.drv_data = {
&mt8365_mmsys_driver_data,
},
};
struct mtk_mmsys { struct mtk_mmsys {
void __iomem *regs; void __iomem *regs;
const struct mtk_mmsys_driver_data *data; const struct mtk_mmsys_driver_data *data;
spinlock_t lock; /* protects mmsys_sw_rst_b reg */ spinlock_t lock; /* protects mmsys_sw_rst_b reg */
struct reset_controller_dev rcdev; struct reset_controller_dev rcdev;
phys_addr_t io_start;
}; };
static int mtk_mmsys_find_match_drvdata(struct mtk_mmsys *mmsys,
const struct mtk_mmsys_match_data *match)
{
int i;
for (i = 0; i < match->num_drv_data; i++)
if (mmsys->io_start == match->drv_data[i]->io_start)
return i;
return -EINVAL;
}
void mtk_mmsys_ddp_connect(struct device *dev, void mtk_mmsys_ddp_connect(struct device *dev,
enum mtk_ddp_comp_id cur, enum mtk_ddp_comp_id cur,
enum mtk_ddp_comp_id next) enum mtk_ddp_comp_id next)
...@@ -179,7 +284,9 @@ static int mtk_mmsys_probe(struct platform_device *pdev) ...@@ -179,7 +284,9 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct platform_device *clks; struct platform_device *clks;
struct platform_device *drm; struct platform_device *drm;
const struct mtk_mmsys_match_data *match_data;
struct mtk_mmsys *mmsys; struct mtk_mmsys *mmsys;
struct resource *res;
int ret; int ret;
mmsys = devm_kzalloc(dev, sizeof(*mmsys), GFP_KERNEL); mmsys = devm_kzalloc(dev, sizeof(*mmsys), GFP_KERNEL);
...@@ -205,7 +312,27 @@ static int mtk_mmsys_probe(struct platform_device *pdev) ...@@ -205,7 +312,27 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
return ret; return ret;
} }
mmsys->data = of_device_get_match_data(&pdev->dev); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(dev, "Couldn't get mmsys resource\n");
return -EINVAL;
}
mmsys->io_start = res->start;
match_data = of_device_get_match_data(dev);
if (match_data->num_drv_data > 1) {
/* This SoC has multiple mmsys channels */
ret = mtk_mmsys_find_match_drvdata(mmsys, match_data);
if (ret < 0) {
dev_err(dev, "Couldn't get match driver data\n");
return ret;
}
mmsys->data = match_data->drv_data[ret];
} else {
dev_dbg(dev, "Using single mmsys channel\n");
mmsys->data = match_data->drv_data[0];
}
platform_set_drvdata(pdev, mmsys); platform_set_drvdata(pdev, mmsys);
clks = platform_device_register_data(&pdev->dev, mmsys->data->clk_driver, clks = platform_device_register_data(&pdev->dev, mmsys->data->clk_driver,
...@@ -226,43 +353,47 @@ static int mtk_mmsys_probe(struct platform_device *pdev) ...@@ -226,43 +353,47 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
static const struct of_device_id of_match_mtk_mmsys[] = { static const struct of_device_id of_match_mtk_mmsys[] = {
{ {
.compatible = "mediatek,mt2701-mmsys", .compatible = "mediatek,mt2701-mmsys",
.data = &mt2701_mmsys_driver_data, .data = &mt2701_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt2712-mmsys", .compatible = "mediatek,mt2712-mmsys",
.data = &mt2712_mmsys_driver_data, .data = &mt2712_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt6779-mmsys", .compatible = "mediatek,mt6779-mmsys",
.data = &mt6779_mmsys_driver_data, .data = &mt6779_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt6797-mmsys", .compatible = "mediatek,mt6797-mmsys",
.data = &mt6797_mmsys_driver_data, .data = &mt6797_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt8167-mmsys", .compatible = "mediatek,mt8167-mmsys",
.data = &mt8167_mmsys_driver_data, .data = &mt8167_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt8173-mmsys", .compatible = "mediatek,mt8173-mmsys",
.data = &mt8173_mmsys_driver_data, .data = &mt8173_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt8183-mmsys", .compatible = "mediatek,mt8183-mmsys",
.data = &mt8183_mmsys_driver_data, .data = &mt8183_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt8186-mmsys", .compatible = "mediatek,mt8186-mmsys",
.data = &mt8186_mmsys_driver_data, .data = &mt8186_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt8192-mmsys", .compatible = "mediatek,mt8192-mmsys",
.data = &mt8192_mmsys_driver_data, .data = &mt8192_mmsys_match_data,
},
{
.compatible = "mediatek,mt8195-mmsys",
.data = &mt8195_mmsys_match_data,
}, },
{ {
.compatible = "mediatek,mt8365-mmsys", .compatible = "mediatek,mt8365-mmsys",
.data = &mt8365_mmsys_driver_data, .data = &mt8365_mmsys_match_data,
}, },
{ } { }
}; };
......
...@@ -87,12 +87,18 @@ struct mtk_mmsys_routes { ...@@ -87,12 +87,18 @@ struct mtk_mmsys_routes {
}; };
struct mtk_mmsys_driver_data { struct mtk_mmsys_driver_data {
const resource_size_t io_start;
const char *clk_driver; const char *clk_driver;
const struct mtk_mmsys_routes *routes; const struct mtk_mmsys_routes *routes;
const unsigned int num_routes; const unsigned int num_routes;
const u16 sw0_rst_offset; const u16 sw0_rst_offset;
}; };
struct mtk_mmsys_match_data {
unsigned short num_drv_data;
const struct mtk_mmsys_driver_data *drv_data[];
};
/* /*
* Routes in mt8173, mt2701, mt2712 are different. That means * Routes in mt8173, mt2701, mt2712 are different. That means
* in the same register address, it controls different input/output * in the same register address, it controls different input/output
......
...@@ -96,6 +96,20 @@ ...@@ -96,6 +96,20 @@
#define MT8173_MUTEX_MOD_DISP_PWM1 24 #define MT8173_MUTEX_MOD_DISP_PWM1 24
#define MT8173_MUTEX_MOD_DISP_OD 25 #define MT8173_MUTEX_MOD_DISP_OD 25
#define MT8195_MUTEX_MOD_DISP_OVL0 0
#define MT8195_MUTEX_MOD_DISP_WDMA0 1
#define MT8195_MUTEX_MOD_DISP_RDMA0 2
#define MT8195_MUTEX_MOD_DISP_COLOR0 3
#define MT8195_MUTEX_MOD_DISP_CCORR0 4
#define MT8195_MUTEX_MOD_DISP_AAL0 5
#define MT8195_MUTEX_MOD_DISP_GAMMA0 6
#define MT8195_MUTEX_MOD_DISP_DITHER0 7
#define MT8195_MUTEX_MOD_DISP_DSI0 8
#define MT8195_MUTEX_MOD_DISP_DSC_WRAP0_CORE0 9
#define MT8195_MUTEX_MOD_DISP_VPP_MERGE 20
#define MT8195_MUTEX_MOD_DISP_DP_INTF0 21
#define MT8195_MUTEX_MOD_DISP_PWM0 27
#define MT2712_MUTEX_MOD_DISP_PWM2 10 #define MT2712_MUTEX_MOD_DISP_PWM2 10
#define MT2712_MUTEX_MOD_DISP_OVL0 11 #define MT2712_MUTEX_MOD_DISP_OVL0 11
#define MT2712_MUTEX_MOD_DISP_OVL1 12 #define MT2712_MUTEX_MOD_DISP_OVL1 12
...@@ -132,9 +146,21 @@ ...@@ -132,9 +146,21 @@
#define MT8167_MUTEX_SOF_DPI1 3 #define MT8167_MUTEX_SOF_DPI1 3
#define MT8183_MUTEX_SOF_DSI0 1 #define MT8183_MUTEX_SOF_DSI0 1
#define MT8183_MUTEX_SOF_DPI0 2 #define MT8183_MUTEX_SOF_DPI0 2
#define MT8195_MUTEX_SOF_DSI0 1
#define MT8195_MUTEX_SOF_DSI1 2
#define MT8195_MUTEX_SOF_DP_INTF0 3
#define MT8195_MUTEX_SOF_DP_INTF1 4
#define MT8195_MUTEX_SOF_DPI0 6 /* for HDMI_TX */
#define MT8195_MUTEX_SOF_DPI1 5 /* for digital video out */
#define MT8183_MUTEX_EOF_DSI0 (MT8183_MUTEX_SOF_DSI0 << 6) #define MT8183_MUTEX_EOF_DSI0 (MT8183_MUTEX_SOF_DSI0 << 6)
#define MT8183_MUTEX_EOF_DPI0 (MT8183_MUTEX_SOF_DPI0 << 6) #define MT8183_MUTEX_EOF_DPI0 (MT8183_MUTEX_SOF_DPI0 << 6)
#define MT8195_MUTEX_EOF_DSI0 (MT8195_MUTEX_SOF_DSI0 << 7)
#define MT8195_MUTEX_EOF_DSI1 (MT8195_MUTEX_SOF_DSI1 << 7)
#define MT8195_MUTEX_EOF_DP_INTF0 (MT8195_MUTEX_SOF_DP_INTF0 << 7)
#define MT8195_MUTEX_EOF_DP_INTF1 (MT8195_MUTEX_SOF_DP_INTF1 << 7)
#define MT8195_MUTEX_EOF_DPI0 (MT8195_MUTEX_SOF_DPI0 << 7)
#define MT8195_MUTEX_EOF_DPI1 (MT8195_MUTEX_SOF_DPI1 << 7)
struct mtk_mutex { struct mtk_mutex {
int id; int id;
...@@ -149,6 +175,9 @@ enum mtk_mutex_sof_id { ...@@ -149,6 +175,9 @@ enum mtk_mutex_sof_id {
MUTEX_SOF_DPI1, MUTEX_SOF_DPI1,
MUTEX_SOF_DSI2, MUTEX_SOF_DSI2,
MUTEX_SOF_DSI3, MUTEX_SOF_DSI3,
MUTEX_SOF_DP_INTF0,
MUTEX_SOF_DP_INTF1,
DDP_MUTEX_SOF_MAX,
}; };
struct mtk_mutex_data { struct mtk_mutex_data {
...@@ -200,7 +229,7 @@ static const unsigned int mt8167_mutex_mod[DDP_COMPONENT_ID_MAX] = { ...@@ -200,7 +229,7 @@ static const unsigned int mt8167_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_AAL0] = MT8167_MUTEX_MOD_DISP_AAL, [DDP_COMPONENT_AAL0] = MT8167_MUTEX_MOD_DISP_AAL,
[DDP_COMPONENT_CCORR] = MT8167_MUTEX_MOD_DISP_CCORR, [DDP_COMPONENT_CCORR] = MT8167_MUTEX_MOD_DISP_CCORR,
[DDP_COMPONENT_COLOR0] = MT8167_MUTEX_MOD_DISP_COLOR, [DDP_COMPONENT_COLOR0] = MT8167_MUTEX_MOD_DISP_COLOR,
[DDP_COMPONENT_DITHER] = MT8167_MUTEX_MOD_DISP_DITHER, [DDP_COMPONENT_DITHER0] = MT8167_MUTEX_MOD_DISP_DITHER,
[DDP_COMPONENT_GAMMA] = MT8167_MUTEX_MOD_DISP_GAMMA, [DDP_COMPONENT_GAMMA] = MT8167_MUTEX_MOD_DISP_GAMMA,
[DDP_COMPONENT_OVL0] = MT8167_MUTEX_MOD_DISP_OVL0, [DDP_COMPONENT_OVL0] = MT8167_MUTEX_MOD_DISP_OVL0,
[DDP_COMPONENT_OVL1] = MT8167_MUTEX_MOD_DISP_OVL1, [DDP_COMPONENT_OVL1] = MT8167_MUTEX_MOD_DISP_OVL1,
...@@ -233,7 +262,7 @@ static const unsigned int mt8183_mutex_mod[DDP_COMPONENT_ID_MAX] = { ...@@ -233,7 +262,7 @@ static const unsigned int mt8183_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_AAL0] = MT8183_MUTEX_MOD_DISP_AAL0, [DDP_COMPONENT_AAL0] = MT8183_MUTEX_MOD_DISP_AAL0,
[DDP_COMPONENT_CCORR] = MT8183_MUTEX_MOD_DISP_CCORR0, [DDP_COMPONENT_CCORR] = MT8183_MUTEX_MOD_DISP_CCORR0,
[DDP_COMPONENT_COLOR0] = MT8183_MUTEX_MOD_DISP_COLOR0, [DDP_COMPONENT_COLOR0] = MT8183_MUTEX_MOD_DISP_COLOR0,
[DDP_COMPONENT_DITHER] = MT8183_MUTEX_MOD_DISP_DITHER0, [DDP_COMPONENT_DITHER0] = MT8183_MUTEX_MOD_DISP_DITHER0,
[DDP_COMPONENT_GAMMA] = MT8183_MUTEX_MOD_DISP_GAMMA0, [DDP_COMPONENT_GAMMA] = MT8183_MUTEX_MOD_DISP_GAMMA0,
[DDP_COMPONENT_OVL0] = MT8183_MUTEX_MOD_DISP_OVL0, [DDP_COMPONENT_OVL0] = MT8183_MUTEX_MOD_DISP_OVL0,
[DDP_COMPONENT_OVL_2L0] = MT8183_MUTEX_MOD_DISP_OVL0_2L, [DDP_COMPONENT_OVL_2L0] = MT8183_MUTEX_MOD_DISP_OVL0_2L,
...@@ -247,7 +276,7 @@ static const unsigned int mt8186_mutex_mod[DDP_COMPONENT_ID_MAX] = { ...@@ -247,7 +276,7 @@ static const unsigned int mt8186_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_AAL0] = MT8186_MUTEX_MOD_DISP_AAL0, [DDP_COMPONENT_AAL0] = MT8186_MUTEX_MOD_DISP_AAL0,
[DDP_COMPONENT_CCORR] = MT8186_MUTEX_MOD_DISP_CCORR0, [DDP_COMPONENT_CCORR] = MT8186_MUTEX_MOD_DISP_CCORR0,
[DDP_COMPONENT_COLOR0] = MT8186_MUTEX_MOD_DISP_COLOR0, [DDP_COMPONENT_COLOR0] = MT8186_MUTEX_MOD_DISP_COLOR0,
[DDP_COMPONENT_DITHER] = MT8186_MUTEX_MOD_DISP_DITHER0, [DDP_COMPONENT_DITHER0] = MT8186_MUTEX_MOD_DISP_DITHER0,
[DDP_COMPONENT_GAMMA] = MT8186_MUTEX_MOD_DISP_GAMMA0, [DDP_COMPONENT_GAMMA] = MT8186_MUTEX_MOD_DISP_GAMMA0,
[DDP_COMPONENT_OVL0] = MT8186_MUTEX_MOD_DISP_OVL0, [DDP_COMPONENT_OVL0] = MT8186_MUTEX_MOD_DISP_OVL0,
[DDP_COMPONENT_OVL_2L0] = MT8186_MUTEX_MOD_DISP_OVL0_2L, [DDP_COMPONENT_OVL_2L0] = MT8186_MUTEX_MOD_DISP_OVL0_2L,
...@@ -260,7 +289,7 @@ static const unsigned int mt8192_mutex_mod[DDP_COMPONENT_ID_MAX] = { ...@@ -260,7 +289,7 @@ static const unsigned int mt8192_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_AAL0] = MT8192_MUTEX_MOD_DISP_AAL0, [DDP_COMPONENT_AAL0] = MT8192_MUTEX_MOD_DISP_AAL0,
[DDP_COMPONENT_CCORR] = MT8192_MUTEX_MOD_DISP_CCORR0, [DDP_COMPONENT_CCORR] = MT8192_MUTEX_MOD_DISP_CCORR0,
[DDP_COMPONENT_COLOR0] = MT8192_MUTEX_MOD_DISP_COLOR0, [DDP_COMPONENT_COLOR0] = MT8192_MUTEX_MOD_DISP_COLOR0,
[DDP_COMPONENT_DITHER] = MT8192_MUTEX_MOD_DISP_DITHER0, [DDP_COMPONENT_DITHER0] = MT8192_MUTEX_MOD_DISP_DITHER0,
[DDP_COMPONENT_GAMMA] = MT8192_MUTEX_MOD_DISP_GAMMA0, [DDP_COMPONENT_GAMMA] = MT8192_MUTEX_MOD_DISP_GAMMA0,
[DDP_COMPONENT_POSTMASK0] = MT8192_MUTEX_MOD_DISP_POSTMASK0, [DDP_COMPONENT_POSTMASK0] = MT8192_MUTEX_MOD_DISP_POSTMASK0,
[DDP_COMPONENT_OVL0] = MT8192_MUTEX_MOD_DISP_OVL0, [DDP_COMPONENT_OVL0] = MT8192_MUTEX_MOD_DISP_OVL0,
...@@ -270,7 +299,23 @@ static const unsigned int mt8192_mutex_mod[DDP_COMPONENT_ID_MAX] = { ...@@ -270,7 +299,23 @@ static const unsigned int mt8192_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_RDMA4] = MT8192_MUTEX_MOD_DISP_RDMA4, [DDP_COMPONENT_RDMA4] = MT8192_MUTEX_MOD_DISP_RDMA4,
}; };
static const unsigned int mt2712_mutex_sof[MUTEX_SOF_DSI3 + 1] = { static const unsigned int mt8195_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_OVL0] = MT8195_MUTEX_MOD_DISP_OVL0,
[DDP_COMPONENT_WDMA0] = MT8195_MUTEX_MOD_DISP_WDMA0,
[DDP_COMPONENT_RDMA0] = MT8195_MUTEX_MOD_DISP_RDMA0,
[DDP_COMPONENT_COLOR0] = MT8195_MUTEX_MOD_DISP_COLOR0,
[DDP_COMPONENT_CCORR] = MT8195_MUTEX_MOD_DISP_CCORR0,
[DDP_COMPONENT_AAL0] = MT8195_MUTEX_MOD_DISP_AAL0,
[DDP_COMPONENT_GAMMA] = MT8195_MUTEX_MOD_DISP_GAMMA0,
[DDP_COMPONENT_DITHER0] = MT8195_MUTEX_MOD_DISP_DITHER0,
[DDP_COMPONENT_MERGE0] = MT8195_MUTEX_MOD_DISP_VPP_MERGE,
[DDP_COMPONENT_DSC0] = MT8195_MUTEX_MOD_DISP_DSC_WRAP0_CORE0,
[DDP_COMPONENT_DSI0] = MT8195_MUTEX_MOD_DISP_DSI0,
[DDP_COMPONENT_PWM0] = MT8195_MUTEX_MOD_DISP_PWM0,
[DDP_COMPONENT_DP_INTF0] = MT8195_MUTEX_MOD_DISP_DP_INTF0,
};
static const unsigned int mt2712_mutex_sof[DDP_MUTEX_SOF_MAX] = {
[MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
[MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0, [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0,
[MUTEX_SOF_DSI1] = MUTEX_SOF_DSI1, [MUTEX_SOF_DSI1] = MUTEX_SOF_DSI1,
...@@ -280,7 +325,7 @@ static const unsigned int mt2712_mutex_sof[MUTEX_SOF_DSI3 + 1] = { ...@@ -280,7 +325,7 @@ static const unsigned int mt2712_mutex_sof[MUTEX_SOF_DSI3 + 1] = {
[MUTEX_SOF_DSI3] = MUTEX_SOF_DSI3, [MUTEX_SOF_DSI3] = MUTEX_SOF_DSI3,
}; };
static const unsigned int mt8167_mutex_sof[MUTEX_SOF_DSI3 + 1] = { static const unsigned int mt8167_mutex_sof[DDP_MUTEX_SOF_MAX] = {
[MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
[MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0, [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0,
[MUTEX_SOF_DPI0] = MT8167_MUTEX_SOF_DPI0, [MUTEX_SOF_DPI0] = MT8167_MUTEX_SOF_DPI0,
...@@ -288,7 +333,7 @@ static const unsigned int mt8167_mutex_sof[MUTEX_SOF_DSI3 + 1] = { ...@@ -288,7 +333,7 @@ static const unsigned int mt8167_mutex_sof[MUTEX_SOF_DSI3 + 1] = {
}; };
/* Add EOF setting so overlay hardware can receive frame done irq */ /* Add EOF setting so overlay hardware can receive frame done irq */
static const unsigned int mt8183_mutex_sof[MUTEX_SOF_DSI3 + 1] = { static const unsigned int mt8183_mutex_sof[DDP_MUTEX_SOF_MAX] = {
[MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
[MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0 | MT8183_MUTEX_EOF_DSI0, [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0 | MT8183_MUTEX_EOF_DSI0,
[MUTEX_SOF_DPI0] = MT8183_MUTEX_SOF_DPI0 | MT8183_MUTEX_EOF_DPI0, [MUTEX_SOF_DPI0] = MT8183_MUTEX_SOF_DPI0 | MT8183_MUTEX_EOF_DPI0,
...@@ -300,6 +345,26 @@ static const unsigned int mt8186_mutex_sof[MUTEX_SOF_DSI3 + 1] = { ...@@ -300,6 +345,26 @@ static const unsigned int mt8186_mutex_sof[MUTEX_SOF_DSI3 + 1] = {
[MUTEX_SOF_DPI0] = MT8186_MUTEX_SOF_DPI0 | MT8186_MUTEX_EOF_DPI0, [MUTEX_SOF_DPI0] = MT8186_MUTEX_SOF_DPI0 | MT8186_MUTEX_EOF_DPI0,
}; };
/*
* To support refresh mode(video mode), DISP_REG_MUTEX_SOF should
* select the EOF source and configure the EOF plus timing from the
* module that provides the timing signal.
* So that MUTEX can not only send a STREAM_DONE event to GCE
* but also detect the error at end of frame(EAEOF) when EOF signal
* arrives.
*/
static const unsigned int mt8195_mutex_sof[DDP_MUTEX_SOF_MAX] = {
[MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
[MUTEX_SOF_DSI0] = MT8195_MUTEX_SOF_DSI0 | MT8195_MUTEX_EOF_DSI0,
[MUTEX_SOF_DSI1] = MT8195_MUTEX_SOF_DSI1 | MT8195_MUTEX_EOF_DSI1,
[MUTEX_SOF_DPI0] = MT8195_MUTEX_SOF_DPI0 | MT8195_MUTEX_EOF_DPI0,
[MUTEX_SOF_DPI1] = MT8195_MUTEX_SOF_DPI1 | MT8195_MUTEX_EOF_DPI1,
[MUTEX_SOF_DP_INTF0] =
MT8195_MUTEX_SOF_DP_INTF0 | MT8195_MUTEX_EOF_DP_INTF0,
[MUTEX_SOF_DP_INTF1] =
MT8195_MUTEX_SOF_DP_INTF1 | MT8195_MUTEX_EOF_DP_INTF1,
};
static const struct mtk_mutex_data mt2701_mutex_driver_data = { static const struct mtk_mutex_data mt2701_mutex_driver_data = {
.mutex_mod = mt2701_mutex_mod, .mutex_mod = mt2701_mutex_mod,
.mutex_sof = mt2712_mutex_sof, .mutex_sof = mt2712_mutex_sof,
...@@ -351,6 +416,13 @@ static const struct mtk_mutex_data mt8192_mutex_driver_data = { ...@@ -351,6 +416,13 @@ static const struct mtk_mutex_data mt8192_mutex_driver_data = {
.mutex_sof_reg = MT8183_MUTEX0_SOF0, .mutex_sof_reg = MT8183_MUTEX0_SOF0,
}; };
static const struct mtk_mutex_data mt8195_mutex_driver_data = {
.mutex_mod = mt8195_mutex_mod,
.mutex_sof = mt8195_mutex_sof,
.mutex_mod_reg = MT8183_MUTEX0_MOD0,
.mutex_sof_reg = MT8183_MUTEX0_SOF0,
};
struct mtk_mutex *mtk_mutex_get(struct device *dev) struct mtk_mutex *mtk_mutex_get(struct device *dev)
{ {
struct mtk_mutex_ctx *mtx = dev_get_drvdata(dev); struct mtk_mutex_ctx *mtx = dev_get_drvdata(dev);
...@@ -423,6 +495,9 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex, ...@@ -423,6 +495,9 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
case DDP_COMPONENT_DPI1: case DDP_COMPONENT_DPI1:
sof_id = MUTEX_SOF_DPI1; sof_id = MUTEX_SOF_DPI1;
break; break;
case DDP_COMPONENT_DP_INTF0:
sof_id = MUTEX_SOF_DP_INTF0;
break;
default: default:
if (mtx->data->mutex_mod[id] < 32) { if (mtx->data->mutex_mod[id] < 32) {
offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg, offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
...@@ -462,6 +537,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex, ...@@ -462,6 +537,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
case DDP_COMPONENT_DSI3: case DDP_COMPONENT_DSI3:
case DDP_COMPONENT_DPI0: case DDP_COMPONENT_DPI0:
case DDP_COMPONENT_DPI1: case DDP_COMPONENT_DPI1:
case DDP_COMPONENT_DP_INTF0:
writel_relaxed(MUTEX_SOF_SINGLE_MODE, writel_relaxed(MUTEX_SOF_SINGLE_MODE,
mtx->regs + mtx->regs +
DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg,
...@@ -587,6 +663,8 @@ static const struct of_device_id mutex_driver_dt_match[] = { ...@@ -587,6 +663,8 @@ static const struct of_device_id mutex_driver_dt_match[] = {
.data = &mt8186_mutex_driver_data}, .data = &mt8186_mutex_driver_data},
{ .compatible = "mediatek,mt8192-disp-mutex", { .compatible = "mediatek,mt8192-disp-mutex",
.data = &mt8192_mutex_driver_data}, .data = &mt8192_mutex_driver_data},
{ .compatible = "mediatek,mt8195-disp-mutex",
.data = &mt8195_mutex_driver_data},
{}, {},
}; };
MODULE_DEVICE_TABLE(of, mutex_driver_dt_match); MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);
......
...@@ -268,8 +268,6 @@ int cmdq_pkt_finalize(struct cmdq_pkt *pkt); ...@@ -268,8 +268,6 @@ int cmdq_pkt_finalize(struct cmdq_pkt *pkt);
* cmdq_pkt_flush_async() - trigger CMDQ to asynchronously execute the CMDQ * cmdq_pkt_flush_async() - trigger CMDQ to asynchronously execute the CMDQ
* packet and call back at the end of done packet * packet and call back at the end of done packet
* @pkt: the CMDQ packet * @pkt: the CMDQ packet
* @cb: called at the end of done packet
* @data: this data will pass back to cb
* *
* Return: 0 for success; else the error code is returned * Return: 0 for success; else the error code is returned
* *
...@@ -277,7 +275,6 @@ int cmdq_pkt_finalize(struct cmdq_pkt *pkt); ...@@ -277,7 +275,6 @@ int cmdq_pkt_finalize(struct cmdq_pkt *pkt);
* at the end of done packet. Note that this is an ASYNC function. When the * at the end of done packet. Note that this is an ASYNC function. When the
* function returned, it may or may not be finished. * function returned, it may or may not be finished.
*/ */
int cmdq_pkt_flush_async(struct cmdq_pkt *pkt, cmdq_async_flush_cb cb, int cmdq_pkt_flush_async(struct cmdq_pkt *pkt);
void *data);
#endif /* __MTK_CMDQ_H__ */ #endif /* __MTK_CMDQ_H__ */
...@@ -17,13 +17,25 @@ enum mtk_ddp_comp_id { ...@@ -17,13 +17,25 @@ enum mtk_ddp_comp_id {
DDP_COMPONENT_COLOR0, DDP_COMPONENT_COLOR0,
DDP_COMPONENT_COLOR1, DDP_COMPONENT_COLOR1,
DDP_COMPONENT_DITHER, DDP_COMPONENT_DITHER,
DDP_COMPONENT_DITHER0 = DDP_COMPONENT_DITHER,
DDP_COMPONENT_DITHER1,
DDP_COMPONENT_DP_INTF0,
DDP_COMPONENT_DP_INTF1,
DDP_COMPONENT_DPI0, DDP_COMPONENT_DPI0,
DDP_COMPONENT_DPI1, DDP_COMPONENT_DPI1,
DDP_COMPONENT_DSC0,
DDP_COMPONENT_DSC1,
DDP_COMPONENT_DSI0, DDP_COMPONENT_DSI0,
DDP_COMPONENT_DSI1, DDP_COMPONENT_DSI1,
DDP_COMPONENT_DSI2, DDP_COMPONENT_DSI2,
DDP_COMPONENT_DSI3, DDP_COMPONENT_DSI3,
DDP_COMPONENT_GAMMA, DDP_COMPONENT_GAMMA,
DDP_COMPONENT_MERGE0,
DDP_COMPONENT_MERGE1,
DDP_COMPONENT_MERGE2,
DDP_COMPONENT_MERGE3,
DDP_COMPONENT_MERGE4,
DDP_COMPONENT_MERGE5,
DDP_COMPONENT_OD0, DDP_COMPONENT_OD0,
DDP_COMPONENT_OD1, DDP_COMPONENT_OD1,
DDP_COMPONENT_OVL0, DDP_COMPONENT_OVL0,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment