254 lines
8.8 KiB
Diff
254 lines
8.8 KiB
Diff
From a3c9e0d977420d451f6e13873a4a0921d8a9b88f Mon Sep 17 00:00:00 2001
|
|
From: Lionel VITTE <lionel.vitte@st.com>
|
|
Date: Thu, 11 Jul 2019 14:12:07 +0200
|
|
Subject: [PATCH 28/30] ARM stm32mp1 r2 MISC
|
|
|
|
---
|
|
Documentation/remoteproc.txt | 23 ++++++++++++++++++++
|
|
arch/arm/Kconfig.debug | 49 ++++++++++++++++++++++++++++++++++++++++--
|
|
arch/arm/include/debug/stm32.S | 43 ++++++++++++++++++++++++++++++++++++
|
|
include/linux/amba/mmci.h | 11 ++--------
|
|
include/media/v4l2-fwnode.h | 2 ++
|
|
kernel/power/suspend.c | 1 -
|
|
6 files changed, 117 insertions(+), 12 deletions(-)
|
|
create mode 100644 arch/arm/include/debug/stm32.S
|
|
|
|
diff --git a/Documentation/remoteproc.txt b/Documentation/remoteproc.txt
|
|
index 77fb03a..bec2177 100644
|
|
--- a/Documentation/remoteproc.txt
|
|
+++ b/Documentation/remoteproc.txt
|
|
@@ -353,3 +353,26 @@ Of course, RSC_VDEV resource entries are only good enough for static
|
|
allocation of virtio devices. Dynamic allocations will also be made possible
|
|
using the rpmsg bus (similar to how we already do dynamic allocations of
|
|
rpmsg channels; read more about it in rpmsg.txt).
|
|
+
|
|
+8. System Resource Manager (SRM)
|
|
+
|
|
+Since some resources are shared (directly or not) between the processors, a
|
|
+processor cannot manage such resources without potentially impacting the other
|
|
+processors : as an example, if a processor changes the frequency of a clock, the
|
|
+frequency of another clock managed by another processor may be updated too.
|
|
+
|
|
+The System Resource Manager prevents such resource conflicts between the
|
|
+processors : it reserves and initializes the system resources of the peripherals
|
|
+assigned to a remote processor.
|
|
+
|
|
+As of today the following resources are controlled by the SRM:
|
|
+- clocks
|
|
+- gpios (pinctrl)
|
|
+- regulators (power supplies)
|
|
+
|
|
+The SRM is implemented as an 'rproc_subdev' and registered to remoteproc_core.
|
|
+Unlike the virtio device (vdev), the SRM subdev is probed *before* the rproc
|
|
+boots, ensuring the availability of the resources before the remoteproc starts.
|
|
+
|
|
+The resources handled by the SRM are defined in the DeviceTree: please read
|
|
+Documentation/devicetree/bindings/remoteproc/rproc-srm.txt for details.
|
|
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
|
|
index f6fcb8a..88849c1 100644
|
|
--- a/arch/arm/Kconfig.debug
|
|
+++ b/arch/arm/Kconfig.debug
|
|
@@ -1184,6 +1184,42 @@ choice
|
|
|
|
If unsure, say N.
|
|
|
|
+ config STM32F4_DEBUG_UART
|
|
+ bool "Use STM32F4 UART for low-level debug"
|
|
+ depends on ARCH_STM32 && ARM_SINGLE_ARMV7M
|
|
+ select DEBUG_STM32_UART
|
|
+ help
|
|
+ Say Y here if you want kernel low-level debugging support
|
|
+ on STM32F4 based platforms, which default UART is wired on
|
|
+ USART1, but another UART instance can be selected by modifying
|
|
+ CONFIG_DEBUG_UART_PHYS.
|
|
+
|
|
+ If unsure, say N.
|
|
+
|
|
+ config STM32F7_DEBUG_UART
|
|
+ bool "Use STM32F7 UART for low-level debug"
|
|
+ depends on ARCH_STM32 && ARM_SINGLE_ARMV7M
|
|
+ select DEBUG_STM32_UART
|
|
+ help
|
|
+ Say Y here if you want kernel low-level debugging support
|
|
+ on STM32F7 based platforms, which default UART is wired on
|
|
+ USART1, but another UART instance can be selected by modifying
|
|
+ CONFIG_DEBUG_UART_PHYS.
|
|
+
|
|
+ If unsure, say N.
|
|
+
|
|
+ config STM32MP1_DEBUG_UART
|
|
+ bool "Use STM32MP1 UART for low-level debug"
|
|
+ depends on ARCH_STM32 && ARCH_MULTI_V7
|
|
+ select DEBUG_STM32_UART
|
|
+ help
|
|
+ Say Y here if you want kernel low-level debugging support
|
|
+ on STM32MP1 based platforms, wich default UART is wired on
|
|
+ UART4, but another UART instance can be selected by modifying
|
|
+ CONFIG_DEBUG_UART_PHYS and CONFIG_DEBUG_UART_VIRT.
|
|
+
|
|
+ If unsure, say N.
|
|
+
|
|
config TEGRA_DEBUG_UART_AUTO_ODMDATA
|
|
bool "Kernel low-level debugging messages via Tegra UART via ODMDATA"
|
|
depends on ARCH_TEGRA
|
|
@@ -1468,6 +1504,10 @@ config DEBUG_STI_UART
|
|
bool
|
|
depends on ARCH_STI
|
|
|
|
+config DEBUG_STM32_UART
|
|
+ bool
|
|
+ depends on ARCH_STM32
|
|
+
|
|
config DEBUG_SIRFSOC_UART
|
|
bool
|
|
depends on ARCH_SIRF
|
|
@@ -1517,6 +1557,7 @@ config DEBUG_LL_INCLUDE
|
|
default "debug/s5pv210.S" if DEBUG_S5PV210_UART
|
|
default "debug/sirf.S" if DEBUG_SIRFSOC_UART
|
|
default "debug/sti.S" if DEBUG_STI_UART
|
|
+ default "debug/stm32.S" if DEBUG_STM32_UART
|
|
default "debug/tegra.S" if DEBUG_TEGRA_UART
|
|
default "debug/ux500.S" if DEBUG_UX500_UART
|
|
default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT
|
|
@@ -1580,6 +1621,8 @@ config DEBUG_UART_PHYS
|
|
default 0x3e000000 if DEBUG_BCM_KONA_UART
|
|
default 0x3f201000 if DEBUG_BCM2836
|
|
default 0x4000e400 if DEBUG_LL_UART_EFM32
|
|
+ default 0x40010000 if STM32MP1_DEBUG_UART
|
|
+ default 0x40011000 if STM32F4_DEBUG_UART || STM32F7_DEBUG_UART
|
|
default 0x40028000 if DEBUG_AT91_SAMV7_USART1
|
|
default 0x40081000 if DEBUG_LPC18XX_UART0
|
|
default 0x40090000 if DEBUG_LPC32XX
|
|
@@ -1673,10 +1716,12 @@ config DEBUG_UART_PHYS
|
|
DEBUG_S3C64XX_UART || \
|
|
DEBUG_BCM63XX_UART || DEBUG_ASM9260_UART || \
|
|
DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0 || \
|
|
- DEBUG_AT91_UART
|
|
+ DEBUG_AT91_UART || STM32F4_DEBUG_UART || \
|
|
+ STM32F7_DEBUG_UART || STM32MP1_DEBUG_UART
|
|
|
|
config DEBUG_UART_VIRT
|
|
hex "Virtual base address of debug UART"
|
|
+ default 0xfe010000 if STM32MP1_DEBUG_UART
|
|
default 0xc881f000 if DEBUG_RV1108_UART2
|
|
default 0xc8821000 if DEBUG_RV1108_UART1
|
|
default 0xc8912000 if DEBUG_RV1108_UART0
|
|
@@ -1788,7 +1833,7 @@ config DEBUG_UART_VIRT
|
|
DEBUG_S3C64XX_UART || \
|
|
DEBUG_BCM63XX_UART || DEBUG_ASM9260_UART || \
|
|
DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0 || \
|
|
- DEBUG_AT91_UART
|
|
+ DEBUG_AT91_UART || STM32MP1_DEBUG_UART
|
|
|
|
config DEBUG_UART_8250_SHIFT
|
|
int "Register offset shift for the 8250 debug UART"
|
|
diff --git a/arch/arm/include/debug/stm32.S b/arch/arm/include/debug/stm32.S
|
|
new file mode 100644
|
|
index 0000000..3353a81
|
|
--- /dev/null
|
|
+++ b/arch/arm/include/debug/stm32.S
|
|
@@ -0,0 +1,43 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
+/*
|
|
+ * Copyright (C) STMicroelectronics SA 2017 - All Rights Reserved
|
|
+ * Author: Gerald Baeza <gerald.baeza@st.com> for STMicroelectronics.
|
|
+ */
|
|
+
|
|
+#ifdef CONFIG_STM32F4_DEBUG_UART
|
|
+#define STM32_USART_SR_OFF 0x00
|
|
+#define STM32_USART_TDR_OFF 0x04
|
|
+#endif
|
|
+
|
|
+#if defined(CONFIG_STM32F7_DEBUG_UART) || defined(CONFIG_STM32MP1_DEBUG_UART)
|
|
+#define STM32_USART_SR_OFF 0x1C
|
|
+#define STM32_USART_TDR_OFF 0x28
|
|
+#endif
|
|
+
|
|
+#define STM32_USART_TC (1 << 6) /* Tx complete */
|
|
+#define STM32_USART_TXE (1 << 7) /* Tx data reg empty */
|
|
+
|
|
+.macro addruart, rp, rv, tmp
|
|
+ ldr \rp, =CONFIG_DEBUG_UART_PHYS @ physical base
|
|
+#if defined(CONFIG_MMU)
|
|
+ ldr \rv, =CONFIG_DEBUG_UART_VIRT @ virt base
|
|
+#else
|
|
+ ldr \rv, =CONFIG_DEBUG_UART_PHYS @ same as physical base
|
|
+#endif
|
|
+.endm
|
|
+
|
|
+.macro senduart,rd,rx
|
|
+ strb \rd, [\rx, #STM32_USART_TDR_OFF]
|
|
+.endm
|
|
+
|
|
+.macro waituart,rd,rx
|
|
+1001: ldr \rd, [\rx, #(STM32_USART_SR_OFF)] @ Read Status Register
|
|
+ tst \rd, #STM32_USART_TXE @ TXE = 1 = tx empty
|
|
+ beq 1001b
|
|
+.endm
|
|
+
|
|
+.macro busyuart,rd,rx
|
|
+1001: ldr \rd, [\rx, #(STM32_USART_SR_OFF)] @ Read Status Register
|
|
+ tst \rd, #STM32_USART_TC @ TC = 1 = tx complete
|
|
+ beq 1001b
|
|
+.endm
|
|
diff --git a/include/linux/amba/mmci.h b/include/linux/amba/mmci.h
|
|
index da8357b..c92ebc3 100644
|
|
--- a/include/linux/amba/mmci.h
|
|
+++ b/include/linux/amba/mmci.h
|
|
@@ -18,20 +18,13 @@
|
|
* mask into a value to be binary (or set some other custom bits
|
|
* in MMCIPWR) or:ed and written into the MMCIPWR register of the
|
|
* block. May also control external power based on the power_mode.
|
|
- * @status: if no GPIO read function was given to the block in
|
|
- * gpio_wp (below) this function will be called to determine
|
|
- * whether a card is present in the MMC slot or not
|
|
- * @gpio_wp: read this GPIO pin to see if the card is write protected
|
|
- * @gpio_cd: read this GPIO pin to detect card insertion
|
|
- * @cd_invert: true if the gpio_cd pin value is active low
|
|
+ * @status: if no GPIO line was given to the block in this function will
|
|
+ * be called to determine whether a card is present in the MMC slot or not
|
|
*/
|
|
struct mmci_platform_data {
|
|
unsigned int ocr_mask;
|
|
int (*ios_handler)(struct device *, struct mmc_ios *);
|
|
unsigned int (*status)(struct device *);
|
|
- int gpio_wp;
|
|
- int gpio_cd;
|
|
- bool cd_invert;
|
|
};
|
|
|
|
#endif
|
|
diff --git a/include/media/v4l2-fwnode.h b/include/media/v4l2-fwnode.h
|
|
index 9cccab6..946b48d 100644
|
|
--- a/include/media/v4l2-fwnode.h
|
|
+++ b/include/media/v4l2-fwnode.h
|
|
@@ -52,11 +52,13 @@ struct v4l2_fwnode_bus_mipi_csi2 {
|
|
* @flags: media bus (V4L2_MBUS_*) flags
|
|
* @bus_width: bus width in bits
|
|
* @data_shift: data shift in bits
|
|
+ * @max_pclk_frequency: maximum pixel clock in hertz
|
|
*/
|
|
struct v4l2_fwnode_bus_parallel {
|
|
unsigned int flags;
|
|
unsigned char bus_width;
|
|
unsigned char data_shift;
|
|
+ unsigned int pclk_max_frequency;
|
|
};
|
|
|
|
/**
|
|
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
|
|
index 0bd595a..64f6aec 100644
|
|
--- a/kernel/power/suspend.c
|
|
+++ b/kernel/power/suspend.c
|
|
@@ -36,7 +36,6 @@
|
|
#include "power.h"
|
|
|
|
const char * const pm_labels[] = {
|
|
- [PM_SUSPEND_TO_IDLE] = "freeze",
|
|
[PM_SUSPEND_STANDBY] = "standby",
|
|
[PM_SUSPEND_MEM] = "mem",
|
|
};
|
|
--
|
|
2.7.4
|
|
|