* Re: [PATCHv3 6/6] smccc: make 1.1 macros value-returning
From: Will Deacon @ 2019-08-15 16:42 UTC (permalink / raw)
To: Mark Rutland
Cc: lorenzo.pieralisi, suzuki.poulose, marc.zyngier, catalin.marinas,
will.deacon, linux, james.morse, robin.murphy, linux-arm-kernel
In-Reply-To: <20190809132245.43505-7-mark.rutland@arm.com>
On Fri, Aug 09, 2019 at 02:22:45PM +0100, Mark Rutland wrote:
> The arm_smccc_1_1_{smc,hvc}() macros for inline invocation take a res
> pointer as their final argument, matching the out-of-line SMCCC
> invocation functions.
>
> However, the inline invocation macros are variadic, so it's easy to mess
> up passsing the correct parameters.
passing
> Instead, let's make them value-returning, which is less confusing.
I'm not completely sure I agree with you here because, as far as I can
tell, it means that we have a different calling convention for 1.0 (i.e.
arm_smccc_smc()) and 1.1 (i.e. arm_smccc_1_1_smc).
Can we do the same for 1.0 as well or am I missing something?
Will
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH v2 2/2] arm64: Don't use KPTI where we have E0PD
From: Will Deacon @ 2019-08-15 16:35 UTC (permalink / raw)
To: Mark Brown; +Cc: Catalin Marinas, linux-arm-kernel, Suzuki K Poulose
In-Reply-To: <20190814183103.33707-3-broonie@kernel.org>
Hi Mark,
Thanks for respinning. Comments below...
On Wed, Aug 14, 2019 at 07:31:03PM +0100, Mark Brown wrote:
> diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h
> index fd6161336653..85552f6fceda 100644
> --- a/arch/arm64/include/asm/mmu.h
> +++ b/arch/arm64/include/asm/mmu.h
> @@ -38,6 +38,7 @@ static inline bool arm64_kernel_unmapped_at_el0(void)
> static inline bool arm64_kernel_use_ng_mappings(void)
> {
> bool tx1_bug;
> + u64 ftr;
>
> /* What's a kpti? Use global mappings if we don't know. */
> if (!IS_ENABLED(CONFIG_UNMAP_KERNEL_AT_EL0))
> @@ -59,7 +60,7 @@ static inline bool arm64_kernel_use_ng_mappings(void)
> * KASLR is enabled so we're going to be enabling kpti on non-broken
> * CPUs regardless of their susceptibility to Meltdown. Rather
> * than force everybody to go through the G -> nG dance later on,
> - * just put down non-global mappings from the beginning.
> + * just put down non-global mappings from the beginning...
> */
> if (!IS_ENABLED(CONFIG_CAVIUM_ERRATUM_27456)) {
> tx1_bug = false;
> @@ -74,6 +75,16 @@ static inline bool arm64_kernel_use_ng_mappings(void)
> tx1_bug = __cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_27456);
> }
>
> + /*
> + * ...unless we have E0PD in which case we may use that in
> + * preference to unmapping the kernel.
> + */
> + if (IS_ENABLED(CONFIG_ARM64_E0PD)) {
> + ftr = read_sysreg_s(SYS_ID_AA64MMFR2_EL1);
> + if ((ftr >> ID_AA64MMFR2_E0PD_SHIFT) & 0xf)
> + return false;
> + }
> +
> return !tx1_bug && kaslr_offset() > 0;
I'm still unsure as to how this works with the kaslr check in
kpti_install_ng_mappings(). Imagine you have a big.LITTLE system using
kaslr where the boot CPU has E0PD but the secondary CPU doesn't, and
requires kpti.
In this case, I think we'll:
1. Start off with global mappings installed by the boot CPU
2. Detect KPTI as being required on the secondary CPU
3. Avoid rewriting the page tables because kaslr_offset > 0
At this point, we've got exposed global mappings on the secondary CPU.
Thinking about this further, I think we can simply move all of the
'kaslr_offset() > 0' checks used by the kpti code (i.e. in
arm64_kernel_unmapped_at_el0(), kpti_install_ng_mappings() and
unmap_kernel_at_el0()) into a helper function which does the check for
E0PD as well. Perhaps 'kaslr_requires_kpti()' ?
I think that should simplify your patch as well. What do you think?
Will
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH V5 5/5] arm64: dts: imx8mm: Enable cpu-idle driver
From: Daniel Lezcano @ 2019-08-15 16:12 UTC (permalink / raw)
To: Anson.Huang, catalin.marinas, will, robh+dt, mark.rutland,
shawnguo, s.hauer, kernel, festevam, linux-imx, tglx,
leonard.crestez, aisheng.dong, daniel.baluta, ping.bai, l.stach,
abel.vesa, andrew.smirnov, ccaione, angus, agx, linux-arm-kernel,
linux-kernel, devicetree
In-Reply-To: <20190710063056.35689-5-Anson.Huang@nxp.com>
Hi Anson,
sorry for the late review, I've been pretty busy.
If Shawn is ok, I can pick the patches 1-4 in my tree and then this one
after you fix the comments below.
On 10/07/2019 08:30, Anson.Huang@nxp.com wrote:
[ ... ]
> + idle-states {
> + entry-method = "psci";
> +
> + cpu_sleep_wait: cpu-sleep-wait {
Is that a retention state or a powerdown? It is preferable to change the
name to the idle state naming convention given in the PSCI documentation
[1] page 16-17
> + compatible = "arm,idle-state";
> + arm,psci-suspend-param = <0x0010033>;
> + local-timer-stop;
> + entry-latency-us = <1000>;
> + exit-latency-us = <700>;
> + min-residency-us = <2700>;
> + wakeup-latency-us = <1500>;
It is pointless to specify the entry + exit *and* the wakeup-latency [2].
Thanks
-- Daniel
[1]
http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf
[2]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/cpuidle/dt_idle_states.c#n41
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH v10 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver
From: Sakari Ailus @ 2019-08-15 16:09 UTC (permalink / raw)
To: Vishal Sagar
Cc: mark.rutland, devicetree, Jacopo Mondi, Dinesh Kumar, Hyun Kwon,
Hyun Kwon, Sandip Kothari, linux-kernel, robh+dt, Michal Simek,
laurent.pinchart, Luca Ceresoli, hans.verkuil, mchehab,
linux-arm-kernel, linux-media
In-Reply-To: <20190711091612.98175-3-vishal.sagar@xilinx.com>
Hi Vishal,
Thanks for the update.
On Thu, Jul 11, 2019 at 02:46:12PM +0530, Vishal Sagar wrote:
> The Xilinx MIPI CSI-2 Rx Subsystem soft IP is used to capture images
> from MIPI CSI-2 camera sensors and output AXI4-Stream video data ready
> for image processing. Please refer to PG232 for details.
>
> The CSI2 Rx controller filters out all packets except for the packets
> with data type fixed in hardware. RAW8 packets are always allowed to
> pass through.
>
> It is also used to setup and handle interrupts and enable the core. It
> logs all the events in respective counters between streaming on and off.
>
> The driver supports only the video format bridge enabled configuration.
> Some data types like YUV 422 10bpc, RAW16, RAW20 are supported when the
> CSI v2.0 feature is enabled in design. When the VCX feature is enabled,
> the maximum number of virtual channels becomes 16 from 4.
>
> Signed-off-by: Vishal Sagar <vishal.sagar@xilinx.com>
> Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
> ---
> v10
> - Removed all V4L2 controls and events based on Sakari's comments.
> - Now stop_stream() before toggling rst_gpio
> - Updated init_mbus() to throw error on array out of bound access
> - Make events and vcx_events as counters instead of structures
> - Minor fixes in set_format() enum_mbus_code() as suggested by Sakari
>
> v9
> - Moved all controls and events to xilinx-csi2rxss.h
> - Updated name and description of controls and events
> - Get control base address from v4l2-controls.h (0x10c0)
> - Fix KConfig for dependency on VIDEO_XILINX
> - Added enum_mbus_code() support
> - Added default format to be returned on open()
> - Mark variables are const
> - Remove references to short packet in comments
> - Add check for streaming before setting active lanes control
> - strlcpy -> strscpy
> - Fix xcsi2rxss_set_format()
>
> v8
> - Use clk_bulk* APIs
> - Add gpio reset for asserting video_aresetn when stream line buffer occurs
> - Removed short packet related events and irq handling
> - V4L2_EVENT_XLNXCSIRX_SPKT and V4L2_EVENT_XLNXCSIRX_SPKT_OVF removed
> - Removed frame counter control V4L2_CID_XILINX_MIPICSISS_FRAME_COUNTER
> and xcsi2rxss_g_volatile_ctrl()
> - Minor formatting fixes
>
> v7
> - No change
>
> v6
> - No change
>
> v5
> - Removed bayer and updated related parts like set default format based
> on Luca Cersoli's comments.
> - Added correct YUV422 10bpc media bus format
>
> v4
> - Removed irq member from core structure
> - Consolidated IP config prints in xcsi2rxss_log_ipconfig()
> - Return -EINVAL in case of invalid ioctl
> - Code formatting
> - Added reviewed by Hyun Kwon
>
> v3
> - Fixed comments given by Hyun.
> - Removed DPHY 200 MHz clock. This will be controlled by DPHY driver
> - Minor code formatting
> - en_csi_v20 and vfb members removed from struct and made local to dt parsing
> - lock description updated
> - changed to ratelimited type for all dev prints in irq handler
> - Removed YUV 422 10bpc media format
>
> v2
> - Fixed comments given by Hyun and Sakari.
> - Made all bitmask using BIT() and GENMASK()
> - Removed unused definitions
> - Removed DPHY access. This will be done by separate DPHY PHY driver.
> - Added support for CSI v2.0 for YUV 422 10bpc, RAW16, RAW20 and extra
> virtual channels
> - Fixed the ports as sink and source
> - Now use the v4l2fwnode API to get number of data-lanes
> - Added clock framework support
> - Removed the close() function
> - updated the set format function
> - support only VFB enabled configuration
> drivers/media/platform/xilinx/Kconfig | 11 +
> drivers/media/platform/xilinx/Makefile | 1 +
> .../media/platform/xilinx/xilinx-csi2rxss.c | 1230 +++++++++++++++++
> 3 files changed, 1242 insertions(+)
> create mode 100644 drivers/media/platform/xilinx/xilinx-csi2rxss.c
>
> diff --git a/drivers/media/platform/xilinx/Kconfig b/drivers/media/platform/xilinx/Kconfig
> index a2773ad7c185..349da877c846 100644
> --- a/drivers/media/platform/xilinx/Kconfig
> +++ b/drivers/media/platform/xilinx/Kconfig
> @@ -10,6 +10,17 @@ config VIDEO_XILINX
>
> if VIDEO_XILINX
>
> +config VIDEO_XILINX_CSI2RXSS
> + tristate "Xilinx CSI2 Rx Subsystem"
> + depends on VIDEO_XILINX
You don't need to depend on VIDEO_XILINX here due to the condition above.
> + help
> + Driver for Xilinx MIPI CSI2 Rx Subsystem. This is a V4L sub-device
> + based driver that takes input from CSI2 Tx source and converts
> + it into an AXI4-Stream. The subsystem comprises of a CSI2 Rx
> + controller, DPHY, an optional I2C controller and a Video Format
> + Bridge. The driver is used to set the number of active lanes and
> + get short packet data.
> +
> config VIDEO_XILINX_TPG
> tristate "Xilinx Video Test Pattern Generator"
> depends on VIDEO_XILINX
> diff --git a/drivers/media/platform/xilinx/Makefile b/drivers/media/platform/xilinx/Makefile
> index 4cdc0b1ec7a5..6119a34f3043 100644
> --- a/drivers/media/platform/xilinx/Makefile
> +++ b/drivers/media/platform/xilinx/Makefile
> @@ -3,5 +3,6 @@
> xilinx-video-objs += xilinx-dma.o xilinx-vip.o xilinx-vipp.o
>
> obj-$(CONFIG_VIDEO_XILINX) += xilinx-video.o
> +obj-$(CONFIG_VIDEO_XILINX_CSI2RXSS) += xilinx-csi2rxss.o
> obj-$(CONFIG_VIDEO_XILINX_TPG) += xilinx-tpg.o
> obj-$(CONFIG_VIDEO_XILINX_VTC) += xilinx-vtc.o
> diff --git a/drivers/media/platform/xilinx/xilinx-csi2rxss.c b/drivers/media/platform/xilinx/xilinx-csi2rxss.c
> new file mode 100644
> index 000000000000..1a22ca80382e
> --- /dev/null
> +++ b/drivers/media/platform/xilinx/xilinx-csi2rxss.c
> @@ -0,0 +1,1230 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Driver for Xilinx MIPI CSI2 Rx Subsystem
> + *
> + * Copyright (C) 2016 - 2019 Xilinx, Inc.
> + *
> + * Contacts: Vishal Sagar <vishal.sagar@xilinx.com>
> + *
> + */
> +#include <linux/clk.h>
> +#include <linux/delay.h>
> +#include <linux/gpio/consumer.h>
> +#include <linux/interrupt.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/of_irq.h>
> +#include <linux/platform_device.h>
> +#include <linux/v4l2-subdev.h>
> +#include <media/media-entity.h>
> +#include <media/v4l2-common.h>
> +#include <media/v4l2-ctrls.h>
> +#include <media/v4l2-fwnode.h>
> +#include <media/v4l2-subdev.h>
> +#include "xilinx-vip.h"
> +
> +/* Register register map */
> +#define XCSI_CCR_OFFSET 0x00
> +#define XCSI_CCR_SOFTRESET BIT(1)
> +#define XCSI_CCR_ENABLE BIT(0)
> +
> +#define XCSI_PCR_OFFSET 0x04
> +#define XCSI_PCR_MAXLANES_MASK GENMASK(4, 3)
> +#define XCSI_PCR_ACTLANES_MASK GENMASK(1, 0)
> +
> +#define XCSI_CSR_OFFSET 0x10
> +#define XCSI_CSR_PKTCNT GENMASK(31, 16)
> +#define XCSI_CSR_SPFIFOFULL BIT(3)
> +#define XCSI_CSR_SPFIFONE BIT(2)
> +#define XCSI_CSR_SLBF BIT(1)
> +#define XCSI_CSR_RIPCD BIT(0)
> +
> +#define XCSI_GIER_OFFSET 0x20
> +#define XCSI_GIER_GIE BIT(0)
> +
> +#define XCSI_ISR_OFFSET 0x24
> +#define XCSI_IER_OFFSET 0x28
> +
> +#define XCSI_ISR_FR BIT(31)
> +#define XCSI_ISR_VCXFE BIT(30)
> +#define XCSI_ISR_WCC BIT(22)
> +#define XCSI_ISR_ILC BIT(21)
> +#define XCSI_ISR_SPFIFOF BIT(20)
> +#define XCSI_ISR_SPFIFONE BIT(19)
> +#define XCSI_ISR_SLBF BIT(18)
> +#define XCSI_ISR_STOP BIT(17)
> +#define XCSI_ISR_SOTERR BIT(13)
> +#define XCSI_ISR_SOTSYNCERR BIT(12)
> +#define XCSI_ISR_ECC2BERR BIT(11)
> +#define XCSI_ISR_ECC1BERR BIT(10)
> +#define XCSI_ISR_CRCERR BIT(9)
> +#define XCSI_ISR_DATAIDERR BIT(8)
> +#define XCSI_ISR_VC3FSYNCERR BIT(7)
> +#define XCSI_ISR_VC3FLVLERR BIT(6)
> +#define XCSI_ISR_VC2FSYNCERR BIT(5)
> +#define XCSI_ISR_VC2FLVLERR BIT(4)
> +#define XCSI_ISR_VC1FSYNCERR BIT(3)
> +#define XCSI_ISR_VC1FLVLERR BIT(2)
> +#define XCSI_ISR_VC0FSYNCERR BIT(1)
> +#define XCSI_ISR_VC0FLVLERR BIT(0)
> +
> +#define XCSI_INTR_PROT_MASK (XCSI_ISR_VC3FSYNCERR | XCSI_ISR_VC3FLVLERR |\
> + XCSI_ISR_VC2FSYNCERR | XCSI_ISR_VC2FLVLERR |\
> + XCSI_ISR_VC1FSYNCERR | XCSI_ISR_VC1FLVLERR |\
> + XCSI_ISR_VC0FSYNCERR | XCSI_ISR_VC0FLVLERR |\
> + XCSI_ISR_VCXFE)
> +
> +#define XCSI_INTR_PKTLVL_MASK (XCSI_ISR_ECC2BERR | XCSI_ISR_ECC1BERR |\
> + XCSI_ISR_CRCERR | XCSI_ISR_DATAIDERR)
> +
> +#define XCSI_INTR_DPHY_MASK (XCSI_ISR_SOTERR | XCSI_ISR_SOTSYNCERR)
> +
> +#define XCSI_INTR_SPKT_MASK (XCSI_ISR_SPFIFOF | XCSI_ISR_SPFIFONE)
> +
> +#define XCSI_INTR_ERR_MASK (XCSI_ISR_WCC | XCSI_ISR_ILC | XCSI_ISR_SLBF |\
> + XCSI_ISR_STOP)
> +
> +#define XCSI_INTR_FRAMERCVD_MASK (XCSI_ISR_FR)
> +
> +#define XCSI_ISR_ALLINTR_MASK (XCSI_INTR_PROT_MASK | XCSI_INTR_PKTLVL_MASK |\
> + XCSI_INTR_DPHY_MASK | XCSI_INTR_SPKT_MASK |\
> + XCSI_INTR_ERR_MASK | XCSI_INTR_FRAMERCVD_MASK)
> +
> +/*
> + * Removed VCXFE mask as it doesn't exist in IER
> + * Removed STOP state irq as this will keep driver in irq handler only
> + */
> +#define XCSI_IER_INTR_MASK (XCSI_ISR_ALLINTR_MASK &\
> + ~(XCSI_ISR_STOP | XCSI_ISR_VCXFE))
> +
> +#define XCSI_SPKTR_OFFSET 0x30
> +#define XCSI_SPKTR_DATA GENMASK(23, 8)
> +#define XCSI_SPKTR_VC GENMASK(7, 6)
> +#define XCSI_SPKTR_DT GENMASK(5, 0)
> +
> +#define XCSI_VCXR_OFFSET 0x34
> +#define XCSI_VCXR_VCERR GENMASK(23, 0)
> +#define XCSI_VCXR_VCSTART 4
> +#define XCSI_VCXR_VCEND 15
> +#define XCSI_VCXR_FSYNCERR BIT(1)
> +#define XCSI_VCXR_FLVLERR BIT(0)
> +
> +#define XCSI_CLKINFR_OFFSET 0x3C
> +#define XCSI_CLKINFR_STOP BIT(1)
> +
> +#define XCSI_DLXINFR_OFFSET 0x40
> +#define XCSI_DLXINFR_STOP BIT(5)
> +#define XCSI_DLXINFR_SOTERR BIT(1)
> +#define XCSI_DLXINFR_SOTSYNCERR BIT(0)
> +#define XCSI_MAXDL_COUNT 0x4
> +
> +#define XCSI_VCXINF1R_OFFSET 0x60
> +#define XCSI_VCXINF1R_LINECOUNT GENMASK(31, 16)
> +#define XCSI_VCXINF1R_LINECOUNT_SHIFT 16
> +#define XCSI_VCXINF1R_BYTECOUNT GENMASK(15, 0)
> +
> +#define XCSI_VCXINF2R_OFFSET 0x64
> +#define XCSI_VCXINF2R_DT GENMASK(5, 0)
> +#define XCSI_MAXVCX_COUNT 16
> +
> +/*
> + * The core takes less than 100 video clock cycles to reset.
> + * So choosing a timeout value larger than this.
> + */
> +#define XCSI_TIMEOUT_VAL 1000 /* us */
> +
> +/*
> + * Sink pad connected to sensor source pad.
> + * Source pad connected to next module like demosaic.
> + */
> +#define XCSI_MEDIA_PADS 2
> +#define XCSI_DEFAULT_WIDTH 1920
> +#define XCSI_DEFAULT_HEIGHT 1080
> +
> +/* Max media bus formats supported for enumeration */
> +#define XCSI_MAX_MBUS_FMTS 16
> +
> +/* Max string length for CSI Data type string */
> +#define XCSI_PXLFMT_STRLEN_MAX 16
> +
> +/* MIPI CSI2 Data Types from spec */
> +#define XCSI_DT_YUV4228B 0x1E
> +#define XCSI_DT_YUV42210B 0x1F
> +#define XCSI_DT_RGB444 0x20
> +#define XCSI_DT_RGB555 0x21
> +#define XCSI_DT_RGB565 0x22
> +#define XCSI_DT_RGB666 0x23
> +#define XCSI_DT_RGB888 0x24
> +#define XCSI_DT_RAW6 0x28
> +#define XCSI_DT_RAW7 0x29
> +#define XCSI_DT_RAW8 0x2A
> +#define XCSI_DT_RAW10 0x2B
> +#define XCSI_DT_RAW12 0x2C
> +#define XCSI_DT_RAW14 0x2D
> +#define XCSI_DT_RAW16 0x2E
> +#define XCSI_DT_RAW20 0x2F
> +
> +#define XCSI_VCX_START 4
> +#define XCSI_MAX_VC 4
> +#define XCSI_MAX_VCX 16
> +
> +#define XCSI_NEXTREG_OFFSET 4
> +
> +/* There are 2 events frame sync and frame level error per VC */
> +#define XCSI_VCX_NUM_EVENTS ((XCSI_MAX_VCX - XCSI_MAX_VC) * 2)
> +
> +/* Macro to return "true" or "false" string if bit is set */
> +#define XCSI_GET_BITSET_STR(val, mask) (val) & (mask) ? "true" : "false"
> +
> +#define XADD_MBUS(state, mbus_fmt) \
> + do { \
> + if ((state)->mbus_fmts_count < XCSI_MAX_MBUS_FMTS) { \
> + (state)->mbus_fmts[(state)->mbus_fmts_count++] =\
> + (mbus_fmt); \
> + } else { \
> + dev_err((state)->core.dev, \
> + "accessing array out of bounds!\n"); \
> + } \
> + } while (0)
> +
> +/**
> + * struct xcsi2rxss_event - Event log structure
> + * @mask: Event mask
> + * @name: Name of the event
> + */
> +struct xcsi2rxss_event {
> + u32 mask;
> + const char *name;
> +};
> +
> +static const struct xcsi2rxss_event xcsi2rxss_events[] = {
> + { XCSI_ISR_FR, "Frame Received" },
> + { XCSI_ISR_VCXFE, "VCX Frame Errors" },
> + { XCSI_ISR_WCC, "Word Count Errors" },
> + { XCSI_ISR_ILC, "Invalid Lane Count Error" },
> + { XCSI_ISR_SPFIFOF, "Short Packet FIFO OverFlow Error" },
> + { XCSI_ISR_SPFIFONE, "Short Packet FIFO Not Empty" },
> + { XCSI_ISR_SLBF, "Streamline Buffer Full Error" },
> + { XCSI_ISR_STOP, "Lane Stop State" },
> + { XCSI_ISR_SOTERR, "SOT Error" },
> + { XCSI_ISR_SOTSYNCERR, "SOT Sync Error" },
> + { XCSI_ISR_ECC2BERR, "2 Bit ECC Unrecoverable Error" },
> + { XCSI_ISR_ECC1BERR, "1 Bit ECC Recoverable Error" },
> + { XCSI_ISR_CRCERR, "CRC Error" },
> + { XCSI_ISR_DATAIDERR, "Data Id Error" },
> + { XCSI_ISR_VC3FSYNCERR, "Virtual Channel 3 Frame Sync Error" },
> + { XCSI_ISR_VC3FLVLERR, "Virtual Channel 3 Frame Level Error" },
> + { XCSI_ISR_VC2FSYNCERR, "Virtual Channel 2 Frame Sync Error" },
> + { XCSI_ISR_VC2FLVLERR, "Virtual Channel 2 Frame Level Error" },
> + { XCSI_ISR_VC1FSYNCERR, "Virtual Channel 1 Frame Sync Error" },
> + { XCSI_ISR_VC1FLVLERR, "Virtual Channel 1 Frame Level Error" },
> + { XCSI_ISR_VC0FSYNCERR, "Virtual Channel 0 Frame Sync Error" },
> + { XCSI_ISR_VC0FLVLERR, "Virtual Channel 0 Frame Level Error" }
> +};
> +
> +#define XCSI_NUM_EVENTS ARRAY_SIZE(xcsi2rxss_events)
> +
> +/*
> + * struct xcsi2rxss_core - Core configuration CSI2 Rx Subsystem device structure
> + * @dev: Platform structure
> + * @iomem: Base address of subsystem
> + * @enable_active_lanes: If number of active lanes can be modified
> + * @max_num_lanes: Maximum number of lanes present
> + * @datatype: Data type filter
> + * @events: counter for events
> + * @vcx_events: counter for vcx_events
> + * @en_vcx: If more than 4 VC are enabled
> + * @clks: array of clocks
> + * @num_clks: number of clocks
> + * @rst_gpio: reset to video_aresetn
> + */
> +struct xcsi2rxss_core {
> + struct device *dev;
> + void __iomem *iomem;
> + bool enable_active_lanes;
> + u32 max_num_lanes;
> + u32 datatype;
> + u32 events[XCSI_NUM_EVENTS];
> + u32 vcx_events[XCSI_VCX_NUM_EVENTS];
> + bool en_vcx;
> + struct clk_bulk_data *clks;
> + int num_clks;
> + struct gpio_desc *rst_gpio;
> +};
> +
> +/**
> + * struct xcsi2rxss_state - CSI2 Rx Subsystem device structure
> + * @core: Core structure for MIPI CSI2 Rx Subsystem
> + * @subdev: The v4l2 subdev structure
> + * @format: Active V4L2 formats on each pad
> + * @default_format: Default V4L2 format
> + * @lock: mutex for accessing this structure
> + * @pads: media pads
> + * @mbus_fmts: List of media bus formats for enum_mbus_code
> + * @mbus_fmts_count: Number of media bus formats
> + * @streaming: Flag for storing streaming state
> + *
> + * This structure contains the device driver related parameters
> + */
> +struct xcsi2rxss_state {
> + struct xcsi2rxss_core core;
> + struct v4l2_subdev subdev;
> + struct v4l2_mbus_framefmt format;
> + struct v4l2_mbus_framefmt default_format;
> + /* used to protect access to this struct */
> + struct mutex lock;
> + struct media_pad pads[XCSI_MEDIA_PADS];
> + u32 mbus_fmts[XCSI_MAX_MBUS_FMTS];
> + u32 mbus_fmts_count;
> + bool streaming;
> +};
> +
> +static const struct clk_bulk_data xcsi2rxss_clks[] = {
> + { .id = "lite_aclk" },
> + { .id = "video_aclk" },
> +};
> +
> +static inline struct xcsi2rxss_state *
> +to_xcsi2rxssstate(struct v4l2_subdev *subdev)
> +{
> + return container_of(subdev, struct xcsi2rxss_state, subdev);
> +}
> +
> +/*
> + * Register related operations
> + */
> +static inline u32 xcsi2rxss_read(struct xcsi2rxss_core *xcsi2rxss, u32 addr)
> +{
> + return ioread32(xcsi2rxss->iomem + addr);
> +}
> +
> +static inline void xcsi2rxss_write(struct xcsi2rxss_core *xcsi2rxss, u32 addr,
> + u32 value)
> +{
> + iowrite32(value, xcsi2rxss->iomem + addr);
> +}
> +
> +static inline void xcsi2rxss_clr(struct xcsi2rxss_core *xcsi2rxss, u32 addr,
> + u32 clr)
> +{
> + xcsi2rxss_write(xcsi2rxss, addr,
> + xcsi2rxss_read(xcsi2rxss, addr) & ~clr);
> +}
> +
> +static inline void xcsi2rxss_set(struct xcsi2rxss_core *xcsi2rxss, u32 addr,
> + u32 set)
> +{
> + xcsi2rxss_write(xcsi2rxss, addr,
> + xcsi2rxss_read(xcsi2rxss, addr) | set);
Fits on a single line.
> +}
> +
> +static void xcsi2rxss_enable(struct xcsi2rxss_core *core)
> +{
> + xcsi2rxss_set(core, XCSI_CCR_OFFSET, XCSI_CCR_ENABLE);
> +}
> +
> +static void xcsi2rxss_disable(struct xcsi2rxss_core *core)
> +{
> + xcsi2rxss_clr(core, XCSI_CCR_OFFSET, XCSI_CCR_ENABLE);
> +}
> +
> +static void xcsi2rxss_intr_enable(struct xcsi2rxss_core *core)
> +{
> + xcsi2rxss_clr(core, XCSI_GIER_OFFSET, XCSI_GIER_GIE);
> + xcsi2rxss_write(core, XCSI_IER_OFFSET, XCSI_IER_INTR_MASK);
> + xcsi2rxss_set(core, XCSI_GIER_OFFSET, XCSI_GIER_GIE);
> +}
> +
> +static void xcsi2rxss_intr_disable(struct xcsi2rxss_core *core)
> +{
> + xcsi2rxss_clr(core, XCSI_IER_OFFSET, XCSI_IER_INTR_MASK);
> + xcsi2rxss_clr(core, XCSI_GIER_OFFSET, XCSI_GIER_GIE);
> +}
> +
> +/**
> + * xcsi2rxss_reset - Does a soft reset of the MIPI CSI2 Rx Subsystem
> + * @core: Core Xilinx CSI2 Rx Subsystem structure pointer
> + *
> + * Core takes less than 100 video clock cycles to reset.
> + * So a larger timeout value is chosen for margin.
> + *
> + * Return: 0 - on success OR -ETIME if reset times out
> + */
> +static int xcsi2rxss_reset(struct xcsi2rxss_core *core)
> +{
> + u32 timeout = XCSI_TIMEOUT_VAL;
> +
> + xcsi2rxss_set(core, XCSI_CCR_OFFSET, XCSI_CCR_SOFTRESET);
> +
> + while (xcsi2rxss_read(core, XCSI_CSR_OFFSET) & XCSI_CSR_RIPCD) {
> + if (timeout == 0) {
> + dev_err(core->dev, "soft reset timed out!\n");
> + return -ETIME;
> + }
> +
> + timeout--;
> + udelay(1);
> + }
> +
> + xcsi2rxss_clr(core, XCSI_CCR_OFFSET, XCSI_CCR_SOFTRESET);
> + return 0;
> +}
> +
> +static void xcsi2rxss_reset_event_counters(struct xcsi2rxss_state *state)
> +{
> + unsigned int i;
> +
> + for (i = 0; i < XCSI_NUM_EVENTS; i++)
> + state->core.events[i] = 0;
> +
> + for (i = 0; i < XCSI_VCX_NUM_EVENTS; i++)
> + state->core.vcx_events[i] = 0;
> +}
> +
> +/* Print event counters */
> +static void xcsi2rxss_log_counters(struct xcsi2rxss_state *state)
> +{
> + struct xcsi2rxss_core *core = &state->core;
> + unsigned int i;
> +
> + for (i = 0; i < XCSI_NUM_EVENTS; i++) {
> + if (core->events[i] > 0) {
> + dev_info(core->dev, "%s events: %d\n",
> + xcsi2rxss_events[i].name,
> + core->events[i]);
> + }
> + }
> +
> + if (core->en_vcx) {
> + for (i = 0; i < XCSI_VCX_NUM_EVENTS; i++) {
> + if (core->vcx_events[i] > 0) {
> + dev_info(core->dev,
> + "VC %d Frame %s err vcx events: %d\n",
> + (i / 2) + XCSI_VCX_START,
> + i & 1 ? "Sync" : "Level",
> + core->vcx_events[i]);
> + }
> + }
> + }
> +}
> +
> +static void xcsi2rxss_log_ipconfig(struct xcsi2rxss_state *state)
> +{
> + struct xcsi2rxss_core *core = &state->core;
> +
> + dev_dbg(core->dev, "****** Xilinx MIPI CSI2 Rx SS IP Config ******\n");
> + dev_dbg(core->dev, "vcx is %s", core->en_vcx ? "enabled" : "disabled");
> + dev_dbg(core->dev, "Enable active lanes property is %s\n",
> + core->enable_active_lanes ? "present" : "absent");
> + dev_dbg(core->dev, "Max lanes = %d", core->max_num_lanes);
> + dev_dbg(core->dev, "Pixel format set as 0x%x\n", core->datatype);
> + dev_dbg(core->dev, "**********************************************\n");
> +}
> +
> +/**
> + * xcsi2rxss_log_status - Logs the status of the CSI-2 Receiver
> + * @sd: Pointer to V4L2 subdevice structure
> + *
> + * This function prints the current status of Xilinx MIPI CSI-2
> + *
> + * Return: 0 on success
> + */
> +static int xcsi2rxss_log_status(struct v4l2_subdev *sd)
> +{
> + struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
> + struct xcsi2rxss_core *core = &xcsi2rxss->core;
> + u32 reg, data;
> + unsigned int i, max_vc;
> +
> + mutex_lock(&xcsi2rxss->lock);
> +
> + xcsi2rxss_log_ipconfig(xcsi2rxss);
> +
> + xcsi2rxss_log_counters(xcsi2rxss);
> +
> + dev_info(core->dev, "***** Core Status *****\n");
> + data = xcsi2rxss_read(core, XCSI_CSR_OFFSET);
> + dev_info(core->dev, "Short Packet FIFO Full = %s\n",
> + XCSI_GET_BITSET_STR(data, XCSI_CSR_SPFIFOFULL));
> + dev_info(core->dev, "Short Packet FIFO Not Empty = %s\n",
> + XCSI_GET_BITSET_STR(data, XCSI_CSR_SPFIFONE));
> + dev_info(core->dev, "Stream line buffer full = %s\n",
> + XCSI_GET_BITSET_STR(data, XCSI_CSR_SLBF));
> + dev_info(core->dev, "Soft reset/Core disable in progress = %s\n",
> + XCSI_GET_BITSET_STR(data, XCSI_CSR_RIPCD));
> +
> + /* Clk & Lane Info */
> + dev_info(core->dev, "******** Clock Lane Info *********\n");
> + data = xcsi2rxss_read(core, XCSI_CLKINFR_OFFSET);
> + dev_info(core->dev, "Clock Lane in Stop State = %s\n",
> + XCSI_GET_BITSET_STR(data, XCSI_CLKINFR_STOP));
> +
> + dev_info(core->dev, "******** Data Lane Info *********\n");
> + dev_info(core->dev, "Lane\tSoT Error\tSoT Sync Error\tStop State\n");
> + reg = XCSI_DLXINFR_OFFSET;
> + for (i = 0; i < XCSI_MAXDL_COUNT; i++) {
> + data = xcsi2rxss_read(core, reg);
> +
> + dev_info(core->dev, "%d\t%s\t\t%s\t\t%s\n", i,
> + XCSI_GET_BITSET_STR(data, XCSI_DLXINFR_SOTERR),
> + XCSI_GET_BITSET_STR(data, XCSI_DLXINFR_SOTSYNCERR),
> + XCSI_GET_BITSET_STR(data, XCSI_DLXINFR_STOP));
> +
> + reg += XCSI_NEXTREG_OFFSET;
> + }
> +
> + /* Virtual Channel Image Information */
> + dev_info(core->dev, "********** Virtual Channel Info ************\n");
> + dev_info(core->dev, "VC\tLine Count\tByte Count\tData Type\n");
> + if (core->en_vcx)
> + max_vc = XCSI_MAX_VCX;
> + else
> + max_vc = XCSI_MAX_VC;
> +
> + reg = XCSI_VCXINF1R_OFFSET;
> + for (i = 0; i < max_vc; i++) {
> + u32 line_count, byte_count, data_type;
> +
> + /* Get line and byte count from VCXINFR1 Register */
> + data = xcsi2rxss_read(core, reg);
> + byte_count = data & XCSI_VCXINF1R_BYTECOUNT;
> + line_count = data & XCSI_VCXINF1R_LINECOUNT;
> + line_count >>= XCSI_VCXINF1R_LINECOUNT_SHIFT;
> +
> + /* Get data type from VCXINFR2 Register */
> + reg += XCSI_NEXTREG_OFFSET;
> + data = xcsi2rxss_read(core, reg);
> + data_type = data & XCSI_VCXINF2R_DT;
> +
> + dev_info(core->dev, "%d\t%d\t\t%d\t\t0x%x\n", i, line_count,
> + byte_count, data_type);
> +
> + /* Move to next pair of VC Info registers */
> + reg += XCSI_NEXTREG_OFFSET;
> + }
> +
> + mutex_unlock(&xcsi2rxss->lock);
> +
> + return 0;
> +}
> +
> +static int xcsi2rxss_start_stream(struct xcsi2rxss_state *state)
> +{
> + struct xcsi2rxss_core *core = &state->core;
> + int ret = 0;
> +
> + xcsi2rxss_enable(core);
> +
> + ret = xcsi2rxss_reset(core);
> + if (ret < 0) {
> + state->streaming = false;
> + return ret;
> + }
You'll need to start streaming on the upstream sub-device somewhere in this
function.
> +
> + xcsi2rxss_intr_enable(core);
> + state->streaming = true;
> +
> + return ret;
> +}
> +
> +static void xcsi2rxss_stop_stream(struct xcsi2rxss_state *state)
> +{
> + struct xcsi2rxss_core *core = &state->core;
> +
> + xcsi2rxss_intr_disable(core);
> + xcsi2rxss_disable(core);
> + state->streaming = false;
And stop it here.
> +}
> +
> +/**
> + * xcsi2rxss_irq_handler - Interrupt handler for CSI-2
> + * @irq: IRQ number
> + * @dev_id: Pointer to device state
> + *
> + * In the interrupt handler, a list of event counters are updated for
> + * corresponding interrupts. This is useful to get status / debug.
> + *
> + * Return: IRQ_HANDLED after handling interrupts
> + * IRQ_NONE is no interrupts
> + */
> +static irqreturn_t xcsi2rxss_irq_handler(int irq, void *dev_id)
> +{
> + struct xcsi2rxss_state *state = (struct xcsi2rxss_state *)dev_id;
> + struct xcsi2rxss_core *core = &state->core;
> + u32 status;
> +
> + status = xcsi2rxss_read(core, XCSI_ISR_OFFSET) & XCSI_ISR_ALLINTR_MASK;
> + dev_dbg_ratelimited(core->dev, "interrupt status = 0x%08x\n", status);
> +
> + if (!status)
> + return IRQ_NONE;
> +
> + /* Received a short packet */
> + if (status & XCSI_ISR_SPFIFONE) {
> + dev_dbg_ratelimited(core->dev, "Short packet = 0x%08x\n",
> + xcsi2rxss_read(core, XCSI_SPKTR_OFFSET));
> + }
> +
> + /* Short packet FIFO overflow */
> + if (status & XCSI_ISR_SPFIFOF)
> + dev_dbg_ratelimited(core->dev, "Short packet FIFO overflowed\n");
> +
> + /*
> + * Stream line buffer full
> + * This means there is a backpressure from downstream IP
> + */
> + if (status & XCSI_ISR_SLBF) {
> + dev_alert_ratelimited(core->dev, "Stream Line Buffer Full!\n");
> + xcsi2rxss_stop_stream(state);
> + if (core->rst_gpio) {
> + gpiod_set_value(core->rst_gpio, 1);
> + /* minimum 40 dphy_clk_200M cycles */
> + ndelay(250);
> + gpiod_set_value(core->rst_gpio, 0);
> + }
> + }
> +
> + /* Increment event counters */
> + if (status & XCSI_ISR_ALLINTR_MASK) {
> + unsigned int i;
> +
> + for (i = 0; i < XCSI_NUM_EVENTS; i++) {
> + if (!(status & xcsi2rxss_events[i].mask))
> + continue;
> + core->events[i]++;
> + dev_dbg_ratelimited(core->dev, "%s: %d\n",
> + xcsi2rxss_events[i].name,
> + core->events[i]);
> + }
> +
> + if (status & XCSI_ISR_VCXFE && core->en_vcx) {
> + u32 vcxstatus;
> +
> + vcxstatus = xcsi2rxss_read(core, XCSI_VCXR_OFFSET);
> + vcxstatus &= XCSI_VCXR_VCERR;
> + for (i = 0; i < XCSI_VCX_NUM_EVENTS; i++) {
> + if (!(vcxstatus & (1 << i)))
> + continue;
> + core->vcx_events[i]++;
> + }
> + xcsi2rxss_write(core, XCSI_VCXR_OFFSET, vcxstatus);
> + }
> + }
> +
> + xcsi2rxss_write(core, XCSI_ISR_OFFSET, status);
> + return IRQ_HANDLED;
> +}
> +
> +/**
> + * xcsi2rxss_s_stream - It is used to start/stop the streaming.
> + * @sd: V4L2 Sub device
> + * @enable: Flag (True / False)
> + *
> + * This function controls the start or stop of streaming for the
> + * Xilinx MIPI CSI-2 Rx Subsystem.
> + *
> + * Return: 0 on success, errors otherwise
> + */
> +static int xcsi2rxss_s_stream(struct v4l2_subdev *sd, int enable)
> +{
> + struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
> + int ret = 0;
> +
> + mutex_lock(&xcsi2rxss->lock);
> +
> + if (enable) {
> + if (!xcsi2rxss->streaming) {
> + /* reset the event counters */
> + xcsi2rxss_reset_event_counters(xcsi2rxss);
> + ret = xcsi2rxss_start_stream(xcsi2rxss);
> + }
> + } else {
> + if (xcsi2rxss->streaming) {
> + struct gpio_desc *rst = xcsi2rxss->core.rst_gpio;
> +
> + xcsi2rxss_stop_stream(xcsi2rxss);
> + if (rst) {
> + gpiod_set_value_cansleep(rst, 1);
> + usleep_range(1, 2);
> + gpiod_set_value_cansleep(rst, 0);
> + }
> + }
> + }
> +
> + mutex_unlock(&xcsi2rxss->lock);
> + return ret;
> +}
> +
> +static struct v4l2_mbus_framefmt *
> +__xcsi2rxss_get_pad_format(struct xcsi2rxss_state *xcsi2rxss,
> + struct v4l2_subdev_pad_config *cfg,
> + unsigned int pad, u32 which)
> +{
> + switch (which) {
> + case V4L2_SUBDEV_FORMAT_TRY:
> + return v4l2_subdev_get_try_format(&xcsi2rxss->subdev, cfg, pad);
> + case V4L2_SUBDEV_FORMAT_ACTIVE:
> + return &xcsi2rxss->format;
> + default:
> + return NULL;
> + }
> +}
> +
> +/**
> + * xcsi2rxss_get_format - Get the pad format
> + * @sd: Pointer to V4L2 Sub device structure
> + * @cfg: Pointer to sub device pad information structure
> + * @fmt: Pointer to pad level media bus format
> + *
> + * This function is used to get the pad format information.
> + *
> + * Return: 0 on success
> + */
> +static int xcsi2rxss_get_format(struct v4l2_subdev *sd,
> + struct v4l2_subdev_pad_config *cfg,
> + struct v4l2_subdev_format *fmt)
> +{
> + struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
> +
> + mutex_lock(&xcsi2rxss->lock);
> + fmt->format = *__xcsi2rxss_get_pad_format(xcsi2rxss, cfg, fmt->pad,
> + fmt->which);
> + mutex_unlock(&xcsi2rxss->lock);
> +
> + return 0;
> +}
> +
> +/**
> + * xcsi2rxss_set_format - This is used to set the pad format
> + * @sd: Pointer to V4L2 Sub device structure
> + * @cfg: Pointer to sub device pad information structure
> + * @fmt: Pointer to pad level media bus format
> + *
> + * This function is used to set the pad format. Since the pad format is fixed
> + * in hardware, it can't be modified on run time. So when a format set is
> + * requested by application, all parameters except the format type is saved
> + * for the pad and the original pad format is sent back to the application.
> + *
> + * Return: 0 on success
> + */
> +static int xcsi2rxss_set_format(struct v4l2_subdev *sd,
> + struct v4l2_subdev_pad_config *cfg,
> + struct v4l2_subdev_format *fmt)
> +{
> + struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
> + struct xcsi2rxss_core *core = &xcsi2rxss->core;
> + struct v4l2_mbus_framefmt *__format;
> +
> + /* only sink pad format can be updated */
> + mutex_lock(&xcsi2rxss->lock);
> +
> + /*
> + * Only the format->code parameter matters for CSI as the
> + * CSI format cannot be changed at runtime.
> + * Ensure that format to set is copied to over to CSI pad format
> + */
> + __format = __xcsi2rxss_get_pad_format(xcsi2rxss, cfg,
> + fmt->pad, fmt->which);
> +
> + if (fmt->pad == XVIP_PAD_SOURCE) {
> + fmt->format = *__format;
> + mutex_unlock(&xcsi2rxss->lock);
> + return 0;
> + }
> +
> + /*
> + * RAW8 is supported in all datatypes. So if requested media bus format
> + * is of RAW8 type, then allow to be set. In case core is configured to
> + * other RAW, YUV422 8/10 or RGB888, set appropriate media bus format.
> + */
> + if (!((fmt->format.code == MEDIA_BUS_FMT_SBGGR8_1X8 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGBRG8_1X8 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGRBG8_1X8 ||
> + fmt->format.code == MEDIA_BUS_FMT_SRGGB8_1X8) ||
> + (core->datatype == XCSI_DT_RAW10 &&
> + (fmt->format.code == MEDIA_BUS_FMT_SBGGR10_1X10 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGBRG10_1X10 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGRBG10_1X10 ||
> + fmt->format.code == MEDIA_BUS_FMT_SRGGB10_1X10)) ||
> + (core->datatype == XCSI_DT_RAW12 &&
> + (fmt->format.code == MEDIA_BUS_FMT_SBGGR12_1X12 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGBRG12_1X12 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGRBG12_1X12 ||
> + fmt->format.code == MEDIA_BUS_FMT_SRGGB12_1X12)) ||
> + (core->datatype == XCSI_DT_RAW14 &&
> + (fmt->format.code == MEDIA_BUS_FMT_SBGGR14_1X14 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGBRG14_1X14 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGRBG14_1X14 ||
> + fmt->format.code == MEDIA_BUS_FMT_SRGGB14_1X14)) ||
> + (core->datatype == XCSI_DT_RAW16 &&
> + (fmt->format.code == MEDIA_BUS_FMT_SBGGR16_1X16 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGBRG16_1X16 ||
> + fmt->format.code == MEDIA_BUS_FMT_SGRBG16_1X16 ||
> + fmt->format.code == MEDIA_BUS_FMT_SRGGB16_1X16)) ||
> + (core->datatype == XCSI_DT_YUV4228B &&
> + fmt->format.code == MEDIA_BUS_FMT_UYVY8_1X16) ||
> + (core->datatype == XCSI_DT_YUV42210B &&
> + fmt->format.code == MEDIA_BUS_FMT_UYVY10_1X20) ||
> + (core->datatype == XCSI_DT_RGB888 &&
> + fmt->format.code == MEDIA_BUS_FMT_RBG888_1X24))) {
> + /* Restore the original pad format code */
> + dev_dbg(core->dev, "Unsupported media bus format");
> + fmt->format.code = __format->code;
> + }
> +
> + *__format = fmt->format;
Did I already ask whether there are any limits on width or height for this
device?
> + mutex_unlock(&xcsi2rxss->lock);
> +
> + return 0;
> +}
> +
> +/*
> + * xcsi2rxss_enum_mbus_code - Handle pixel format enumeration
> + * @sd : pointer to v4l2 subdev structure
> + * @cfg: V4L2 subdev pad configuration
> + * @code : pointer to v4l2_subdev_mbus_code_enum structure
> + *
> + * Return: -EINVAL or zero on success
> + */
> +int xcsi2rxss_enum_mbus_code(struct v4l2_subdev *sd,
> + struct v4l2_subdev_pad_config *cfg,
> + struct v4l2_subdev_mbus_code_enum *code)
> +{
> + struct xcsi2rxss_state *state = to_xcsi2rxssstate(sd);
> +
> + if (code->index >= state->mbus_fmts_count)
> + return -EINVAL;
> +
> + code->code = state->mbus_fmts[code->index];
> +
> + return 0;
> +}
> +
> +/**
> + * xcsi2rxss_open - Called on v4l2_open()
> + * @sd: Pointer to V4L2 sub device structure
> + * @fh: Pointer to V4L2 File handle
> + *
> + * This function is called on v4l2_open(). It sets the default format
> + * for both pads.
> + *
> + * Return: 0 on success
> + */
> +static int xcsi2rxss_open(struct v4l2_subdev *sd,
> + struct v4l2_subdev_fh *fh)
> +{
> + struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
> + struct v4l2_mbus_framefmt *format;
> + unsigned int i;
> +
> + for (i = 0; i < XCSI_MEDIA_PADS; i++) {
> + format = v4l2_subdev_get_try_format(sd, fh->pad, i);
> + *format = xcsi2rxss->default_format;
> + }
> +
> + return 0;
> +}
> +
> +/* -----------------------------------------------------------------------------
> + * Media Operations
> + */
> +
> +static const struct media_entity_operations xcsi2rxss_media_ops = {
> + .link_validate = v4l2_subdev_link_validate
> +};
> +
> +static const struct v4l2_subdev_core_ops xcsi2rxss_core_ops = {
> + .log_status = xcsi2rxss_log_status,
> +};
> +
> +static const struct v4l2_subdev_video_ops xcsi2rxss_video_ops = {
> + .s_stream = xcsi2rxss_s_stream
> +};
> +
> +static const struct v4l2_subdev_pad_ops xcsi2rxss_pad_ops = {
> + .get_fmt = xcsi2rxss_get_format,
> + .set_fmt = xcsi2rxss_set_format,
> + .enum_mbus_code = xcsi2rxss_enum_mbus_code,
You'll need link_validate set to v4l2_subdev_link_validate_default here.
> +};
> +
> +static const struct v4l2_subdev_ops xcsi2rxss_ops = {
> + .core = &xcsi2rxss_core_ops,
> + .video = &xcsi2rxss_video_ops,
> + .pad = &xcsi2rxss_pad_ops
> +};
> +
> +static const struct v4l2_subdev_internal_ops xcsi2rxss_internal_ops = {
> + .open = xcsi2rxss_open,
> +};
> +
> +static void xcsi2rxss_set_default_format(struct xcsi2rxss_state *state)
> +{
> + struct xcsi2rxss_core *core = &state->core;
> +
> + memset(&state->default_format, 0, sizeof(state->default_format));
> +
> + switch (core->datatype) {
> + case XCSI_DT_YUV4228B:
> + state->default_format.code = MEDIA_BUS_FMT_UYVY8_1X16;
> + break;
> + case XCSI_DT_RGB888:
> + state->default_format.code = MEDIA_BUS_FMT_RBG888_1X24;
> + break;
> + case XCSI_DT_YUV42210B:
> + state->default_format.code = MEDIA_BUS_FMT_UYVY10_1X20;
> + break;
> + case XCSI_DT_RAW10:
> + state->default_format.code = MEDIA_BUS_FMT_SRGGB10_1X10;
> + break;
> + case XCSI_DT_RAW12:
> + state->default_format.code = MEDIA_BUS_FMT_SRGGB12_1X12;
> + break;
> + case XCSI_DT_RAW14:
> + state->default_format.code = MEDIA_BUS_FMT_SRGGB14_1X14;
> + break;
> + case XCSI_DT_RAW16:
> + state->default_format.code = MEDIA_BUS_FMT_SRGGB16_1X16;
> + break;
> + case XCSI_DT_RAW8:
> + case XCSI_DT_RGB444:
> + case XCSI_DT_RGB555:
> + case XCSI_DT_RGB565:
> + case XCSI_DT_RGB666:
> + state->default_format.code = MEDIA_BUS_FMT_SRGGB8_1X8;
> + break;
> + }
> +
> + state->default_format.field = V4L2_FIELD_NONE;
> + state->default_format.colorspace = V4L2_COLORSPACE_SRGB;
> + state->default_format.width = XCSI_DEFAULT_WIDTH;
> + state->default_format.height = XCSI_DEFAULT_HEIGHT;
> +
> + dev_dbg(core->dev, "default mediabus format = 0x%x",
> + state->default_format.code);
> +}
> +
> +static void xcsi2rxss_init_mbus_fmts(struct xcsi2rxss_state *state)
> +{
> + struct xcsi2rxss_core *core = &state->core;
> +
> + XADD_MBUS(state, MEDIA_BUS_FMT_SRGGB8_1X8);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SBGGR8_1X8);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGRBG8_1X8);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGBRG8_1X8);
> +
> + switch (core->datatype) {
> + case XCSI_DT_RAW10:
> + XADD_MBUS(state, MEDIA_BUS_FMT_SRGGB10_1X10);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SBGGR10_1X10);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGRBG10_1X10);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGBRG10_1X10);
> + break;
> + case XCSI_DT_RAW12:
> + XADD_MBUS(state, MEDIA_BUS_FMT_SRGGB12_1X12);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SBGGR12_1X12);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGRBG12_1X12);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGBRG12_1X12);
> + break;
> + case XCSI_DT_RAW14:
> + XADD_MBUS(state, MEDIA_BUS_FMT_SRGGB14_1X14);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SBGGR14_1X14);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGRBG14_1X14);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGBRG14_1X14);
> + break;
> + case XCSI_DT_RAW16:
> + XADD_MBUS(state, MEDIA_BUS_FMT_SRGGB16_1X16);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SBGGR16_1X16);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGRBG16_1X16);
> + XADD_MBUS(state, MEDIA_BUS_FMT_SGBRG16_1X16);
> + break;
> + case XCSI_DT_YUV4228B:
> + XADD_MBUS(state, MEDIA_BUS_FMT_UYVY8_1X16);
> + break;
> + case XCSI_DT_RGB888:
> + XADD_MBUS(state, MEDIA_BUS_FMT_RBG888_1X24);
> + break;
> + case XCSI_DT_YUV42210B:
> + XADD_MBUS(state, MEDIA_BUS_FMT_UYVY10_1X20);
> + break;
> + default:
> + dev_err(core->dev, "Invalid data type!\n");
> + }
> +}
> +
> +static int xcsi2rxss_parse_of(struct xcsi2rxss_state *xcsi2rxss)
> +{
> + struct xcsi2rxss_core *core = &xcsi2rxss->core;
> + struct device_node *node = xcsi2rxss->core.dev->of_node;
> + struct device_node *ports = NULL;
> + struct device_node *port = NULL;
> + unsigned int nports, irq;
> + bool en_csi_v20, vfb;
> + int ret;
> +
> + en_csi_v20 = of_property_read_bool(node, "xlnx,en-csi-v2-0");
> + if (en_csi_v20)
> + core->en_vcx = of_property_read_bool(node, "xlnx,en-vcx");
> +
> + core->enable_active_lanes =
> + of_property_read_bool(node, "xlnx,en-active-lanes");
> +
> + ret = of_property_read_u32(node, "xlnx,csi-pxl-format",
> + &core->datatype);
> + if (ret < 0) {
> + dev_err(core->dev, "missing xlnx,csi-pxl-format property\n");
> + return ret;
> + }
> +
> + switch (core->datatype) {
> + case XCSI_DT_YUV4228B:
> + case XCSI_DT_RGB444:
> + case XCSI_DT_RGB555:
> + case XCSI_DT_RGB565:
> + case XCSI_DT_RGB666:
> + case XCSI_DT_RGB888:
> + case XCSI_DT_RAW6:
> + case XCSI_DT_RAW7:
> + case XCSI_DT_RAW8:
> + case XCSI_DT_RAW10:
> + case XCSI_DT_RAW12:
> + case XCSI_DT_RAW14:
> + break;
> + case XCSI_DT_YUV42210B:
> + case XCSI_DT_RAW16:
> + case XCSI_DT_RAW20:
> + if (!en_csi_v20) {
> + ret = -EINVAL;
> + dev_dbg(core->dev, "enable csi v2 for this pixel format");
> + }
> + break;
> + default:
> + ret = -EINVAL;
> + }
> + if (ret < 0) {
> + dev_err(core->dev, "invalid csi-pxl-format property!\n");
> + return ret;
> + }
> +
> + vfb = of_property_read_bool(node, "xlnx,vfb");
> + if (!vfb) {
> + dev_err(core->dev, "failed as VFB is disabled!\n");
> + return -EINVAL;
> + }
> +
> + ports = of_get_child_by_name(node, "ports");
> + if (!ports)
> + ports = node;
> +
> + nports = 0;
> + for_each_child_of_node(ports, port) {
> + struct device_node *endpoint;
> + struct v4l2_fwnode_endpoint v4lendpoint;
> + int ret;
> +
> + if (!port->name || of_node_cmp(port->name, "port"))
> + continue;
> +
> + endpoint = of_get_next_child(port, NULL);
> + if (!endpoint) {
> + dev_err(core->dev, "No port at\n");
> + return -EINVAL;
> + }
You shouldn't parse the graph data structure yourself.
Could you use fwnode_graph_get_endpoint_by_id(), and work it from there
without using an enumeration? You have two endpoints in there after all in
two ports.
Please see drivers/media/pci/intel/ipu3/ipu3-cio2.c for an example.
> +
> + /*
> + * since first port is sink port and it contains
> + * all info about data-lanes and cfa-pattern,
> + * don't parse second port but only check if exists
> + */
> + if (nports == XVIP_PAD_SOURCE) {
> + dev_dbg(core->dev, "no need to parse source port");
> + nports++;
> + of_node_put(endpoint);
> + continue;
> + }
> +
> + ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(endpoint),
> + &v4lendpoint);
Please set the bus_type to what you need on that port, e.g.
V4L2_MBUS_CSI2_DPHY, and set the rest to zero.
> + of_node_put(endpoint);
> + if (ret)
> + return ret;
> +
> + dev_dbg(core->dev, "%s : port %d bus type = %d\n",
> + __func__, nports, v4lendpoint.bus_type);
> +
> + if (v4lendpoint.bus_type == V4L2_MBUS_CSI2_DPHY) {
> + dev_dbg(core->dev, "%s : base.port = %d base.id = %d\n",
> + __func__, v4lendpoint.base.port,
> + v4lendpoint.base.id);
> +
> + dev_dbg(core->dev, "%s : mipi number lanes = %d\n",
> + __func__,
> + v4lendpoint.bus.mipi_csi2.num_data_lanes);
> +
> + core->max_num_lanes =
> + v4lendpoint.bus.mipi_csi2.num_data_lanes;
> + }
> +
> + /* Count the number of ports. */
> + nports++;
> + }
> +
> + if (nports != XCSI_MEDIA_PADS) {
> + dev_err(core->dev, "invalid number of ports %u\n", nports);
> + return -EINVAL;
> + }
> +
> + /* Register interrupt handler */
> + irq = irq_of_parse_and_map(node, 0);
> + ret = devm_request_irq(core->dev, irq, xcsi2rxss_irq_handler,
> + IRQF_SHARED, "xilinx-csi2rxss", xcsi2rxss);
> + if (ret) {
> + dev_err(core->dev, "Err = %d Interrupt handler reg failed!\n",
> + ret);
> + return ret;
> + }
> +
> + xcsi2rxss_log_ipconfig(xcsi2rxss);
> +
> + return 0;
> +}
> +
> +static int xcsi2rxss_probe(struct platform_device *pdev)
> +{
> + struct v4l2_subdev *subdev;
> + struct xcsi2rxss_state *xcsi2rxss;
> + struct xcsi2rxss_core *core;
> + struct resource *res;
> + int ret;
> +
> + xcsi2rxss = devm_kzalloc(&pdev->dev, sizeof(*xcsi2rxss), GFP_KERNEL);
> + if (!xcsi2rxss)
> + return -ENOMEM;
> +
> + core = &xcsi2rxss->core;
> + core->dev = &pdev->dev;
> +
> + core->clks = devm_kmemdup(core->dev, xcsi2rxss_clks,
> + sizeof(xcsi2rxss_clks), GFP_KERNEL);
> + if (!core->clks)
> + return -ENOMEM;
> +
> + /* Reset GPIO */
> + core->rst_gpio = devm_gpiod_get_optional(core->dev, "reset",
> + GPIOD_OUT_HIGH);
> + if (IS_ERR(core->rst_gpio)) {
> + if (PTR_ERR(core->rst_gpio) != -EPROBE_DEFER)
> + dev_err(core->dev, "Video Reset GPIO not setup in DT");
> + return PTR_ERR(core->rst_gpio);
> + }
> +
> + mutex_init(&xcsi2rxss->lock);
> +
> + ret = xcsi2rxss_parse_of(xcsi2rxss);
> + if (ret < 0)
> + return ret;
> +
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + core->iomem = devm_ioremap_resource(core->dev, res);
> + if (IS_ERR(core->iomem))
> + return PTR_ERR(core->iomem);
> +
> + core->num_clks = ARRAY_SIZE(xcsi2rxss_clks);
num_clks never changes, please drop it and use ARRAY_SIZE(...) instead.
> +
> + ret = clk_bulk_get(core->dev, core->num_clks, core->clks);
> + if (ret)
> + return ret;
> +
> + ret = clk_bulk_prepare_enable(core->num_clks, core->clks);
> + if (ret)
> + goto err_clk_put;
> +
> + if (core->rst_gpio) {
> + gpiod_set_value_cansleep(core->rst_gpio, 1);
> + /* minimum of 40 dphy_clk_200M cycles */
> + usleep_range(1, 2);
> + gpiod_set_value_cansleep(core->rst_gpio, 0);
> + }
> +
> + xcsi2rxss_reset(core);
> +
> + /* Initialize V4L2 subdevice and media entity */
> + xcsi2rxss->pads[XVIP_PAD_SINK].flags = MEDIA_PAD_FL_SINK;
> + xcsi2rxss->pads[XVIP_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
> +
> + /* Initialize the default format */
> + xcsi2rxss_set_default_format(xcsi2rxss);
> +
> + /* Initialize the mbus formats supported */
> + xcsi2rxss_init_mbus_fmts(xcsi2rxss);
> +
> + /* Initialize V4L2 subdevice and media entity */
> + subdev = &xcsi2rxss->subdev;
> + v4l2_subdev_init(subdev, &xcsi2rxss_ops);
> + subdev->dev = &pdev->dev;
> + subdev->internal_ops = &xcsi2rxss_internal_ops;
> + strscpy(subdev->name, dev_name(&pdev->dev), sizeof(subdev->name));
> + subdev->flags |= V4L2_SUBDEV_FL_HAS_EVENTS | V4L2_SUBDEV_FL_HAS_DEVNODE;
> + subdev->entity.ops = &xcsi2rxss_media_ops;
> + v4l2_set_subdevdata(subdev, xcsi2rxss);
> +
> + ret = media_entity_pads_init(&subdev->entity, XCSI_MEDIA_PADS,
> + xcsi2rxss->pads);
> + if (ret < 0)
> + goto error;
> +
> + platform_set_drvdata(pdev, xcsi2rxss);
> +
> + ret = v4l2_async_register_subdev(subdev);
> + if (ret < 0) {
> + dev_err(core->dev, "failed to register subdev\n");
> + goto error;
> + }
> +
> + dev_info(core->dev, "Xilinx CSI2 Rx Subsystem device found!\n");
> +
> + return 0;
> +error:
> + media_entity_cleanup(&subdev->entity);
> + mutex_destroy(&xcsi2rxss->lock);
> + clk_bulk_disable_unprepare(core->num_clks, core->clks);
> +err_clk_put:
> + clk_bulk_put(core->num_clks, core->clks);
> + return ret;
> +}
> +
> +static int xcsi2rxss_remove(struct platform_device *pdev)
> +{
> + struct xcsi2rxss_state *xcsi2rxss = platform_get_drvdata(pdev);
> + struct xcsi2rxss_core *core = &xcsi2rxss->core;
> + struct v4l2_subdev *subdev = &xcsi2rxss->subdev;
> +
> + v4l2_async_unregister_subdev(subdev);
> + media_entity_cleanup(&subdev->entity);
> + mutex_destroy(&xcsi2rxss->lock);
> + clk_bulk_disable_unprepare(core->num_clks, core->clks);
> + clk_bulk_put(core->num_clks, core->clks);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id xcsi2rxss_of_id_table[] = {
> + { .compatible = "xlnx,mipi-csi2-rx-subsystem-4.0", },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, xcsi2rxss_of_id_table);
> +
> +static struct platform_driver xcsi2rxss_driver = {
> + .driver = {
> + .name = "xilinx-csi2rxss",
> + .of_match_table = xcsi2rxss_of_id_table,
> + },
> + .probe = xcsi2rxss_probe,
> + .remove = xcsi2rxss_remove,
> +};
> +
> +module_platform_driver(xcsi2rxss_driver);
> +
> +MODULE_AUTHOR("Vishal Sagar <vsagar@xilinx.com>");
> +MODULE_DESCRIPTION("Xilinx MIPI CSI2 Rx Subsystem Driver");
> +MODULE_LICENSE("GPL v2");
This does not align with the SPDX header. v2 or v2+?
--
Regards,
Sakari Ailus
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: aarch64 Kernel Panic Asynchronous SError Interrupt on large file IO
From: Philipp Richter @ 2019-08-15 16:00 UTC (permalink / raw)
To: Robin Murphy
Cc: heiko, catalin.marinas, vicencb, linux-rockchip, andre.przywara,
Will Deacon, linux-arm-kernel
In-Reply-To: <CA+Vb7hpi=pCC9viiof8y85Kw_vCawWQ0B6kGFALgxtZfCKoaTw@mail.gmail.com>
Reading from the raw eMMC block /dev/mmcblkp1 I can also produce a panic :
sudo dd if=/dev/mmcblk1 of=/dev/null bs=1M status=progress
2846883840 bytes (2.8 GB, 2.7 GiB) copied, 23 s, 124 MB/s
============
[ 428.794747] dwmmc_rockchip ff520000.dwmmc: Unexpected command
timeout, state 3
[ 428.984736] dwmmc_rockchip ff520000.dwmmc: Unexpected command
timeout, state 3
[ 429.174738] dwmmc_rockchip ff520000.dwmmc: Unexpected command
timeout, state 3
[ 429.179323] Internal error: synchronous external abort: 96000210
[#1] SMP
[ 429.179934] Modules linked in: wireguard(O) ip6_udp_tunnel
udp_tunnel lz4 lz4_compress iptable_filter iptable_raw xt_owner
iptable_nat xt_connmark iptable_mangle bpfilter rc_cec
snd_soc_hdmi_codec dw_hdmi_i2s_audio dw_hdmi_cec
snd_soc_audio_graph_cc
[ 429.186527] CPU: 0 PID: 1079 Comm: bash Tainted: G O
5.2.8-1-ARCH #1
[ 429.187193] Hardware name: Pine64 Rock64 (DT)
[ 429.187576] pstate: 20000005 (nzCv daif -PAN -UAO)
[ 429.188007] pc : copy_page_range+0x124/0x3d0
[ 429.188386] lr : dup_mm+0x3fc/0x478
[ 429.188692] sp : ffff00001277bb80
[ 429.188982] x29: ffff00001277bb80 x28: ffff8000dd17e450
[ 429.189446] x27: ffff8000dd17e470 x26: ffff8000dd17e460
[ 429.189912] x25: 0000aaaac4a01000 x24: ffff8000dca92a00
[ 429.190376] x23: ffff8000dd1fdf80 x22: ffff8000dd30c8a0
[ 429.190840] x21: ffff8000dca92a00 x20: ffff8000dd30c8a0
[ 429.191306] x19: ffff8000dd1fdf80 x18: 0000000000000000
[ 429.191771] x17: 0000000000000000 x16: 0000000000000000
[ 429.192236] x15: 0000000000000000 x14: ffff8000dd2b86d0
[ 429.192700] x13: 00000000000000f8 x12: 0000000000000000
[ 429.193165] x11: 0000000000000000 x10: ffff8000e44bde01
[ 429.193630] x9 : 0000000000100871 x8 : 0000000000000000
[ 429.194095] x7 : ffff8000e4481760 x6 : 0000000000000000
[ 429.194560] x5 : 0000aaaac49fc000 x4 : ffff0000102905c0
[ 429.195026] x3 : 0000000000000000 x2 : ffff800009c74aa8
[ 429.195491] x1 : 0000aaaac4a00fff x0 : ffff800009c74aa8
[ 429.195959] Call trace:
[ 429.196178] copy_page_range+0x124/0x3d0
[ 429.196521] dup_mm+0x3fc/0x478
[ 429.196801] copy_process.isra.4.part.5+0x143c/0x1450
[ 429.197244] _do_fork+0xec/0x410
[ 429.197529] __arm64_sys_clone+0x2c/0x38
[ 429.197877] el0_svc_handler+0xa4/0x180
[ 429.198215] el0_svc+0x8/0xc
[ 429.198474] Code: 360812e0 f9403fe0 b4000ac0 f9403fe0 (f9400000)
[ 429.199008] ---[ end trace 04beba7bac629e3f ]---
[ 429.200049] SError Interrupt on CPU1, code 0xbf000002 -- SError
[ 429.200052] CPU: 1 PID: 669 Comm: systemd-journal Tainted: G D
O 5.2.8-1-ARCH #1
[ 429.200054] Hardware name: Pine64 Rock64 (DT)
[ 429.200055] pstate: 20000005 (nzCv daif -PAN -UAO)
[ 429.200056] pc : allocate_slab+0x1d0/0x570
[ 429.200058] lr : allocate_slab+0x1e0/0x570
[ 429.200059] sp : ffff000011d8baa0
[ 429.200060] x29: ffff000011d8baa0 x28: 0000000000000003
[ 429.200063] x27: ffff7e0000276800 x26: ffff800009da6e00
[ 429.200068] x25: 0000000000000009 x24: 0000000000007bc0
[ 429.200071] x23: 0000000000000003 x22: 0000000000000003
[ 429.200075] x21: ffff800009da0000 x20: 0000000000005280
[ 429.200079] x19: ffff8000b3fa3980 x18: 0000000000000000
[ 429.200082] x17: 0000000000000000 x16: 0000000000000000
[ 429.200086] x15: 0000000000000000 x14: 0000000000000000
[ 429.200090] x13: 0000000000000000 x12: 0000000000000000
[ 429.200094] x11: 0000000000000000 x10: 0000000000000000
[ 429.200098] x9 : 0000000000000000 x8 : 0000000000000000
[ 429.200102] x7 : 00000000fee00000 x6 : 0000000000000018
[ 429.200106] x5 : 0000000000000040 x4 : 0000000000210d00
[ 429.200110] x3 : 0000000000000dc0 x2 : 0000000005a79795
[ 429.200112] x1 : 0000000000000000 x0 : ffff8000f2f35a80
[ 429.200117] Kernel panic - not syncing: Asynchronous SError
Interrupt
[ 429.200137] SMP: stopping secondary CPUs
[ 429.200139] Kernel Offset: disabled
[ 429.200140] CPU features: 0x0002,20002000
[ 429.200141] Memory Limit: none
============
Regards,
Philipp Richter
On Thu, 15 Aug 2019 at 17:35, Philipp Richter
<richterphilipp.pops@gmail.com> wrote:
>
> Yes, it's connected over the USB 3.0 port. I'll also try over USB 2.0
> as soon as possible.
>
> I first noticed the issue when my backup script froze the board, so
> this is while reading from the eMMC.
>
> My script that I invoke over ssh :
> ============
> #!/usr/bin/env bash
> IFS=$'\n\t'
> set -euo pipefail
>
> schedtool -B -n 8 "${BASHPID}"
> ionice -c 3 -p "${BASHPID}"
>
> EXCLUSION_FILE='/etc/tar-system-exclusion.txt'
> TOTAL_SIZE="$(sudo du --bytes --summarize
> --exclude-from="${EXCLUSION_FILE}" / | awk '{print $1}')"
> sudo tar --create --file - --numeric-owner --acls --xattrs
> --exclude-from="${EXCLUSION_FILE}" / | \
> pv --progress --timer --eta --fineta --rate --average-rate
> --bytes --force --size "${TOTAL_SIZE}" | \
> lz4 -z
> ============
>
> So it fails also around 2.8GB pushed and I get this panic on my serial
> console in "__memcpy" this time though :
>
> ============
> [12624.268933] SError Interrupt on CPU0, code 0xbf000002 -- SError
> [12624.268940] CPU: 0 PID: 14170 Comm: kworker/u8:4 Tainted: G
> O 5.2.8-1-ARCH #1
> [12624.268942] Hardware name: Pine64 Rock64 (DT)
> [12624.268944] Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
> [12624.268946] pstate: 20000005 (nzCv daif -PAN -UAO)
> [12624.268948] pc : __memcpy+0x118/0x180
> [12624.268950] lr : btrfs_decompress_buf2page+0x124/0x228 [btrfs]
> [12624.268951] sp : ffff00001c28bb40
> [12624.268952] x29: ffff00001c28bb40 x28: ffff8000f2a2b870
> [12624.268955] x27: 0000000000001000 x26: ffff7e0000270200
> [12624.268958] x25: 0000000000001000 x24: 000000000001f000
> [12624.268961] x23: 0000000000000000 x22: 000000000001f000
> [12624.268964] x21: ffff8000fde46040 x20: 0000000000140000
> [12624.268967] x19: 0000000000001000 x18: ffff8000e830aef5
> [12624.268970] x17: 0000000000000ad3 x16: 0000000000000003
> [12624.268973] x15: 0000000000000002 x14: a8c37bfd9101e042
> [12624.268976] x13: a9425bf552800021 x12: a94153f3f0000b62
> [12624.268979] x11: f9400a80900011a4 x10: aa1603e3d63f0260
> [12624.268982] x9 : 9101c04252800021 x8 : 910003fda9b97bfd
> [12624.268985] x7 : d61f0080f9475c84 x6 : ffff800009c08390
> [12624.268988] x5 : ffff800065005050 x4 : 0000000000000000
> [12624.268990] x3 : 0000000000140000 x2 : 0000000000000c00
> [12624.268993] x1 : ffff8000dac023d0 x0 : ffff800009c08000
> [12624.268997] Kernel panic - not syncing: Asynchronous SError Interrupt
> [12624.269000] CPU: 0 PID: 14170 Comm: kworker/u8:4 Tainted: G
> O 5.2.8-1-ARCH #1
> [12624.269001] Hardware name: Pine64 Rock64 (DT)
> [12624.269003] Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
> [12624.269004] Call trace:
> [12624.269006] dump_backtrace+0x0/0x168
> [12624.269007] show_stack+0x24/0x30
> [12624.269009] dump_stack+0xa8/0xcc
> [12624.269010] panic+0x150/0x320
> [12624.269011] __stack_chk_fail+0x0/0x28
> [12624.269013] arm64_serror_panic+0x80/0x8c
> [12624.269014] do_serror+0x11c/0x120
> [12624.269016] el1_error+0x84/0xf8
> [12624.269017] __memcpy+0x118/0x180
> [12624.269018] zstd_decompress_bio+0xf8/0x250 [btrfs]
> [12624.269020] end_compressed_bio_read+0x2ec/0x3f8 [btrfs]
> [12624.269021] bio_endio.part.12+0x10c/0x1a8
> [12624.269023] bio_endio+0x20/0x30
> [12624.269024] end_workqueue_fn+0x4c/0x58 [btrfs]
> [12624.269025] normal_work_helper+0x100/0x250 [btrfs]
> [12624.269027] btrfs_endio_helper+0x20/0x30 [btrfs]
> [12624.269029] process_one_work+0x1b4/0x408
> [12624.269030] worker_thread+0x54/0x4b8
> [12624.269031] kthread+0x12c/0x130
> [12624.269033] ret_from_fork+0x10/0x1c
> [12624.269068] SMP: stopping secondary CPUs
> [12624.269069] Kernel Offset: disabled
> [12624.269071] CPU features: 0x0002,20002000
> [12624.269072] Memory Limit: none
> ============
>
> Regards,
> Philipp Richter
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* [PATCH v8 4/5] arm64: Define Documentation/arm64/tagged-address-abi.rst
From: Catalin Marinas @ 2019-08-15 15:44 UTC (permalink / raw)
To: linux-arm-kernel, linux-mm
Cc: linux-arch, linux-doc, Szabolcs Nagy, Andrey Konovalov,
Kevin Brodsky, Will Deacon, Dave Hansen, Andrew Morton,
Vincenzo Frascino, Dave P Martin
In-Reply-To: <20190815154403.16473-1-catalin.marinas@arm.com>
From: Vincenzo Frascino <vincenzo.frascino@arm.com>
On AArch64 the TCR_EL1.TBI0 bit is set by default, allowing userspace
(EL0) to perform memory accesses through 64-bit pointers with a non-zero
top byte. Introduce the document describing the relaxation of the
syscall ABI that allows userspace to pass certain tagged pointers to
kernel syscalls.
Cc: Will Deacon <will.deacon@arm.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Cc: Szabolcs Nagy <szabolcs.nagy@arm.com>
Cc: Kevin Brodsky <kevin.brodsky@arm.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Co-developed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
Documentation/arm64/tagged-address-abi.rst | 155 +++++++++++++++++++++
1 file changed, 155 insertions(+)
create mode 100644 Documentation/arm64/tagged-address-abi.rst
diff --git a/Documentation/arm64/tagged-address-abi.rst b/Documentation/arm64/tagged-address-abi.rst
new file mode 100644
index 000000000000..8808337775d6
--- /dev/null
+++ b/Documentation/arm64/tagged-address-abi.rst
@@ -0,0 +1,155 @@
+==========================
+AArch64 TAGGED ADDRESS ABI
+==========================
+
+Authors: Vincenzo Frascino <vincenzo.frascino@arm.com>
+ Catalin Marinas <catalin.marinas@arm.com>
+
+Date: 15 August 2019
+
+This document describes the usage and semantics of the Tagged Address
+ABI on AArch64 Linux.
+
+1. Introduction
+---------------
+
+On AArch64 the TCR_EL1.TBI0 bit is set by default, allowing userspace
+(EL0) to perform memory accesses through 64-bit pointers with a non-zero
+top byte. This document describes the relaxation of the syscall ABI that
+allows userspace to pass certain tagged pointers to kernel syscalls.
+
+2. AArch64 Tagged Address ABI
+-----------------------------
+
+From the kernel syscall interface perspective and for the purposes of
+this document, a "valid tagged pointer" is a pointer with a potentially
+non-zero top-byte that references an address in the user process address
+space obtained in one of the following ways:
+
+- mmap() done by the process itself (or its parent), where either:
+
+ - flags have the **MAP_ANONYMOUS** bit set
+ - the file descriptor refers to a regular file (including those
+ returned by memfd_create()) or **/dev/zero**
+
+- brk() system call done by the process itself (i.e. the heap area
+ between the initial location of the program break at process creation
+ and its current location).
+
+- any memory mapped by the kernel in the address space of the process
+ during creation and with the same restrictions as for mmap() above
+ (e.g. data, bss, stack).
+
+The AArch64 Tagged Address ABI has two stages of relaxation depending
+how the user addresses are used by the kernel:
+
+1. User addresses not accessed by the kernel but used for address space
+ management (e.g. mmap(), mprotect(), madvise()). The use of valid
+ tagged pointers in this context is always allowed.
+
+2. User addresses accessed by the kernel (e.g. write()). This ABI
+ relaxation is disabled by default and the application thread needs to
+ explicitly enable it via **prctl()** as follows:
+
+ - **PR_SET_TAGGED_ADDR_CTRL**: enable or disable the AArch64 Tagged
+ Address ABI for the calling thread.
+
+ The (unsigned int) arg2 argument is a bit mask describing the
+ control mode used:
+
+ - **PR_TAGGED_ADDR_ENABLE**: enable AArch64 Tagged Address ABI.
+ Default status is disabled.
+
+ Arguments arg3, arg4, and arg5 must be 0.
+
+ - **PR_GET_TAGGED_ADDR_CTRL**: get the status of the AArch64 Tagged
+ Address ABI for the calling thread.
+
+ Arguments arg2, arg3, arg4, and arg5 must be 0.
+
+ The ABI properties described above are thread-scoped, inherited on
+ clone() and fork() and cleared on exec().
+
+ Calling prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE, 0, 0, 0)
+ returns -EINVAL if the AArch64 Tagged Address ABI is globally disabled
+ by sysctl abi.tagged_addr_disabled=1. The default sysctl
+ abi.tagged_addr_disabled configuration is 0.
+
+When the AArch64 Tagged Address ABI is enabled for a thread, the
+following behaviours are guaranteed:
+
+- All syscalls except the cases mentioned in section 3 can accept any
+ valid tagged pointer.
+
+- The syscall behaviour is undefined for invalid tagged pointers: it may
+ result in an error code being returned, a (fatal) signal being raised,
+ or other modes of failure.
+
+- A valid tagged pointer has the same semantics as the corresponding
+ untagged pointer.
+
+A definition of the meaning of tagged pointers on AArch64 can be found
+in Documentation/arm64/tagged-pointers.rst.
+
+3. AArch64 Tagged Address ABI Exceptions
+-----------------------------------------
+
+The following system call parameters must be untagged regardless of the
+ABI relaxation:
+
+- prctl() other than arguments pointing to user structures to be
+ accessed by the kernel.
+
+- ioctl() other than arguments pointing to user structures to be
+ accessed by the kernel.
+
+- shmat() and shmdt().
+
+Any attempt to use non-zero tagged pointers may result in an error code
+being returned, a (fatal) signal being raised, or other modes of
+failure.
+
+4. Example of correct usage
+---------------------------
+.. code-block:: c
+
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/mman.h>
+ #include <sys/prctl.h>
+
+ #define PR_SET_TAGGED_ADDR_CTRL 55
+ #define PR_TAGGED_ADDR_ENABLE (1UL << 0)
+
+ #define TAG_SHIFT 56
+
+ int main(void)
+ {
+ int tbi_enabled = 0;
+ unsigned long tag = 0;
+ char *ptr;
+
+ /* check/enable the tagged address ABI */
+ if (!prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE, 0, 0, 0))
+ tbi_enabled = 1;
+
+ /* memory allocation */
+ ptr = mmap(NULL, sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ if (ptr == MAP_FAILED)
+ return 1;
+
+ /* set a non-zero tag if the ABI is available */
+ if (tbi_enabled)
+ tag = rand() & 0xff;
+ ptr = (char *)((unsigned long)ptr | (tag << TAG_SHIFT));
+
+ /* memory access to a tagged address */
+ strcpy(ptr, "tagged pointer\n");
+
+ /* syscall with a tagged pointer */
+ write(1, ptr, strlen(ptr));
+
+ return 0;
+ }
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [PATCH v8 5/5] arm64: Relax Documentation/arm64/tagged-pointers.rst
From: Catalin Marinas @ 2019-08-15 15:44 UTC (permalink / raw)
To: linux-arm-kernel, linux-mm
Cc: linux-arch, linux-doc, Szabolcs Nagy, Andrey Konovalov,
Kevin Brodsky, Will Deacon, Dave Hansen, Andrew Morton,
Vincenzo Frascino, Dave P Martin
In-Reply-To: <20190815154403.16473-1-catalin.marinas@arm.com>
From: Vincenzo Frascino <vincenzo.frascino@arm.com>
On AArch64 the TCR_EL1.TBI0 bit is set by default, allowing userspace
(EL0) to perform memory accesses through 64-bit pointers with a non-zero
top byte. However, such pointers were not allowed at the user-kernel
syscall ABI boundary.
With the Tagged Address ABI patchset, it is now possible to pass tagged
pointers to the syscalls. Relax the requirements described in
tagged-pointers.rst to be compliant with the behaviours guaranteed by
the AArch64 Tagged Address ABI.
Cc: Will Deacon <will.deacon@arm.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Cc: Szabolcs Nagy <szabolcs.nagy@arm.com>
Cc: Kevin Brodsky <kevin.brodsky@arm.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Co-developed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
Documentation/arm64/tagged-pointers.rst | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/Documentation/arm64/tagged-pointers.rst b/Documentation/arm64/tagged-pointers.rst
index 2acdec3ebbeb..fd5306019e91 100644
--- a/Documentation/arm64/tagged-pointers.rst
+++ b/Documentation/arm64/tagged-pointers.rst
@@ -20,7 +20,9 @@ Passing tagged addresses to the kernel
--------------------------------------
All interpretation of userspace memory addresses by the kernel assumes
-an address tag of 0x00.
+an address tag of 0x00, unless the application enables the AArch64
+Tagged Address ABI explicitly
+(Documentation/arm64/tagged-address-abi.rst).
This includes, but is not limited to, addresses found in:
@@ -33,13 +35,15 @@ This includes, but is not limited to, addresses found in:
- the frame pointer (x29) and frame records, e.g. when interpreting
them to generate a backtrace or call graph.
-Using non-zero address tags in any of these locations may result in an
-error code being returned, a (fatal) signal being raised, or other modes
-of failure.
+Using non-zero address tags in any of these locations when the
+userspace application did not enable the AArch64 Tagged Address ABI may
+result in an error code being returned, a (fatal) signal being raised,
+or other modes of failure.
-For these reasons, passing non-zero address tags to the kernel via
-system calls is forbidden, and using a non-zero address tag for sp is
-strongly discouraged.
+For these reasons, when the AArch64 Tagged Address ABI is disabled,
+passing non-zero address tags to the kernel via system calls is
+forbidden, and using a non-zero address tag for sp is strongly
+discouraged.
Programs maintaining a frame pointer and frame records that use non-zero
address tags may suffer impaired or inaccurate debug and profiling
@@ -59,6 +63,11 @@ be preserved.
The architecture prevents the use of a tagged PC, so the upper byte will
be set to a sign-extension of bit 55 on exception return.
+This behaviour is maintained when the AArch64 Tagged Address ABI is
+enabled. In addition, with the exceptions above, the kernel will
+preserve any non-zero tags passed by the user via syscalls and stored in
+kernel data structures (e.g. set_robust_list(), sigaltstack()).
+
Other considerations
--------------------
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [PATCH v8 3/5] arm64: Change the tagged_addr sysctl control semantics to only prevent the opt-in
From: Catalin Marinas @ 2019-08-15 15:44 UTC (permalink / raw)
To: linux-arm-kernel, linux-mm
Cc: linux-arch, linux-doc, Szabolcs Nagy, Andrey Konovalov,
Kevin Brodsky, Will Deacon, Dave Hansen, Andrew Morton,
Vincenzo Frascino, Dave P Martin
In-Reply-To: <20190815154403.16473-1-catalin.marinas@arm.com>
First rename the sysctl control to abi.tagged_addr_disabled and make it
default off (zero). When abi.tagged_addr_disabled == 1, only block the
enabling of the TBI ABI via prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE).
Getting the status of the ABI or disabling it is still allowed.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
arch/arm64/kernel/process.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 76b7c55026aa..03689c0beb34 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -579,17 +579,22 @@ void arch_setup_new_exec(void)
/*
* Control the relaxed ABI allowing tagged user addresses into the kernel.
*/
-static unsigned int tagged_addr_prctl_allowed = 1;
+static unsigned int tagged_addr_disabled;
long set_tagged_addr_ctrl(unsigned long arg)
{
- if (!tagged_addr_prctl_allowed)
- return -EINVAL;
if (is_compat_task())
return -EINVAL;
if (arg & ~PR_TAGGED_ADDR_ENABLE)
return -EINVAL;
+ /*
+ * Do not allow the enabling of the tagged address ABI if globally
+ * disabled via sysctl abi.tagged_addr_disabled.
+ */
+ if (arg & PR_TAGGED_ADDR_ENABLE && tagged_addr_disabled)
+ return -EINVAL;
+
update_thread_flag(TIF_TAGGED_ADDR, arg & PR_TAGGED_ADDR_ENABLE);
return 0;
@@ -597,8 +602,6 @@ long set_tagged_addr_ctrl(unsigned long arg)
long get_tagged_addr_ctrl(void)
{
- if (!tagged_addr_prctl_allowed)
- return -EINVAL;
if (is_compat_task())
return -EINVAL;
@@ -618,9 +621,9 @@ static int one = 1;
static struct ctl_table tagged_addr_sysctl_table[] = {
{
- .procname = "tagged_addr",
+ .procname = "tagged_addr_disabled",
.mode = 0644,
- .data = &tagged_addr_prctl_allowed,
+ .data = &tagged_addr_disabled,
.maxlen = sizeof(int),
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [PATCH v8 2/5] arm64: Tighten the PR_{SET, GET}_TAGGED_ADDR_CTRL prctl() unused arguments
From: Catalin Marinas @ 2019-08-15 15:44 UTC (permalink / raw)
To: linux-arm-kernel, linux-mm
Cc: linux-arch, linux-doc, Szabolcs Nagy, Andrey Konovalov,
Kevin Brodsky, Will Deacon, Dave Hansen, Andrew Morton,
Vincenzo Frascino, Dave P Martin
In-Reply-To: <20190815154403.16473-1-catalin.marinas@arm.com>
Require that arg{3,4,5} of the PR_{SET,GET}_TAGGED_ADDR_CTRL prctl and
arg2 of the PR_GET_TAGGED_ADDR_CTRL prctl() are zero rather than ignored
for future extensions.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
kernel/sys.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/kernel/sys.c b/kernel/sys.c
index c6c4d5358bd3..ec48396b4943 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -2499,9 +2499,13 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
error = PAC_RESET_KEYS(me, arg2);
break;
case PR_SET_TAGGED_ADDR_CTRL:
+ if (arg3 || arg4 || arg5)
+ return -EINVAL;
error = SET_TAGGED_ADDR_CTRL(arg2);
break;
case PR_GET_TAGGED_ADDR_CTRL:
+ if (arg2 || arg3 || arg4 || arg5)
+ return -EINVAL;
error = GET_TAGGED_ADDR_CTRL();
break;
default:
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [PATCH v8 1/5] mm: untag user pointers in mmap/munmap/mremap/brk
From: Catalin Marinas @ 2019-08-15 15:43 UTC (permalink / raw)
To: linux-arm-kernel, linux-mm
Cc: linux-arch, linux-doc, Szabolcs Nagy, Andrey Konovalov,
Kevin Brodsky, Will Deacon, Dave Hansen, Andrew Morton,
Vincenzo Frascino, Dave P Martin
In-Reply-To: <20190815154403.16473-1-catalin.marinas@arm.com>
There isn't a good reason to differentiate between the user address
space layout modification syscalls and the other memory
permission/attributes ones (e.g. mprotect, madvise) w.r.t. the tagged
address ABI. Untag the user addresses on entry to these functions.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
mm/mmap.c | 5 +++++
mm/mremap.c | 6 +-----
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/mm/mmap.c b/mm/mmap.c
index 7e8c3e8ae75f..b766b633b7ae 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -201,6 +201,8 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
bool downgraded = false;
LIST_HEAD(uf);
+ brk = untagged_addr(brk);
+
if (down_write_killable(&mm->mmap_sem))
return -EINTR;
@@ -1573,6 +1575,8 @@ unsigned long ksys_mmap_pgoff(unsigned long addr, unsigned long len,
struct file *file = NULL;
unsigned long retval;
+ addr = untagged_addr(addr);
+
if (!(flags & MAP_ANONYMOUS)) {
audit_mmap_fd(fd, flags);
file = fget(fd);
@@ -2874,6 +2878,7 @@ EXPORT_SYMBOL(vm_munmap);
SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
{
+ addr = untagged_addr(addr);
profile_munmap(addr);
return __vm_munmap(addr, len, true);
}
diff --git a/mm/mremap.c b/mm/mremap.c
index 64c9a3b8be0a..1fc8a29fbe3f 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -606,12 +606,8 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
LIST_HEAD(uf_unmap_early);
LIST_HEAD(uf_unmap);
- /*
- * Architectures may interpret the tag passed to mmap as a background
- * colour for the corresponding vma. For mremap we don't allow tagged
- * new_addr to preserve similar behaviour to mmap.
- */
addr = untagged_addr(addr);
+ new_addr = untagged_addr(new_addr);
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
return ret;
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [PATCH v8 0/2] arm64 tagged address ABI
From: Catalin Marinas @ 2019-08-15 15:43 UTC (permalink / raw)
To: linux-arm-kernel, linux-mm
Cc: linux-arch, linux-doc, Szabolcs Nagy, Andrey Konovalov,
Kevin Brodsky, Will Deacon, Dave Hansen, Andrew Morton,
Vincenzo Frascino, Dave P Martin
Hi,
This series contains an update to the arm64 tagged address ABI
documentation posted here (v7):
http://lkml.kernel.org/r/20190807155321.9648-1-catalin.marinas@arm.com
together some adjustments to Andrey's patches (already queued through
different trees) following the discussions on the ABI documents:
http://lkml.kernel.org/r/cover.1563904656.git.andreyknvl@google.com
If there are not objections, I propose that that patch 1 (mm: untag user
pointers in mmap...) goes via the mm tree while the other 4 are routed
via the arm64 tree.
Changes in v8:
- removed mmap/munmap/mremap/brk from the list of syscalls not accepting
tagged pointers
- added ioctl() to the list of syscalls not accepting tagged pointers
- added shmat/shmdt to a list of syscalls not accepting tagged pointers
- prctl() now requires all unused arguments to be 0
- note about two-stage ABI relaxation since even without the prctl()
opt-in, the tag is still ignored on a few syscalls (untagged_addr() in
the kernel is unconditional)
- compilable example code together with syscall use
- added a note on tag preservation in the tagged-pointers.rst document
- various rewordings and cleanups
Catalin Marinas (3):
mm: untag user pointers in mmap/munmap/mremap/brk
arm64: Tighten the PR_{SET,GET}_TAGGED_ADDR_CTRL prctl() unused
arguments
arm64: Change the tagged_addr sysctl control semantics to only prevent
the opt-in
Vincenzo Frascino (2):
arm64: Define Documentation/arm64/tagged-address-abi.rst
arm64: Relax Documentation/arm64/tagged-pointers.rst
Documentation/arm64/tagged-address-abi.rst | 155 +++++++++++++++++++++
Documentation/arm64/tagged-pointers.rst | 23 ++-
arch/arm64/kernel/process.c | 17 ++-
kernel/sys.c | 4 +
mm/mmap.c | 5 +
mm/mremap.c | 6 +-
6 files changed, 191 insertions(+), 19 deletions(-)
create mode 100644 Documentation/arm64/tagged-address-abi.rst
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH v3 1/2] iommu/io-pgtable-arm: Add support for ARM_ADRENO_GPU_LPAE io-pgtable format
From: Jordan Crouse @ 2019-08-15 15:35 UTC (permalink / raw)
To: freedreno
Cc: Rob Herring, Will Deacon, jean-philippe.brucker, linux-arm-msm,
Joerg Roedel, linux-kernel, iommu, Zhen Lei, robin.murphy,
linux-arm-kernel
In-Reply-To: <1565216500-28506-2-git-send-email-jcrouse@codeaurora.org>
On Wed, Aug 07, 2019 at 04:21:39PM -0600, Jordan Crouse wrote:
> Add a new sub-format ARM_ADRENO_GPU_LPAE to set up TTBR0 and TTBR1 for
> use by the Adreno GPU. This will allow The GPU driver to map global
> buffers in the TTBR1 and leave the TTBR0 configured but unset and
> free to be changed dynamically by the GPU.
It would take a bit of code rework and un-static-ifying a few functions but I'm
wondering if it would be cleaner to add the Adreno GPU pagetable format in a new
file, such as io-pgtable-adreno.c.
Jordan
> Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
> ---
>
> drivers/iommu/io-pgtable-arm.c | 214 ++++++++++++++++++++++++++++++++++++++---
> drivers/iommu/io-pgtable.c | 1 +
> include/linux/io-pgtable.h | 2 +
> 3 files changed, 202 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
> index 161a7d5..8eb0dbb 100644
> --- a/drivers/iommu/io-pgtable-arm.c
> +++ b/drivers/iommu/io-pgtable-arm.c
> @@ -112,13 +112,19 @@
> #define ARM_32_LPAE_TCR_EAE (1 << 31)
> #define ARM_64_LPAE_S2_TCR_RES1 (1 << 31)
>
> +#define ARM_LPAE_TCR_EPD0 (1 << 7)
> #define ARM_LPAE_TCR_EPD1 (1 << 23)
>
> #define ARM_LPAE_TCR_TG0_4K (0 << 14)
> #define ARM_LPAE_TCR_TG0_64K (1 << 14)
> #define ARM_LPAE_TCR_TG0_16K (2 << 14)
>
> +#define ARM_LPAE_TCR_TG1_4K (0 << 30)
> +#define ARM_LPAE_TCR_TG1_64K (1 << 30)
> +#define ARM_LPAE_TCR_TG1_16K (2 << 30)
> +
> #define ARM_LPAE_TCR_SH0_SHIFT 12
> +#define ARM_LPAE_TCR_SH1_SHIFT 28
> #define ARM_LPAE_TCR_SH0_MASK 0x3
> #define ARM_LPAE_TCR_SH_NS 0
> #define ARM_LPAE_TCR_SH_OS 2
> @@ -126,6 +132,8 @@
>
> #define ARM_LPAE_TCR_ORGN0_SHIFT 10
> #define ARM_LPAE_TCR_IRGN0_SHIFT 8
> +#define ARM_LPAE_TCR_ORGN1_SHIFT 26
> +#define ARM_LPAE_TCR_IRGN1_SHIFT 24
> #define ARM_LPAE_TCR_RGN_MASK 0x3
> #define ARM_LPAE_TCR_RGN_NC 0
> #define ARM_LPAE_TCR_RGN_WBWA 1
> @@ -136,6 +144,7 @@
> #define ARM_LPAE_TCR_SL0_MASK 0x3
>
> #define ARM_LPAE_TCR_T0SZ_SHIFT 0
> +#define ARM_LPAE_TCR_T1SZ_SHIFT 16
> #define ARM_LPAE_TCR_SZ_MASK 0xf
>
> #define ARM_LPAE_TCR_PS_SHIFT 16
> @@ -152,6 +161,14 @@
> #define ARM_LPAE_TCR_PS_48_BIT 0x5ULL
> #define ARM_LPAE_TCR_PS_52_BIT 0x6ULL
>
> +#define ARM_LPAE_TCR_SEP_SHIFT 47
> +#define ARM_LPAE_TCR_SEP_31 (0x0ULL << ARM_LPAE_TCR_SEP_SHIFT)
> +#define ARM_LPAE_TCR_SEP_35 (0x1ULL << ARM_LPAE_TCR_SEP_SHIFT)
> +#define ARM_LPAE_TCR_SEP_39 (0x2ULL << ARM_LPAE_TCR_SEP_SHIFT)
> +#define ARM_LPAE_TCR_SEP_41 (0x3ULL << ARM_LPAE_TCR_SEP_SHIFT)
> +#define ARM_LPAE_TCR_SEP_43 (0x4ULL << ARM_LPAE_TCR_SEP_SHIFT)
> +#define ARM_LPAE_TCR_SEP_UPSTREAM (0x7ULL << ARM_LPAE_TCR_SEP_SHIFT)
> +
> #define ARM_LPAE_MAIR_ATTR_SHIFT(n) ((n) << 3)
> #define ARM_LPAE_MAIR_ATTR_MASK 0xff
> #define ARM_LPAE_MAIR_ATTR_DEVICE 0x04
> @@ -426,7 +443,8 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
> arm_lpae_iopte pte;
>
> if (data->iop.fmt == ARM_64_LPAE_S1 ||
> - data->iop.fmt == ARM_32_LPAE_S1) {
> + data->iop.fmt == ARM_32_LPAE_S1 ||
> + data->iop.fmt == ARM_ADRENO_GPU_LPAE) {
> pte = ARM_LPAE_PTE_nG;
> if (!(prot & IOMMU_WRITE) && (prot & IOMMU_READ))
> pte |= ARM_LPAE_PTE_AP_RDONLY;
> @@ -497,6 +515,21 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova,
> return ret;
> }
>
> +static int arm_adreno_gpu_lpae_map(struct io_pgtable_ops *ops,
> + unsigned long iova, phys_addr_t paddr, size_t size,
> + int iommu_prot)
> +{
> + struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);
> + unsigned long mask = 1UL << data->iop.cfg.ias;
> +
> + /* This configuration expects all iova addresses to be in TTBR1 */
> + if (WARN_ON(iova & mask))
> + return -ERANGE;
> +
> + /* Mask off the sign extended bits and map as usual */
> + return arm_lpae_map(ops, iova & (mask - 1), paddr, size, iommu_prot);
> +}
> +
> static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl,
> arm_lpae_iopte *ptep)
> {
> @@ -643,6 +676,22 @@ static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
> return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep);
> }
>
> +static size_t arm_adreno_gpu_lpae_unmap(struct io_pgtable_ops *ops,
> + unsigned long iova, size_t size)
> +{
> + struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);
> + arm_lpae_iopte *ptep = data->pgd;
> + int lvl = ARM_LPAE_START_LVL(data);
> + unsigned long mask = 1UL << data->iop.cfg.ias;
> +
> + /* Make sure the sign extend bit is set in the iova */
> + if (WARN_ON(!(iova & mask)))
> + return 0;
> +
> + /* Mask off the sign extended bits before unmapping */
> + return __arm_lpae_unmap(data, iova & (mask - 1), size, lvl, ptep);
> +}
> +
> static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
> size_t size)
> {
> @@ -692,6 +741,17 @@ static phys_addr_t arm_lpae_iova_to_phys(struct io_pgtable_ops *ops,
> return iopte_to_paddr(pte, data) | iova;
> }
>
> +
> +static phys_addr_t arm_adreno_gpu_lpae_iova_to_phys(struct io_pgtable_ops *ops,
> + unsigned long iova)
> +{
> + struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);
> + unsigned long mask = 1UL << data->iop.cfg.ias;
> +
> + /* Mask off the sign extended bits before translating */
> + return arm_lpae_iova_to_phys(ops, iova & (mask - 1));
> +}
> +
> static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
> {
> unsigned long granule, page_sizes;
> @@ -771,17 +831,16 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
> pgd_bits = va_bits - (data->bits_per_level * (data->levels - 1));
> data->pgd_size = 1UL << (pgd_bits + ilog2(sizeof(arm_lpae_iopte)));
>
> - data->iop.ops = (struct io_pgtable_ops) {
> - .map = arm_lpae_map,
> - .unmap = arm_lpae_unmap,
> - .iova_to_phys = arm_lpae_iova_to_phys,
> - };
>
> return data;
> }
>
> -static struct io_pgtable *
> -arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
> +/*
> + * Common allocation function for S1 pagetables. Set up the TTBR0 region and
> + * allocate a default pagetable
> + */
> +static struct arm_lpae_io_pgtable *
> +_arm_64_lpae_alloc_pgtable_s1_common(struct io_pgtable_cfg *cfg)
> {
> u64 reg;
> struct arm_lpae_io_pgtable *data;
> @@ -845,8 +904,6 @@ arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
>
> reg |= (64ULL - cfg->ias) << ARM_LPAE_TCR_T0SZ_SHIFT;
>
> - /* Disable speculative walks through TTBR1 */
> - reg |= ARM_LPAE_TCR_EPD1;
> cfg->arm_lpae_s1_cfg.tcr = reg;
>
> /* MAIRs */
> @@ -870,16 +927,131 @@ arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
> /* Ensure the empty pgd is visible before any actual TTBR write */
> wmb();
>
> - /* TTBRs */
> - cfg->arm_lpae_s1_cfg.ttbr[0] = virt_to_phys(data->pgd);
> - cfg->arm_lpae_s1_cfg.ttbr[1] = 0;
> - return &data->iop;
> -
> + return data;
> out_free_data:
> kfree(data);
> return NULL;
> }
>
> +
> +static struct io_pgtable *
> +arm_adreno_gpu_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg, void *cookie)
> +{
> + struct arm_lpae_io_pgtable *data;
> + u64 reg;
> +
> + /*
> + * Make sure the ias aligns with the available options for the sign
> + * extension bit
> + */
> + switch (cfg->ias) {
> + case 32:
> + case 36:
> + case 40:
> + case 42:
> + case 44:
> + /*
> + * The SEP will be the highest available bit so adjust the data
> + * size by one to accommodate it
> + */
> + cfg->ias--;
> + break;
> + case 48:
> + /*
> + * IAS of 48 is a special case, it has a dedicated sign
> + * extension bit so we can use the full IAS size
> + */
> + break;
> + default:
> + /* The ias doesn't work for the available SEP options */
> + return NULL;
> + }
> +
> + data = _arm_64_lpae_alloc_pgtable_s1_common(cfg);
> + if (!data)
> + return NULL;
> +
> + reg = (ARM_LPAE_TCR_SH_IS << ARM_LPAE_TCR_SH1_SHIFT) |
> + (ARM_LPAE_TCR_RGN_WBWA << ARM_LPAE_TCR_IRGN1_SHIFT) |
> + (ARM_LPAE_TCR_RGN_WBWA << ARM_LPAE_TCR_ORGN1_SHIFT);
> +
> + switch (ARM_LPAE_GRANULE(data)) {
> + case SZ_4K:
> + reg |= ARM_LPAE_TCR_TG1_4K;
> + break;
> + case SZ_16K:
> + reg |= ARM_LPAE_TCR_TG1_16K;
> + break;
> + case SZ_64K:
> + reg |= ARM_LPAE_TCR_TG1_64K;
> + break;
> + }
> +
> + reg |= (64ULL - cfg->ias) << ARM_LPAE_TCR_T1SZ_SHIFT;
> +
> + /* Set the sign extension bit */
> + switch (cfg->ias) {
> + case 31:
> + reg |= ARM_LPAE_TCR_SEP_31;
> + break;
> + case 35:
> + reg |= ARM_LPAE_TCR_SEP_35;
> + break;
> + case 39:
> + reg |= ARM_LPAE_TCR_SEP_39;
> + break;
> + case 41:
> + reg |= ARM_LPAE_TCR_SEP_41;
> + break;
> + case 43:
> + reg |= ARM_LPAE_TCR_SEP_43;
> + break;
> + case 48:
> + reg |= ARM_LPAE_TCR_SEP_UPSTREAM;
> + break;
> + }
> +
> + cfg->arm_lpae_s1_cfg.tcr |= reg;
> +
> + /* Set the allocated pgd to ttbr1 and leave ttbr0 empty */
> + cfg->arm_lpae_s1_cfg.ttbr[0] = 0;
> + cfg->arm_lpae_s1_cfg.ttbr[1] = virt_to_phys(data->pgd);
> +
> + /* Set use case specific pgtable helpers */
> + data->iop.ops = (struct io_pgtable_ops) {
> + .map = arm_adreno_gpu_lpae_map,
> + .unmap = arm_adreno_gpu_lpae_unmap,
> + .iova_to_phys = arm_adreno_gpu_lpae_iova_to_phys,
> + };
> +
> + return &data->iop;
> +}
> +
> +static struct io_pgtable *
> +arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
> +{
> + struct arm_lpae_io_pgtable *data;
> +
> + data = _arm_64_lpae_alloc_pgtable_s1_common(cfg);
> + if (!data)
> + return NULL;
> +
> + /* Disable speculative walks through TTBR1 */
> + cfg->arm_lpae_s1_cfg.tcr |= ARM_LPAE_TCR_EPD1;
> +
> + /* Set the pgd to TTBR0 */
> + cfg->arm_lpae_s1_cfg.ttbr[0] = virt_to_phys(data->pgd);
> + cfg->arm_lpae_s1_cfg.ttbr[1] = 0;
> +
> + data->iop.ops = (struct io_pgtable_ops) {
> + .map = arm_lpae_map,
> + .unmap = arm_lpae_unmap,
> + .iova_to_phys = arm_lpae_iova_to_phys,
> + };
> +
> + return &data->iop;
> +}
> +
> static struct io_pgtable *
> arm_64_lpae_alloc_pgtable_s2(struct io_pgtable_cfg *cfg, void *cookie)
> {
> @@ -894,6 +1066,12 @@ arm_64_lpae_alloc_pgtable_s2(struct io_pgtable_cfg *cfg, void *cookie)
> if (!data)
> return NULL;
>
> + data->iop.ops = (struct io_pgtable_ops) {
> + .map = arm_lpae_map,
> + .unmap = arm_lpae_unmap,
> + .iova_to_phys = arm_lpae_iova_to_phys,
> + };
> +
> /*
> * Concatenate PGDs at level 1 if possible in order to reduce
> * the depth of the stage-2 walk.
> @@ -1041,6 +1219,11 @@ struct io_pgtable_init_fns io_pgtable_arm_64_lpae_s1_init_fns = {
> .free = arm_lpae_free_pgtable,
> };
>
> +struct io_pgtable_init_fns io_pgtable_arm_adreno_gpu_lpae_init_fns = {
> + .alloc = arm_adreno_gpu_lpae_alloc_pgtable,
> + .free = arm_lpae_free_pgtable,
> +};
> +
> struct io_pgtable_init_fns io_pgtable_arm_64_lpae_s2_init_fns = {
> .alloc = arm_64_lpae_alloc_pgtable_s2,
> .free = arm_lpae_free_pgtable,
> @@ -1112,6 +1295,7 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
> static const enum io_pgtable_fmt fmts[] = {
> ARM_64_LPAE_S1,
> ARM_64_LPAE_S2,
> + ARM_64_LPAE_TTBR1_S1,
> };
>
> int i, j;
> diff --git a/drivers/iommu/io-pgtable.c b/drivers/iommu/io-pgtable.c
> index ced53e5..e47ed2d 100644
> --- a/drivers/iommu/io-pgtable.c
> +++ b/drivers/iommu/io-pgtable.c
> @@ -20,6 +20,7 @@ io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = {
> [ARM_64_LPAE_S1] = &io_pgtable_arm_64_lpae_s1_init_fns,
> [ARM_64_LPAE_S2] = &io_pgtable_arm_64_lpae_s2_init_fns,
> [ARM_MALI_LPAE] = &io_pgtable_arm_mali_lpae_init_fns,
> + [ARM_ADRENO_GPU_LPAE] = &io_pgtable_arm_adreno_gpu_lpae_init_fns,
> #endif
> #ifdef CONFIG_IOMMU_IO_PGTABLE_ARMV7S
> [ARM_V7S] = &io_pgtable_arm_v7s_init_fns,
> diff --git a/include/linux/io-pgtable.h b/include/linux/io-pgtable.h
> index b5a450a..4871e85 100644
> --- a/include/linux/io-pgtable.h
> +++ b/include/linux/io-pgtable.h
> @@ -13,6 +13,7 @@ enum io_pgtable_fmt {
> ARM_64_LPAE_S2,
> ARM_V7S,
> ARM_MALI_LPAE,
> + ARM_ADRENO_GPU_LPAE,
> IO_PGTABLE_NUM_FMTS,
> };
>
> @@ -213,5 +214,6 @@ extern struct io_pgtable_init_fns io_pgtable_arm_64_lpae_s1_init_fns;
> extern struct io_pgtable_init_fns io_pgtable_arm_64_lpae_s2_init_fns;
> extern struct io_pgtable_init_fns io_pgtable_arm_v7s_init_fns;
> extern struct io_pgtable_init_fns io_pgtable_arm_mali_lpae_init_fns;
> +extern struct io_pgtable_init_fns io_pgtable_arm_adreno_gpu_lpae_init_fns;
>
> #endif /* __IO_PGTABLE_H */
> --
> 2.7.4
>
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [Freedreno] [PATCH v3 0/2] iommu/arm-smmu: Split pagetable support
From: Jordan Crouse @ 2019-08-15 15:33 UTC (permalink / raw)
To: freedreno
Cc: Rob Herring, jean-philippe.brucker, linux-arm-msm, Joerg Roedel,
linux-kernel, iommu, Zhen Lei, Will Deacon, linux-arm-kernel,
robin.murphy
In-Reply-To: <1565216500-28506-1-git-send-email-jcrouse@codeaurora.org>
On Wed, Aug 07, 2019 at 04:21:38PM -0600, Jordan Crouse wrote:
> (Sigh, resend. I freaked out my SMTP server)
>
> This is part of an ongoing evolution for enabling split pagetable support for
> arm-smmu. Previous versions can be found [1].
>
> In the discussion for v2 Robin pointed out that this is a very Adreno specific
> use case and that is exactly true. Not only do we want to configure and use a
> pagetable in the TTBR1 space, we also want to configure the TTBR0 region but
> not allocate a pagetable for it or touch it until the GPU hardware does so. As
> much as I want it to be a generic concept it really isn't.
>
> This revision leans into that idea. Most of the same io-pgtable code is there
> but now it is wrapped as an Adreno GPU specific format that is selected by the
> compatible string in the arm-smmu device.
>
> Additionally, per Robin's suggestion we are skipping creating a TTBR0 pagetable
> to save on wasted memory.
>
> This isn't as clean as I would like it to be but I think that this is a better
> direction than trying to pretend that the generic format would work.
>
> I'm tempting fate by posting this and then taking some time off, but I wanted
> to try to kick off a conversation or at least get some flames so I can try to
> refine this again next week. Please take a look and give some advice on the
> direction.
Will, Robin -
Modulo the impl changes from Robin, do you think that using a dedicated
pagetable format is the right approach for supporting split pagetables for the
Adreno GPU?
If so, then is adding the changes to io-pgtable-arm.c possible for 5.4 and then
add the implementation specific code on top of Robin's stack later or do you
feel they should come as part of a package deal?
Jordan
> Jordan Crouse (2):
> iommu/io-pgtable-arm: Add support for ARM_ADRENO_GPU_LPAE io-pgtable
> format
> iommu/arm-smmu: Add support for Adreno GPU pagetable formats
>
> drivers/iommu/arm-smmu.c | 8 +-
> drivers/iommu/io-pgtable-arm.c | 214 ++++++++++++++++++++++++++++++++++++++---
> drivers/iommu/io-pgtable.c | 1 +
> include/linux/io-pgtable.h | 2 +
> 4 files changed, 209 insertions(+), 16 deletions(-)
>
> --
> 2.7.4
>
> _______________________________________________
> Freedreno mailing list
> Freedreno@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/freedreno
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH v2 2/2] iommu/arm-smmu-v3: add nr_ats_masters for quickly check
From: Will Deacon @ 2019-08-15 15:23 UTC (permalink / raw)
To: Zhen Lei
Cc: Jean-Philippe Brucker, Jean-Philippe Brucker, Joerg Roedel,
John Garry, linux-kernel, iommu, Robin Murphy, linux-arm-kernel
In-Reply-To: <20190815054439.30652-3-thunder.leizhen@huawei.com>
On Thu, Aug 15, 2019 at 01:44:39PM +0800, Zhen Lei wrote:
> When (smmu_domain->smmu->features & ARM_SMMU_FEAT_ATS) is true, even if a
> smmu domain does not contain any ats master, the operations of
> arm_smmu_atc_inv_to_cmd() and lock protection in arm_smmu_atc_inv_domain()
> are always executed. This will impact performance, especially in
> multi-core and stress scenarios. For my FIO test scenario, about 8%
> performance reduced.
>
> In fact, we can use a struct member to record how many ats masters that
> the smmu contains. And check that without traverse the list and check all
> masters one by one in the lock protection.
>
> Fixes: 9ce27afc0830 ("iommu/arm-smmu-v3: Add support for PCI ATS")
> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
> ---
> drivers/iommu/arm-smmu-v3.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index 29056d9bb12aa01..154334d3310c9b8 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -631,6 +631,7 @@ struct arm_smmu_domain {
>
> struct io_pgtable_ops *pgtbl_ops;
> bool non_strict;
> + int nr_ats_masters;
>
> enum arm_smmu_domain_stage stage;
> union {
> @@ -1531,7 +1532,16 @@ static int arm_smmu_atc_inv_domain(struct arm_smmu_domain *smmu_domain,
> struct arm_smmu_cmdq_ent cmd;
> struct arm_smmu_master *master;
>
> - if (!(smmu_domain->smmu->features & ARM_SMMU_FEAT_ATS))
> + /*
> + * The protectiom of spinlock(&iommu_domain->devices_lock) is omitted.
> + * Because for a given master, its map/unmap operations should only be
> + * happened after it has been attached and before it has been detached.
> + * So that, if at least one master need to be atc invalidated, the
> + * value of smmu_domain->nr_ats_masters can not be zero.
> + *
> + * This can alleviate performance loss in multi-core scenarios.
> + */
I find this reasoning pretty dubious, since I think you're assuming that
an endpoint cannot issue speculative ATS translation requests once its
ATS capability is enabled. That said, I think it also means we should enable
ATS in the STE *before* enabling it in the endpoint -- the current logic
looks like it's the wrong way round to me (including in detach()).
Anyway, these speculative translations could race with a concurrent unmap()
call and end up with the ATC containing translations for unmapped pages,
which I think we should try to avoid.
Did the RCU approach not work out? You could use an rwlock instead as a
temporary bodge if the performance doesn't hurt too much.
Alternatively... maybe we could change the attach flow to do something
like:
enable_ats_in_ste(master);
enable_ats_at_pcie_endpoint(master);
spin_lock(devices_lock)
add_to_device_list(master);
nr_ats_masters++;
spin_unlock(devices_lock);
invalidate_atc(master);
in which case, the concurrent unmapper will be doing something like:
issue_tlbi();
smp_mb();
if (READ_ONCE(nr_ats_masters)) {
...
}
and I *think* that means that either the unmapper will see the
nr_ats_masters update and perform the invalidation, or they'll miss
the update but the attach will invalidate the ATC /after/ the TLBI
in the command queue.
Also, John's idea of converting this stuff over to my command batching
mechanism should help a lot if we can defer this to sync time using the
gather structure. Maybe an rwlock would be alright for that. Dunno.
Will
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH 15/15] iommu/arm-smmu: Add context init implementation hook
From: Jordan Crouse @ 2019-08-15 15:09 UTC (permalink / raw)
To: Robin Murphy
Cc: iommu, Will Deacon, gregory.clement, linux-arm-kernel,
bjorn.andersson
In-Reply-To: <7acdf5fb-3516-efbb-7c8c-7f84c02faad7@arm.com>
On Thu, Aug 15, 2019 at 01:09:07PM +0100, Robin Murphy wrote:
> On 15/08/2019 11:56, Will Deacon wrote:
> >On Fri, Aug 09, 2019 at 06:07:52PM +0100, Robin Murphy wrote:
> >>Allocating and initialising a context for a domain is another point
> >>where certain implementations are known to want special behaviour.
> >>Currently the other half of the Cavium workaround comes into play here,
> >>so let's finish the job to get the whole thing right out of the way.
> >>
> >>Signed-off-by: Robin Murphy <robin.murphy@arm.com>
> >>---
> >> drivers/iommu/arm-smmu-impl.c | 39 +++++++++++++++++++++++++--
> >> drivers/iommu/arm-smmu.c | 51 +++++++----------------------------
> >> drivers/iommu/arm-smmu.h | 42 +++++++++++++++++++++++++++--
> >> 3 files changed, 86 insertions(+), 46 deletions(-)
> >>
> >>diff --git a/drivers/iommu/arm-smmu-impl.c b/drivers/iommu/arm-smmu-impl.c
> >>index c8904da08354..7a657d47b6ec 100644
> >>--- a/drivers/iommu/arm-smmu-impl.c
> >>+++ b/drivers/iommu/arm-smmu-impl.c
> >>@@ -48,6 +48,12 @@ const struct arm_smmu_impl calxeda_impl = {
> >> };
> >>+struct cavium_smmu {
> >>+ struct arm_smmu_device smmu;
> >>+ u32 id_base;
> >>+};
> >>+#define to_csmmu(s) container_of(s, struct cavium_smmu, smmu)
> >
> >To be honest with you, I'd just use container_of directly for the two
> >callsites that need it. "to_csmmu" isn't a great name when we're also got
> >the calxeda thing in here.
>
> Sure, by this point I was mostly just going for completeness in terms of
> sketching out an example for subclassing arm_smmu_device. The Tegra patches
> will now serve as a more complete example anyway, so indeed we can live
> without it here.
>
> >> static int cavium_cfg_probe(struct arm_smmu_device *smmu)
> >> {
> >> static atomic_t context_count = ATOMIC_INIT(0);
> >>@@ -56,17 +62,46 @@ static int cavium_cfg_probe(struct arm_smmu_device *smmu)
> >> * Ensure ASID and VMID allocation is unique across all SMMUs in
> >> * the system.
> >> */
> >>- smmu->cavium_id_base = atomic_fetch_add(smmu->num_context_banks,
> >>+ to_csmmu(smmu)->id_base = atomic_fetch_add(smmu->num_context_banks,
> >> &context_count);
> >> dev_notice(smmu->dev, "\tenabling workaround for Cavium erratum 27704\n");
> >> return 0;
> >> }
> >>+int cavium_init_context(struct arm_smmu_domain *smmu_domain)
> >>+{
> >>+ u32 id_base = to_csmmu(smmu_domain->smmu)->id_base;
> >>+
> >>+ if (smmu_domain->stage == ARM_SMMU_DOMAIN_S2)
> >>+ smmu_domain->cfg.vmid += id_base;
> >>+ else
> >>+ smmu_domain->cfg.asid += id_base;
> >>+
> >>+ return 0;
> >>+}
> >>+
> >> const struct arm_smmu_impl cavium_impl = {
> >> .cfg_probe = cavium_cfg_probe,
> >>+ .init_context = cavium_init_context,
> >> };
> >>+struct arm_smmu_device *cavium_smmu_impl_init(struct arm_smmu_device *smmu)
> >>+{
> >>+ struct cavium_smmu *csmmu;
> >>+
> >>+ csmmu = devm_kzalloc(smmu->dev, sizeof(*csmmu), GFP_KERNEL);
> >>+ if (!csmmu)
> >>+ return ERR_PTR(-ENOMEM);
> >>+
> >>+ csmmu->smmu = *smmu;
> >>+ csmmu->smmu.impl = &cavium_impl;
> >>+
> >>+ devm_kfree(smmu->dev, smmu);
> >>+
> >>+ return &csmmu->smmu;
> >>+}
> >>+
> >> #define ARM_MMU500_ACTLR_CPRE (1 << 1)
> >>@@ -121,7 +156,7 @@ struct arm_smmu_device *arm_smmu_impl_init(struct arm_smmu_device *smmu)
> >> smmu->impl = &calxeda_impl;
> >> if (smmu->model == CAVIUM_SMMUV2)
> >>- smmu->impl = &cavium_impl;
> >>+ return cavium_smmu_impl_init(smmu);
> >> if (smmu->model == ARM_MMU500)
> >> smmu->impl = &arm_mmu500_impl;
> >
> >Maybe rework this so we do the calxeda detection first (and return if we
> >match), followed by a switch on smmu->model to make it crystal clear that
> >we match only one?
>
> As I see it, "match only one" is really only a short-term thing, though, so
> I didn't want to get *too* hung up on it. Ultimately we're going to have
> cases where we need to combine e.g. MMU-500 implementation quirks with
> platform integration quirks - I've been mostly planning on coming back to
> think about that (and potentially rework this whole logic) later, but I
> guess it wouldn't hurt to plan out a bit more structure from the start.
I was going to ask something similar. I'm guessing that the intent is that
we'll eventually we'll have a couple of arm-smmu-<vendor>.c files
and we'll need some sort of centralized place to set up the smmu->impl pointer.
I had figured that it would be table based or something, but you make a good
point about mixing and matching different workarounds. I don't really have
a solution, just something I'm pondering while I'm thinking about how to start
merging some of the qcom stuff into this.
Jordan
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH v3 3/4] perf: Use CAP_SYSLOG with kptr_restrict checks
From: Mathieu Poirier @ 2019-08-15 15:01 UTC (permalink / raw)
To: Lubashev, Igor
Cc: Suzuki K Poulose, Peter Zijlstra, Alexey Budankov,
Arnaldo Carvalho de Melo, Linux Kernel Mailing List,
Alexander Shishkin, Ingo Molnar, Namhyung Kim, James Morris,
Jiri Olsa, linux-arm-kernel
In-Reply-To: <23f7b8c7616a467c93ee2c77e8ffd3cf@usma1ex-dag1mb6.msg.corp.akamai.com>
On Wed, 14 Aug 2019 at 14:02, Lubashev, Igor <ilubashe@akamai.com> wrote:
>
> > On Wed, August 14, 2019 at 2:52 PM Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com> wrote:
> > Em Wed, Aug 14, 2019 at 03:48:14PM -0300, Arnaldo Carvalho de Melo
> > escreveu:
> > > Em Wed, Aug 14, 2019 at 12:04:33PM -0600, Mathieu Poirier escreveu:
> > > > # echo 0 > /proc/sys/kernel/kptr_restrict # ./tools/perf/perf record
> > > > -e instructions:k uname
> > > > perf: Segmentation fault
> > > > Obtained 10 stack frames.
> > > > ./tools/perf/perf(sighandler_dump_stack+0x44) [0x55af9e5da5d4]
> > > > /lib/x86_64-linux-gnu/libc.so.6(+0x3ef20) [0x7fd31efb6f20]
> > > > ./tools/perf/perf(perf_event__synthesize_kernel_mmap+0xa7)
> > > > [0x55af9e590337]
> > > > ./tools/perf/perf(+0x1cf5be) [0x55af9e50c5be]
> > > > ./tools/perf/perf(cmd_record+0x1022) [0x55af9e50dff2]
> > > > ./tools/perf/perf(+0x23f98d) [0x55af9e57c98d]
> > > > ./tools/perf/perf(+0x23fc9e) [0x55af9e57cc9e]
> > > > ./tools/perf/perf(main+0x369) [0x55af9e4f6bc9]
> > > > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7)
> > > > [0x7fd31ef99b97]
> > > > ./tools/perf/perf(_start+0x2a) [0x55af9e4f704a] Segmentation fault
> > > >
> > > > I can reproduce this on both x86 and ARM64.
> > >
> > > I don't see this with these two csets removed:
> > >
> > > 7ff5b5911144 perf symbols: Use CAP_SYSLOG with kptr_restrict checks
> > > d7604b66102e perf tools: Use CAP_SYS_ADMIN with perf_event_paranoid
> > > checks
> > >
> > > Which were the ones I guessed were related to the problem you
> > > reported, so they are out of my ongoing perf/core pull request to
> > > Ingo/Thomas, now trying with these applied and your instructions...
> >
> > Can't repro:
> >
> > [root@quaco ~]# cat /proc/sys/kernel/kptr_restrict
> > 0
> > [root@quaco ~]# perf record -e instructions:k uname Linux [ perf record:
> > Woken up 1 times to write data ] [ perf record: Captured and wrote 0.024 MB
> > perf.data (1 samples) ] [root@quaco ~]# echo 1 >
> > /proc/sys/kernel/kptr_restrict [root@quaco ~]# perf record -e instructions:k
> > uname Linux [ perf record: Woken up 1 times to write data ] [ perf record:
> > Captured and wrote 0.024 MB perf.data (1 samples) ] [root@quaco ~]# echo
> > 0 > /proc/sys/kernel/kptr_restrict [root@quaco ~]# perf record -e
> > instructions:k uname Linux [ perf record: Woken up 1 times to write data ] [
> > perf record: Captured and wrote 0.024 MB perf.data (1 samples) ]
> > [root@quaco ~]#
> >
> > [acme@quaco perf]$ git log --oneline --author Lubashev tools/
> > 7ff5b5911144 (HEAD -> perf/cap, acme.korg/tmp.perf/cap,
> > acme.korg/perf/cap) perf symbols: Use CAP_SYSLOG with kptr_restrict
> > checks d7604b66102e perf tools: Use CAP_SYS_ADMIN with
> > perf_event_paranoid checks c766f3df635d perf ftrace: Use CAP_SYS_ADMIN
> > instead of euid==0 c22e150e3afa perf tools: Add helpers to use capabilities if
> > present
> > 74d5f3d06f70 tools build: Add capability-related feature detection perf
> > version 5.3.rc4.g7ff5b5911144 [acme@quaco perf]$
>
> I got an ARM64 cloud VM, but I cannot reproduce.
> # cat /proc/sys/kernel/kptr_restrict
> 0
>
> Perf trace works fine (does not die):
> # ./perf trace -a
>
> Here is my setup:
> Repo: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
> Branch: tmp.perf/cap
> Commit: 7ff5b5911 "perf symbols: Use CAP_SYSLOG with kptr_restrict checks"
> gcc --version: gcc (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) 7.4.0
> uname -a: Linux arm-4-par-1 4.9.93-mainline-rev1 #1 SMP Tue Apr 10 09:54:46 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux
> lsb_release -a: Ubuntu 18.04.3 LTS
>
> Auto-detecting system features:
> ... dwarf: [ on ]
> ... dwarf_getlocations: [ on ]
> ... glibc: [ on ]
> ... gtk2: [ on ]
> ... libaudit: [ on ]
> ... libbfd: [ on ]
> ... libcap: [ on ]
> ... libelf: [ on ]
> ... libnuma: [ on ]
> ... numa_num_possible_cpus: [ on ]
> ... libperl: [ on ]
> ... libpython: [ on ]
> ... libcrypto: [ on ]
> ... libunwind: [ on ]
> ... libdw-dwarf-unwind: [ on ]
> ... zlib: [ on ]
> ... lzma: [ on ]
> ... get_cpuid: [ OFF ]
> ... bpf: [ on ]
> ... libaio: [ on ]
> ... libzstd: [ on ]
> ... disassembler-four-args: [ on ]
Thank you for posting your configuration. I will see where things are
different with mine.
>
> I also could not reproduce on x86:
> lsb_release -a: Ubuntu 18.04.1 LTS
> gcc --version: gcc (Ubuntu 7.4.0-1ubuntu1~18.04aka10.0.0) 7.4.0
> uname -r: 4.4.0-154-generic
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: next take at setting up a dma mask by default for platform devices
From: Alan Stern @ 2019-08-15 14:39 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Gavin Li, Shawn Guo, Fabio Estevam, linux-arch, Michal Simek,
Maxime Chevallier, NXP Linux Team, Mathias Nyman, Sascha Hauer,
Minas Harutyunyan, Olav Kongas, Bin Liu, linux-arm-kernel,
Laurentiu Tudor, Geoff Levand, Greg Kroah-Hartman, linux-usb,
linux-kernel, Tony Prisk, iommu, Pengutronix Kernel Team,
linuxppc-dev
In-Reply-To: <20190815132531.GA12036@lst.de>
On Thu, 15 Aug 2019, Christoph Hellwig wrote:
> On Thu, Aug 15, 2019 at 03:23:18PM +0200, Greg Kroah-Hartman wrote:
> > I've taken the first 2 patches for 5.3-final. Given that patch 3 needs
> > to be fixed, I'll wait for a respin of these before considering them.
>
> I have a respun version ready, but I'd really like to hear some
> comments from usb developers about the approach before spamming
> everyone again..
I didn't see any problems with your approach at first glance; it looked
like a good idea.
Alan Stern
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH 1/6] arm64: dts: imx8mn-ddr4-evk: Add i2c1 support
From: Leonard Crestez @ 2019-08-15 14:12 UTC (permalink / raw)
To: Anson Huang, shawnguo@kernel.org, sboyd@kernel.org,
viresh.kumar@linaro.org
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, Abel Vesa,
linux-pm@vger.kernel.org, s.hauer@pengutronix.de,
rjw@rjwysocki.net, linux-kernel@vger.kernel.org,
linux-clk@vger.kernel.org, robh+dt@kernel.org, dl-linux-imx,
kernel@pengutronix.de, festevam@gmail.com,
mturquette@baylibre.com, linux-arm-kernel@lists.infradead.org
In-Reply-To: <1565866783-19672-1-git-send-email-Anson.Huang@nxp.com>
On 15.08.2019 14:18, Anson.Huang@nxp.com wrote:
> From: Anson Huang <Anson.Huang@nxp.com>
>
> Enable i2c1 on i.MX8MN DDR4 EVK board.
>
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Didn't see a cover letter but all 6 patches look good:
Reviewed-by: Leonard Crestez <leonard.crestez@nxp.com>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: next take at setting up a dma mask by default for platform devices
From: Greg Kroah-Hartman @ 2019-08-15 14:05 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Gavin Li, Fabio Estevam, linux-arch, Michal Simek,
Maxime Chevallier, Alan Stern, NXP Linux Team, Mathias Nyman,
Sascha Hauer, Minas Harutyunyan, Olav Kongas, Bin Liu,
linux-arm-kernel, Laurentiu Tudor, Geoff Levand, Shawn Guo,
linux-usb, linux-kernel, Tony Prisk, iommu,
Pengutronix Kernel Team, linuxppc-dev
In-Reply-To: <20190815132531.GA12036@lst.de>
On Thu, Aug 15, 2019 at 03:25:31PM +0200, Christoph Hellwig wrote:
> On Thu, Aug 15, 2019 at 03:23:18PM +0200, Greg Kroah-Hartman wrote:
> > I've taken the first 2 patches for 5.3-final. Given that patch 3 needs
> > to be fixed, I'll wait for a respin of these before considering them.
>
> I have a respun version ready, but I'd really like to hear some
> comments from usb developers about the approach before spamming
> everyone again..
Spam away, we can take it :)
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH 6/6] driver core: initialize a default DMA mask for platform device
From: Greg Kroah-Hartman @ 2019-08-15 14:05 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Gavin Li, Fabio Estevam, linux-arch, Michal Simek,
Maxime Chevallier, Alan Stern, NXP Linux Team, Mathias Nyman,
Sascha Hauer, Minas Harutyunyan, Olav Kongas, Bin Liu,
linux-arm-kernel, Laurentiu Tudor, Geoff Levand, Shawn Guo,
linux-usb, linux-kernel, Tony Prisk, iommu,
Pengutronix Kernel Team, linuxppc-dev
In-Reply-To: <20190815133812.GF12036@lst.de>
On Thu, Aug 15, 2019 at 03:38:12PM +0200, Christoph Hellwig wrote:
> On Thu, Aug 15, 2019 at 03:03:25PM +0200, Greg Kroah-Hartman wrote:
> > > --- a/include/linux/platform_device.h
> > > +++ b/include/linux/platform_device.h
> > > @@ -24,6 +24,7 @@ struct platform_device {
> > > int id;
> > > bool id_auto;
> > > struct device dev;
> > > + u64 dma_mask;
> >
> > Why is the dma_mask in 'struct device' which is part of this structure,
> > not sufficient here? Shouldn't the "platform" be setting that up
> > correctly already in the "archdata" type callback?
>
> Becaus the dma_mask in struct device is a pointer that needs to point
> to something, and this is the best space we can allocate for 'something'.
> m68k and powerpc currently do something roughly equivalent at the moment,
> while everyone else just has horrible, horrible hacks. As mentioned in
> the changelog the intent of this patch is that we treat platform devices
> like any other bus, where the bus allocates the space for the dma_mask.
> The long term plan is to eventually kill that weird pointer indirection
> that doesn't help anyone, but for that we need to sort out the basics
> first.
Ah, missed that, sorry. Ok, no objection from me. Might as well respin
this series and I can queue it up after 5.3-rc5 is out (which will have
your first 2 patches in it.)
thanks,
greg k-h
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: aarch64 Kernel Panic Asynchronous SError Interrupt on large file IO
From: Robin Murphy @ 2019-08-15 13:59 UTC (permalink / raw)
To: Will Deacon, Philipp Richter
Cc: heiko, catalin.marinas, vicencb, linux-rockchip, andre.przywara,
linux-arm-kernel
In-Reply-To: <20190815122151.bg7it6ptxwcn2vif@willie-the-truck>
On 15/08/2019 13:21, Will Deacon wrote:
> On Tue, Aug 13, 2019 at 03:36:00PM +0200, Philipp Richter wrote:
>> this my first bug kernel bug report I think, so I hope I got the right
>> contacts.
>
> Almost: I'm adding Heiko, Vicente and linux-rockchip to see if they have
> a better idea since this sounds SoC-specific to me and eerily similar to
> some kexec issues Vicente has been seeing recently.
Hmm, I'm not so sure - we're talking different SoCs here, and the kexec
problem does look to be specific to kexec (DMA left running after the
first kernel shuts down). According to the SError dump, that's an AXI
slave error on an external access, which is definitely not something I'd
expect to see part-way through a copy_from_user() operation.
From the boot log, it looks like the disks might be connected to the
USB 3.0 port - it's worth noting that USB 3.0 on RK3328 isn't strictly
supported by mainline yet, and Arch are carrying their own patch to
enable it on Rock64. Is this still reproducible using USB 2.0 (or even
SD/eMMC)?
Robin.
>
> Will
>
> --->8
>
>> I've been getting "Kernel panic - not syncing: Asynchronous SError
>> Interrupt" while transferring large files from and to my rock64 arm
>> board.
>> I am using btrfs as filesystem but an error seems to be triggered from
>> "__arch_copy_from_user". It's a bit difficult for me right now to test
>> with another filesystem but seems to be a troubleshooting option to
>> keep in mind.
>>
>> A reproducible test is to write a big file with dd to disk using
>> /dev/urandom for instance :
>>
>> sudo dd if=/dev/urandom of=/mnt/glassvault/out bs=1M count=8192 status=progress
>> 2789212160 bytes (2.8 GB, 2.6 GiB) copied, 70 s, 39.8 MB/s
>>
>> So here the system panicked at around 2.8GB written of a 8GB file.
>>
>> Backing up the root filesystem or using the external storage panics
>> the system after a while. Smaller file copies at around 1GB do not
>> trigger it.
>>
>> The error output caught via serial console :
>>
>> [ 334.414128] SError Interrupt on CPU0, code 0xbf000002 -- SError
>> [ 334.414136] CPU: 0 PID: 1774 Comm: dd Tainted: G O
>> 5.2.8-1-ARCH #1
>> [ 334.414137] Hardware name: Pine64 Rock64 (DT)
>> [ 334.414139] pstate: 20000005 (nzCv daif -PAN -UAO)
>> [ 334.414141] pc : __arch_copy_from_user+0x1bc/0x240
>> [ 334.414142] lr : copyin+0x54/0x68
>> [ 334.414144] sp : ffff000013523aa0
>> [ 334.414145] x29: ffff000013523aa0 x28: 0000000000001000
>> [ 334.414149] x27: ffff8000e112ec00 x26: 0000000000000005
>> [ 334.414152] x25: ffff000013523d50 x24: 0000000000005000
>> [ 334.414155] x23: 0000000000001000 x22: ffff800009c02000
>> [ 334.414158] x21: ffff000013523d40 x20: 00000000000d5000
>> [ 334.414161] x19: 0000000000000000 x18: 0000000000000000
>> [ 334.414164] x17: 0000000000000000 x16: 0000000000000000
>> [ 334.414167] x15: 0000000000000000 x14: 268451e20def8ac3
>> [ 334.414170] x13: e9bb458ce1212efb x12: 9f52f204714b75c4
>> [ 334.414173] x11: 0e6bc7b591c2d6e4 x10: 40d3c7db468453cb
>> [ 334.414176] x9 : 0d91295116253226 x8 : d0355f82a419091a
>> [ 334.414179] x7 : 911b47420a1c00a2 x6 : ffff800009c01150
>> [ 334.414182] x5 : ffff800009c02000 x4 : 0000000000000000
>> [ 334.414185] x3 : 0000ffffbdbc4000 x2 : 0000000000000e40
>> [ 334.414188] x1 : 0000ffffbdbc4190 x0 : ffff800009c01000
>> [ 334.414191] Kernel panic - not syncing: Asynchronous SError Interrupt
>> [ 334.414194] CPU: 0 PID: 1774 Comm: dd Tainted: G O
>> 5.2.8-1-ARCH #1
>> [ 334.414195] Hardware name: Pine64 Rock64 (DT)
>> [ 334.414197] Call trace:
>> [ 334.414198] dump_backtrace+0x0/0x168
>> [ 334.414199] show_stack+0x24/0x30
>> [ 334.414200] dump_stack+0xa8/0xcc
>> [ 334.414201] panic+0x150/0x320
>> [ 334.414203] __stack_chk_fail+0x0/0x28
>> [ 334.414204] arm64_serror_panic+0x80/0x8c
>> [ 334.414206] do_serror+0x11c/0x120
>> [ 334.414207] el1_error+0x84/0xf8
>> [ 334.414208] __arch_copy_from_user+0x1bc/0x240
>> [ 334.414210] iov_iter_copy_from_user_atomic+0xe4/0x390
>> [ 334.414212] btrfs_copy_from_user+0x68/0x120 [btrfs]
>> [ 334.414213] btrfs_buffered_write.isra.5+0x354/0x638 [btrfs]
>> [ 334.414214] btrfs_file_write_iter+0x3b0/0x4e0 [btrfs]
>> [ 334.414216] new_sync_write+0x110/0x198
>> [ 334.414217] __vfs_write+0x74/0x90
>> [ 334.414218] vfs_write+0xac/0x1b8
>> [ 334.414219] ksys_write+0x74/0xf8
>> [ 334.414221] __arm64_sys_write+0x24/0x30
>> [ 334.414222] el0_svc_handler+0xa4/0x180
>> [ 334.414223] el0_svc+0x8/0xc
>> [ 334.414252] SMP: stopping secondary CPUs
>> [ 334.414253] Kernel Offset: disabled
>> [ 334.414254] CPU features: 0x0002,20002000
>> [ 334.414256] Memory Limit: none
>>
>> My system specifications :
>> This is happening on my rock64 board :
>> - https://www.pine64.org/devices/single-board-computers/rock64/
>> - https://wiki.pine64.org/index.php/ROCK64_Main_Page
>>
>> lscpu output :
>> Architecture: aarch64
>> CPU op-mode(s): 32-bit, 64-bit
>> Byte Order: Little Endian
>> CPU(s): 4
>> On-line CPU(s) list: 0-3
>> Thread(s) per core: 1
>> Core(s) per socket: 4
>> Socket(s): 1
>> Vendor ID: ARM
>> Model: 4
>> Model name: Cortex-A53
>> Stepping: r0p4
>> CPU max MHz: 1296.0000
>> CPU min MHz: 408.0000
>> BogoMIPS: 48.00
>> Vulnerability L1tf: Not affected
>> Vulnerability Mds: Not affected
>> Vulnerability Meltdown: Not affected
>> Vulnerability Spec store bypass: Not affected
>> Vulnerability Spectre v1: Mitigation; __user pointer sanitization
>> Vulnerability Spectre v2: Not affected
>> Flags: fp asimd evtstrm aes pmull sha1 sha2
>> crc32 cpuid
>>
>> uname -a :
>> Linux rock64 5.2.8-1-ARCH #1 SMP Fri Aug 9 23:49:35 UTC 2019 aarch64 GNU/Linux
>>
>> Using the archlinux arm image :
>> https://archlinuxarm.org/platforms/armv8/rockchip/rock64
>>
>> Attached is the complete system log captured with the serial console.
>>
>> I wonder if this could be a hardware issue ?
>>
>> Thank you for your consideration.
>>
>> Best Regards,
>> Philipp Richter
>
>> INFO: PSCI Power Domain Map:
>> INFO: Domain Node : Level 2, parent_node -1, State ON (0x0)
>> INFO: Domain Node : Level 1, parent_node 0, State ON (0x0)
>> INFO: Domain Node : Level 0, parent_node 0, State ON (0x0)
>> INFO: Domain Node : Level 0, parent_node 0, State ON (0x0)
>> INFO: CPU Node : MPID 0x0, parent_node 1, State ON (0x0)
>> INFO: CPU Node : MPID 0x1, parent_node 1, State ON (0x0)
>> INFO: CPU Node : MPID 0x2, parent_node 1, State ON (0x0)
>> INFO: CPU Node : MPID 0x3, parent_node 1, State ON (0x0)
>> DDR version 1.16 20190528
>> ID:0x805 N
>> In
>> SRX
>> LPDDR3
>> 333MHz
>> Bus Width=32 Col=11 Bank=8 Row=15/15 CS=2 Die Bus-Width=32 Size=4096MB
>> ddrconfig:7
>> OUT
>> Boot1 Release Time: May 13 2019 17:34:36, version: 2.50
>> ChipType = 0x11, 316
>> mmc2:cmd19,100
>> SdmmcInit=2 0
>> BootCapSize=2000
>> UserCapSize=29820MB
>> FwPartOffset=2000 , 2000
>> SdmmcInit=0 NOT PRESENT
>> StorageInit ok = 210392
>> Raw SecureMode = 0
>> SecureInit read PBA: 0x4
>> SecureInit read PBA: 0x404
>> SecureInit read PBA: 0x804
>> SecureInit read PBA: 0xc04
>> SecureInit read PBA: 0x1004
>> SecureInit ret = 0, SecureMode = 0
>> atags_set_bootdev: ret:(0)
>> GPT 0x337a9f0 signature is wrong
>> recovery gpt...
>> GPT 0x337a9f0 signature is wrong
>> recovery gpt fail!
>> LoadTrust Addr:0x4000
>> No find bl30.bin
>> Load uboot, ReadLba = 2000
>> Load OK, addr=0x200000, size=0x9a864
>> RunBL31 0x10000
>> NOTICE: BL31: v1.3(debug):0eba775
>> NOTICE: BL31: Built : 12:11:32, Nov 23 2018
>> NOTICE: BL31:Rockchip release version: v1.3
>> INFO: ARM GICv2 driver initialized
>> INFO: Using opteed sec cpu_context!
>> INFO: boot cpu mask: 1
>> INFO: plat_rockchip_pmu_init: pd status 0xe
>> INFO: BL31: Initializing runtime services
>> INFO: BL31: Initializing BL32
>> INF [0x0] TEE-CORE:init_primary_helper:337: Initializing (1.1.0-221-gda2bcfdc #137 Mon Jun 17 03:00:04 UTC 2019 aarch64)
>>
>> INF [0x0] TEE-CORE:init_primary_helper:338: Release version: 1.4
>>
>> INF [0x0] TEE-CORE:init_teecore:83: teecore inits done
>> INFO: BL31: Preparing for EL3 exit to normal world
>> INFO: Entry point address = 0x200000
>> INFO: SPSR = 0x3c9
>>
>>
>> U-Boot 2019.07-1 (Aug 10 2019 - 10:47:59 +0000) Arch Linux ARM
>>
>> Model: Rockchip RK3328 EVB
>> DRAM: 4 GiB
>> MMC: rksdmmc@ff500000: 1, rksdmmc@ff520000: 0
>> Loading Environment from MMC... Card did not respond to voltage select!
>> *** Warning - No block device, using default environment
>>
>> In: serial@ff130000
>> Out: serial@ff130000
>> Err: serial@ff130000
>> Model: Rockchip RK3328 EVB
>> Net:
>> Warning: ethernet@ff540000 (eth0) using random MAC address - be:c7:d6:3e:93:7b
>> eth0: ethernet@ff540000
>> Hit any key to stop autoboot: 2 \b\b\b 1 \b\b\b 0
>> switch to partitions #0, OK
>> mmc0(part 0) is current device
>> Scanning mmc 0:1...
>> Found U-Boot script /boot.scr
>> 1133 bytes read in 5 ms (220.7 KiB/s)
>> ## Executing script at 00500000
>> 26501632 bytes read in 628 ms (40.2 MiB/s)
>> 49338 bytes read in 10 ms (4.7 MiB/s)
>> 10033777 bytes read in 241 ms (39.7 MiB/s)
>> ## Flattened Device Tree blob at 01f00000
>> Booting using the fdt blob at 0x1f00000
>> Loading Ramdisk to fc59b000, end fcf2ca71 ... OK
>> Loading Device Tree to 00000000fc58b000, end 00000000fc59afff ... OK
>>
>> Starting kernel ...
>>
>> [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
>> [ 0.000000] Linux version 5.2.8-1-ARCH (builduser@leming) (gcc version 8.3.0 (GCC)) #1 SMP Fri Aug 9 23:49:35 UTC 2019
>> [ 0.000000] Machine model: Pine64 Rock64
>> [ 0.000000] earlycon: uart8250 at MMIO32 0x00000000ff130000 (options '')
>> [ 0.000000] printk: bootconsole [uart8250] enabled
>> [ 0.000000] printk: debug: ignoring loglevel setting.
>> [ 0.000000] efi: Getting EFI parameters from FDT:
>> [ 0.000000] efi: UEFI not found.
>> [ 0.000000] cma: Reserved 64 MiB at 0x00000000f8400000
>> [ 0.000000] On node 0 totalpages: 1043968
>> [ 0.000000] DMA32 zone: 16312 pages used for memmap
>> [ 0.000000] DMA32 zone: 0 pages reserved
>> [ 0.000000] DMA32 zone: 1043968 pages, LIFO batch:63
>> [ 0.000000] psci: probing for conduit method from DT.
>> [ 0.000000] psci: PSCIv1.0 detected in firmware.
>> [ 0.000000] psci: Using standard PSCI v0.2 function IDs
>> [ 0.000000] psci: Trusted OS migration not required
>> [ 0.000000] psci: SMC Calling Convention v1.0
>> [ 0.000000] percpu: Embedded 31 pages/cpu s89496 r8192 d29288 u126976
>> [ 0.000000] pcpu-alloc: s89496 r8192 d29288 u126976 alloc=31*4096
>> [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3
>> [ 0.000000] Detected VIPT I-cache on CPU0
>> [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1027656
>> [ 0.000000] Kernel command line: console=ttyS2,1500000 ip=192.168.0.20::192.168.0.1:255.255.255.0::eth0:none cryptdevice=UUID=70b4d35b-a2e5-446d-b317-8ef53698beb6:cryptroot root=UUID=0250489f-2c3d-499e-9ff1-8f85451622e7 rootfstype=btrfs rootflags=subvol=@rootvol rw rootwait earlycon=uart8250,mmio32,0xff130000 fsck.mode=force md_mod.start_ro=1 debug ignore_loglevel log_buf_len=16M
>> [ 0.000000] printk: log_buf_len: 16777216 bytes
>> [ 0.000000] printk: early log buf free: 260348(99%)
>> [ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
>> [ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
>> [ 0.000000] Memory: 3976792K/4175872K available (14588K kernel code, 2648K rwdata, 6688K rodata, 1920K init, 825K bss, 133544K reserved, 65536K cma-reserved)
>> [ 0.000000] random: get_random_u64 called from cache_random_seq_create+0x88/0x158 with crng_init=0
>> [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
>> [ 0.000000] ftrace: allocating 50612 entries in 198 pages
>> [ 0.000000] rcu: Hierarchical RCU implementation.
>> [ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
>> [ 0.000000] Tasks RCU enabled.
>> [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
>> [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
>> [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
>> [ 0.000000] GIC: Using split EOI/Deactivate mode
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] rockchip_mmc_get_phase: invalid clk rate
>> [ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
>> [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
>> [ 0.000007] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
>> [ 0.002544] Console: colour dummy device 80x25
>> [ 0.003022] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
>> [ 0.004007] pid_max: default: 32768 minimum: 301
>> [ 0.004710] LSM: Security Framework initializing
>> [ 0.005168] Yama: becoming mindful.
>> [ 0.005630] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
>> [ 0.006300] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
>> [ 0.007747] *** VALIDATE proc ***
>> [ 0.008498] *** VALIDATE cgroup1 ***
>> [ 0.008846] *** VALIDATE cgroup2 ***
>> [ 0.010336] ASID allocator initialised with 32768 entries
>> [ 0.010979] rcu: Hierarchical SRCU implementation.
>> [ 0.016902] EFI services will not be available.
>> [ 0.018071] smp: Bringing up secondary CPUs ...
>> [ 0.019320] Detected VIPT I-cache on CPU1
>> [ 0.019410] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
>> [ 0.020336] Detected VIPT I-cache on CPU2
>> [ 0.020412] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
>> [ 0.021274] Detected VIPT I-cache on CPU3
>> [ 0.021345] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
>> [ 0.021488] smp: Brought up 1 node, 4 CPUs
>> [ 0.024854] SMP: Total of 4 processors activated.
>> [ 0.025305] CPU features: detected: 32-bit EL0 Support
>> [ 0.025795] CPU features: detected: CRC32 instructions
>> [ 0.026879] CPU: All CPU(s) started at EL2
>> [ 0.027293] alternatives: patching kernel code
>> [ 0.031870] devtmpfs: initialized
>> [ 0.047224] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
>> [ 0.048180] futex hash table entries: 1024 (order: 4, 65536 bytes)
>> [ 0.052616] pinctrl core: initialized pinctrl subsystem
>> [ 0.054646] DMI not present or invalid.
>> [ 0.055662] NET: Registered protocol family 16
>> [ 0.057142] audit: initializing netlink subsys (disabled)
>> [ 0.057904] audit: type=2000 audit(0.050:1): state=initialized audit_enabled=0 res=1
>> [ 0.059460] cpuidle: using governor ladder
>> [ 0.059878] cpuidle: using governor menu
>> [ 0.061077] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
>> [ 0.064111] DMA: preallocated 256 KiB pool for atomic allocations
>> [ 0.065680] Serial: AMBA PL011 UART driver
>> [ 0.106380] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
>> [ 0.107028] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
>> [ 0.107664] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
>> [ 0.108300] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
>> [ 2.273837] cryptd: max_cpu_qlen set to 1000
>> [ 2.291370] alg: No test for lzo-rle (lzo-rle-generic)
>> [ 2.292198] alg: No test for lzo-rle (lzo-rle-scomp)
>> [ 2.313901] ACPI: Interpreter disabled.
>> [ 2.314870] sdmmc-regulator GPIO handle specifies active low - ignored
>> [ 2.316511] vcc-host1-5v-regulator GPIO handle specifies active low - ignored
>> [ 2.319734] vgaarb: loaded
>> [ 2.321353] SCSI subsystem initialized
>> [ 2.322016] libata version 3.00 loaded.
>> [ 2.322896] usbcore: registered new interface driver usbfs
>> [ 2.323483] usbcore: registered new interface driver hub
>> [ 2.324116] usbcore: registered new device driver usb
>> [ 2.325345] pps_core: LinuxPPS API ver. 1 registered
>> [ 2.325818] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
>> [ 2.326699] PTP clock support registered
>> [ 2.327442] EDAC MC: Ver: 3.0.0
>> [ 2.329247] Advanced Linux Sound Architecture Driver Initialized.
>> [ 2.330598] NetLabel: Initializing
>> [ 2.330926] NetLabel: domain hash size = 128
>> [ 2.331372] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
>> [ 2.332002] NetLabel: unlabeled traffic allowed by default
>> [ 2.333538] clocksource: Switched to clocksource arch_sys_counter
>> [ 3.536137] VFS: Disk quotas dquot_6.6.0
>> [ 3.536616] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
>> [ 3.537405] *** VALIDATE hugetlbfs ***
>> [ 3.538306] pnp: PnP ACPI: disabled
>> [ 3.548776] NET: Registered protocol family 2
>> [ 3.550155] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes)
>> [ 3.550985] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
>> [ 3.552071] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
>> [ 3.553440] TCP: Hash tables configured (established 32768 bind 32768)
>> [ 3.554654] UDP hash table entries: 2048 (order: 4, 65536 bytes)
>> [ 3.555373] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
>> [ 3.556426] NET: Registered protocol family 1
>> [ 3.557771] RPC: Registered named UNIX socket transport module.
>> [ 3.558342] RPC: Registered udp transport module.
>> [ 3.558789] RPC: Registered tcp transport module.
>> [ 3.559236] RPC: Registered tcp NFSv4.1 backchannel transport module.
>> [ 3.559856] PCI: CLS 0 bytes, default 64
>> [ 3.560479] Trying to unpack rootfs image as initramfs...
>> [ 4.390556] Freeing initrd memory: 9796K
>> [ 4.392765] hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 counters available
>> [ 4.394010] kvm [1]: IPA Size Limit: 40bits
>> [ 4.396049] kvm [1]: vgic interrupt IRQ1
>> [ 4.396592] kvm [1]: Hyp mode initialized successfully
>> [ 5.273872] Initialise system trusted keyrings
>> [ 5.274576] workingset: timestamp_bits=46 max_order=20 bucket_order=0
>> [ 5.284456] zbud: loaded
>> [ 5.288244] NFS: Registering the id_resolver key type
>> [ 5.288758] Key type id_resolver registered
>> [ 5.289160] Key type id_legacy registered
>> [ 5.289554] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
>> [ 5.290478] SGI XFS with ACLs, security attributes, no debug enabled
>> [ 5.304919] NET: Registered protocol family 38
>> [ 5.305369] Key type asymmetric registered
>> [ 5.305760] Asymmetric key parser 'x509' registered
>> [ 5.306314] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 242)
>> [ 5.307274] io scheduler mq-deadline registered
>> [ 5.307709] io scheduler kyber registered
>> [ 5.308386] io scheduler bfq registered
>> [ 5.319920] gpio-syscon ff100000.syscon:grf-gpio: can't read the data register offset!
>> [ 5.323397] IPMI message handler: version 39.2
>> [ 5.333151] dma-pl330 ff1f0000.dmac: Loaded driver for PL330 DMAC-241330
>> [ 5.333850] dma-pl330 ff1f0000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-20 Num_Events-16
>> [ 5.341290] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
>> [ 5.345288] printk: console [ttyS2] disabled
>> [ 5.345780] ff130000.serial: ttyS2 at MMIO 0xff130000 (irq = 14, base_baud = 1500000) is a 16550A
>> [ 5.346693] printk: console [ttyS2] enabled
>> [ 5.346693] printk: console [ttyS2] enabled
>> [ 5.347462] printk: bootconsole [uart8250] disabled
>> [ 5.347462] printk: bootconsole [uart8250] disabled
>> [ 5.350235] msm_serial: driver initialized
>> [ 5.362453] m25p80 spi0.0: gd25q128 (16384 Kbytes)
>> [ 5.381313] libphy: Fixed MDIO Bus: probed
>> [ 5.385044] dwc3 ff600000.dwc3: Failed to get clk 'ref': -2
>> [ 5.388071] dwc2 ff580000.usb: ff580000.usb supply vusb_d not found, using dummy regulator
>> [ 5.388903] dwc2 ff580000.usb: ff580000.usb supply vusb_a not found, using dummy regulator
>> [ 5.404393] dwc2 ff580000.usb: DWC OTG Controller
>> [ 5.404854] dwc2 ff580000.usb: new USB bus registered, assigned bus number 1
>> [ 5.405525] dwc2 ff580000.usb: irq 33, io mem 0xff580000
>> [ 5.406281] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.02
>> [ 5.407012] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
>> [ 5.407651] usb usb1: Product: DWC OTG Controller
>> [ 5.408070] usb usb1: Manufacturer: Linux 5.2.8-1-ARCH dwc2_hsotg
>> [ 5.408608] usb usb1: SerialNumber: ff580000.usb
>> [ 5.409766] hub 1-0:1.0: USB hub found
>> [ 5.410144] hub 1-0:1.0: 1 port detected
>> [ 5.412668] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
>> [ 5.413270] ehci-pci: EHCI PCI platform driver
>> [ 5.413787] ehci-platform: EHCI generic platform driver
>> [ 5.416868] ehci-platform ff5c0000.usb: EHCI Host Controller
>> [ 5.417712] ehci-platform ff5c0000.usb: new USB bus registered, assigned bus number 2
>> [ 5.419084] ehci-platform ff5c0000.usb: irq 34, io mem 0xff5c0000
>> [ 5.443576] ehci-platform ff5c0000.usb: USB 2.0 started, EHCI 1.00
>> [ 5.444442] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.02
>> [ 5.445173] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
>> [ 5.445811] usb usb2: Product: EHCI Host Controller
>> [ 5.446245] usb usb2: Manufacturer: Linux 5.2.8-1-ARCH ehci_hcd
>> [ 5.446768] usb usb2: SerialNumber: ff5c0000.usb
>> [ 5.447967] hub 2-0:1.0: USB hub found
>> [ 5.448346] hub 2-0:1.0: 1 port detected
>> [ 5.449303] ehci-orion: EHCI orion driver
>> [ 5.449985] tegra-ehci: Tegra EHCI driver
>> [ 5.450528] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
>> [ 5.451156] ohci-pci: OHCI PCI platform driver
>> [ 5.451648] ohci-platform: OHCI generic platform driver
>> [ 5.452515] ohci-platform ff5d0000.usb: Generic Platform OHCI controller
>> [ 5.453442] ohci-platform ff5d0000.usb: new USB bus registered, assigned bus number 3
>> [ 5.454760] ohci-platform ff5d0000.usb: irq 35, io mem 0xff5d0000
>> [ 5.527889] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 5.02
>> [ 5.528622] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
>> [ 5.529261] usb usb3: Product: Generic Platform OHCI controller
>> [ 5.529785] usb usb3: Manufacturer: Linux 5.2.8-1-ARCH ohci_hcd
>> [ 5.530307] usb usb3: SerialNumber: ff5d0000.usb
>> [ 5.531477] hub 3-0:1.0: USB hub found
>> [ 5.531857] hub 3-0:1.0: 1 port detected
>> [ 5.532794] uhci_hcd: USB Universal Host Controller Interface driver
>> [ 5.534443] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
>> [ 5.535234] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 4
>> [ 5.536870] xhci-hcd xhci-hcd.0.auto: hcc params 0x0220fe64 hci version 0x110 quirks 0x0000000002010010
>> [ 5.537764] xhci-hcd xhci-hcd.0.auto: irq 169, io mem 0xff600000
>> [ 5.538874] usb usb4: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.02
>> [ 5.539606] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
>> [ 5.540244] usb usb4: Product: xHCI Host Controller
>> [ 5.540679] usb usb4: Manufacturer: Linux 5.2.8-1-ARCH xhci-hcd
>> [ 5.541202] usb usb4: SerialNumber: xhci-hcd.0.auto
>> [ 5.542407] hub 4-0:1.0: USB hub found
>> [ 5.542788] hub 4-0:1.0: 1 port detected
>> [ 5.543652] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
>> [ 5.544430] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 5
>> [ 5.545124] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0 SuperSpeed
>> [ 5.545803] usb usb5: We don't know the algorithms for LPM for this host, disabling LPM.
>> [ 5.546676] usb usb5: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.02
>> [ 5.547406] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
>> [ 5.548045] usb usb5: Product: xHCI Host Controller
>> [ 5.548479] usb usb5: Manufacturer: Linux 5.2.8-1-ARCH xhci-hcd
>> [ 5.549002] usb usb5: SerialNumber: xhci-hcd.0.auto
>> [ 5.550079] hub 5-0:1.0: USB hub found
>> [ 5.550457] hub 5-0:1.0: 1 port detected
>> [ 5.552054] usbcore: registered new interface driver uas
>> [ 5.552740] usbcore: registered new interface driver usb-storage
>> [ 5.553315] usbcore: registered new interface driver ums-alauda
>> [ 5.554711] usbcore: registered new interface driver ums-cypress
>> [ 5.555303] usbcore: registered new interface driver ums-datafab
>> [ 5.555873] usbcore: registered new interface driver ums_eneub6250
>> [ 5.556458] usbcore: registered new interface driver ums-freecom
>> [ 5.557031] usbcore: registered new interface driver ums-isd200
>> [ 5.557590] usbcore: registered new interface driver ums-jumpshot
>> [ 5.558168] usbcore: registered new interface driver ums-karma
>> [ 5.558723] usbcore: registered new interface driver ums-onetouch
>> [ 5.559329] usbcore: registered new interface driver ums-realtek
>> [ 5.559901] usbcore: registered new interface driver ums-sddr09
>> [ 5.560465] usbcore: registered new interface driver ums-sddr55
>> [ 5.561034] usbcore: registered new interface driver ums-usbat
>> [ 5.561679] usbcore: registered new interface driver usbserial_generic
>> [ 5.562286] usbserial: USB Serial support registered for generic
>> [ 5.565340] mousedev: PS/2 mouse device common for all mice
>> [ 5.570721] rk808 1-0018: chip id: 0x8050
>> [ 5.578919] rk808-regulator rk808-regulator: there is no dvs0 gpio
>> [ 5.579506] rk808-regulator rk808-regulator: there is no dvs1 gpio
>> [ 5.580138] DCDC_REG1: supplied by vcc_sys
>> [ 5.582764] vcc_host_5v: supplied by vcc_sys
>> [ 5.583213] vcc_host1_5v: supplied by vcc_sys
>> [ 5.583790] DCDC_REG2: supplied by vcc_sys
>> [ 5.585461] DCDC_REG3: supplied by vcc_sys
>> [ 5.586122] DCDC_REG4: supplied by vcc_sys
>> [ 5.587749] LDO_REG1: supplied by vcc_io
>> [ 5.591165] LDO_REG2: supplied by vcc_io
>> [ 5.594577] LDO_REG3: supplied by vcc_sys
>> [ 5.605089] device-mapper: uevent: version 1.0.3
>> [ 5.606034] device-mapper: ioctl: 4.40.0-ioctl (2019-01-18) initialised: dm-devel@redhat.com
>> [ 5.611360] sdhci: Secure Digital Host Controller Interface driver
>> [ 5.611911] sdhci: Copyright(c) Pierre Ossman
>> [ 5.612853] Synopsys Designware Multimedia Card Interface Driver
>> [ 5.614406] dwmmc_rockchip ff500000.dwmmc: IDMAC supports 32-bit address mode.
>> [ 5.615304] dwmmc_rockchip ff500000.dwmmc: Using internal DMA controller.
>> [ 5.615904] dwmmc_rockchip ff500000.dwmmc: Version ID is 270a
>> [ 5.616484] dwmmc_rockchip ff500000.dwmmc: DW MMC controller at irq 30,32 bit host data width,256 deep fifo
>> [ 5.617390] vcc_sd: supplied by vcc_io
>> [ 5.630692] mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
>> [ 5.644352] dwmmc_rockchip ff520000.dwmmc: IDMAC supports 32-bit address mode.
>> [ 5.645240] dwmmc_rockchip ff520000.dwmmc: Using internal DMA controller.
>> [ 5.645844] dwmmc_rockchip ff520000.dwmmc: Version ID is 270a
>> [ 5.646395] dwmmc_rockchip ff520000.dwmmc: DW MMC controller at irq 31,32 bit host data width,256 deep fifo
>> [ 5.647984] mmc_host mmc1: card is non-removable.
>> [ 5.661232] mmc_host mmc1: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
>> [ 5.675543] sdhci-pltfm: SDHCI platform and OF driver helper
>> [ 5.678483] ledtrig-cpu: registered to indicate activity on CPUs
>> [ 5.679960] hidraw: raw HID events driver (C) Jiri Kosina
>> [ 5.680611] usbcore: registered new interface driver usbhid
>> [ 5.681121] usbhid: USB HID core driver
>> [ 5.686302] drop_monitor: Initializing network drop monitor service
>> [ 5.687106] Initializing XFRM netlink socket
>> [ 5.688036] NET: Registered protocol family 10
>> [ 5.722101] Segment Routing with IPv6
>> [ 5.722539] mip6: Mobile IPv6
>> [ 5.722809] NET: Registered protocol family 17
>> [ 5.723440] Key type dns_resolver registered
>> [ 5.724677] registered taskstats version 1
>> [ 5.725045] Loading compiled-in X.509 certificates
>> [ 5.725592] zswap: loaded using pool lzo/zbud
>> [ 5.726195] Key type big_key registered
>> [ 5.742637] Key type encrypted registered
>> [ 5.756585] hctosys: unable to open rtc device (rtc0)
>> [ 5.758243] vcc_sd: disabling
>> [ 5.758524] ALSA device list:
>> [ 5.758789] No soundcards found.
>> [ 5.763938] random: fast init done
>> [ 5.764394] Freeing unused kernel memory: 1920K
>> [ 5.823591] Run /init as init process
>> :: running early hook [udev]
>> [ 5.859765] mmc_host mmc1: Bus speed (slot 0) = 200000000Hz (slot req 200000000Hz, actual 200000000HZ div = 0)
>> [ 5.866872] dwmmc_rockchip ff520000.dwmmc: Successfully tuned phase to 278
>> [ 5.867852] mmc1: new HS200 MMC card at address 0001
>> [ 5.870126] mmcblk1: mmc1:0001 SDW32G 29.1 GiB
>> [ 5.871837] mmcblk1boot0: mmc1:0001 SDW32G partition 1 4.00 MiB
>> [ 5.873811] mmcblk1boot1: mmc1:0001 SDW32G partition 2 4.00 MiB
>> [ 5.874678] mmcblk1rpmb: mmc1:0001 SDW32G partition 3 4.00 MiB, chardev (235:0)
>> [ 5.876990] mmcblk1: p1 p2
>> Looking for configuration files in (higher priority first):
>> /etc/tmpfiles.d
>> /run/tmpfiles.d
>> /usr/local/lib/tmpfiles.d
>> /usr/lib/tmpfiles.d
>> Reading config file "/run/tmpfiles.d/kmod.conf"ÔÇŽ
>> Entry "/dev/btrfs-control" matches include prefix "/dev".
>> Failed to determine whether '/dev/btrfs-control' is below autofs, ignoring: No such file or directory
>> Running create action for entry c /dev/btrfs-control
>> Created char device node "/dev/btrfs-control" 1:128.
>> "/dev/btrfs-control" has correct mode 20600 already.
>> [ 5.913716] usb 5-1: new SuperSpeed Gen 1 USB device number 2 using xhci-hcd
>> Starting version 242.84-1-arch
>> :: running hook [udev]
>> :: Triggering uevents...
>> [ 5.944464] usb 5-1: New USB device found, idVendor=152d, idProduct=0567, bcdDevice= 2.00
>> [ 5.945191] usb 5-1: New USB device strings: Mfr=10, Product=11, SerialNumber=5
>> [ 5.945830] usb 5-1: Product: USB to ATA/ATAPI Bridge
>> [ 5.946271] usb 5-1: Manufacturer: JMicron
>> [ 5.946631] usb 5-1: SerialNumber: 152D00539000
>> [ 5.949430] usb-storage 5-1:1.0: USB Mass Storage device detected
>> [ 5.952289] usb-storage 5-1:1.0: Quirks match for vid 152d pid 0567: 5000000
>> [ 5.953139] scsi host0: usb-storage 5-1:1.0
>> [ 6.322668] force_sf_dma_mode is ignored if force_thresh_dma_mode is set.
>> [ 6.322721] rk_gmac-dwmac ff540000.ethernet: PTP uses main clock
>> [ 6.324301] rk_gmac-dwmac ff540000.ethernet: clock input or output? (input).
>> [ 6.324950] rk_gmac-dwmac ff540000.ethernet: TX delay(0x24).
>> [ 6.325456] rk_gmac-dwmac ff540000.ethernet: RX delay(0x18).
>> [ 6.325965] rk_gmac-dwmac ff540000.ethernet: integrated PHY? (no).
>> [ 6.327146] rk_gmac-dwmac ff540000.ethernet: cannot get clock clk_mac_speed
>> [ 6.327783] rk_gmac-dwmac ff540000.ethernet: clock input from PHY
>> [ 6.333394] rk_gmac-dwmac ff540000.ethernet: init for RGMII
>> [ 6.334445] rk_gmac-dwmac ff540000.ethernet: User ID: 0x10, Synopsys ID: 0x35
>> [ 6.335103] rk_gmac-dwmac ff540000.ethernet: DWMAC1000
>> [ 6.335573] rk_gmac-dwmac ff540000.ethernet: DMA HW capability register supported
>> [ 6.336231] rk_gmac-dwmac ff540000.ethernet: RX Checksum Offload Engine supported
>> [ 6.336887] rk_gmac-dwmac ff540000.ethernet: COE Type 2
>> [ 6.337347] rk_gmac-dwmac ff540000.ethernet: Wake-Up On Lan supported
>> [ 6.337960] rk_gmac-dwmac ff540000.ethernet: Normal descriptors
>> [ 6.338486] rk_gmac-dwmac ff540000.ethernet: Ring mode enabled
>> [ 6.339002] rk_gmac-dwmac ff540000.ethernet: Enable RX Mitigation via HW Watchdog Timer
>> [ 6.458371] libphy: stmmac: probed
>> [ 6.458699] mdio_bus stmmac-0:00: attached PHY driver [unbound] (mii_bus:phy_addr=stmmac-0:00, irq=POLL)
>> [ 6.459527] mdio_bus stmmac-0:01: attached PHY driver [unbound] (mii_bus:phy_addr=stmmac-0:01, irq=POLL)
>> :: running hook [netconf]
>> [ 6.490371] Generic PHY stmmac-0:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-0:00, irq=POLL)
>> [ 6.512069] rk_gmac-dwmac ff540000.ethernet eth0: No Safety Features support found
>> [ 6.512758] rk_gmac-dwmac ff540000.ethernet eth0: PTP not supported by HW
>> IP-Config: eth0: 192.168.0.20/255.255.255.0
>> IP-Config: eth0: gw: 192.168.0.1 dns0: 0.0.0.0 dns1: 0.0.0.0
>> :: running hook [tinyssh]
>> Starting tinyssh
>> :: running hook [encryptssh]
>> [ 6.603123] random: cryptsetup: uninitialized urandom read (4 bytes read)
>>
>> A password is required to access the cryptroot volume:
>> [ 6.624945] random: cryptsetup: uninitialized urandom read (4 bytes read)
>> Enter passphrase for /dev/mmcblk1p2: [ 6.964242] scsi 0:0:0:0: Direct-Access SAMSUNG HD154UI 0520 PQ: 0 ANSI: 6
>> [ 6.965390] scsi 0:0:0:1: Direct-Access Hitachi HDS721010CLA332 0520 PQ: 0 ANSI: 6
>> [ 6.966471] scsi 0:0:0:2: Direct-Access SAMSUNG HD321KJ 0520 PQ: 0 ANSI: 6
>> [ 6.967557] scsi 0:0:0:3: Direct-Access HGST HTS 545050A7E680 0520 PQ: 0 ANSI: 6
>> [ 6.969619] sd 0:0:0:0: Attached scsi generic sg0 type 0
>> [ 6.971662] sd 0:0:0:1: Attached scsi generic sg1 type 0
>> [ 6.971955] sd 0:0:0:0: [sda] 2930277168 512-byte logical blocks: (1.50 TB/1.36 TiB)
>> [ 6.975507] sd 0:0:0:0: [sda] Write Protect is off
>> [ 6.975954] sd 0:0:0:0: [sda] Mode Sense: 67 00 10 08
>> [ 6.977060] sd 0:0:0:2: Attached scsi generic sg2 type 0
>> [ 6.977164] sd 0:0:0:1: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
>> [ 6.978816] sd 0:0:0:0: [sda] Disabling FUA
>> [ 6.979219] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
>> [ 6.981187] sd 0:0:0:1: [sdb] Write Protect is off
>> [ 6.981639] sd 0:0:0:1: [sdb] Mode Sense: 67 00 10 08
>> [ 6.982610] sd 0:0:0:2: [sdc] 625142448 512-byte logical blocks: (320 GB/298 GiB)
>> [ 6.982836] sd 0:0:0:3: Attached scsi generic sg3 type 0
>> [ 6.984522] sd 0:0:0:1: [sdb] Disabling FUA
>> [ 6.984923] sd 0:0:0:1: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
>> [ 6.986197] sd 0:0:0:2: [sdc] Write Protect is off
>> [ 6.986641] sd 0:0:0:2: [sdc] Mode Sense: 67 00 10 08
>> [ 6.988359] sd 0:0:0:2: [sdc] Disabling FUA
>> [ 6.988750] sd 0:0:0:2: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
>> [ 6.989906] sd 0:0:0:3: [sdd] 976773168 512-byte logical blocks: (500 GB/466 GiB)
>> [ 6.990982] sd 0:0:0:3: [sdd] Write Protect is off
>> [ 6.991423] sd 0:0:0:3: [sdd] Mode Sense: 67 00 10 08
>> [ 6.992280] sd 0:0:0:3: [sdd] Disabling FUA
>> [ 6.992665] sd 0:0:0:3: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
>> [ 8.892160] sdb: sdb1
>> [ 8.893001] sda: sda1 sda2
>> [ 8.900058] sd 0:0:0:1: [sdb] Attached SCSI disk
>> [ 8.901265] sdc: sdc1
>> [ 8.904861] sdd: sdd1 sdd2
>> [ 8.909043] sd 0:0:0:0: [sda] Attached SCSI disk
>> [ 8.910990] sd 0:0:0:2: [sdc] Attached SCSI disk
>> [ 8.912434] sd 0:0:0:3: [sdd] Attached SCSI disk
>> [ 11.684439] rk_gmac-dwmac ff540000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
>> [ 11.685233] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
>> [ 18.069675] random: tinysshd: uninitialized urandom read (32 bytes read)
>> [ 18.070281] random: tinysshd: uninitialized urandom read (32 bytes read)
>> [ 18.070869] random: tinysshd: uninitialized urandom read (32 bytes read)
>> tinysshd: Sp4K1mMd: info: connection from 192.168.0.101:49174 {main_tinysshd.c:106}
>> tinysshd: Sp4K1mMd: info: auth: root: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHMqaXwhM3qPqU0hiTeYybGyMCocfqCT6GlLzgYSkkNG accepted {packet_auth.c:155}
>> [ 38.083543] raid6: neonx8 gen() 1662 MB/s
>> [ 38.253541] raid6: neonx8 xor() 1584 MB/s
>> [ 38.423553] raid6: neonx4 gen() 1605 MB/s
>> [ 38.593539] raid6: neonx4 xor() 1544 MB/s
>> [ 38.763531] raid6: neonx2 gen() 1226 MB/s
>> [ 38.933530] raid6: neonx2 xor() 1280 MB/s
>> [ 39.103541] raid6: neonx1 gen() 819 MB/s
>> [ 39.273544] raid6: neonx1 xor() 964 MB/s
>> [ 39.443555] raid6: int64x8 gen() 1258 MB/s
>> [ 39.613525] raid6: int64x8 xor() 822 MB/s
>> [ 39.783558] raid6: int64x4 gen() 1061 MB/s
>> [ 39.953523] raid6: int64x4 xor() 800 MB/s
>> [ 40.123545] raid6: int64x2 gen() 732 MB/s
>> [ 40.293536] raid6: int64x2 xor() 651 MB/s
>> [ 40.463529] raid6: int64x1 gen() 476 MB/s
>> [ 40.633545] raid6: int64x1 xor() 495 MB/s
>> [ 40.633920] raid6: using algorithm neonx8 gen() 1662 MB/s
>> [ 40.634390] raid6: .... xor() 1584 MB/s, rmw enabled
>> [ 40.634825] raid6: using neon recovery algorithm
>> [ 40.640476] xor: measuring software checksum speed
>> [ 40.733529] 8regs : 2551.200 MB/sec
>> [ 40.833521] 32regs : 2921.600 MB/sec
>> [ 40.933517] arm64_neon: 2579.200 MB/sec
>> [ 40.933883] xor: using function: 32regs (2921.600 MB/sec)
>> [ 41.000114] Btrfs loaded, crc32c=crc32c-generic
>> [ 41.004168] BTRFS: device label Root devid 1 transid 7598 /dev/dm-0
>> Error reading passphrase from terminal.
>> tinysshd: Sp4K1mMd: info: finished {main_tinysshd.c:287}
>> :: performing fsck on '/dev/mapper/cryptroot'
>> :: mounting '/dev/mapper/cryptroot' on real root
>> [ 41.155941] BTRFS info (device dm-0): disk space caching is enabled
>> [ 41.156513] BTRFS info (device dm-0): has skinny extents
>> [ 41.168464] BTRFS info (device dm-0): enabling ssd optimizations
>> :: running cleanup hook [tinyssh]
>> :: running cleanup hook [netconf]
>> [ 41.203478] rk_gmac-dwmac ff540000.ethernet eth0: Link is Down
>> :: running cleanup hook [udev]
>> [ 41.615555] systemd[1]: System time before build time, advancing clock.
>> [ 41.624867] systemd[1]: systemd 242.84-1-arch running in system mode. (+PAM +AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid)
>> [ 41.626865] systemd[1]: No virtualization found in DMI
>> [ 41.627321] systemd[1]: No virtualization found in CPUID
>> [ 41.627819] systemd[1]: Virtualization XEN not found, /proc/xen does not exist
>> [ 41.628668] systemd[1]: No virtualization found in /proc/device-tree/*
>> [ 41.629421] systemd[1]: UML virtualization not found in /proc/cpuinfo.
>> [ 41.630004] systemd[1]: This platform does not support /proc/sysinfo
>> [ 41.630566] systemd[1]: Found VM virtualization none
>> [ 41.631012] systemd[1]: Detected architecture arm64.
>> [ 41.633743] systemd[1]: Mounting cgroup to /sys/fs/cgroup/hugetlb of type cgroup with options hugetlb.
>>
>> Welcome to Arch Linux ARM!
>>
>> [ 41.872853] systemd-gpt-auto-generator[657]: mmcblk1p2: Root device /dev/mmcblk1.
>> [ 41.878670] systemd-bless-boot-generator[652]: Skipping generator, not an EFI boot.
>> [ 41.882360] systemd-getty-generator[656]: Automatically adding serial getty for /dev/ttyS2.
>> [ 41.889365] systemd-hibernate-resume-generator[658]: Not running in an initrd, quitting.
>> [ 41.896703] systemd-fstab-generator[655]: Parsing /etc/fstab...
>> [ 41.898123] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/0250489f-2c3d-499e-9ff1-8f85451622e7 where=/ type=btrfs makefs=no growfs=no noauto=no nofail=no
>> [ 41.900379] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/0250489f-2c3d-499e-9ff1-8f85451622e7 where=/var type=btrfs makefs=no growfs=no noauto=no nofail=no
>> [ 41.902542] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/0250489f-2c3d-499e-9ff1-8f85451622e7 where=/home type=btrfs makefs=no growfs=no noauto=no nofail=no
>> [ 41.904857] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/01b27405-03cc-47e4-9171-aa221f71efaf where=/boot type=ext4 makefs=no growfs=no noauto=no nofail=no
>> [ 41.911126] systemd-gpt-auto-generator[657]: No suitable partition table found, ignoring.
>> [ 41.912724] systemd-fstab-generator[655]: Found entry what=proc where=/proc type=proc makefs=no growfs=no noauto=no nofail=no
>> [ 41.915293] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/0250489f-2c3d-499e-9ff1-8f85451622e7 where=/mnt/system type=btrfs makefs=no growfs=no noauto=no nofail=no
>> [ 41.918223] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/0250489f-2c3d-499e-9ff1-8f85451622e7 where=/mnt/btrfs type=btrfs makefs=no growfs=no noauto=yes nofail=no
>> [ 41.921076] systemd-fstab-generator[655]: Found entry what=/dev/disk/by-uuid/ff2c0deb-7819-4b85-a6d3-5d6c1b1cfb99 where=/mnt/glassvault type=btrfs makefs=no growfs=no noauto=yes nofail=yes
>> [ 41.924026] systemd-fstab-generator[655]: Found entry what=/mnt/glassvault where=/srv/nfs/glassvault type=none makefs=no growfs=no noauto=yes nofail=yes
>> [ OK ] Started Dispatch Password ÔÇŽts to Console Directory Watch.
>> [ OK ] Created slice system-serial\x2dgetty.slice.
>> [ OK ] Set up automount ArbitraryÔÇŽs File System Automount Point.
>> [ OK ] Listening on initctl Compatibility Named Pipe.
>> [ OK ] Listening on Journal Socket (/dev/log).
>> [ OK ] Listening on Process Core Dump Socket.
>> [ OK ] Listening on LVM2 poll daemon socket.
>> [ OK ] Created slice system-shadoÔÇŽocks\x2dlibev\x2dserver.slice.
>> [ OK ] Listening on Network Service Netlink Socket.
>> [ OK ] Listening on Device-mapper event daemon FIFOs.
>> [ OK ] Listening on Journal Audit Socket.
>> [ OK ] Listening on LVM2 metadata daemon socket.
>> [ OK ] Listening on RPCbind Server Activation Socket.
>> [ OK ] Reached target RPC Port Mapper.
>> [ OK ] Created slice User and Session Slice.
>> [ OK ] Reached target Slices.
>> [ OK ] Reached target Remote File Systems.
>> [ OK ] Started Forward Password RÔÇŽuests to Wall Directory Watch.
>> [ OK ] Reached target Local Encrypted Volumes.
>> [ OK ] Listening on Journal Socket.
>> Starting Create list of reÔÇŽodes for the current kernel...
>> Starting Journal Service...
>> [ 42.851473] systemd[669]: Operating on architecture: arm
>> [ 42.865047] systemd[669]: Operating on architecture: arm64
>> [ 42.869802] systemd[669]: Operating on architecture: arm
>> [ 42.870570] systemd[669]: Operating on architecture: arm64
>> [ 42.871225] systemd[669]: Operating on architecture: arm
>> [ 42.871892] systemd[669]: Operating on architecture: arm64
>> [ 42.873964] systemd[669]: Failed to add filter for chmod: Numerical argument out of domain
>> [ 42.874837] systemd[669]: Failed to add filter for mkdir: Numerical argument out of domain
>> [ 42.875724] systemd[669]: Failed to add filter for mknod: Numerical argument out of domain
>> [ 42.876602] systemd[669]: Failed to add filter for creat: Numerical argument out of domain
>> [ 42.877493] systemd[669]: Failed to add filter for chmod: Numerical argument out of domain
>> [ 42.878417] systemd[669]: Failed to add filter for mkdir: Numerical argument out of domain
>> [ 42.879461] systemd[669]: Failed to add filter for mknod: Numerical argument out of domain
>> Mounting POSIX Message [Queue File System... 42.880441] systemd[669]: Failed to add filter for creat: Numerical argument out of domain
>>
>> [ 42.881994] systemd[669]: Restricting namespace to: .
>> [ 42.882560] systemd[669]: Operating on architecture: arm
>> [ 42.883205] systemd[669]: Blocking cgroup.
>> [ 42.883835] systemd[669]: Blocking ipc.
>> [ 42.884441] systemd[669]: Blocking net.
>> [ 42.885071] systemd[669]: Blocking mnt.
>> [ 42.885718] systemd[669]: Blocking pid.
>> [ 42.886470] systemd[669]: Blocking user.
>> [ 42.887266] systemd[669]: Blocking uts.
>> [ 42.888473] systemd[669]: Operating on architecture: arm64
>> [ 42.889217] systemd[669]: Blocking cgroup.
>> Mounting NFSD configuration filesystem...[ 42.889759] systemd[669]: Blocking ipc.
>>
>> [ 42.890695] systemd[669]: Blocking net.
>> [ 42.891278] systemd[669]: Blocking mnt.
>> [ 42.891883] systemd[669]: Blocking pid.
>> [ 42.892515] systemd[669]: Blocking user.
>> [ 42.893131] systemd[669]: Blocking uts.
>> [ 42.894839] systemd[669]: Operating on architecture: arm
>> Starting Remount Root and Kernel File Systems...
>> Starting Monitoring of LVMÔÇŽmeventd or progress polling...
>> Mounting Huge Pages File System...
>> Mounting Kernel Debug File System...
>> Starting Load Kernel Modules...
>> [ OK ] Reached target Paths.
>> [ OK ] Created slice system-getty.slice.
>> [ OK ] Created slice system-systemd\x2dfsck.slice.
>> [ 43.019560] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
>> [ OK ] Reached target Swap.
>> [ 43.061827] random: crng init done
>> [ 43.062147] random: 5 urandom warning(s) missed due to ratelimiting
>> Mounting Temporary Directory (/tmp)...
>> [ OK ] Listening on udev Kernel Socket.
>> [ OK ] Listening on udev Control Socket.
>> Starting udev Coldplug all Devices...
>> [ OK ] Started Create list of reqÔÇŽ nodes for the current kernel.
>> [ OK ] Mounted POSIX Message Queue File System.
>> [ OK ] Mounted NFSD configuration filesystem.
>> [ OK ] Mounted Huge Pages File System.
>> [ OK ] Mounted Kernel Debug File System.
>> [ OK ] Mounted Temporary Directory (/tmp).
>> [ OK ] Started LVM2 metadata daemon.
>> [ OK ] Started Load Kernel Modules.
>> [ 43.379747] BTRFS info (device dm-0): force zstd compression, level 3
>> [ 43.380343] BTRFS info (device dm-0): enabling auto defrag
>> [ 43.380831] BTRFS info (device dm-0): disk space caching is enabled
>> [ OK ] Started Remount Root and Kernel File Systems.
>> Starting Create Static Device Nodes in /dev...
>> [ 43.456422] systemd[669]: Operating on architecture: arm64
>> Mounting Kernel Configuration File System...
>> Starting Apply Kernel Variables...
>> [ OK ] Started Create Static Device Nodes in /dev.
>> [ OK ] Mounted Kernel Configuration File System.
>> Starting udev Kernel Device Manager...
>> [ 43.560384] systemd[689]: Applying namespace mount on /run/systemd/unit-root/proc/sys/kernel/domainname
>> [ 43.562423] systemd[689]: Successfully mounted /run/systemd/unit-root/proc/sys/kernel/domainname to /run/systemd/unit-root/proc/sys/kernel/domainname
>> [ 43.564229] systemd[689]: Applying namespace mount on /run/systemd/unit-root/proc/sys/kernel/hostname
>> [ 43.565938] systemd[689]: Successfully mounted /run/systemd/unit-root/proc/sys/kernel/hostname to /run/systemd/unit-root/proc/sys/kernel/hostname
>> [ 43.569970] systemd[689]: Remounted /run/systemd/unit-root/proc/sys/kernel/domainname read-only.
>> [ OK ] Started Apply Kernel Variables.
>> [ 43.577304] systemd[689]: Remounted /run/systemd/unit-root/proc/sys/kernel/hostname read-only.
>> [ 43.581074] systemd[689]: Operating on architecture: arm
>> [ 43.594152] systemd[689]: Operating on architecture: arm64
>> [ 43.598579] systemd[689]: Operating on architecture: arm
>> [ 43.599557] systemd[689]: Operating on architecture: arm64
>> [ 43.600430] systemd[689]: Operating on architecture: arm
>> [ 43.601341] systemd[689]: Operating on architecture: arm64
>> [ 43.603628] systemd[689]: Failed to add filter for chmod: Numerical argument out of domain
>> [ 43.604547] systemd[689]: Failed to add filter for mkdir: Numerical argument out of domain
>> [ 43.605441] systemd[689]: Failed to add filter for mknod: Numerical argument out of domain
>> [ 43.606350] systemd[689]: Failed to add filter for creat: Numerical argument out of domain
>> [ 43.607264] systemd[689]: Failed to add filter for chmod: Numerical argument out of domain
>> [ 43.608214] systemd[689]: Failed to add filter for mkdir: Numerical argument out of domain
>> [ 43.609135] systemd[689]: Failed to add filter for mknod: Numerical argument out of domain
>> [ 43.610102] systemd[689]: Failed to add filter for creat: Numerical argument out of domain
>> [ 43.611583] systemd[689]: Operating on architecture: arm
>> [ 43.616441] systemd-journald[669]: Found cgroup2 on /sys/fs/cgroup/unified, unified hierarchy for systemd controller
>> [ 43.620916] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 43.622158] systemd-journald[669]: Fixed min_use=1.0M max_use=197.9M max_size=24.7M min_size=512.0K keep_free=296.9M n_max_files=100
>> [ 43.630406] systemd-journald[669]: Reserving 45048 entries in hash table.
>> [ 43.632304] systemd-journald[669]: Vacuuming...
>> [ 43.632849] systemd-journald[669]: Vacuuming done, freed 0B of archived journals from /run/log/journal/efd1758296a94bd09cc2ba3f0bb50427.
>> [ 43.634519] systemd-journald[669]: Flushing /dev/kmsg...
>> [ OK ] Started udev Coldplug all Devices.
>> [ 43.739307] audit: type=1130 audit(1563803537.110:2): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-udev-trigger comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 43.791517] systemd-journald[669]: systemd-journald running as pid 669
>> [ 43.793456] systemd-journald[669]: Sent READY=1 notification.
>> [ OK ] Started Journal Service.
>> [ 43.795061] systemd-journald[669]: Sent WATCHDOG=1 notification.
>> [ 43.824274] audit: type=1130 audit(1563803537.200:3): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-journald comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 44.076504] systemd[689]: Operating on architecture: arm64
>> [ OK ] Started udev Kernel Device Manager.
>> [ 44.252653] audit: type=1130 audit(1563803537.620:4): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-udevd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 44.648398] dw_wdt: probe of ff1a0000.watchdog failed with error -2
>> [ OK ] Found device /dev/ttyS2.
>> [ 44.757081] rk3328-codec ff410000.codec: spk_depop_time use default value.
>> [ 44.790519] lima ff300000.gpu: bus rate = 163840000
>> [ 44.790972] lima ff300000.gpu: mod rate = 163840000
>> [ 44.794707] lima ff300000.gpu: gp - mali450 version major 0 minor 0
>> [ 44.795567] lima ff300000.gpu: pp0 - mali450 version major 0 minor 0
>> [ 44.796240] lima ff300000.gpu: pp1 - mali450 version major 0 minor 0
>> [ 44.796902] lima ff300000.gpu: l2 cache 8K, 4-way, 64byte cache line, 128bit external bus
>> [ 44.797632] lima ff300000.gpu: l2 cache 64K, 4-way, 64byte cache line, 128bit external bus
>> [ 44.809584] [drm] Initialized lima 1.0.0 20190217 for ff300000.gpu on minor 0
>> [ 44.825769] Registered IR keymap rc-empty
>> [ 44.826345] rc rc0: gpio_ir_recv as /devices/platform/ir-receiver/rc/rc0
>> [ 44.827194] input: gpio_ir_recv as /devices/platform/ir-receiver/rc/rc0/input0
>> [ 44.834847] rc rc0: lirc_dev: driver gpio_ir_recv registered at minor = 0, raw IR receiver, no transmitter
>> [ 44.854765] rk808-rtc rk808-rtc: registered as rtc0
>> [ 44.890633] rockchip-vop ff370000.vop: Adding to iommu group 0
>> [ 44.928197] rockchip-drm display-subsystem: bound ff370000.vop (ops vop_component_ops [rockchipdrm])
>> [ 44.929475] dwhdmi-rockchip ff3c0000.hdmi: Detected HDMI TX controller v2.11a with HDCP (inno_dw_hdmi_phy2)
>> [ 44.947455] dwhdmi-rockchip ff3c0000.hdmi: registered DesignWare HDMI I2C bus driver
>> [ 44.949808] rockchip-drm display-subsystem: bound ff3c0000.hdmi (ops dw_hdmi_rockchip_ops [rockchipdrm])
>> [ 44.950657] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
>> [ 44.951237] [drm] No driver support for vblank timestamp query.
>> [ 44.951834] [drm] Cannot find any crtc or sizes
>> [ 44.973910] [drm] Initialized rockchip 1.0.0 20140818 for display-subsystem on minor 1
>> [ OK ] Found device /dev/disk/by-ÔÇŽ5-03cc-47e4-9171-aa221f71efaf.
>> [ 45.224367] BTRFS info (device dm-0): device fsid 0250489f-2c3d-499e-9ff1-8f85451622e7 devid 1 moved old:/dev/mapper/cryptroot new:/dev/dm-0
>> [ 45.228575] BTRFS info (device dm-0): device fsid 0250489f-2c3d-499e-9ff1-8f85451622e7 devid 1 moved old:/dev/dm-0 new:/dev/mapper/cryptroot
>> [ 45.353655] Registered IR keymap rc-cec
>> [ 45.354235] rc rc1: dw_hdmi as /devices/platform/ff3c0000.hdmi/rc/rc1
>> [ 45.355089] input: dw_hdmi as /devices/platform/ff3c0000.hdmi/rc/rc1/input1
>> [ OK ] Found device /dev/disk/by-ÔÇŽf-2c3d-499e-9ff1-8f85451622e7.
>> [ 46.003691] [drm] Cannot find any crtc or sizes
>> [ 46.396387] md127: detected capacity change from 0 to 1106309687296
>> [ 46.398853] md126: detected capacity change from 0 to 1106444953600
>> [ 46.476618] async_tx: api initialized (async)
>> [ 46.506798] md/raid:md125: not clean -- starting background reconstruction
>> [ 46.507534] md/raid:md125: device md127 operational as raid disk 1
>> [ 46.508087] md/raid:md125: device md126 operational as raid disk 2
>> [ 46.508628] md/raid:md125: device sda1 operational as raid disk 0
>> [ 46.511127] md/raid:md125: raid level 5 active with 3 out of 3 devices, algorithm 2
>> [ 46.544057] md125: detected capacity change from 0 to 2212348559360
>> Starting MD array monitor...
>> [ OK ] Started MD array monitor.
>> [ 46.704045] audit: type=1130 audit(1563803540.080:5): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=mdmonitor comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ OK ] Started Monitoring of LVM2ÔÇŽ dmeventd or progress polling.
>> [ 46.883882] audit: type=1130 audit(1563803540.260:6): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=lvm2-monitor comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ OK ] Reached target Local File Systems (Pre).
>> Starting File System CheckÔÇŽ03cc-47e4-9171-aa221f71efaf...
>> Mounting /home...
>> Mounting /var...
>> Mounting /mnt/system...
>> [ OK ] Mounted /home.
>> [ OK ] Mounted /var.
>> [ OK ] Mounted /mnt/system.
>> Starting Load/Save Random Seed...
>> Starting Flush Journal to Persistent Storage...
>> [ OK ] Started Load/Save Random Seed.
>> [ 47.060046] audit: type=1130 audit(1563803540.430:7): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-random-seed comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> Boot: fsck 0.0% complete... [ OK ] Started File System Check ÔÇŽ5-03cc-47e4-9171-aa221f71efaf.
>> [ 47.194761] audit: type=1130 audit(1563803540.570:8): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-fsck@dev-disk-by\x2duuid-01b27405\x2d03cc\x2d47e4\x2d9171\x2daa221f71efaf comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> Mounting /boot...
>> [ 47.225323] EXT4-fs (mmcblk1p1): mounted filesystem with ordered data mode. Opts: (null)
>> [ OK ] Mounted /boot.
>> [ OK ] Reached target Local File Systems.
>> [ OK ] Started Flush Journal to Persistent Storage.
>> [ 47.553975] audit: type=1130 audit(1563803540.930:9): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-journal-flush comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> Starting Create Volatile Files and Directories...
>> [ OK ] Started Create Volatile Files and Directories.
>> [ 47.684031] audit: type=1130 audit(1563803541.060:10): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-tmpfiles-setup comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> Starting Update UTMP about System Boot/Shutdown...
>> Starting Network Time Synchronization...
>> Starting Entropy Harvesting Daemon...
>> Mounting RPC Pipe File System...
>> [ OK ] Mounted RPC Pipe File System.
>> [ 47.759423] audit: type=1127 audit(1563803541.130:11): pid=773 uid=0 auid=4294967295 ses=4294967295 msg=' comm="systemd-update-utmp" exe="/usr/lib/systemd/systemd-update-utmp" hostname=? addr=? terminal=? res=success'
>> [ OK ] Started Entropy Harvesting Daemon.
>> [ OK ] Reached target rpc_pipefs.target.
>> Starting NFSv4 ID-name mapping service...
>> Starting NFSv4 Client Tracking Daemon...
>> [ OK ] Started Update UTMP about System Boot/Shutdown.
>> [ OK ] Started NFSv4 Client Tracking Daemon.
>> [ OK ] Started NFSv4 ID-name mapping service.
>> [ OK ] Started Network Time Synchronization.
>> [ OK ] Reached target System Time Set.
>> [ OK ] Reached target System Time Synchronized.
>> [ OK ] Reached target System Initialization.
>> [ 48.644114] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ OK ] Started Daily Cleanup of Snapper Sna[pshots.
>> 48.645438] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 48.646953] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ OK ] Started ;39mRun root.hints monthly.
>> 48.648291] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 48.649862] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ OK ] Started Discard unused blocks once a[ week.
>> 48.651343] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 48.652826] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ OK ] Listening on D-Bus System Message Bus Socket.
>> [ 48.654536] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 48.656126] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 48.657259] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ OK ] Reached target Sockets.
>> [ OK ] Started Monthly Btrfs scrub on /mnt/glassvault.
>> [ OK ] Started Daily man-db regeneration.
>> [ OK ] Started Daily Cleanup of Temporary Directories.
>> [ OK ] Started Daily reset of dnsmasq/pi-hole query log.
>> [ OK ] Started Daily renewal of acme.sh certificates.
>> [ OK ] Reached target Basic System.
>> [ OK ] Started irqbalance daemon.
>> [ 48.894079] kauditd_printk_skb: 6 callbacks suppressed
>> [ 48.894086] audit: type=1130 audit(1565697884.849:18): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irqbalance comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ OK ] Started Manage swap spacesÔÇŽn zram, files and partitions..
>> [ 48.933669] audit: type=1130 audit(1565697884.879:19): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-swap comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ OK ] Started D-Bus System Message Bus.
>> [ 48.955601] audit: type=1130 audit(1565697884.909:20): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=dbus comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ OK ] Started DNSCrypt-proxy client.
>> [ 48.969499] audit: type=1130 audit(1565697884.919:21): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=dnscrypt-proxy comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> Starting Netfilter Tables...
>> Starting GSSAPI Proxy Daemon...
>> Starting Self Monitoring aÔÇŽg Technology (SMART) Daemon...
>> Starting IPv4 Packet Filtering Framework...
>> Starting Login Service...
>> [ OK ] Started Timeline of Snapper Snapshots.
>> Starting USBGuard daemon...
>> [ OK ] Started Pi-hole FTLDNS engine.
>> [ 49.072725] audit: type=1130 audit(1565697885.019:22): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=pihole-FTL comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ OK ] Started Run periodic raid volume scrub.
>> [ OK ] Started Daily rotation of log files.
>> Starting Restore system tiÔÇŽoot and save it on shutdown...
>> [ OK ] Started Daily verification of password and group files.
>> [ OK ] Started Weekly ad-serving domains gathering.
>> [ 49.209107] bpfilter: Loaded bpfilter_umh pid 801
>> Started bpfilter
>> [ OK ] Started Netfilter Tables.
>> [ 49.223993] audit: type=1130 audit(1565697885.179:23): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=nftables comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 49.257418] audit: type=1325 audit(1565697885.209:24): table=mangle family=2 entries=0
>> [ 49.298437] audit: type=1325 audit(1565697885.249:25): table=mangle family=2 entries=6
>> [ 49.324654] audit: type=1325 audit(1565697885.269:26): table=nat family=2 entries=0
>> [ 49.365322] audit: type=1325 audit(1565697885.319:27): table=nat family=2 entries=5
>> [ OK ] Started Restore system timÔÇŽ boot and save it on shutdown.
>> [ OK ] Started Periodically saves system time to file timer.
>> [ OK ] Reached target Timers.
>> [ OK ] Started IPv4 Packet Filtering Framework.
>> [ OK ] Reached target Network (Pre).
>> Starting Network Service...
>> [ OK ] Started SSHGuard - blocks brute-force login attempts.
>> [ OK ] Started GSSAPI Proxy Daemon.
>> [ OK ] Started USBGuard daemon.
>> [ OK ] Started Login Service.
>> [ 50.956002] wireguard: loading out-of-tree module taints kernel.
>> [ 50.961332] wireguard: WireGuard 0.0.20190702 loaded. See www.wireguard.com for information.
>> [ 50.962091] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
>> [ OK ] Started Network Service.
>> [ OK ] Reached target Network.
>> Starting The PHP FastCGI Process Manager...
>> [ OK ] Started DNS-over-HTTPS Server.
>> Starting Sets the firmwareÔÇŽr sslh transparent proxying...
>> [ OK ] Started SSL/SSH multiplexer (fork mode).
>> Starting Permit User Sessions...
>> [ OK ] Started Unbound DNS Resolver.
>> [ OK ] Reached target Host and Network Name Lookups.
>> [ OK ] Started OpenSSH Daemon.
>> Starting Wait for Network to be Configured...
>> [ 51.172034] Generic PHY stmmac-0:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-0:00, irq=POLL)
>> [ 51.195007] rk_gmac-dwmac ff540000.ethernet eth0: No Safety Features support found
>> [ 51.195723] rk_gmac-dwmac ff540000.ethernet eth0: PTP not supported by HW
>> [ OK ] Started Permit User Sessions.
>> [ OK ] Started Serial Getty on ttyS2.
>> [ OK ] Started Getty on tty1.
>> [ OK ] Reached target Login Prompts.
>> [ OK ] Started Sets the firmware ÔÇŽfor sslh transparent proxying.
>> [ OK ] Started The PHP FastCGI Process Manager.
>> [ 53.826878] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.828624] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.831031] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.832480] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.833946] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.835131] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.837031] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 53.838244] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 54.055881] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 54.324463] rk_gmac-dwmac ff540000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
>> [ 54.325250] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
>> [ 54.327569] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ OK ] Started Self Monitoring anÔÇŽing Technology (SMART) Daemon.
>> [ 55.385487] kauditd_printk_skb: 21 callbacks suppressed
>> [ 55.385497] audit: type=1130 audit(1565697891.339:49): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=smartd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>>
>> Arch Linux 5.2.8-1-ARCH (ttyS2)
>>
>> rock64 login: [ 59.214222] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 62.238720] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 62.240107] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 62.241259] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 62.243201] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 62.244906] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 66.989756] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.454244] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.455689] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.457426] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.459017] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.460459] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.463440] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.465034] audit: type=1130 audit(1565697903.419:50): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-networkd-wait-online comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 67.465737] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.468255] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.469798] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 67.494954] audit: type=1130 audit(1565697903.449:51): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=shadowsocks-libev-server@main comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 67.520464] audit: type=1130 audit(1565697903.469:52): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=badvpn-udpgw comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 67.786151] audit: type=1130 audit(1565697903.739:53): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=rpcbind comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 67.902328] audit: type=1130 audit(1565697903.849:54): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=nfs-mountd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 67.936170] audit: type=1130 audit(1565697903.889:55): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=rpc-statd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 68.641217] audit: type=1006 audit(1565697976.049:56): pid=946 uid=0 old-auid=4294967295 auid=1000 tty=(none) old-ses=4294967295 ses=1 res=1
>> [ 68.840807] audit: type=1130 audit(1565697976.249:57): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=user-runtime-dir@1000 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 68.893470] audit: type=1006 audit(1565697976.299:58): pid=949 uid=0 old-auid=4294967295 auid=1000 tty=(none) old-ses=4294967295 ses=2 res=1
>> [ 69.213378] audit: type=1130 audit(1565697976.619:59): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=user@1000 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 69.243287] NFSD: Using UMH upcall client tracking operations.
>> [ 69.244017] NFSD: starting 90-second grace period (net f0000041)
>> [ 72.241052] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 72.244099] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 72.245874] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 72.249252] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 72.251023] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 73.124974] kauditd_printk_skb: 3 callbacks suppressed
>> [ 73.124983] audit: type=1130 audit(1565697980.539:63): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=nginx comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
>> [ 73.130861] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 73.133510] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 73.135056] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 73.136624] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 73.138327] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 82.242506] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 82.244715] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 82.246099] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 82.248165] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 82.249761] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 83.139292] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 83.634981] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 83.636562] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 83.644113] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 83.645561] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.243757] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.245343] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.246621] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.248712] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.250083] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.305936] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 92.307542] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 96.087683] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 96.089672] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 99.992391] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 99.995134] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.009809] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.011427] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.012874] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.014582] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.016023] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.017451] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.018886] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 100.020424] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 110.453073] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 112.246751] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 112.248255] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 112.249536] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 112.251623] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 112.253373] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 116.789143] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 116.791332] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 122.247692] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 122.249305] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 122.250627] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 122.252881] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 122.254487] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 127.256164] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.134131] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.135900] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.138645] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.140302] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.248524] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.250121] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.251465] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.254046] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 132.255420] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 137.266628] systemd-journald[669]: Sent WATCHDOG=1 notification.
>> [ 137.268381] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 137.270070] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 137.271736] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 140.616211] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 140.618868] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 142.251132] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 142.252867] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 142.254303] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 142.256375] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 145.655478] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 145.657011] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 145.658262] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 145.659373] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 145.660429] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 145.661573] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 147.393139] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 149.843874] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 149.845490] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 149.857427] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 152.252266] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 152.253929] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 152.255227] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 152.257368] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 152.258795] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 152.260030] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 162.254157] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 162.255578] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 162.256922] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 162.259009] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 162.260384] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 164.241031] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 164.243650] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 164.256993] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 164.258552] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 164.259879] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 172.260227] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 172.262468] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 172.264983] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 172.268760] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 172.270888] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 177.744261] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.790879] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.793721] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.795819] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.797566] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.799157] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.800686] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.802208] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.804161] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.805651] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 181.853499] BTRFS: device label glassvault devid 1 transid 158 /dev/dm-1
>> [ 182.016417] BTRFS info (device dm-1): use zstd compression, level 3
>> [ 182.016994] BTRFS info (device dm-1): enabling auto defrag
>> [ 182.017480] BTRFS info (device dm-1): using free space tree
>> [ 182.017969] BTRFS info (device dm-1): has skinny extents
>> [ 185.985238] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 185.987454] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 192.259719] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 192.261283] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 192.262602] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 192.264842] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 192.266418] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 198.948770] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 198.950491] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 198.962249] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 198.965024] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 198.969102] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 202.262706] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 202.264077] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 202.265752] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 202.267791] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 202.269168] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 207.655433] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 207.657304] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 207.664183] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 207.665886] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 207.667129] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 207.668288] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 212.264137] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 212.265989] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 212.267535] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 212.269706] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 222.266006] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 222.267594] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 222.269130] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 222.271555] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 222.273052] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.266074] systemd-journald[669]: Sent WATCHDOG=1 notification.
>> [ 232.268564] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.270050] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.271344] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.272535] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.274607] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.276380] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 232.638382] md: resync of RAID array md125
>> [ 232.645139] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 242.269536] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 242.271637] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 242.273298] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 242.276092] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 242.277783] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 243.626042] md: md125: resync done.
>> [ 243.635245] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 252.269905] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 252.271477] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 252.272766] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 252.274817] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 252.276595] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 252.277902] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 262.271635] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 262.273186] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 262.274456] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 262.276997] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 262.278409] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 264.246527] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 264.248184] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 264.259992] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 264.262711] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.676730] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.679255] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.681054] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.682571] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.683821] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.684918] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 269.689241] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 272.273301] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 272.275635] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 272.277416] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 276.946561] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 282.273887] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 282.275672] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 282.277647] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 282.281113] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 282.282677] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.275830] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.278158] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.279919] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.282723] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.284537] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.493843] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.497018] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.510796] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.512356] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 292.514254] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 297.744948] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 302.276998] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 302.278991] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 302.280379] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 302.282442] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 302.284106] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 302.285505] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 312.280762] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 312.283020] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 312.284825] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 312.288147] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 312.294199] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 320.099648] systemd-journald[669]: Sent WATCHDOG=1 notification.
>> [ 320.101231] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 320.103946] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 320.105550] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 322.311538] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 322.314402] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 322.316094] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 322.320394] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 322.322165] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 331.675338] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 331.677478] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 331.683766] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 331.685182] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 331.686379] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 331.688101] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 332.306306] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 332.308445] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 332.310098] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 332.316364] systemd-journald[669]: Journal effective settings seal=no compress=yes compress_threshold_bytes=512B
>> [ 334.414128] SError Interrupt on CPU0, code 0xbf000002 -- SError
>> [ 334.414136] CPU: 0 PID: 1774 Comm: dd Tainted: G O 5.2.8-1-ARCH #1
>> [ 334.414137] Hardware name: Pine64 Rock64 (DT)
>> [ 334.414139] pstate: 20000005 (nzCv daif -PAN -UAO)
>> [ 334.414141] pc : __arch_copy_from_user+0x1bc/0x240
>> [ 334.414142] lr : copyin+0x54/0x68
>> [ 334.414144] sp : ffff000013523aa0
>> [ 334.414145] x29: ffff000013523aa0 x28: 0000000000001000
>> [ 334.414149] x27: ffff8000e112ec00 x26: 0000000000000005
>> [ 334.414152] x25: ffff000013523d50 x24: 0000000000005000
>> [ 334.414155] x23: 0000000000001000 x22: ffff800009c02000
>> [ 334.414158] x21: ffff000013523d40 x20: 00000000000d5000
>> [ 334.414161] x19: 0000000000000000 x18: 0000000000000000
>> [ 334.414164] x17: 0000000000000000 x16: 0000000000000000
>> [ 334.414167] x15: 0000000000000000 x14: 268451e20def8ac3
>> [ 334.414170] x13: e9bb458ce1212efb x12: 9f52f204714b75c4
>> [ 334.414173] x11: 0e6bc7b591c2d6e4 x10: 40d3c7db468453cb
>> [ 334.414176] x9 : 0d91295116253226 x8 : d0355f82a419091a
>> [ 334.414179] x7 : 911b47420a1c00a2 x6 : ffff800009c01150
>> [ 334.414182] x5 : ffff800009c02000 x4 : 0000000000000000
>> [ 334.414185] x3 : 0000ffffbdbc4000 x2 : 0000000000000e40
>> [ 334.414188] x1 : 0000ffffbdbc4190 x0 : ffff800009c01000
>> [ 334.414191] Kernel panic - not syncing: Asynchronous SError Interrupt
>> [ 334.414194] CPU: 0 PID: 1774 Comm: dd Tainted: G O 5.2.8-1-ARCH #1
>> [ 334.414195] Hardware name: Pine64 Rock64 (DT)
>> [ 334.414197] Call trace:
>> [ 334.414198] dump_backtrace+0x0/0x168
>> [ 334.414199] show_stack+0x24/0x30
>> [ 334.414200] dump_stack+0xa8/0xcc
>> [ 334.414201] panic+0x150/0x320
>> [ 334.414203] __stack_chk_fail+0x0/0x28
>> [ 334.414204] arm64_serror_panic+0x80/0x8c
>> [ 334.414206] do_serror+0x11c/0x120
>> [ 334.414207] el1_error+0x84/0xf8
>> [ 334.414208] __arch_copy_from_user+0x1bc/0x240
>> [ 334.414210] iov_iter_copy_from_user_atomic+0xe4/0x390
>> [ 334.414212] btrfs_copy_from_user+0x68/0x120 [btrfs]
>> [ 334.414213] btrfs_buffered_write.isra.5+0x354/0x638 [btrfs]
>> [ 334.414214] btrfs_file_write_iter+0x3b0/0x4e0 [btrfs]
>> [ 334.414216] new_sync_write+0x110/0x198
>> [ 334.414217] __vfs_write+0x74/0x90
>> [ 334.414218] vfs_write+0xac/0x1b8
>> [ 334.414219] ksys_write+0x74/0xf8
>> [ 334.414221] __arm64_sys_write+0x24/0x30
>> [ 334.414222] el0_svc_handler+0xa4/0x180
>> [ 334.414223] el0_svc+0x8/0xc
>> [ 334.414252] SMP: stopping secondary CPUs
>> [ 334.414253] Kernel Offset: disabled
>> [ 334.414254] CPU features: 0x0002,20002000
>> [ 334.414256] Memory Limit: none
>
>
> _______________________________________________
> Linux-rockchip mailing list
> Linux-rockchip@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-rockchip
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* coresight: ACPI hook for funnel on ThunderX2
From: Tanmay Vilas Kumar Jagdale @ 2019-08-15 13:58 UTC (permalink / raw)
To: mathieu.poirier@linaro.org
Cc: Ganapatrao Kulkarni, Tomasz Nowicki, suzuki.poulose@arm.com,
Jayachandran Chandrasekharan Nair, Tanmay Vilas Kumar Jagdale,
linux-arm-kernel@lists.infradead.org
Coresight topology on Marvell's ThunderX2 Processor is as follows:
ETM0 _ _ TPIU
... \ Static Dynamic /
... --> FUNNEL0 --> FUNNEL1 --> ETF --> REPLICATOR --
ETM127_/ | \_ ETR
|
ETM128--|
/
Others--/
To support this topology add ACPI hook for Static Funnel0.
Signed-off-by: Tanmay Jagdale <tanmay@marvell.com>
---
drivers/hwtracing/coresight/coresight-funnel.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/hwtracing/coresight/coresight-funnel.c b/drivers/hwtracing/coresight/coresight-funnel.c
index fa97cb9ab4f9..315691fd6f4b 100644
--- a/drivers/hwtracing/coresight/coresight-funnel.c
+++ b/drivers/hwtracing/coresight/coresight-funnel.c
@@ -5,6 +5,7 @@
* Description: CoreSight Funnel driver
*/
+#include <linux/acpi.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/types.h>
@@ -297,6 +298,11 @@ static int static_funnel_probe(struct platform_device *pdev)
return ret;
}
+static const struct acpi_device_id static_funnel_acpi_ids[] = {
+ { "CAV901A" },
+ {},
+};
+
static const struct of_device_id static_funnel_match[] = {
{.compatible = "arm,coresight-static-funnel"},
{}
@@ -306,6 +312,7 @@ static struct platform_driver static_funnel_driver = {
.probe = static_funnel_probe,
.driver = {
.name = "coresight-static-funnel",
+ .acpi_match_table = ACPI_PTR(static_funnel_acpi_ids),
.of_match_table = static_funnel_match,
.pm = &funnel_dev_pm_ops,
.suppress_bind_attrs = true,
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* Re: [PATCH v8 14/14] MAINTAINERS: add entry for Rockchip ISP1 driver
From: Laurent Pinchart @ 2019-08-15 13:56 UTC (permalink / raw)
To: Helen Koike
Cc: devicetree, eddie.cai.linux, kernel, heiko, jacob2.chen,
jeffy.chen, zyc, linux-kernel, tfiga, linux-rockchip,
hans.verkuil, sakari.ailus, zhengsq, mchehab, ezequiel,
linux-arm-kernel, linux-media
In-Reply-To: <20190730184256.30338-15-helen.koike@collabora.com>
Hi Helen,
Thank you for the patch.
On Tue, Jul 30, 2019 at 03:42:56PM -0300, Helen Koike wrote:
> Add MAINTAINERS entry for the rockchip isp1 driver.
>
> Signed-off-by: Helen Koike <helen.koike@collabora.com>
> ---
>
> Changes in v8: None
> Changes in v7: None
>
> MAINTAINERS | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 6426db5198f0..7f38abcb4114 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -13743,6 +13743,14 @@ F: drivers/hid/hid-roccat*
> F: include/linux/hid-roccat*
> F: Documentation/ABI/*/sysfs-driver-hid-roccat*
>
> +ROCKCHIP ISP V1 DRIVER
> +M: Helen Koike <helen.koike@collabora.com>
> +L: linux-media@vger.kernel.org
> +S: Maintained
> +F: drivers/media/platform/rockchip/isp1/
> +F: Documentation/devicetree/bindings/media/rockchip-isp1.txt
> +F: Documentation/devicetree/bindings/media/rockchip-mipi-dphy.txt
This is missing the include/ files and the custom format documentation.
Apart from that, I'm happy to see that you will maintain this driver :-)
> +
> ROCKCHIP RASTER 2D GRAPHIC ACCELERATION UNIT DRIVER
> M: Jacob chen <jacob2.chen@rock-chips.com>
> L: linux-media@vger.kernel.org
--
Regards,
Laurent Pinchart
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH 0/6] drm+dma: cache support for arm, etc
From: Rob Clark @ 2019-08-15 13:54 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Kate Stewart, Masayoshi Mizuma, Maciej W. Rozycki, Eric Biggers,
Catalin Marinas, Imre Deak, dri-devel, Chris Wilson,
Masahiro Yamada, Benjamin Gaignard, Mauro Carvalho Chehab,
Will Deacon, Emil Velikov, Deepak Sharma, Michael Ellerman,
Paul Burton, Mike Rapoport, Geert Uytterhoeven,
moderated list:ARM64 PORT (AARCH64 ARCHITECTURE), Daniel Vetter,
open list:MIPS, Linus Walleij, Robin Murphy,
open list:DRM DRIVER FOR MSM ADRENO GPU, Joerg Roedel,
Arnd Bergmann, Anshuman Khandual, Hauke Mehrtens,
Jesper Dangaard Brouer, Wolfram Sang (Renesas),
open list:LINUX FOR POWERPC (32-BIT AND 64-BIT), Alexios Zavras,
Russell King, Doug Anderson, Thomas Gleixner, Sean Paul,
Allison Randal, Christophe Leroy, Enrico Weigelt, Ard Biesheuvel,
Greg Kroah-Hartman, open list, Rob Clark, Souptick Joarder,
Andrew Morton, open list:DRM DRIVER FOR MSM ADRENO GPU
In-Reply-To: <20190815065117.GA23761@lst.de>
On Wed, Aug 14, 2019 at 11:51 PM Christoph Hellwig <hch@lst.de> wrote:
>
> As said before I don't think these low-level helpers are the
> right API to export, but even if they did you'd just cover a tiny
> subset of the architectures.
Are you thinking instead something like:
void dma_sync_sg_for_{cpu,device}(struct device *dev, struct scatterlist *sgl,
int nents, enum dma_data_direction dir)
{
for_each_sg(sgl, sg, nents, i) {
arch_sync_dma_for_..(dev, sg_phys(sg), sg->length, dir);
}
}
EXPORT_SYMBOL_GPL(dma_sync_sg_for_..)
or did you have something else in mind?
I guess something like this would avoid figuring out *which* archs
actually build drm..
> Also to distil the previous thread - if you remap memory to uncached
> the helper to use is arch_dma_prep_coherent, which does a writeback+
> invalidate everywhere, and there is no need to clean up after a
> long-term uncached mapping. We might still get speculations into
> that area, if we don't remap the direct mapping, but it isn't like
> invalidting that just before freeing the memory is going to help
> anyone.
hmm, IIUC the aarch64 cache instructions, what I'm doing now is equiv
to what I would get with dma_map_sg(DMA_BIDIRECTIONAL) and
arch_dma_prep_coherent() is equiv to what I'd get w/ DMA_FROM_DEVICE
(but a single pass instead of separate inv+clean passes)..
but I can respin this with a single dma_prep_coherent_sg() which uses
arch_dma_prep_coherent()..
> Also it seems like patches 5 and 6 are missing in my inbox.
Hmm, not entirely sure why.. you should be on the cc list for each
individual patch.
But here is the patchwork link if you want to see them:
https://patchwork.freedesktop.org/series/65211/
BR,
-R
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* coresight: Add ETM4.1 support for ThunderX2
From: Tanmay Vilas Kumar Jagdale @ 2019-08-15 13:53 UTC (permalink / raw)
To: mathieu.poirier@linaro.org
Cc: Ganapatrao Kulkarni, Tomasz Nowicki, suzuki.poulose@arm.com,
Jayachandran Chandrasekharan Nair, Tanmay Vilas Kumar Jagdale,
linux-arm-kernel@lists.infradead.org
Add ETM4.1 periperhal ID for Marvell's ThunderX2 chip.
Signed-off-by: Tanmay Jagdale <tanmay@marvell.com>
---
drivers/hwtracing/coresight/coresight-etm4x.c | 2 ++
drivers/hwtracing/coresight/coresight-etm4x.h | 1 +
2 files changed, 3 insertions(+)
diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
index 7bcac8896fc1..ac3bd617907b 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x.c
@@ -58,6 +58,7 @@ static bool etm4_arch_supported(u8 arch)
/* Mask out the minor version number */
switch (arch & 0xf0) {
case ETM_ARCH_V4:
+ case ETM_ARCH_V4_1:
break;
default:
return false;
@@ -1196,6 +1197,7 @@ static const struct amba_id etm4_ids[] = {
CS_AMBA_ID(0x000bb95e), /* Cortex-A57 */
CS_AMBA_ID(0x000bb95a), /* Cortex-A72 */
CS_AMBA_ID(0x000bb959), /* Cortex-A73 */
+ CS_AMBA_ID(0x000cc0af), /* Marvell ThunderX2 */
CS_AMBA_UCI_ID(0x000bb9da, uci_id_etm4), /* Cortex-A35 */
{},
};
diff --git a/drivers/hwtracing/coresight/coresight-etm4x.h b/drivers/hwtracing/coresight/coresight-etm4x.h
index 4523f10ddd0f..03369e56b2eb 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.h
+++ b/drivers/hwtracing/coresight/coresight-etm4x.h
@@ -137,6 +137,7 @@
#define ETM_MAX_SS_CMP 8
#define ETM_ARCH_V4 0x40
+#define ETM_ARCH_V4_1 0x41
#define ETMv4_SYNC_MASK 0x1F
#define ETM_CYC_THRESHOLD_MASK 0xFFF
#define ETM_CYC_THRESHOLD_DEFAULT 0x100
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox