Commit eb3991ef authored by Linus Torvalds's avatar Linus Torvalds

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

Pull ARM SoC fixes from Arnd Bergmann:
 "Too many fixes have accumulated in the soc tree, so this is a fairly
  large set. As usual, most of the fixes are for devicetree files, but
  there are also notable code changes for imx and omap regressions as
  well as some maintainer file updates.

  imx:
   - Fix an Ethernet issue on imx6ul-14x14-evk board that is caused by
     independent PHY reset.

   - Add missing `dma-coherent` property for LayerScape device trees to
     fix a kernel BUG report.

   - Use IRQCHIP_DECLARE for AVIC driver to fix a boot issue on i.MX25
     with fw_devlink=on.

   - Add missing I2C pinctrl entry for imx8mp-phyboard-pollux-rdk board
     to fix the broken I2C GPIO recovery support.

   - Add `fsl,use-minimum-ecc` property for imx6ull-myir-mys-6ulx-eval
     device tree to fix UBI filesystem mount failure.

  at91:
   - wrong phy address that blocks Ethernet use on boards with sama5d27
     SoM1

   - restrictive pin possibilities for sam9x60

  omap:
   - Fix ocp interconnect bus access error reporting for omap_l3_noc by
     setting IRQF_NO_THREAD

   - Fix changed mmc slot order regression by adding mmc aliases for
     am335x

   - Fix dra7 reboot regression caused by invalid pcie reset map

   - Fix smartreflex init regression caused by dropped legacy data

   - Fix ti-sysc driver warning on unbind if reset is not deasserted

   - Fix flakey reset deassert for dra7 iva

  stm32:
   - MAINTAINER file updates

  broadcom:
   - brcmstb SoC ID build fix

   - MAINTAINER file updates"

* tag 'soc-fixes-5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:
  MAINTAINERS: Add Alain Volmat as STM32 I2C/SMBUS maintainer
  MAINTAINERS: Remove Vincent Abriou for STM/STI DRM drivers.
  MAINTAINERS: Update some st.com email addresses to foss.st.com
  ARM: dts: imx6ull: fix ubi filesystem mount failed
  ARM: imx6ul-14x14-evk: Do not reset the Ethernet PHYs independently
  arm64: dts: imx8mp-phyboard-pollux-rdk: Add missing pinctrl entry
  arm64: dts: ls1012a: mark crypto engine dma coherent
  arm64: dts: ls1043a: mark crypto engine dma coherent
  arm64: dts: ls1046a: mark crypto engine dma coherent
  ARM: imx: avic: Convert to using IRQCHIP_DECLARE
  ARM: dts: at91: sam9x60: fix mux-mask to match product's datasheet
  ARM: dts: at91: sam9x60: fix mux-mask for PA7 so it can be set to A, B and C
  ARM: dts: at91-sama5d27_som1: fix phy address to 7
  soc: ti: omap-prm: Fix occasional abort on reset deassert for dra7 iva
  bus: ti-sysc: Fix warning on unbind if reset is not deasserted
  ARM: OMAP2+: Fix smartreflex init regression after dropping legacy data
  soc: ti: omap-prm: Fix reboot issue with invalid pcie reset map for dra7
  MAINTAINERS: rectify BROADCOM PMB (POWER MANAGEMENT BUS) DRIVER
  ARM: dts: am33xx: add aliases for mmc interfaces
  bus: omap_l3_noc: mark l3 irqs as IRQF_NO_THREAD
