Commit 678e14c7 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull SoC fixes from Arnd Bergmann:
 "The device tree changes this time are all for NXP i.MX platforms,
  addressing issues with clocks and regulators on i.MX7 and i.MX8.

  The old OMAP2 based Nokia N8x0 tablet get a couple of code fixes for
  regressions that came in.

  The ARM SCMI and FF-A firmware interfaces get a couple of minor bug
  fixes.

  A regression fix for RISC-V cache management addresses a problem with
  probe order on Sifive cores"

* tag 'soc-fixes-6.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (23 commits)
  MAINTAINERS: Change Krzysztof Kozlowski's email address
  arm64: dts: imx8qm-ss-dma: fix can lpcg indices
  arm64: dts: imx8-ss-dma: fix can lpcg indices
  arm64: dts: imx8-ss-dma: fix adc lpcg indices
  arm64: dts: imx8-ss-dma: fix pwm lpcg indices
  arm64: dts: imx8-ss-dma: fix spi lpcg indices
  arm64: dts: imx8-ss-conn: fix usb lpcg indices
  arm64: dts: imx8-ss-lsio: fix pwm lpcg indices
  ARM: dts: imx7s-warp: Pass OV2680 link-frequencies
  ARM: dts: imx7-mba7: Use 'no-mmc' property
  arm64: dts: imx8-ss-conn: fix usdhc wrong lpcg clock order
  arm64: dts: freescale: imx8mp-venice-gw73xx-2x: fix USB vbus regulator
  arm64: dts: freescale: imx8mp-venice-gw72xx-2x: fix USB vbus regulator
  cache: sifive_ccache: Partially convert to a platform driver
  firmware: arm_scmi: Make raw debugfs entries non-seekable
  firmware: arm_scmi: Fix wrong fastchannel initialization
  firmware: arm_ffa: Fix the partition ID check in ffa_notification_info_get()
  ARM: OMAP2+: fix USB regression on Nokia N8x0
  mmc: omap: restore original power up/down steps
  mmc: omap: fix deferred probe
  ...
