Commit 93db8300 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'soc-fixes-5.16-3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM SoC fixes from Arnd Bergmann:
 "There are a number of DT fixes, mostly for mistakes found through
  static checking of the dts files again, as well as a couple of minor
  changes to address incorrect DT settings.

  For i.MX, there is yet another series of devitree changes to update
  RGMII delay settings for ethernet, which is an ongoing problem after
  some driver changes.

  For SoC specific device drivers, a number of smaller fixes came up:

   - i.MX SoC identification was incorrectly registered non-i.MX
     machines when the driver is built-in

   - One fix on imx8m-blk-ctrl driver to get i.MX8MM MIPI reset work
     properly

   - a few compile fixes for warnings that get in the way of -Werror

   - a string overflow in the scpi firmware driver

   - a boot failure with FORTIFY_SOURCE on Rockchips machines

   - broken error handling in the AMD TEE driver

   - a revert for a tegra reset driver commit that broke HDA"

* tag 'soc-fixes-5.16-3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (25 commits)
  soc/tegra: fuse: Fix bitwise vs. logical OR warning
  firmware: arm_scpi: Fix string overflow in SCPI genpd driver
  soc: imx: Register SoC device only on i.MX boards
  soc: imx: imx8m-blk-ctrl: Fix imx8mm mipi reset
  ARM: dts: imx6ull-pinfunc: Fix CSI_DATA07__ESAI_TX0 pad name
  arm64: dts: imx8mq: remove interconnect property from lcdif
  ARM: socfpga: dts: fix qspi node compatible
  arm64: dts: apple: add #interrupt-cells property to pinctrl nodes
  dt-bindings: i2c: apple,i2c: allow multiple compatibles
  arm64: meson: remove COMMON_CLK
  arm64: meson: fix dts for JetHub D1
  tee: amdtee: fix an IS_ERR() vs NULL bug
  arm64: dts: apple: change ethernet0 device type to ethernet
  arm64: dts: ten64: remove redundant interrupt declaration for gpio-keys
  arm64: dts: rockchip: fix poweroff on helios64
  arm64: dts: rockchip: fix audio-supply for Rock Pi 4
  arm64: dts: rockchip: fix rk3399-leez-p710 vcc3v3-lan supply
  arm64: dts: rockchip: fix rk3308-roc-cc vcc-sd supply
  arm64: dts: rockchip: remove mmc-hs400-enhanced-strobe from rk3399-khadas-edge
  ARM: rockchip: Use memcpy_toio instead of memcpy on smp bring-up
  ...