parents 6c20f6df 67335b8d
...@@ -2489,7 +2489,7 @@ N: sc27xx ...@@ -2489,7 +2489,7 @@ N: sc27xx
N: sc2731 N: sc2731
ARM/STI ARCHITECTURE ARM/STI ARCHITECTURE
M: Patrice Chotard <patrice.chotard@st.com> M: Patrice Chotard <patrice.chotard@foss.st.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
W: http://www.stlinux.com W: http://www.stlinux.com
...@@ -2522,7 +2522,7 @@ F: include/linux/remoteproc/st_slim_rproc.h ...@@ -2522,7 +2522,7 @@ F: include/linux/remoteproc/st_slim_rproc.h
ARM/STM32 ARCHITECTURE ARM/STM32 ARCHITECTURE
M: Maxime Coquelin <mcoquelin.stm32@gmail.com> M: Maxime Coquelin <mcoquelin.stm32@gmail.com>
M: Alexandre Torgue <alexandre.torgue@st.com> M: Alexandre Torgue <alexandre.torgue@foss.st.com>
L: linux-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers) L: linux-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers)
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
...@@ -3115,7 +3115,7 @@ C: irc://irc.oftc.net/bcache ...@@ -3115,7 +3115,7 @@ C: irc://irc.oftc.net/bcache
F: drivers/md/bcache/ F: drivers/md/bcache/
BDISP ST MEDIA DRIVER BDISP ST MEDIA DRIVER
M: Fabien Dessenne <fabien.dessenne@st.com> M: Fabien Dessenne <fabien.dessenne@foss.st.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Supported S: Supported
W: https://linuxtv.org W: https://linuxtv.org
...@@ -3675,7 +3675,7 @@ M: bcm-kernel-feedback-list@broadcom.com ...@@ -3675,7 +3675,7 @@ M: bcm-kernel-feedback-list@broadcom.com
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
S: Maintained S: Maintained
T: git git://github.com/broadcom/stblinux.git T: git git://github.com/broadcom/stblinux.git
F: drivers/soc/bcm/bcm-pmb.c F: drivers/soc/bcm/bcm63xx/bcm-pmb.c
F: include/dt-bindings/soc/bcm-pmb.h F: include/dt-bindings/soc/bcm-pmb.h
BROADCOM SPECIFIC AMBA DRIVER (BCMA) BROADCOM SPECIFIC AMBA DRIVER (BCMA)
...@@ -5080,7 +5080,7 @@ S: Maintained ...@@ -5080,7 +5080,7 @@ S: Maintained
F: drivers/platform/x86/dell/dell-wmi.c F: drivers/platform/x86/dell/dell-wmi.c
DELTA ST MEDIA DRIVER DELTA ST MEDIA DRIVER
M: Hugues Fruchet <hugues.fruchet@st.com> M: Hugues Fruchet <hugues.fruchet@foss.st.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Supported S: Supported
W: https://linuxtv.org W: https://linuxtv.org
...@@ -6006,7 +6006,6 @@ F: drivers/gpu/drm/rockchip/ ...@@ -6006,7 +6006,6 @@ F: drivers/gpu/drm/rockchip/
DRM DRIVERS FOR STI DRM DRIVERS FOR STI
M: Benjamin Gaignard <benjamin.gaignard@linaro.org> M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
M: Vincent Abriou <vincent.abriou@st.com>
L: dri-devel@lists.freedesktop.org L: dri-devel@lists.freedesktop.org
S: Maintained S: Maintained
T: git git://anongit.freedesktop.org/drm/drm-misc T: git git://anongit.freedesktop.org/drm/drm-misc
...@@ -6014,10 +6013,9 @@ F: Documentation/devicetree/bindings/display/st,stih4xx.txt ...@@ -6014,10 +6013,9 @@ F: Documentation/devicetree/bindings/display/st,stih4xx.txt
F: drivers/gpu/drm/sti F: drivers/gpu/drm/sti
DRM DRIVERS FOR STM DRM DRIVERS FOR STM
M: Yannick Fertre <yannick.fertre@st.com> M: Yannick Fertre <yannick.fertre@foss.st.com>
M: Philippe Cornu <philippe.cornu@st.com> M: Philippe Cornu <philippe.cornu@foss.st.com>
M: Benjamin Gaignard <benjamin.gaignard@linaro.org> M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
M: Vincent Abriou <vincent.abriou@st.com>
L: dri-devel@lists.freedesktop.org L: dri-devel@lists.freedesktop.org
S: Maintained S: Maintained
T: git git://anongit.freedesktop.org/drm/drm-misc T: git git://anongit.freedesktop.org/drm/drm-misc
...@@ -8230,7 +8228,7 @@ F: include/linux/hugetlb.h ...@@ -8230,7 +8228,7 @@ F: include/linux/hugetlb.h
F: mm/hugetlb.c F: mm/hugetlb.c
HVA ST MEDIA DRIVER HVA ST MEDIA DRIVER
M: Jean-Christophe Trotin <jean-christophe.trotin@st.com> M: Jean-Christophe Trotin <jean-christophe.trotin@foss.st.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Supported S: Supported
W: https://linuxtv.org W: https://linuxtv.org
...@@ -11165,7 +11163,7 @@ T: git git://linuxtv.org/media_tree.git ...@@ -11165,7 +11163,7 @@ T: git git://linuxtv.org/media_tree.git
F: drivers/media/dvb-frontends/stv6111* F: drivers/media/dvb-frontends/stv6111*
MEDIA DRIVERS FOR STM32 - DCMI MEDIA DRIVERS FOR STM32 - DCMI
M: Hugues Fruchet <hugues.fruchet@st.com> M: Hugues Fruchet <hugues.fruchet@foss.st.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Supported S: Supported
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
...@@ -16938,7 +16936,8 @@ F: Documentation/devicetree/bindings/media/i2c/st,st-mipid02.txt ...@@ -16938,7 +16936,8 @@ F: Documentation/devicetree/bindings/media/i2c/st,st-mipid02.txt
F: drivers/media/i2c/st-mipid02.c F: drivers/media/i2c/st-mipid02.c
ST STM32 I2C/SMBUS DRIVER ST STM32 I2C/SMBUS DRIVER
M: Pierre-Yves MORDRET <pierre-yves.mordret@st.com> M: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
M: Alain Volmat <alain.volmat@foss.st.com>
L: linux-i2c@vger.kernel.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
F: drivers/i2c/busses/i2c-stm32* F: drivers/i2c/busses/i2c-stm32*
...@@ -17063,7 +17062,7 @@ F: kernel/jump_label.c ...@@ -17063,7 +17062,7 @@ F: kernel/jump_label.c
F: kernel/static_call.c F: kernel/static_call.c
STI AUDIO (ASoC) DRIVERS STI AUDIO (ASoC) DRIVERS
M: Arnaud Pouliquen <arnaud.pouliquen@st.com> M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt F: Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt
...@@ -17083,15 +17082,15 @@ T: git git://linuxtv.org/media_tree.git ...@@ -17083,15 +17082,15 @@ T: git git://linuxtv.org/media_tree.git
F: drivers/media/usb/stk1160/ F: drivers/media/usb/stk1160/
STM32 AUDIO (ASoC) DRIVERS STM32 AUDIO (ASoC) DRIVERS
M: Olivier Moysan <olivier.moysan@st.com> M: Olivier Moysan <olivier.moysan@foss.st.com>
M: Arnaud Pouliquen <arnaud.pouliquen@st.com> M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml F: Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml
F: sound/soc/stm/ F: sound/soc/stm/
STM32 TIMER/LPTIMER DRIVERS STM32 TIMER/LPTIMER DRIVERS
M: Fabrice Gasnier <fabrice.gasnier@st.com> M: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
S: Maintained S: Maintained
F: Documentation/ABI/testing/*timer-stm32 F: Documentation/ABI/testing/*timer-stm32
F: Documentation/devicetree/bindings/*/*stm32-*timer* F: Documentation/devicetree/bindings/*/*stm32-*timer*
...@@ -17101,7 +17100,7 @@ F: include/linux/*/stm32-*tim* ...@@ -17101,7 +17100,7 @@ F: include/linux/*/stm32-*tim*
STMMAC ETHERNET DRIVER STMMAC ETHERNET DRIVER
M: Giuseppe Cavallaro <peppe.cavallaro@st.com> M: Giuseppe Cavallaro <peppe.cavallaro@st.com>
M: Alexandre Torgue <alexandre.torgue@st.com> M: Alexandre Torgue <alexandre.torgue@foss.st.com>
M: Jose Abreu <joabreu@synopsys.com> M: Jose Abreu <joabreu@synopsys.com>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
S: Supported S: Supported
......
...@@ -40,6 +40,9 @@ aliases { ...@@ -40,6 +40,9 @@ aliases {
ethernet1 = &cpsw_emac1; ethernet1 = &cpsw_emac1;
spi0 = &spi0; spi0 = &spi0;
spi1 = &spi1; spi1 = &spi1;
mmc0 = &mmc1;
mmc1 = &mmc2;
mmc2 = &mmc3;
}; };
cpus { cpus {
......
...@@ -334,14 +334,6 @@ ethernet-phy@0 { ...@@ -334,14 +334,6 @@ ethernet-phy@0 {
}; };
&pinctrl { &pinctrl {
atmel,mux-mask = <
/* A B C */
0xFFFFFE7F 0xC0E0397F 0xEF00019D /* pioA */
0x03FFFFFF 0x02FC7E68 0x00780000 /* pioB */
0xffffffff 0xF83FFFFF 0xB800F3FC /* pioC */
0x003FFFFF 0x003F8000 0x00000000 /* pioD */
>;
adc { adc {
pinctrl_adc_default: adc_default { pinctrl_adc_default: adc_default {
atmel,pins = <AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>; atmel,pins = <AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>;
......
...@@ -84,8 +84,8 @@ macb0: ethernet@f8008000 { ...@@ -84,8 +84,8 @@ macb0: ethernet@f8008000 {
pinctrl-0 = <&pinctrl_macb0_default>; pinctrl-0 = <&pinctrl_macb0_default>;
phy-mode = "rmii"; phy-mode = "rmii";
ethernet-phy@0 { ethernet-phy@7 {
reg = <0x0>; reg = <0x7>;
interrupt-parent = <&pioA>; interrupt-parent = <&pioA>;
interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>; interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default"; pinctrl-names = "default";
......
...@@ -210,9 +210,6 @@ ethphy0: ethernet-phy@2 { ...@@ -210,9 +210,6 @@ ethphy0: ethernet-phy@2 {
micrel,led-mode = <1>; micrel,led-mode = <1>;
clocks = <&clks IMX6UL_CLK_ENET_REF>; clocks = <&clks IMX6UL_CLK_ENET_REF>;
clock-names = "rmii-ref"; clock-names = "rmii-ref";
reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>;
reset-deassert-us = <100>;
}; };
...@@ -222,9 +219,6 @@ ethphy1: ethernet-phy@1 { ...@@ -222,9 +219,6 @@ ethphy1: ethernet-phy@1 {
micrel,led-mode = <1>; micrel,led-mode = <1>;
clocks = <&clks IMX6UL_CLK_ENET2_REF>; clocks = <&clks IMX6UL_CLK_ENET2_REF>;
clock-names = "rmii-ref"; clock-names = "rmii-ref";
reset-gpios = <&gpio_spi 2 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>;
reset-deassert-us = <100>;
}; };
}; };
}; };
...@@ -243,6 +237,22 @@ &can2 { ...@@ -243,6 +237,22 @@ &can2 {
status = "okay"; status = "okay";
}; };
&gpio_spi {
eth0-phy-hog {
gpio-hog;
gpios = <1 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "eth0-phy";
};
eth1-phy-hog {
gpio-hog;
gpios = <2 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "eth1-phy";
};
};
&i2c1 { &i2c1 {
clock-frequency = <100000>; clock-frequency = <100000>;
pinctrl-names = "default"; pinctrl-names = "default";
......
...@@ -14,5 +14,6 @@ / { ...@@ -14,5 +14,6 @@ / {
}; };
&gpmi { &gpmi {
fsl,use-minimum-ecc;
status = "okay"; status = "okay";
}; };
...@@ -606,6 +606,15 @@ pinctrl: pinctrl@fffff400 { ...@@ -606,6 +606,15 @@ pinctrl: pinctrl@fffff400 {
compatible = "microchip,sam9x60-pinctrl", "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; compatible = "microchip,sam9x60-pinctrl", "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus";
ranges = <0xfffff400 0xfffff400 0x800>; ranges = <0xfffff400 0xfffff400 0x800>;
/* mux-mask corresponding to sam9x60 SoC in TFBGA228L package */
atmel,mux-mask = <
/* A B C */
0xffffffff 0xffe03fff 0xef00019d /* pioA */
0x03ffffff 0x02fc7e7f 0x00780000 /* pioB */
0xffffffff 0xffffffff 0xf83fffff /* pioC */
0x003fffff 0x003f8000 0x00000000 /* pioD */
>;
pioA: gpio@fffff400 { pioA: gpio@fffff400 {
compatible = "microchip,sam9x60-gpio", "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; compatible = "microchip,sam9x60-gpio", "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
reg = <0xfffff400 0x200>; reg = <0xfffff400 0x200>;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqdomain.h> #include <linux/irqdomain.h>
#include <linux/irqchip.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
...@@ -162,7 +163,7 @@ static void __exception_irq_entry avic_handle_irq(struct pt_regs *regs) ...@@ -162,7 +163,7 @@ static void __exception_irq_entry avic_handle_irq(struct pt_regs *regs)
* interrupts. It registers the interrupt enable and disable functions * interrupts. It registers the interrupt enable and disable functions
* to the kernel for each interrupt source. * to the kernel for each interrupt source.
*/ */
void __init mxc_init_irq(void __iomem *irqbase) static void __init mxc_init_irq(void __iomem *irqbase)
{ {
struct device_node *np; struct device_node *np;
int irq_base; int irq_base;
...@@ -220,3 +221,16 @@ void __init mxc_init_irq(void __iomem *irqbase) ...@@ -220,3 +221,16 @@ void __init mxc_init_irq(void __iomem *irqbase)
printk(KERN_INFO "MXC IRQ initialized\n"); printk(KERN_INFO "MXC IRQ initialized\n");
} }
static int __init imx_avic_init(struct device_node *node,
struct device_node *parent)
{
void __iomem *avic_base;
avic_base = of_iomap(node, 0);
BUG_ON(!avic_base);
mxc_init_irq(avic_base);
return 0;
}
IRQCHIP_DECLARE(imx_avic, "fsl,avic", imx_avic_init);
...@@ -22,7 +22,6 @@ void mx35_map_io(void); ...@@ -22,7 +22,6 @@ void mx35_map_io(void);
void imx21_init_early(void); void imx21_init_early(void);
void imx31_init_early(void); void imx31_init_early(void);
void imx35_init_early(void); void imx35_init_early(void);
void mxc_init_irq(void __iomem *);
void mx31_init_irq(void); void mx31_init_irq(void);
void mx35_init_irq(void); void mx35_init_irq(void);
void mxc_set_cpu_type(unsigned int type); void mxc_set_cpu_type(unsigned int type);
......
...@@ -17,16 +17,6 @@ static void __init imx1_init_early(void) ...@@ -17,16 +17,6 @@ static void __init imx1_init_early(void)
mxc_set_cpu_type(MXC_CPU_MX1); mxc_set_cpu_type(MXC_CPU_MX1);
} }
static void __init imx1_init_irq(void)
{
void __iomem *avic_addr;
avic_addr = ioremap(MX1_AVIC_ADDR, SZ_4K);
WARN_ON(!avic_addr);
mxc_init_irq(avic_addr);
}
static const char * const imx1_dt_board_compat[] __initconst = { static const char * const imx1_dt_board_compat[] __initconst = {
"fsl,imx1", "fsl,imx1",
NULL NULL
...@@ -34,7 +24,6 @@ static const char * const imx1_dt_board_compat[] __initconst = { ...@@ -34,7 +24,6 @@ static const char * const imx1_dt_board_compat[] __initconst = {
DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)") DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)")
.init_early = imx1_init_early, .init_early = imx1_init_early,
.init_irq = imx1_init_irq,
.dt_compat = imx1_dt_board_compat, .dt_compat = imx1_dt_board_compat,
.restart = mxc_restart, .restart = mxc_restart,
MACHINE_END MACHINE_END
...@@ -22,17 +22,6 @@ static void __init imx25_dt_init(void) ...@@ -22,17 +22,6 @@ static void __init imx25_dt_init(void)
imx_aips_allow_unprivileged_access("fsl,imx25-aips"); imx_aips_allow_unprivileged_access("fsl,imx25-aips");
} }
static void __init mx25_init_irq(void)
{
struct device_node *np;
void __iomem *avic_base;
np = of_find_compatible_node(NULL, NULL, "fsl,avic");
avic_base = of_iomap(np, 0);
BUG_ON(!avic_base);
mxc_init_irq(avic_base);
}
static const char * const imx25_dt_board_compat[] __initconst = { static const char * const imx25_dt_board_compat[] __initconst = {
"fsl,imx25", "fsl,imx25",
NULL NULL
...@@ -42,6 +31,5 @@ DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") ...@@ -42,6 +31,5 @@ DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")
.init_early = imx25_init_early, .init_early = imx25_init_early,
.init_machine = imx25_dt_init, .init_machine = imx25_dt_init,
.init_late = imx25_pm_init, .init_late = imx25_pm_init,
.init_irq = mx25_init_irq,
.dt_compat = imx25_dt_board_compat, .dt_compat = imx25_dt_board_compat,
MACHINE_END MACHINE_END
...@@ -56,17 +56,6 @@ static void __init imx27_init_early(void) ...@@ -56,17 +56,6 @@ static void __init imx27_init_early(void)
mxc_set_cpu_type(MXC_CPU_MX27); mxc_set_cpu_type(MXC_CPU_MX27);
} }
static void __init mx27_init_irq(void)
{
void __iomem *avic_base;
struct device_node *np;
np = of_find_compatible_node(NULL, NULL, "fsl,avic");
avic_base = of_iomap(np, 0);
BUG_ON(!avic_base);
mxc_init_irq(avic_base);
}
static const char * const imx27_dt_board_compat[] __initconst = { static const char * const imx27_dt_board_compat[] __initconst = {
"fsl,imx27", "fsl,imx27",
NULL NULL
...@@ -75,7 +64,6 @@ static const char * const imx27_dt_board_compat[] __initconst = { ...@@ -75,7 +64,6 @@ static const char * const imx27_dt_board_compat[] __initconst = {
DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)") DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)")
.map_io = mx27_map_io, .map_io = mx27_map_io,
.init_early = imx27_init_early, .init_early = imx27_init_early,
.init_irq = mx27_init_irq,
.init_late = imx27_pm_init, .init_late = imx27_pm_init,
.dt_compat = imx27_dt_board_compat, .dt_compat = imx27_dt_board_compat,
MACHINE_END MACHINE_END
...@@ -14,6 +14,5 @@ static const char * const imx31_dt_board_compat[] __initconst = { ...@@ -14,6 +14,5 @@ static const char * const imx31_dt_board_compat[] __initconst = {
DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)") DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)")
.map_io = mx31_map_io, .map_io = mx31_map_io,
.init_early = imx31_init_early, .init_early = imx31_init_early,
.init_irq = mx31_init_irq,
.dt_compat = imx31_dt_board_compat, .dt_compat = imx31_dt_board_compat,
MACHINE_END MACHINE_END
...@@ -27,6 +27,5 @@ DT_MACHINE_START(IMX35_DT, "Freescale i.MX35 (Device Tree Support)") ...@@ -27,6 +27,5 @@ DT_MACHINE_START(IMX35_DT, "Freescale i.MX35 (Device Tree Support)")
.l2c_aux_mask = ~0, .l2c_aux_mask = ~0,
.map_io = mx35_map_io, .map_io = mx35_map_io,
.init_early = imx35_init_early, .init_early = imx35_init_early,
.init_irq = mx35_init_irq,
.dt_compat = imx35_dt_board_compat, .dt_compat = imx35_dt_board_compat,
MACHINE_END MACHINE_END
...@@ -109,18 +109,6 @@ void __init imx31_init_early(void) ...@@ -109,18 +109,6 @@ void __init imx31_init_early(void)
mx3_ccm_base = of_iomap(np, 0); mx3_ccm_base = of_iomap(np, 0);
BUG_ON(!mx3_ccm_base); BUG_ON(!mx3_ccm_base);
} }
void __init mx31_init_irq(void)
{
void __iomem *avic_base;
struct device_node *np;
np = of_find_compatible_node(NULL, NULL, "fsl,imx31-avic");
avic_base = of_iomap(np, 0);
BUG_ON(!avic_base);
mxc_init_irq(avic_base);
}
#endif /* ifdef CONFIG_SOC_IMX31 */ #endif /* ifdef CONFIG_SOC_IMX31 */
#ifdef CONFIG_SOC_IMX35 #ifdef CONFIG_SOC_IMX35
...@@ -158,16 +146,4 @@ void __init imx35_init_early(void) ...@@ -158,16 +146,4 @@ void __init imx35_init_early(void)
mx3_ccm_base = of_iomap(np, 0); mx3_ccm_base = of_iomap(np, 0);
BUG_ON(!mx3_ccm_base); BUG_ON(!mx3_ccm_base);
} }
void __init mx35_init_irq(void)
{
void __iomem *avic_base;
struct device_node *np;
np = of_find_compatible_node(NULL, NULL, "fsl,imx35-avic");
avic_base = of_iomap(np, 0);
BUG_ON(!avic_base);
mxc_init_irq(avic_base);
}
#endif /* ifdef CONFIG_SOC_IMX35 */ #endif /* ifdef CONFIG_SOC_IMX35 */
...@@ -88,34 +88,26 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data, ...@@ -88,34 +88,26 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
extern struct omap_sr_data omap_sr_pdata[]; extern struct omap_sr_data omap_sr_pdata[];
static int __init sr_dev_init(struct omap_hwmod *oh, void *user) static int __init sr_init_by_name(const char *name, const char *voltdm)
{ {
struct omap_sr_data *sr_data = NULL; struct omap_sr_data *sr_data = NULL;
struct omap_volt_data *volt_data; struct omap_volt_data *volt_data;
struct omap_smartreflex_dev_attr *sr_dev_attr;
static int i; static int i;
if (!strncmp(oh->name, "smartreflex_mpu_iva", 20) || if (!strncmp(name, "smartreflex_mpu_iva", 20) ||
!strncmp(oh->name, "smartreflex_mpu", 16)) !strncmp(name, "smartreflex_mpu", 16))
sr_data = &omap_sr_pdata[OMAP_SR_MPU]; sr_data = &omap_sr_pdata[OMAP_SR_MPU];
else if (!strncmp(oh->name, "smartreflex_core", 17)) else if (!strncmp(name, "smartreflex_core", 17))
sr_data = &omap_sr_pdata[OMAP_SR_CORE]; sr_data = &omap_sr_pdata[OMAP_SR_CORE];
else if (!strncmp(oh->name, "smartreflex_iva", 16)) else if (!strncmp(name, "smartreflex_iva", 16))
sr_data = &omap_sr_pdata[OMAP_SR_IVA]; sr_data = &omap_sr_pdata[OMAP_SR_IVA];
if (!sr_data) { if (!sr_data) {
pr_err("%s: Unknown instance %s\n", __func__, oh->name); pr_err("%s: Unknown instance %s\n", __func__, name);
return -EINVAL; return -EINVAL;
} }
sr_dev_attr = (struct omap_smartreflex_dev_attr *)oh->dev_attr; sr_data->name = name;
if (!sr_dev_attr || !sr_dev_attr->sensor_voltdm_name) {
pr_err("%s: No voltage domain specified for %s. Cannot initialize\n",
__func__, oh->name);
goto exit;
}
sr_data->name = oh->name;
if (cpu_is_omap343x()) if (cpu_is_omap343x())
sr_data->ip_type = 1; sr_data->ip_type = 1;
else else
...@@ -136,10 +128,10 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user) ...@@ -136,10 +128,10 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
} }
} }
sr_data->voltdm = voltdm_lookup(sr_dev_attr->sensor_voltdm_name); sr_data->voltdm = voltdm_lookup(voltdm);
if (!sr_data->voltdm) { if (!sr_data->voltdm) {
pr_err("%s: Unable to get voltage domain pointer for VDD %s\n", pr_err("%s: Unable to get voltage domain pointer for VDD %s\n",
__func__, sr_dev_attr->sensor_voltdm_name); __func__, voltdm);
goto exit; goto exit;
} }
...@@ -160,6 +152,20 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user) ...@@ -160,6 +152,20 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
return 0; return 0;
} }
static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
{
struct omap_smartreflex_dev_attr *sr_dev_attr;
sr_dev_attr = (struct omap_smartreflex_dev_attr *)oh->dev_attr;
if (!sr_dev_attr || !sr_dev_attr->sensor_voltdm_name) {
pr_err("%s: No voltage domain specified for %s. Cannot initialize\n",
__func__, oh->name);
return 0;
}
return sr_init_by_name(oh->name, sr_dev_attr->sensor_voltdm_name);
}
/* /*
* API to be called from board files to enable smartreflex * API to be called from board files to enable smartreflex
* autocompensation at init. * autocompensation at init.
...@@ -169,7 +175,42 @@ void __init omap_enable_smartreflex_on_init(void) ...@@ -169,7 +175,42 @@ void __init omap_enable_smartreflex_on_init(void)
sr_enable_on_init = true; sr_enable_on_init = true;
} }
static const char * const omap4_sr_instances[] = {
"mpu",
"iva",
"core",
};
static const char * const dra7_sr_instances[] = {
"mpu",
"core",
};
int __init omap_devinit_smartreflex(void) int __init omap_devinit_smartreflex(void)
{ {
const char * const *sr_inst;
int i, nr_sr = 0;
if (soc_is_omap44xx()) {
sr_inst = omap4_sr_instances;
nr_sr = ARRAY_SIZE(omap4_sr_instances);
} else if (soc_is_dra7xx()) {
sr_inst = dra7_sr_instances;
nr_sr = ARRAY_SIZE(dra7_sr_instances);
}
if (nr_sr) {
const char *name, *voltdm;
for (i = 0; i < nr_sr; i++) {
name = kasprintf(GFP_KERNEL, "smartreflex_%s", sr_inst[i]);
voltdm = sr_inst[i];
sr_init_by_name(name, voltdm);
}
return 0;
}
return omap_hwmod_for_each_by_class("smartreflex", sr_dev_init, NULL); return omap_hwmod_for_each_by_class("smartreflex", sr_dev_init, NULL);
} }
...@@ -198,6 +198,7 @@ crypto: crypto@1700000 { ...@@ -198,6 +198,7 @@ crypto: crypto@1700000 {
ranges = <0x0 0x00 0x1700000 0x100000>; ranges = <0x0 0x00 0x1700000 0x100000>;
reg = <0x00 0x1700000 0x0 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>;
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
dma-coherent;
sec_jr0: jr@10000 { sec_jr0: jr@10000 {
compatible = "fsl,sec-v5.4-job-ring", compatible = "fsl,sec-v5.4-job-ring",
......
...@@ -348,6 +348,7 @@ crypto: crypto@1700000 { ...@@ -348,6 +348,7 @@ crypto: crypto@1700000 {
ranges = <0x0 0x00 0x1700000 0x100000>; ranges = <0x0 0x00 0x1700000 0x100000>;
reg = <0x00 0x1700000 0x0 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>;
interrupts = <0 75 0x4>; interrupts = <0 75 0x4>;
dma-coherent;
sec_jr0: jr@10000 { sec_jr0: jr@10000 {
compatible = "fsl,sec-v5.4-job-ring", compatible = "fsl,sec-v5.4-job-ring",
......
...@@ -354,6 +354,7 @@ crypto: crypto@1700000 { ...@@ -354,6 +354,7 @@ crypto: crypto@1700000 {
ranges = <0x0 0x00 0x1700000 0x100000>; ranges = <0x0 0x00 0x1700000 0x100000>;
reg = <0x00 0x1700000 0x0 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>;
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
dma-coherent;
sec_jr0: jr@10000 { sec_jr0: jr@10000 {
compatible = "fsl,sec-v5.4-job-ring", compatible = "fsl,sec-v5.4-job-ring",
......
...@@ -35,7 +35,7 @@ reg_usdhc2_vmmc: regulator-usdhc2 { ...@@ -35,7 +35,7 @@ reg_usdhc2_vmmc: regulator-usdhc2 {
&i2c2 { &i2c2 {
clock-frequency = <400000>; clock-frequency = <400000>;
pinctrl-names = "default"; pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c2>; pinctrl-0 = <&pinctrl_i2c2>;
pinctrl-1 = <&pinctrl_i2c2_gpio>; pinctrl-1 = <&pinctrl_i2c2_gpio>;
sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
......
...@@ -67,7 +67,7 @@ ethphy1: ethernet-phy@0 { ...@@ -67,7 +67,7 @@ ethphy1: ethernet-phy@0 {
&i2c1 { &i2c1 {
clock-frequency = <400000>; clock-frequency = <400000>;
pinctrl-names = "default"; pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c1>; pinctrl-0 = <&pinctrl_i2c1>;
pinctrl-1 = <&pinctrl_i2c1_gpio>; pinctrl-1 = <&pinctrl_i2c1_gpio>;
sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
......
...@@ -285,7 +285,7 @@ static int omap_l3_probe(struct platform_device *pdev) ...@@ -285,7 +285,7 @@ static int omap_l3_probe(struct platform_device *pdev)
*/ */
l3->debug_irq = platform_get_irq(pdev, 0); l3->debug_irq = platform_get_irq(pdev, 0);
ret = devm_request_irq(l3->dev, l3->debug_irq, l3_interrupt_handler, ret = devm_request_irq(l3->dev, l3->debug_irq, l3_interrupt_handler,
0x0, "l3-dbg-irq", l3); IRQF_NO_THREAD, "l3-dbg-irq", l3);
if (ret) { if (ret) {
dev_err(l3->dev, "request_irq failed for %d\n", dev_err(l3->dev, "request_irq failed for %d\n",
l3->debug_irq); l3->debug_irq);
...@@ -294,7 +294,7 @@ static int omap_l3_probe(struct platform_device *pdev) ...@@ -294,7 +294,7 @@ static int omap_l3_probe(struct platform_device *pdev)
l3->app_irq = platform_get_irq(pdev, 1); l3->app_irq = platform_get_irq(pdev, 1);
ret = devm_request_irq(l3->dev, l3->app_irq, l3_interrupt_handler, ret = devm_request_irq(l3->dev, l3->app_irq, l3_interrupt_handler,
0x0, "l3-app-irq", l3); IRQF_NO_THREAD, "l3-app-irq", l3);
if (ret) if (ret)
dev_err(l3->dev, "request_irq failed for %d\n", l3->app_irq); dev_err(l3->dev, "request_irq failed for %d\n", l3->app_irq);
......
...@@ -3053,6 +3053,8 @@ static int sysc_remove(struct platform_device *pdev) ...@@ -3053,6 +3053,8 @@ static int sysc_remove(struct platform_device *pdev)
pm_runtime_put_sync(&pdev->dev); pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
if (!reset_control_status(ddata->rsts))
reset_control_assert(ddata->rsts); reset_control_assert(ddata->rsts);
unprepare: unprepare:
......
...@@ -332,7 +332,7 @@ static const struct omap_prm_data dra7_prm_data[] = { ...@@ -332,7 +332,7 @@ static const struct omap_prm_data dra7_prm_data[] = {
{ {
.name = "l3init", .base = 0x4ae07300, .name = "l3init", .base = 0x4ae07300,
.pwrstctrl = 0x0, .pwrstst = 0x4, .dmap = &omap_prm_alwon, .pwrstctrl = 0x0, .pwrstst = 0x4, .dmap = &omap_prm_alwon,
.rstctrl = 0x10, .rstst = 0x14, .rstmap = rst_map_012, .rstctrl = 0x10, .rstst = 0x14, .rstmap = rst_map_01,
.clkdm_name = "pcie" .clkdm_name = "pcie"
}, },
{ {
...@@ -830,8 +830,12 @@ static int omap_reset_deassert(struct reset_controller_dev *rcdev, ...@@ -830,8 +830,12 @@ static int omap_reset_deassert(struct reset_controller_dev *rcdev,
reset->prm->data->name, id); reset->prm->data->name, id);
exit: exit:
if (reset->clkdm) if (reset->clkdm) {
/* At least dra7 iva needs a delay before clkdm idle */
if (has_rstst)
udelay(1);
pdata->clkdm_allow_idle(reset->clkdm); pdata->clkdm_allow_idle(reset->clkdm);
}
return ret; return ret;
} }
......
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