parents c7c4e130 011d79ef
...@@ -2707,7 +2707,7 @@ F: sound/soc/rockchip/ ...@@ -2707,7 +2707,7 @@ F: sound/soc/rockchip/
N: rockchip N: rockchip
ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
R: Alim Akhtar <alim.akhtar@samsung.com> R: Alim Akhtar <alim.akhtar@samsung.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
L: linux-samsung-soc@vger.kernel.org L: linux-samsung-soc@vger.kernel.org
...@@ -5555,7 +5555,7 @@ F: drivers/cpuidle/cpuidle-big_little.c ...@@ -5555,7 +5555,7 @@ F: drivers/cpuidle/cpuidle-big_little.c
CPUIDLE DRIVER - ARM EXYNOS CPUIDLE DRIVER - ARM EXYNOS
M: Daniel Lezcano <daniel.lezcano@linaro.org> M: Daniel Lezcano <daniel.lezcano@linaro.org>
M: Kukjin Kim <kgene@kernel.org> M: Kukjin Kim <kgene@kernel.org>
R: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> R: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
L: linux-samsung-soc@vger.kernel.org L: linux-samsung-soc@vger.kernel.org
S: Maintained S: Maintained
...@@ -8994,7 +8994,7 @@ F: drivers/i2c/muxes/i2c-mux-gpio.c ...@@ -8994,7 +8994,7 @@ F: drivers/i2c/muxes/i2c-mux-gpio.c
F: include/linux/platform_data/i2c-mux-gpio.h F: include/linux/platform_data/i2c-mux-gpio.h
GENERIC GPIO RESET DRIVER GENERIC GPIO RESET DRIVER
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
S: Maintained S: Maintained
F: drivers/reset/reset-gpio.c F: drivers/reset/reset-gpio.c
...@@ -13289,7 +13289,7 @@ F: drivers/iio/adc/max11205.c ...@@ -13289,7 +13289,7 @@ F: drivers/iio/adc/max11205.c
MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS
R: Iskren Chernev <iskren.chernev@gmail.com> R: Iskren Chernev <iskren.chernev@gmail.com>
R: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> R: Krzysztof Kozlowski <krzk@kernel.org>
R: Marek Szyprowski <m.szyprowski@samsung.com> R: Marek Szyprowski <m.szyprowski@samsung.com>
R: Matheus Castello <matheus@castello.eng.br> R: Matheus Castello <matheus@castello.eng.br>
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
...@@ -13299,7 +13299,7 @@ F: drivers/power/supply/max17040_battery.c ...@@ -13299,7 +13299,7 @@ F: drivers/power/supply/max17040_battery.c
MAXIM MAX17042 FAMILY FUEL GAUGE DRIVERS MAXIM MAX17042 FAMILY FUEL GAUGE DRIVERS
R: Hans de Goede <hdegoede@redhat.com> R: Hans de Goede <hdegoede@redhat.com>
R: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> R: Krzysztof Kozlowski <krzk@kernel.org>
R: Marek Szyprowski <m.szyprowski@samsung.com> R: Marek Szyprowski <m.szyprowski@samsung.com>
R: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm> R: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
R: Purism Kernel Team <kernel@puri.sm> R: Purism Kernel Team <kernel@puri.sm>
...@@ -13357,7 +13357,7 @@ F: Documentation/devicetree/bindings/power/supply/maxim,max77976.yaml ...@@ -13357,7 +13357,7 @@ F: Documentation/devicetree/bindings/power/supply/maxim,max77976.yaml
F: drivers/power/supply/max77976_charger.c F: drivers/power/supply/max77976_charger.c
MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
S: Maintained S: Maintained
B: mailto:linux-samsung-soc@vger.kernel.org B: mailto:linux-samsung-soc@vger.kernel.org
...@@ -13368,7 +13368,7 @@ F: drivers/power/supply/max77693_charger.c ...@@ -13368,7 +13368,7 @@ F: drivers/power/supply/max77693_charger.c
MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
M: Chanwoo Choi <cw00.choi@samsung.com> M: Chanwoo Choi <cw00.choi@samsung.com>
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained
B: mailto:linux-samsung-soc@vger.kernel.org B: mailto:linux-samsung-soc@vger.kernel.org
...@@ -14152,7 +14152,7 @@ F: mm/mm_init.c ...@@ -14152,7 +14152,7 @@ F: mm/mm_init.c
F: tools/testing/memblock/ F: tools/testing/memblock/
MEMORY CONTROLLER DRIVERS MEMORY CONTROLLER DRIVERS
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained
B: mailto:krzysztof.kozlowski@linaro.org B: mailto:krzysztof.kozlowski@linaro.org
...@@ -15533,7 +15533,7 @@ F: include/uapi/linux/nexthop.h ...@@ -15533,7 +15533,7 @@ F: include/uapi/linux/nexthop.h
F: net/ipv4/nexthop.c F: net/ipv4/nexthop.c
NFC SUBSYSTEM NFC SUBSYSTEM
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/net/nfc/ F: Documentation/devicetree/bindings/net/nfc/
...@@ -15910,7 +15910,7 @@ F: Documentation/devicetree/bindings/regulator/nxp,pf8x00-regulator.yaml ...@@ -15910,7 +15910,7 @@ F: Documentation/devicetree/bindings/regulator/nxp,pf8x00-regulator.yaml
F: drivers/regulator/pf8x00-regulator.c F: drivers/regulator/pf8x00-regulator.c
NXP PTN5150A CC LOGIC AND EXTCON DRIVER NXP PTN5150A CC LOGIC AND EXTCON DRIVER
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml F: Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml
...@@ -16521,7 +16521,7 @@ K: of_overlay_remove ...@@ -16521,7 +16521,7 @@ K: of_overlay_remove
OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
M: Rob Herring <robh@kernel.org> M: Rob Herring <robh@kernel.org>
M: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org> M: Krzysztof Kozlowski <krzk+dt@kernel.org>
M: Conor Dooley <conor+dt@kernel.org> M: Conor Dooley <conor+dt@kernel.org>
L: devicetree@vger.kernel.org L: devicetree@vger.kernel.org
S: Maintained S: Maintained
...@@ -17478,7 +17478,7 @@ F: Documentation/devicetree/bindings/pinctrl/renesas,* ...@@ -17478,7 +17478,7 @@ F: Documentation/devicetree/bindings/pinctrl/renesas,*
F: drivers/pinctrl/renesas/ F: drivers/pinctrl/renesas/
PIN CONTROLLER - SAMSUNG PIN CONTROLLER - SAMSUNG
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
M: Sylwester Nawrocki <s.nawrocki@samsung.com> M: Sylwester Nawrocki <s.nawrocki@samsung.com>
R: Alim Akhtar <alim.akhtar@samsung.com> R: Alim Akhtar <alim.akhtar@samsung.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
...@@ -19446,7 +19446,7 @@ F: Documentation/devicetree/bindings/sound/samsung* ...@@ -19446,7 +19446,7 @@ F: Documentation/devicetree/bindings/sound/samsung*
F: sound/soc/samsung/ F: sound/soc/samsung/
SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-crypto@vger.kernel.org L: linux-crypto@vger.kernel.org
L: linux-samsung-soc@vger.kernel.org L: linux-samsung-soc@vger.kernel.org
S: Maintained S: Maintained
...@@ -19481,7 +19481,7 @@ S: Maintained ...@@ -19481,7 +19481,7 @@ S: Maintained
F: drivers/platform/x86/samsung-laptop.c F: drivers/platform/x86/samsung-laptop.c
SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
L: linux-samsung-soc@vger.kernel.org L: linux-samsung-soc@vger.kernel.org
S: Maintained S: Maintained
...@@ -19507,7 +19507,7 @@ F: drivers/media/platform/samsung/s3c-camif/ ...@@ -19507,7 +19507,7 @@ F: drivers/media/platform/samsung/s3c-camif/
F: include/media/drv-intf/s3c_camif.h F: include/media/drv-intf/s3c_camif.h
SAMSUNG S3FWRN5 NFC DRIVER SAMSUNG S3FWRN5 NFC DRIVER
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/net/nfc/samsung,s3fwrn5.yaml F: Documentation/devicetree/bindings/net/nfc/samsung,s3fwrn5.yaml
F: drivers/nfc/s3fwrn5 F: drivers/nfc/s3fwrn5
...@@ -19528,7 +19528,7 @@ S: Supported ...@@ -19528,7 +19528,7 @@ S: Supported
F: drivers/media/i2c/s5k5baf.c F: drivers/media/i2c/s5k5baf.c
SAMSUNG S5P Security SubSystem (SSS) DRIVER SAMSUNG S5P Security SubSystem (SSS) DRIVER
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
M: Vladimir Zapolskiy <vz@mleia.com> M: Vladimir Zapolskiy <vz@mleia.com>
L: linux-crypto@vger.kernel.org L: linux-crypto@vger.kernel.org
L: linux-samsung-soc@vger.kernel.org L: linux-samsung-soc@vger.kernel.org
...@@ -19550,7 +19550,7 @@ F: Documentation/devicetree/bindings/media/samsung,fimc.yaml ...@@ -19550,7 +19550,7 @@ F: Documentation/devicetree/bindings/media/samsung,fimc.yaml
F: drivers/media/platform/samsung/exynos4-is/ F: drivers/media/platform/samsung/exynos4-is/
SAMSUNG SOC CLOCK DRIVERS SAMSUNG SOC CLOCK DRIVERS
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
M: Sylwester Nawrocki <s.nawrocki@samsung.com> M: Sylwester Nawrocki <s.nawrocki@samsung.com>
M: Chanwoo Choi <cw00.choi@samsung.com> M: Chanwoo Choi <cw00.choi@samsung.com>
R: Alim Akhtar <alim.akhtar@samsung.com> R: Alim Akhtar <alim.akhtar@samsung.com>
...@@ -19582,7 +19582,7 @@ F: drivers/net/ethernet/samsung/sxgbe/ ...@@ -19582,7 +19582,7 @@ F: drivers/net/ethernet/samsung/sxgbe/
SAMSUNG THERMAL DRIVER SAMSUNG THERMAL DRIVER
M: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> M: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
L: linux-samsung-soc@vger.kernel.org L: linux-samsung-soc@vger.kernel.org
S: Maintained S: Maintained
...@@ -23779,7 +23779,7 @@ S: Orphan ...@@ -23779,7 +23779,7 @@ S: Orphan
F: drivers/mmc/host/vub300.c F: drivers/mmc/host/vub300.c
W1 DALLAS'S 1-WIRE BUS W1 DALLAS'S 1-WIRE BUS
M: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> M: Krzysztof Kozlowski <krzk@kernel.org>
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/w1/ F: Documentation/devicetree/bindings/w1/
F: Documentation/w1/ F: Documentation/w1/
......
...@@ -666,7 +666,7 @@ &usdhc1 { ...@@ -666,7 +666,7 @@ &usdhc1 {
bus-width = <4>; bus-width = <4>;
no-1-8-v; no-1-8-v;
no-sdio; no-sdio;
no-emmc; no-mmc;
status = "okay"; status = "okay";
}; };
......
...@@ -210,6 +210,7 @@ ov2680_to_mipi: endpoint { ...@@ -210,6 +210,7 @@ ov2680_to_mipi: endpoint {
remote-endpoint = <&mipi_from_sensor>; remote-endpoint = <&mipi_from_sensor>;
clock-lanes = <0>; clock-lanes = <0>;
data-lanes = <1>; data-lanes = <1>;
link-frequencies = /bits/ 64 <330000000>;
}; };
}; };
}; };
......
...@@ -79,10 +79,8 @@ static struct musb_hdrc_platform_data tusb_data = { ...@@ -79,10 +79,8 @@ static struct musb_hdrc_platform_data tusb_data = {
static struct gpiod_lookup_table tusb_gpio_table = { static struct gpiod_lookup_table tusb_gpio_table = {
.dev_id = "musb-tusb", .dev_id = "musb-tusb",
.table = { .table = {
GPIO_LOOKUP("gpio-0-15", 0, "enable", GPIO_LOOKUP("gpio-0-31", 0, "enable", GPIO_ACTIVE_HIGH),
GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-32-63", 26, "int", GPIO_ACTIVE_HIGH),
GPIO_LOOKUP("gpio-48-63", 10, "int",
GPIO_ACTIVE_HIGH),
{ } { }
}, },
}; };
...@@ -140,12 +138,11 @@ static int slot1_cover_open; ...@@ -140,12 +138,11 @@ static int slot1_cover_open;
static int slot2_cover_open; static int slot2_cover_open;
static struct device *mmc_device; static struct device *mmc_device;
static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = { static struct gpiod_lookup_table nokia800_mmc_gpio_table = {
.dev_id = "mmci-omap.0", .dev_id = "mmci-omap.0",
.table = { .table = {
/* Slot switch, GPIO 96 */ /* Slot switch, GPIO 96 */
GPIO_LOOKUP("gpio-80-111", 16, GPIO_LOOKUP("gpio-96-127", 0, "switch", GPIO_ACTIVE_HIGH),
"switch", GPIO_ACTIVE_HIGH),
{ } { }
}, },
}; };
...@@ -153,12 +150,12 @@ static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = { ...@@ -153,12 +150,12 @@ static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = {
static struct gpiod_lookup_table nokia810_mmc_gpio_table = { static struct gpiod_lookup_table nokia810_mmc_gpio_table = {
.dev_id = "mmci-omap.0", .dev_id = "mmci-omap.0",
.table = { .table = {
/* Slot switch, GPIO 96 */
GPIO_LOOKUP("gpio-96-127", 0, "switch", GPIO_ACTIVE_HIGH),
/* Slot index 1, VSD power, GPIO 23 */ /* Slot index 1, VSD power, GPIO 23 */
GPIO_LOOKUP_IDX("gpio-16-31", 7, GPIO_LOOKUP_IDX("gpio-0-31", 23, "vsd", 1, GPIO_ACTIVE_HIGH),
"vsd", 1, GPIO_ACTIVE_HIGH),
/* Slot index 1, VIO power, GPIO 9 */ /* Slot index 1, VIO power, GPIO 9 */
GPIO_LOOKUP_IDX("gpio-0-15", 9, GPIO_LOOKUP_IDX("gpio-0-31", 9, "vio", 1, GPIO_ACTIVE_HIGH),
"vio", 1, GPIO_ACTIVE_HIGH),
{ } { }
}, },
}; };
...@@ -415,8 +412,6 @@ static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC]; ...@@ -415,8 +412,6 @@ static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
static void __init n8x0_mmc_init(void) static void __init n8x0_mmc_init(void)
{ {
gpiod_add_lookup_table(&nokia8xx_mmc_gpio_table);
if (board_is_n810()) { if (board_is_n810()) {
mmc1_data.slots[0].name = "external"; mmc1_data.slots[0].name = "external";
...@@ -429,6 +424,8 @@ static void __init n8x0_mmc_init(void) ...@@ -429,6 +424,8 @@ static void __init n8x0_mmc_init(void)
mmc1_data.slots[1].name = "internal"; mmc1_data.slots[1].name = "internal";
mmc1_data.slots[1].ban_openended = 1; mmc1_data.slots[1].ban_openended = 1;
gpiod_add_lookup_table(&nokia810_mmc_gpio_table); gpiod_add_lookup_table(&nokia810_mmc_gpio_table);
} else {
gpiod_add_lookup_table(&nokia800_mmc_gpio_table);
} }
mmc1_data.nr_slots = 2; mmc1_data.nr_slots = 2;
......
...@@ -41,7 +41,7 @@ usbotg1: usb@5b0d0000 { ...@@ -41,7 +41,7 @@ usbotg1: usb@5b0d0000 {
interrupts = <GIC_SPI 267 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 267 IRQ_TYPE_LEVEL_HIGH>;
fsl,usbphy = <&usbphy1>; fsl,usbphy = <&usbphy1>;
fsl,usbmisc = <&usbmisc1 0>; fsl,usbmisc = <&usbmisc1 0>;
clocks = <&usb2_lpcg 0>; clocks = <&usb2_lpcg IMX_LPCG_CLK_6>;
ahb-burst-config = <0x0>; ahb-burst-config = <0x0>;
tx-burst-size-dword = <0x10>; tx-burst-size-dword = <0x10>;
rx-burst-size-dword = <0x10>; rx-burst-size-dword = <0x10>;
...@@ -58,7 +58,7 @@ usbmisc1: usbmisc@5b0d0200 { ...@@ -58,7 +58,7 @@ usbmisc1: usbmisc@5b0d0200 {
usbphy1: usbphy@5b100000 { usbphy1: usbphy@5b100000 {
compatible = "fsl,imx7ulp-usbphy"; compatible = "fsl,imx7ulp-usbphy";
reg = <0x5b100000 0x1000>; reg = <0x5b100000 0x1000>;
clocks = <&usb2_lpcg 1>; clocks = <&usb2_lpcg IMX_LPCG_CLK_7>;
power-domains = <&pd IMX_SC_R_USB_0_PHY>; power-domains = <&pd IMX_SC_R_USB_0_PHY>;
status = "disabled"; status = "disabled";
}; };
...@@ -67,8 +67,8 @@ usdhc1: mmc@5b010000 { ...@@ -67,8 +67,8 @@ usdhc1: mmc@5b010000 {
interrupts = <GIC_SPI 232 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 232 IRQ_TYPE_LEVEL_HIGH>;
reg = <0x5b010000 0x10000>; reg = <0x5b010000 0x10000>;
clocks = <&sdhc0_lpcg IMX_LPCG_CLK_4>, clocks = <&sdhc0_lpcg IMX_LPCG_CLK_4>,
<&sdhc0_lpcg IMX_LPCG_CLK_0>, <&sdhc0_lpcg IMX_LPCG_CLK_5>,
<&sdhc0_lpcg IMX_LPCG_CLK_5>; <&sdhc0_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "ahb", "per"; clock-names = "ipg", "ahb", "per";
power-domains = <&pd IMX_SC_R_SDHC_0>; power-domains = <&pd IMX_SC_R_SDHC_0>;
status = "disabled"; status = "disabled";
...@@ -78,8 +78,8 @@ usdhc2: mmc@5b020000 { ...@@ -78,8 +78,8 @@ usdhc2: mmc@5b020000 {
interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>;
reg = <0x5b020000 0x10000>; reg = <0x5b020000 0x10000>;
clocks = <&sdhc1_lpcg IMX_LPCG_CLK_4>, clocks = <&sdhc1_lpcg IMX_LPCG_CLK_4>,
<&sdhc1_lpcg IMX_LPCG_CLK_0>, <&sdhc1_lpcg IMX_LPCG_CLK_5>,
<&sdhc1_lpcg IMX_LPCG_CLK_5>; <&sdhc1_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "ahb", "per"; clock-names = "ipg", "ahb", "per";
power-domains = <&pd IMX_SC_R_SDHC_1>; power-domains = <&pd IMX_SC_R_SDHC_1>;
fsl,tuning-start-tap = <20>; fsl,tuning-start-tap = <20>;
...@@ -91,8 +91,8 @@ usdhc3: mmc@5b030000 { ...@@ -91,8 +91,8 @@ usdhc3: mmc@5b030000 {
interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>;
reg = <0x5b030000 0x10000>; reg = <0x5b030000 0x10000>;
clocks = <&sdhc2_lpcg IMX_LPCG_CLK_4>, clocks = <&sdhc2_lpcg IMX_LPCG_CLK_4>,
<&sdhc2_lpcg IMX_LPCG_CLK_0>, <&sdhc2_lpcg IMX_LPCG_CLK_5>,
<&sdhc2_lpcg IMX_LPCG_CLK_5>; <&sdhc2_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "ahb", "per"; clock-names = "ipg", "ahb", "per";
power-domains = <&pd IMX_SC_R_SDHC_2>; power-domains = <&pd IMX_SC_R_SDHC_2>;
status = "disabled"; status = "disabled";
......
...@@ -28,8 +28,8 @@ lpspi0: spi@5a000000 { ...@@ -28,8 +28,8 @@ lpspi0: spi@5a000000 {
#size-cells = <0>; #size-cells = <0>;
interrupts = <GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&spi0_lpcg 0>, clocks = <&spi0_lpcg IMX_LPCG_CLK_0>,
<&spi0_lpcg 1>; <&spi0_lpcg IMX_LPCG_CLK_4>;
clock-names = "per", "ipg"; clock-names = "per", "ipg";
assigned-clocks = <&clk IMX_SC_R_SPI_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_SPI_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <60000000>; assigned-clock-rates = <60000000>;
...@@ -44,8 +44,8 @@ lpspi1: spi@5a010000 { ...@@ -44,8 +44,8 @@ lpspi1: spi@5a010000 {
#size-cells = <0>; #size-cells = <0>;
interrupts = <GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&spi1_lpcg 0>, clocks = <&spi1_lpcg IMX_LPCG_CLK_0>,
<&spi1_lpcg 1>; <&spi1_lpcg IMX_LPCG_CLK_4>;
clock-names = "per", "ipg"; clock-names = "per", "ipg";
assigned-clocks = <&clk IMX_SC_R_SPI_1 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_SPI_1 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <60000000>; assigned-clock-rates = <60000000>;
...@@ -60,8 +60,8 @@ lpspi2: spi@5a020000 { ...@@ -60,8 +60,8 @@ lpspi2: spi@5a020000 {
#size-cells = <0>; #size-cells = <0>;
interrupts = <GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&spi2_lpcg 0>, clocks = <&spi2_lpcg IMX_LPCG_CLK_0>,
<&spi2_lpcg 1>; <&spi2_lpcg IMX_LPCG_CLK_4>;
clock-names = "per", "ipg"; clock-names = "per", "ipg";
assigned-clocks = <&clk IMX_SC_R_SPI_2 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_SPI_2 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <60000000>; assigned-clock-rates = <60000000>;
...@@ -76,8 +76,8 @@ lpspi3: spi@5a030000 { ...@@ -76,8 +76,8 @@ lpspi3: spi@5a030000 {
#size-cells = <0>; #size-cells = <0>;
interrupts = <GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&spi3_lpcg 0>, clocks = <&spi3_lpcg IMX_LPCG_CLK_0>,
<&spi3_lpcg 1>; <&spi3_lpcg IMX_LPCG_CLK_4>;
clock-names = "per", "ipg"; clock-names = "per", "ipg";
assigned-clocks = <&clk IMX_SC_R_SPI_3 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_SPI_3 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <60000000>; assigned-clock-rates = <60000000>;
...@@ -145,8 +145,8 @@ adma_pwm: pwm@5a190000 { ...@@ -145,8 +145,8 @@ adma_pwm: pwm@5a190000 {
compatible = "fsl,imx8qxp-pwm", "fsl,imx27-pwm"; compatible = "fsl,imx8qxp-pwm", "fsl,imx27-pwm";
reg = <0x5a190000 0x1000>; reg = <0x5a190000 0x1000>;
interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&adma_pwm_lpcg 1>, clocks = <&adma_pwm_lpcg IMX_LPCG_CLK_4>,
<&adma_pwm_lpcg 0>; <&adma_pwm_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
assigned-clocks = <&clk IMX_SC_R_LCD_0_PWM_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_LCD_0_PWM_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
...@@ -355,8 +355,8 @@ adc0: adc@5a880000 { ...@@ -355,8 +355,8 @@ adc0: adc@5a880000 {
reg = <0x5a880000 0x10000>; reg = <0x5a880000 0x10000>;
interrupts = <GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&adc0_lpcg 0>, clocks = <&adc0_lpcg IMX_LPCG_CLK_0>,
<&adc0_lpcg 1>; <&adc0_lpcg IMX_LPCG_CLK_4>;
clock-names = "per", "ipg"; clock-names = "per", "ipg";
assigned-clocks = <&clk IMX_SC_R_ADC_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_ADC_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
...@@ -370,8 +370,8 @@ adc1: adc@5a890000 { ...@@ -370,8 +370,8 @@ adc1: adc@5a890000 {
reg = <0x5a890000 0x10000>; reg = <0x5a890000 0x10000>;
interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&adc1_lpcg 0>, clocks = <&adc1_lpcg IMX_LPCG_CLK_0>,
<&adc1_lpcg 1>; <&adc1_lpcg IMX_LPCG_CLK_4>;
clock-names = "per", "ipg"; clock-names = "per", "ipg";
assigned-clocks = <&clk IMX_SC_R_ADC_1 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_ADC_1 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
...@@ -384,8 +384,8 @@ flexcan1: can@5a8d0000 { ...@@ -384,8 +384,8 @@ flexcan1: can@5a8d0000 {
reg = <0x5a8d0000 0x10000>; reg = <0x5a8d0000 0x10000>;
interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
clocks = <&can0_lpcg 1>, clocks = <&can0_lpcg IMX_LPCG_CLK_4>,
<&can0_lpcg 0>; <&can0_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <40000000>; assigned-clock-rates = <40000000>;
...@@ -405,8 +405,8 @@ flexcan2: can@5a8e0000 { ...@@ -405,8 +405,8 @@ flexcan2: can@5a8e0000 {
* CAN1 shares CAN0's clock and to enable CAN0's clock it * CAN1 shares CAN0's clock and to enable CAN0's clock it
* has to be powered on. * has to be powered on.
*/ */
clocks = <&can0_lpcg 1>, clocks = <&can0_lpcg IMX_LPCG_CLK_4>,
<&can0_lpcg 0>; <&can0_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <40000000>; assigned-clock-rates = <40000000>;
...@@ -426,8 +426,8 @@ flexcan3: can@5a8f0000 { ...@@ -426,8 +426,8 @@ flexcan3: can@5a8f0000 {
* CAN2 shares CAN0's clock and to enable CAN0's clock it * CAN2 shares CAN0's clock and to enable CAN0's clock it
* has to be powered on. * has to be powered on.
*/ */
clocks = <&can0_lpcg 1>, clocks = <&can0_lpcg IMX_LPCG_CLK_4>,
<&can0_lpcg 0>; <&can0_lpcg IMX_LPCG_CLK_0>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <40000000>; assigned-clock-rates = <40000000>;
......
...@@ -25,8 +25,8 @@ lsio_pwm0: pwm@5d000000 { ...@@ -25,8 +25,8 @@ lsio_pwm0: pwm@5d000000 {
compatible = "fsl,imx27-pwm"; compatible = "fsl,imx27-pwm";
reg = <0x5d000000 0x10000>; reg = <0x5d000000 0x10000>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
clocks = <&pwm0_lpcg 4>, clocks = <&pwm0_lpcg IMX_LPCG_CLK_6>,
<&pwm0_lpcg 1>; <&pwm0_lpcg IMX_LPCG_CLK_1>;
assigned-clocks = <&clk IMX_SC_R_PWM_0 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_PWM_0 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
#pwm-cells = <3>; #pwm-cells = <3>;
...@@ -38,8 +38,8 @@ lsio_pwm1: pwm@5d010000 { ...@@ -38,8 +38,8 @@ lsio_pwm1: pwm@5d010000 {
compatible = "fsl,imx27-pwm"; compatible = "fsl,imx27-pwm";
reg = <0x5d010000 0x10000>; reg = <0x5d010000 0x10000>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
clocks = <&pwm1_lpcg 4>, clocks = <&pwm1_lpcg IMX_LPCG_CLK_6>,
<&pwm1_lpcg 1>; <&pwm1_lpcg IMX_LPCG_CLK_1>;
assigned-clocks = <&clk IMX_SC_R_PWM_1 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_PWM_1 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
#pwm-cells = <3>; #pwm-cells = <3>;
...@@ -51,8 +51,8 @@ lsio_pwm2: pwm@5d020000 { ...@@ -51,8 +51,8 @@ lsio_pwm2: pwm@5d020000 {
compatible = "fsl,imx27-pwm"; compatible = "fsl,imx27-pwm";
reg = <0x5d020000 0x10000>; reg = <0x5d020000 0x10000>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
clocks = <&pwm2_lpcg 4>, clocks = <&pwm2_lpcg IMX_LPCG_CLK_6>,
<&pwm2_lpcg 1>; <&pwm2_lpcg IMX_LPCG_CLK_1>;
assigned-clocks = <&clk IMX_SC_R_PWM_2 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_PWM_2 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
#pwm-cells = <3>; #pwm-cells = <3>;
...@@ -64,8 +64,8 @@ lsio_pwm3: pwm@5d030000 { ...@@ -64,8 +64,8 @@ lsio_pwm3: pwm@5d030000 {
compatible = "fsl,imx27-pwm"; compatible = "fsl,imx27-pwm";
reg = <0x5d030000 0x10000>; reg = <0x5d030000 0x10000>;
clock-names = "ipg", "per"; clock-names = "ipg", "per";
clocks = <&pwm3_lpcg 4>, clocks = <&pwm3_lpcg IMX_LPCG_CLK_6>,
<&pwm3_lpcg 1>; <&pwm3_lpcg IMX_LPCG_CLK_1>;
assigned-clocks = <&clk IMX_SC_R_PWM_3 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_PWM_3 IMX_SC_PM_CLK_PER>;
assigned-clock-rates = <24000000>; assigned-clock-rates = <24000000>;
#pwm-cells = <3>; #pwm-cells = <3>;
......
...@@ -14,6 +14,7 @@ connector { ...@@ -14,6 +14,7 @@ connector {
pinctrl-0 = <&pinctrl_usbcon1>; pinctrl-0 = <&pinctrl_usbcon1>;
type = "micro"; type = "micro";
label = "otg"; label = "otg";
vbus-supply = <&reg_usb1_vbus>;
id-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>; id-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
port { port {
...@@ -183,7 +184,6 @@ &usb3_0 { ...@@ -183,7 +184,6 @@ &usb3_0 {
}; };
&usb3_phy0 { &usb3_phy0 {
vbus-supply = <&reg_usb1_vbus>;
status = "okay"; status = "okay";
}; };
......
...@@ -14,6 +14,7 @@ connector { ...@@ -14,6 +14,7 @@ connector {
pinctrl-0 = <&pinctrl_usbcon1>; pinctrl-0 = <&pinctrl_usbcon1>;
type = "micro"; type = "micro";
label = "otg"; label = "otg";
vbus-supply = <&reg_usb1_vbus>;
id-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>; id-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
port { port {
...@@ -202,7 +203,6 @@ &usb3_0 { ...@@ -202,7 +203,6 @@ &usb3_0 {
}; };
&usb3_phy0 { &usb3_phy0 {
vbus-supply = <&reg_usb1_vbus>;
status = "okay"; status = "okay";
}; };
......
...@@ -153,15 +153,15 @@ &flexcan1 { ...@@ -153,15 +153,15 @@ &flexcan1 {
}; };
&flexcan2 { &flexcan2 {
clocks = <&can1_lpcg 1>, clocks = <&can1_lpcg IMX_LPCG_CLK_4>,
<&can1_lpcg 0>; <&can1_lpcg IMX_LPCG_CLK_0>;
assigned-clocks = <&clk IMX_SC_R_CAN_1 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_CAN_1 IMX_SC_PM_CLK_PER>;
fsl,clk-source = /bits/ 8 <1>; fsl,clk-source = /bits/ 8 <1>;
}; };
&flexcan3 { &flexcan3 {
clocks = <&can2_lpcg 1>, clocks = <&can2_lpcg IMX_LPCG_CLK_4>,
<&can2_lpcg 0>; <&can2_lpcg IMX_LPCG_CLK_0>;
assigned-clocks = <&clk IMX_SC_R_CAN_2 IMX_SC_PM_CLK_PER>; assigned-clocks = <&clk IMX_SC_R_CAN_2 IMX_SC_PM_CLK_PER>;
fsl,clk-source = /bits/ 8 <1>; fsl,clk-source = /bits/ 8 <1>;
}; };
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/bitfield.h> #include <linux/bitfield.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/cacheinfo.h> #include <asm/cacheinfo.h>
#include <asm/dma-noncoherent.h> #include <asm/dma-noncoherent.h>
...@@ -247,13 +249,49 @@ static irqreturn_t ccache_int_handler(int irq, void *device) ...@@ -247,13 +249,49 @@ static irqreturn_t ccache_int_handler(int irq, void *device)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int sifive_ccache_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
unsigned long quirks;
int intr_num, rc;
quirks = (unsigned long)device_get_match_data(dev);
intr_num = platform_irq_count(pdev);
if (!intr_num)
return dev_err_probe(dev, -ENODEV, "No interrupts property\n");
for (int i = 0; i < intr_num; i++) {
if (i == DATA_UNCORR && (quirks & QUIRK_BROKEN_DATA_UNCORR))
continue;
g_irq[i] = platform_get_irq(pdev, i);
if (g_irq[i] < 0)
return g_irq[i];
rc = devm_request_irq(dev, g_irq[i], ccache_int_handler, 0, "ccache_ecc", NULL);
if (rc)
return dev_err_probe(dev, rc, "Could not request IRQ %d\n", g_irq[i]);
}
return 0;
}
static struct platform_driver sifive_ccache_driver = {
.probe = sifive_ccache_probe,
.driver = {
.name = "sifive_ccache",
.of_match_table = sifive_ccache_ids,
},
};
static int __init sifive_ccache_init(void) static int __init sifive_ccache_init(void)
{ {
struct device_node *np; struct device_node *np;
struct resource res; struct resource res;
int i, rc, intr_num;
const struct of_device_id *match; const struct of_device_id *match;
unsigned long quirks; unsigned long quirks;
int rc;
np = of_find_matching_node_and_match(NULL, sifive_ccache_ids, &match); np = of_find_matching_node_and_match(NULL, sifive_ccache_ids, &match);
if (!np) if (!np)
...@@ -277,28 +315,6 @@ static int __init sifive_ccache_init(void) ...@@ -277,28 +315,6 @@ static int __init sifive_ccache_init(void)
goto err_unmap; goto err_unmap;
} }
intr_num = of_property_count_u32_elems(np, "interrupts");
if (!intr_num) {
pr_err("No interrupts property\n");
rc = -ENODEV;
goto err_unmap;
}
for (i = 0; i < intr_num; i++) {
g_irq[i] = irq_of_parse_and_map(np, i);
if (i == DATA_UNCORR && (quirks & QUIRK_BROKEN_DATA_UNCORR))
continue;
rc = request_irq(g_irq[i], ccache_int_handler, 0, "ccache_ecc",
NULL);
if (rc) {
pr_err("Could not request IRQ %d\n", g_irq[i]);
goto err_free_irq;
}
}
of_node_put(np);
#ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS #ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS
if (quirks & QUIRK_NONSTANDARD_CACHE_OPS) { if (quirks & QUIRK_NONSTANDARD_CACHE_OPS) {
riscv_cbom_block_size = SIFIVE_CCACHE_LINE_SIZE; riscv_cbom_block_size = SIFIVE_CCACHE_LINE_SIZE;
...@@ -315,11 +331,15 @@ static int __init sifive_ccache_init(void) ...@@ -315,11 +331,15 @@ static int __init sifive_ccache_init(void)
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
setup_sifive_debug(); setup_sifive_debug();
#endif #endif
rc = platform_driver_register(&sifive_ccache_driver);
if (rc)
goto err_unmap;
of_node_put(np);
return 0; return 0;
err_free_irq:
while (--i >= 0)
free_irq(g_irq[i], NULL);
err_unmap: err_unmap:
iounmap(ccache_base); iounmap(ccache_base);
err_node_put: err_node_put:
......
...@@ -790,7 +790,7 @@ static void ffa_notification_info_get(void) ...@@ -790,7 +790,7 @@ static void ffa_notification_info_get(void)
part_id = packed_id_list[ids_processed++]; part_id = packed_id_list[ids_processed++];
if (!ids_count[list]) { /* Global Notification */ if (ids_count[list] == 1) { /* Global Notification */
__do_sched_recv_cb(part_id, 0, false); __do_sched_recv_cb(part_id, 0, false);
continue; continue;
} }
......
...@@ -736,7 +736,7 @@ static void scmi_powercap_domain_init_fc(const struct scmi_protocol_handle *ph, ...@@ -736,7 +736,7 @@ static void scmi_powercap_domain_init_fc(const struct scmi_protocol_handle *ph,
ph->hops->fastchannel_init(ph, POWERCAP_DESCRIBE_FASTCHANNEL, ph->hops->fastchannel_init(ph, POWERCAP_DESCRIBE_FASTCHANNEL,
POWERCAP_PAI_GET, 4, domain, POWERCAP_PAI_GET, 4, domain,
&fc[POWERCAP_FC_PAI].get_addr, NULL, &fc[POWERCAP_FC_PAI].get_addr, NULL,
&fc[POWERCAP_PAI_GET].rate_limit); &fc[POWERCAP_FC_PAI].rate_limit);
*p_fc = fc; *p_fc = fc;
} }
......
...@@ -921,7 +921,7 @@ static int scmi_dbg_raw_mode_open(struct inode *inode, struct file *filp) ...@@ -921,7 +921,7 @@ static int scmi_dbg_raw_mode_open(struct inode *inode, struct file *filp)
rd->raw = raw; rd->raw = raw;
filp->private_data = rd; filp->private_data = rd;
return 0; return nonseekable_open(inode, filp);
} }
static int scmi_dbg_raw_mode_release(struct inode *inode, struct file *filp) static int scmi_dbg_raw_mode_release(struct inode *inode, struct file *filp)
...@@ -950,6 +950,7 @@ static const struct file_operations scmi_dbg_raw_mode_reset_fops = { ...@@ -950,6 +950,7 @@ static const struct file_operations scmi_dbg_raw_mode_reset_fops = {
.open = scmi_dbg_raw_mode_open, .open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release, .release = scmi_dbg_raw_mode_release,
.write = scmi_dbg_raw_mode_reset_write, .write = scmi_dbg_raw_mode_reset_write,
.llseek = no_llseek,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
...@@ -959,6 +960,7 @@ static const struct file_operations scmi_dbg_raw_mode_message_fops = { ...@@ -959,6 +960,7 @@ static const struct file_operations scmi_dbg_raw_mode_message_fops = {
.read = scmi_dbg_raw_mode_message_read, .read = scmi_dbg_raw_mode_message_read,
.write = scmi_dbg_raw_mode_message_write, .write = scmi_dbg_raw_mode_message_write,
.poll = scmi_dbg_raw_mode_message_poll, .poll = scmi_dbg_raw_mode_message_poll,
.llseek = no_llseek,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
...@@ -975,6 +977,7 @@ static const struct file_operations scmi_dbg_raw_mode_message_async_fops = { ...@@ -975,6 +977,7 @@ static const struct file_operations scmi_dbg_raw_mode_message_async_fops = {
.read = scmi_dbg_raw_mode_message_read, .read = scmi_dbg_raw_mode_message_read,
.write = scmi_dbg_raw_mode_message_async_write, .write = scmi_dbg_raw_mode_message_async_write,
.poll = scmi_dbg_raw_mode_message_poll, .poll = scmi_dbg_raw_mode_message_poll,
.llseek = no_llseek,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
...@@ -998,6 +1001,7 @@ static const struct file_operations scmi_dbg_raw_mode_notification_fops = { ...@@ -998,6 +1001,7 @@ static const struct file_operations scmi_dbg_raw_mode_notification_fops = {
.release = scmi_dbg_raw_mode_release, .release = scmi_dbg_raw_mode_release,
.read = scmi_test_dbg_raw_mode_notif_read, .read = scmi_test_dbg_raw_mode_notif_read,
.poll = scmi_test_dbg_raw_mode_notif_poll, .poll = scmi_test_dbg_raw_mode_notif_poll,
.llseek = no_llseek,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
...@@ -1021,6 +1025,7 @@ static const struct file_operations scmi_dbg_raw_mode_errors_fops = { ...@@ -1021,6 +1025,7 @@ static const struct file_operations scmi_dbg_raw_mode_errors_fops = {
.release = scmi_dbg_raw_mode_release, .release = scmi_dbg_raw_mode_release,
.read = scmi_test_dbg_raw_mode_errors_read, .read = scmi_test_dbg_raw_mode_errors_read,
.poll = scmi_test_dbg_raw_mode_errors_poll, .poll = scmi_test_dbg_raw_mode_errors_poll,
.llseek = no_llseek,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
......
...@@ -1114,10 +1114,25 @@ static void mmc_omap_set_power(struct mmc_omap_slot *slot, int power_on, ...@@ -1114,10 +1114,25 @@ static void mmc_omap_set_power(struct mmc_omap_slot *slot, int power_on,
host = slot->host; host = slot->host;
if (slot->vsd) if (power_on) {
gpiod_set_value(slot->vsd, power_on); if (slot->vsd) {
if (slot->vio) gpiod_set_value(slot->vsd, power_on);
gpiod_set_value(slot->vio, power_on); msleep(1);
}
if (slot->vio) {
gpiod_set_value(slot->vio, power_on);
msleep(1);
}
} else {
if (slot->vio) {
gpiod_set_value(slot->vio, power_on);
msleep(50);
}
if (slot->vsd) {
gpiod_set_value(slot->vsd, power_on);
msleep(50);
}
}
if (slot->pdata->set_power != NULL) if (slot->pdata->set_power != NULL)
slot->pdata->set_power(mmc_dev(slot->mmc), slot->id, power_on, slot->pdata->set_power(mmc_dev(slot->mmc), slot->id, power_on,
...@@ -1254,18 +1269,18 @@ static int mmc_omap_new_slot(struct mmc_omap_host *host, int id) ...@@ -1254,18 +1269,18 @@ static int mmc_omap_new_slot(struct mmc_omap_host *host, int id)
slot->pdata = &host->pdata->slots[id]; slot->pdata = &host->pdata->slots[id];
/* Check for some optional GPIO controls */ /* Check for some optional GPIO controls */
slot->vsd = gpiod_get_index_optional(host->dev, "vsd", slot->vsd = devm_gpiod_get_index_optional(host->dev, "vsd",
id, GPIOD_OUT_LOW); id, GPIOD_OUT_LOW);
if (IS_ERR(slot->vsd)) if (IS_ERR(slot->vsd))
return dev_err_probe(host->dev, PTR_ERR(slot->vsd), return dev_err_probe(host->dev, PTR_ERR(slot->vsd),
"error looking up VSD GPIO\n"); "error looking up VSD GPIO\n");
slot->vio = gpiod_get_index_optional(host->dev, "vio", slot->vio = devm_gpiod_get_index_optional(host->dev, "vio",
id, GPIOD_OUT_LOW); id, GPIOD_OUT_LOW);
if (IS_ERR(slot->vio)) if (IS_ERR(slot->vio))
return dev_err_probe(host->dev, PTR_ERR(slot->vio), return dev_err_probe(host->dev, PTR_ERR(slot->vio),
"error looking up VIO GPIO\n"); "error looking up VIO GPIO\n");
slot->cover = gpiod_get_index_optional(host->dev, "cover", slot->cover = devm_gpiod_get_index_optional(host->dev, "cover",
id, GPIOD_IN); id, GPIOD_IN);
if (IS_ERR(slot->cover)) if (IS_ERR(slot->cover))
return dev_err_probe(host->dev, PTR_ERR(slot->cover), return dev_err_probe(host->dev, PTR_ERR(slot->cover),
"error looking up cover switch GPIO\n"); "error looking up cover switch GPIO\n");
...@@ -1379,13 +1394,6 @@ static int mmc_omap_probe(struct platform_device *pdev) ...@@ -1379,13 +1394,6 @@ static int mmc_omap_probe(struct platform_device *pdev)
if (IS_ERR(host->virt_base)) if (IS_ERR(host->virt_base))
return PTR_ERR(host->virt_base); return PTR_ERR(host->virt_base);
host->slot_switch = gpiod_get_optional(host->dev, "switch",
GPIOD_OUT_LOW);
if (IS_ERR(host->slot_switch))
return dev_err_probe(host->dev, PTR_ERR(host->slot_switch),
"error looking up slot switch GPIO\n");
INIT_WORK(&host->slot_release_work, mmc_omap_slot_release_work); INIT_WORK(&host->slot_release_work, mmc_omap_slot_release_work);
INIT_WORK(&host->send_stop_work, mmc_omap_send_stop_work); INIT_WORK(&host->send_stop_work, mmc_omap_send_stop_work);
...@@ -1404,6 +1412,12 @@ static int mmc_omap_probe(struct platform_device *pdev) ...@@ -1404,6 +1412,12 @@ static int mmc_omap_probe(struct platform_device *pdev)
host->dev = &pdev->dev; host->dev = &pdev->dev;
platform_set_drvdata(pdev, host); platform_set_drvdata(pdev, host);
host->slot_switch = devm_gpiod_get_optional(host->dev, "switch",
GPIOD_OUT_LOW);
if (IS_ERR(host->slot_switch))
return dev_err_probe(host->dev, PTR_ERR(host->slot_switch),
"error looking up slot switch GPIO\n");
host->id = pdev->id; host->id = pdev->id;
host->irq = irq; host->irq = irq;
host->phys_base = res->start; host->phys_base = res->start;
......
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