parents a52a8e9e 4bc73b7d
...@@ -20,9 +20,9 @@ allOf: ...@@ -20,9 +20,9 @@ allOf:
properties: properties:
compatible: compatible:
enum: items:
- apple,t8103-i2c - const: apple,t8103-i2c
- apple,i2c - const: apple,i2c
reg: reg:
maxItems: 1 maxItems: 1
...@@ -51,7 +51,7 @@ unevaluatedProperties: false ...@@ -51,7 +51,7 @@ unevaluatedProperties: false
examples: examples:
- | - |
i2c@35010000 { i2c@35010000 {
compatible = "apple,t8103-i2c"; compatible = "apple,t8103-i2c", "apple,i2c";
reg = <0x35010000 0x4000>; reg = <0x35010000 0x4000>;
interrupt-parent = <&aic>; interrupt-parent = <&aic>;
interrupts = <0 627 4>; interrupts = <0 627 4>;
......
...@@ -178,6 +178,8 @@ port@4 { ...@@ -178,6 +178,8 @@ port@4 {
label = "cpu"; label = "cpu";
ethernet = <&fec>; ethernet = <&fec>;
phy-mode = "rgmii-id"; phy-mode = "rgmii-id";
rx-internal-delay-ps = <2000>;
tx-internal-delay-ps = <2000>;
fixed-link { fixed-link {
speed = <100>; speed = <100>;
......
...@@ -82,6 +82,6 @@ ...@@ -82,6 +82,6 @@
#define MX6ULL_PAD_CSI_DATA04__ESAI_TX_FS 0x01F4 0x0480 0x0000 0x9 0x0 #define MX6ULL_PAD_CSI_DATA04__ESAI_TX_FS 0x01F4 0x0480 0x0000 0x9 0x0
#define MX6ULL_PAD_CSI_DATA05__ESAI_TX_CLK 0x01F8 0x0484 0x0000 0x9 0x0 #define MX6ULL_PAD_CSI_DATA05__ESAI_TX_CLK 0x01F8 0x0484 0x0000 0x9 0x0
#define MX6ULL_PAD_CSI_DATA06__ESAI_TX5_RX0 0x01FC 0x0488 0x0000 0x9 0x0 #define MX6ULL_PAD_CSI_DATA06__ESAI_TX5_RX0 0x01FC 0x0488 0x0000 0x9 0x0
#define MX6ULL_PAD_CSI_DATA07__ESAI_T0 0x0200 0x048C 0x0000 0x9 0x0 #define MX6ULL_PAD_CSI_DATA07__ESAI_TX0 0x0200 0x048C 0x0000 0x9 0x0
#endif /* __DTS_IMX6ULL_PINFUNC_H */ #endif /* __DTS_IMX6ULL_PINFUNC_H */
...@@ -91,6 +91,8 @@ port@4 { ...@@ -91,6 +91,8 @@ port@4 {
/* Internal port connected to eth2 */ /* Internal port connected to eth2 */
ethernet = <&enet2>; ethernet = <&enet2>;
phy-mode = "rgmii"; phy-mode = "rgmii";
rx-internal-delay-ps = <0>;
tx-internal-delay-ps = <0>;
reg = <4>; reg = <4>;
fixed-link { fixed-link {
......
...@@ -12,7 +12,7 @@ &qspi { ...@@ -12,7 +12,7 @@ &qspi {
flash0: n25q00@0 { flash0: n25q00@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q00aa"; compatible = "micron,mt25qu02g", "jedec,spi-nor";
reg = <0>; reg = <0>;
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
......
...@@ -119,7 +119,7 @@ &qspi { ...@@ -119,7 +119,7 @@ &qspi {
flash: flash@0 { flash: flash@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q256a"; compatible = "micron,n25q256a", "jedec,spi-nor";
reg = <0>; reg = <0>;
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
......
...@@ -124,7 +124,7 @@ &qspi { ...@@ -124,7 +124,7 @@ &qspi {
flash0: n25q00@0 { flash0: n25q00@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q00"; compatible = "micron,mt25qu02g", "jedec,spi-nor";
reg = <0>; /* chip select */ reg = <0>; /* chip select */
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
......
...@@ -169,7 +169,7 @@ &qspi { ...@@ -169,7 +169,7 @@ &qspi {
flash: flash@0 { flash: flash@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q00"; compatible = "micron,mt25qu02g", "jedec,spi-nor";
reg = <0>; reg = <0>;
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
......
...@@ -80,7 +80,7 @@ &qspi { ...@@ -80,7 +80,7 @@ &qspi {
flash: flash@0 { flash: flash@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q256a"; compatible = "micron,n25q256a", "jedec,spi-nor";
reg = <0>; reg = <0>;
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
m25p,fast-read; m25p,fast-read;
......
...@@ -116,7 +116,7 @@ &qspi { ...@@ -116,7 +116,7 @@ &qspi {
flash0: n25q512a@0 { flash0: n25q512a@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q512a"; compatible = "micron,n25q512a", "jedec,spi-nor";
reg = <0>; reg = <0>;
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
......
...@@ -224,7 +224,7 @@ &qspi { ...@@ -224,7 +224,7 @@ &qspi {
n25q128@0 { n25q128@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q128"; compatible = "micron,n25q128", "jedec,spi-nor";
reg = <0>; /* chip select */ reg = <0>; /* chip select */
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
m25p,fast-read; m25p,fast-read;
...@@ -241,7 +241,7 @@ n25q128@0 { ...@@ -241,7 +241,7 @@ n25q128@0 {
n25q00@1 { n25q00@1 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "n25q00"; compatible = "micron,mt25qu02g", "jedec,spi-nor";
reg = <1>; /* chip select */ reg = <1>; /* chip select */
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
m25p,fast-read; m25p,fast-read;
......
...@@ -189,7 +189,7 @@ static int __init rockchip_smp_prepare_sram(struct device_node *node) ...@@ -189,7 +189,7 @@ static int __init rockchip_smp_prepare_sram(struct device_node *node)
rockchip_boot_fn = __pa_symbol(secondary_startup); rockchip_boot_fn = __pa_symbol(secondary_startup);
/* copy the trampoline to sram, that runs during startup of the core */ /* copy the trampoline to sram, that runs during startup of the core */
memcpy(sram_base_addr, &rockchip_secondary_trampoline, trampoline_sz); memcpy_toio(sram_base_addr, &rockchip_secondary_trampoline, trampoline_sz);
flush_cache_all(); flush_cache_all();
outer_clean_range(0, trampoline_sz); outer_clean_range(0, trampoline_sz);
......
...@@ -161,7 +161,6 @@ config ARCH_MEDIATEK ...@@ -161,7 +161,6 @@ config ARCH_MEDIATEK
config ARCH_MESON config ARCH_MESON
bool "Amlogic Platforms" bool "Amlogic Platforms"
select COMMON_CLK
help help
This enables support for the arm64 based Amlogic SoCs This enables support for the arm64 based Amlogic SoCs
such as the s905, S905X/D, S912, A113X/D or S905X/D2 such as the s905, S905X/D, S912, A113X/D or S905X/D2
......
...@@ -134,7 +134,6 @@ cpu_critical: cpu-critical { ...@@ -134,7 +134,6 @@ cpu_critical: cpu-critical {
type = "critical"; type = "critical";
}; };
}; };
};
cpu_cooling_maps: cooling-maps { cpu_cooling_maps: cooling-maps {
map0 { map0 {
...@@ -154,6 +153,7 @@ map1 { ...@@ -154,6 +153,7 @@ map1 {
}; };
}; };
}; };
};
onewire { onewire {
compatible = "w1-gpio"; compatible = "w1-gpio";
......
...@@ -60,7 +60,7 @@ &port01 { ...@@ -60,7 +60,7 @@ &port01 {
&port02 { &port02 {
bus-range = <3 3>; bus-range = <3 3>;
ethernet0: pci@0,0 { ethernet0: ethernet@0,0 {
reg = <0x30000 0x0 0x0 0x0 0x0>; reg = <0x30000 0x0 0x0 0x0 0x0>;
/* To be filled by the loader */ /* To be filled by the loader */
local-mac-address = [00 10 18 00 00 00]; local-mac-address = [00 10 18 00 00 00];
......
...@@ -144,6 +144,7 @@ pinctrl_ap: pinctrl@23c100000 { ...@@ -144,6 +144,7 @@ pinctrl_ap: pinctrl@23c100000 {
apple,npins = <212>; apple,npins = <212>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>; interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 190 IRQ_TYPE_LEVEL_HIGH>, interrupts = <AIC_IRQ 190 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 191 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 191 IRQ_TYPE_LEVEL_HIGH>,
...@@ -170,6 +171,7 @@ pinctrl_aop: pinctrl@24a820000 { ...@@ -170,6 +171,7 @@ pinctrl_aop: pinctrl@24a820000 {
apple,npins = <42>; apple,npins = <42>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>; interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 268 IRQ_TYPE_LEVEL_HIGH>, interrupts = <AIC_IRQ 268 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 269 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 269 IRQ_TYPE_LEVEL_HIGH>,
...@@ -190,6 +192,7 @@ pinctrl_nub: pinctrl@23d1f0000 { ...@@ -190,6 +192,7 @@ pinctrl_nub: pinctrl@23d1f0000 {
apple,npins = <23>; apple,npins = <23>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>; interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 330 IRQ_TYPE_LEVEL_HIGH>, interrupts = <AIC_IRQ 330 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 331 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 331 IRQ_TYPE_LEVEL_HIGH>,
...@@ -210,6 +213,7 @@ pinctrl_smc: pinctrl@23e820000 { ...@@ -210,6 +213,7 @@ pinctrl_smc: pinctrl@23e820000 {
apple,npins = <16>; apple,npins = <16>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&aic>; interrupt-parent = <&aic>;
interrupts = <AIC_IRQ 391 IRQ_TYPE_LEVEL_HIGH>, interrupts = <AIC_IRQ 391 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ 392 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 392 IRQ_TYPE_LEVEL_HIGH>,
......
...@@ -38,7 +38,6 @@ buttons { ...@@ -38,7 +38,6 @@ buttons {
powerdn { powerdn {
label = "External Power Down"; label = "External Power Down";
gpios = <&gpio1 17 GPIO_ACTIVE_LOW>; gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
interrupts = <&gpio1 17 IRQ_TYPE_EDGE_FALLING>;
linux,code = <KEY_POWER>; linux,code = <KEY_POWER>;
}; };
...@@ -46,7 +45,6 @@ powerdn { ...@@ -46,7 +45,6 @@ powerdn {
admin { admin {
label = "ADMIN button"; label = "ADMIN button";
gpios = <&gpio3 8 GPIO_ACTIVE_HIGH>; gpios = <&gpio3 8 GPIO_ACTIVE_HIGH>;
interrupts = <&gpio3 8 IRQ_TYPE_EDGE_RISING>;
linux,code = <KEY_WPS_BUTTON>; linux,code = <KEY_WPS_BUTTON>;
}; };
}; };
......
...@@ -386,6 +386,8 @@ port@2 { ...@@ -386,6 +386,8 @@ port@2 {
reg = <2>; reg = <2>;
ethernet = <&dpmac17>; ethernet = <&dpmac17>;
phy-mode = "rgmii-id"; phy-mode = "rgmii-id";
rx-internal-delay-ps = <2000>;
tx-internal-delay-ps = <2000>;
fixed-link { fixed-link {
speed = <1000>; speed = <1000>;
...@@ -529,6 +531,8 @@ port@2 { ...@@ -529,6 +531,8 @@ port@2 {
reg = <2>; reg = <2>;
ethernet = <&dpmac18>; ethernet = <&dpmac18>;
phy-mode = "rgmii-id"; phy-mode = "rgmii-id";
rx-internal-delay-ps = <2000>;
tx-internal-delay-ps = <2000>;
fixed-link { fixed-link {
speed = <1000>; speed = <1000>;
......
...@@ -524,8 +524,6 @@ lcdif: lcd-controller@30320000 { ...@@ -524,8 +524,6 @@ lcdif: lcd-controller@30320000 {
<&clk IMX8MQ_VIDEO_PLL1>, <&clk IMX8MQ_VIDEO_PLL1>,
<&clk IMX8MQ_VIDEO_PLL1_OUT>; <&clk IMX8MQ_VIDEO_PLL1_OUT>;
assigned-clock-rates = <0>, <0>, <0>, <594000000>; assigned-clock-rates = <0>, <0>, <0>, <594000000>;
interconnects = <&noc IMX8MQ_ICM_LCDIF &noc IMX8MQ_ICS_DRAM>;
interconnect-names = "dram";
status = "disabled"; status = "disabled";
port@0 { port@0 {
......
...@@ -97,7 +97,7 @@ vcc_sd: vcc-sd { ...@@ -97,7 +97,7 @@ vcc_sd: vcc-sd {
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
regulator-boot-on; regulator-boot-on;
vim-supply = <&vcc_io>; vin-supply = <&vcc_io>;
}; };
vdd_core: vdd-core { vdd_core: vdd-core {
......
...@@ -705,7 +705,6 @@ &sdmmc { ...@@ -705,7 +705,6 @@ &sdmmc {
&sdhci { &sdhci {
bus-width = <8>; bus-width = <8>;
mmc-hs400-1_8v; mmc-hs400-1_8v;
mmc-hs400-enhanced-strobe;
non-removable; non-removable;
status = "okay"; status = "okay";
}; };
......
...@@ -276,6 +276,7 @@ rk808: pmic@1b { ...@@ -276,6 +276,7 @@ rk808: pmic@1b {
clock-output-names = "xin32k", "rk808-clkout2"; clock-output-names = "xin32k", "rk808-clkout2";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pmic_int_l>; pinctrl-0 = <&pmic_int_l>;
rockchip,system-power-controller;
vcc1-supply = <&vcc5v0_sys>; vcc1-supply = <&vcc5v0_sys>;
vcc2-supply = <&vcc5v0_sys>; vcc2-supply = <&vcc5v0_sys>;
vcc3-supply = <&vcc5v0_sys>; vcc3-supply = <&vcc5v0_sys>;
......
...@@ -55,7 +55,7 @@ vcc3v3_lan: vcc3v3-lan { ...@@ -55,7 +55,7 @@ vcc3v3_lan: vcc3v3-lan {
regulator-boot-on; regulator-boot-on;
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
vim-supply = <&vcc3v3_sys>; vin-supply = <&vcc3v3_sys>;
}; };
vcc3v3_sys: vcc3v3-sys { vcc3v3_sys: vcc3v3-sys {
......
...@@ -502,7 +502,7 @@ &io_domains { ...@@ -502,7 +502,7 @@ &io_domains {
status = "okay"; status = "okay";
bt656-supply = <&vcc_3v0>; bt656-supply = <&vcc_3v0>;
audio-supply = <&vcc_3v0>; audio-supply = <&vcc1v8_codec>;
sdmmc-supply = <&vcc_sdio>; sdmmc-supply = <&vcc_sdio>;
gpio1830-supply = <&vcc_3v0>; gpio1830-supply = <&vcc_3v0>;
}; };
......
...@@ -16,7 +16,6 @@ struct scpi_pm_domain { ...@@ -16,7 +16,6 @@ struct scpi_pm_domain {
struct generic_pm_domain genpd; struct generic_pm_domain genpd;
struct scpi_ops *ops; struct scpi_ops *ops;
u32 domain; u32 domain;
char name[30];
}; };
/* /*
...@@ -110,8 +109,13 @@ static int scpi_pm_domain_probe(struct platform_device *pdev) ...@@ -110,8 +109,13 @@ static int scpi_pm_domain_probe(struct platform_device *pdev)
scpi_pd->domain = i; scpi_pd->domain = i;
scpi_pd->ops = scpi_ops; scpi_pd->ops = scpi_ops;
sprintf(scpi_pd->name, "%pOFn.%d", np, i); scpi_pd->genpd.name = devm_kasprintf(dev, GFP_KERNEL,
scpi_pd->genpd.name = scpi_pd->name; "%pOFn.%d", np, i);
if (!scpi_pd->genpd.name) {
dev_err(dev, "Failed to allocate genpd name:%pOFn.%d\n",
np, i);
continue;
}
scpi_pd->genpd.power_off = scpi_pd_power_off; scpi_pd->genpd.power_off = scpi_pd_power_off;
scpi_pd->genpd.power_on = scpi_pd_power_on; scpi_pd->genpd.power_on = scpi_pd_power_on;
......
...@@ -77,13 +77,14 @@ static const char *get_filename(struct tegra_bpmp *bpmp, ...@@ -77,13 +77,14 @@ static const char *get_filename(struct tegra_bpmp *bpmp,
const char *root_path, *filename = NULL; const char *root_path, *filename = NULL;
char *root_path_buf; char *root_path_buf;
size_t root_len; size_t root_len;
size_t root_path_buf_len = 512;
root_path_buf = kzalloc(512, GFP_KERNEL); root_path_buf = kzalloc(root_path_buf_len, GFP_KERNEL);
if (!root_path_buf) if (!root_path_buf)
goto out; goto out;
root_path = dentry_path(bpmp->debugfs_mirror, root_path_buf, root_path = dentry_path(bpmp->debugfs_mirror, root_path_buf,
sizeof(root_path_buf)); root_path_buf_len);
if (IS_ERR(root_path)) if (IS_ERR(root_path))
goto out; goto out;
......
...@@ -20,7 +20,6 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc, ...@@ -20,7 +20,6 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc); struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
struct mrq_reset_request request; struct mrq_reset_request request;
struct tegra_bpmp_message msg; struct tegra_bpmp_message msg;
int err;
memset(&request, 0, sizeof(request)); memset(&request, 0, sizeof(request));
request.cmd = command; request.cmd = command;
...@@ -31,13 +30,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc, ...@@ -31,13 +30,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
msg.tx.data = &request; msg.tx.data = &request;
msg.tx.size = sizeof(request); msg.tx.size = sizeof(request);
err = tegra_bpmp_transfer(bpmp, &msg); return tegra_bpmp_transfer(bpmp, &msg);
if (err)
return err;
if (msg.rx.ret)
return -EINVAL;
return 0;
} }
static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc, static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#define BLK_SFT_RSTN 0x0 #define BLK_SFT_RSTN 0x0
#define BLK_CLK_EN 0x4 #define BLK_CLK_EN 0x4
#define BLK_MIPI_RESET_DIV 0x8 /* Mini/Nano DISPLAY_BLK_CTRL only */
struct imx8m_blk_ctrl_domain; struct imx8m_blk_ctrl_domain;
...@@ -36,6 +37,15 @@ struct imx8m_blk_ctrl_domain_data { ...@@ -36,6 +37,15 @@ struct imx8m_blk_ctrl_domain_data {
const char *gpc_name; const char *gpc_name;
u32 rst_mask; u32 rst_mask;
u32 clk_mask; u32 clk_mask;
/*
* i.MX8M Mini and Nano have a third DISPLAY_BLK_CTRL register
* which is used to control the reset for the MIPI Phy.
* Since it's only present in certain circumstances,
* an if-statement should be used before setting and clearing this
* register.
*/
u32 mipi_phy_rst_mask;
}; };
#define DOMAIN_MAX_CLKS 3 #define DOMAIN_MAX_CLKS 3
...@@ -78,6 +88,8 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd) ...@@ -78,6 +88,8 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd)
/* put devices into reset */ /* put devices into reset */
regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask);
if (data->mipi_phy_rst_mask)
regmap_clear_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask);
/* enable upstream and blk-ctrl clocks to allow reset to propagate */ /* enable upstream and blk-ctrl clocks to allow reset to propagate */
ret = clk_bulk_prepare_enable(data->num_clks, domain->clks); ret = clk_bulk_prepare_enable(data->num_clks, domain->clks);
...@@ -99,6 +111,8 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd) ...@@ -99,6 +111,8 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd)
/* release reset */ /* release reset */
regmap_set_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); regmap_set_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask);
if (data->mipi_phy_rst_mask)
regmap_set_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask);
/* disable upstream clocks */ /* disable upstream clocks */
clk_bulk_disable_unprepare(data->num_clks, domain->clks); clk_bulk_disable_unprepare(data->num_clks, domain->clks);
...@@ -120,6 +134,9 @@ static int imx8m_blk_ctrl_power_off(struct generic_pm_domain *genpd) ...@@ -120,6 +134,9 @@ static int imx8m_blk_ctrl_power_off(struct generic_pm_domain *genpd)
struct imx8m_blk_ctrl *bc = domain->bc; struct imx8m_blk_ctrl *bc = domain->bc;
/* put devices into reset and disable clocks */ /* put devices into reset and disable clocks */
if (data->mipi_phy_rst_mask)
regmap_clear_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask);
regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask);
regmap_clear_bits(bc->regmap, BLK_CLK_EN, data->clk_mask); regmap_clear_bits(bc->regmap, BLK_CLK_EN, data->clk_mask);
...@@ -480,6 +497,7 @@ static const struct imx8m_blk_ctrl_domain_data imx8mm_disp_blk_ctl_domain_data[] ...@@ -480,6 +497,7 @@ static const struct imx8m_blk_ctrl_domain_data imx8mm_disp_blk_ctl_domain_data[]
.gpc_name = "mipi-dsi", .gpc_name = "mipi-dsi",
.rst_mask = BIT(5), .rst_mask = BIT(5),
.clk_mask = BIT(8) | BIT(9), .clk_mask = BIT(8) | BIT(9),
.mipi_phy_rst_mask = BIT(17),
}, },
[IMX8MM_DISPBLK_PD_MIPI_CSI] = { [IMX8MM_DISPBLK_PD_MIPI_CSI] = {
.name = "dispblk-mipi-csi", .name = "dispblk-mipi-csi",
...@@ -488,6 +506,7 @@ static const struct imx8m_blk_ctrl_domain_data imx8mm_disp_blk_ctl_domain_data[] ...@@ -488,6 +506,7 @@ static const struct imx8m_blk_ctrl_domain_data imx8mm_disp_blk_ctl_domain_data[]
.gpc_name = "mipi-csi", .gpc_name = "mipi-csi",
.rst_mask = BIT(3) | BIT(4), .rst_mask = BIT(3) | BIT(4),
.clk_mask = BIT(10) | BIT(11), .clk_mask = BIT(10) | BIT(11),
.mipi_phy_rst_mask = BIT(16),
}, },
}; };
......
...@@ -36,6 +36,10 @@ static int __init imx_soc_device_init(void) ...@@ -36,6 +36,10 @@ static int __init imx_soc_device_init(void)
int ret; int ret;
int i; int i;
/* Return early if this is running on devices with different SoCs */
if (!__mxc_cpu_type)
return 0;
if (of_machine_is_compatible("fsl,ls1021a")) if (of_machine_is_compatible("fsl,ls1021a"))
return 0; return 0;
......
...@@ -320,7 +320,7 @@ static struct platform_driver tegra_fuse_driver = { ...@@ -320,7 +320,7 @@ static struct platform_driver tegra_fuse_driver = {
}; };
builtin_platform_driver(tegra_fuse_driver); builtin_platform_driver(tegra_fuse_driver);
bool __init tegra_fuse_read_spare(unsigned int spare) u32 __init tegra_fuse_read_spare(unsigned int spare)
{ {
unsigned int offset = fuse->soc->info->spare + spare * 4; unsigned int offset = fuse->soc->info->spare + spare * 4;
......
...@@ -65,7 +65,7 @@ struct tegra_fuse { ...@@ -65,7 +65,7 @@ struct tegra_fuse {
void tegra_init_revision(void); void tegra_init_revision(void);
void tegra_init_apbmisc(void); void tegra_init_apbmisc(void);
bool __init tegra_fuse_read_spare(unsigned int spare); u32 __init tegra_fuse_read_spare(unsigned int spare);
u32 __init tegra_fuse_read_early(unsigned int offset); u32 __init tegra_fuse_read_early(unsigned int offset);
u8 tegra_get_major_rev(void); u8 tegra_get_major_rev(void);
......
...@@ -203,9 +203,8 @@ static int copy_ta_binary(struct tee_context *ctx, void *ptr, void **ta, ...@@ -203,9 +203,8 @@ static int copy_ta_binary(struct tee_context *ctx, void *ptr, void **ta,
*ta_size = roundup(fw->size, PAGE_SIZE); *ta_size = roundup(fw->size, PAGE_SIZE);
*ta = (void *)__get_free_pages(GFP_KERNEL, get_order(*ta_size)); *ta = (void *)__get_free_pages(GFP_KERNEL, get_order(*ta_size));
if (IS_ERR(*ta)) { if (!*ta) {
pr_err("%s: get_free_pages failed 0x%llx\n", __func__, pr_err("%s: get_free_pages failed\n", __func__);
(u64)*ta);
rc = -ENOMEM; rc = -ENOMEM;
goto rel_fw; goto rel_fw;
} }
......
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