From 154ae6669ad74f50d5f17198bf471958a0c38a4c Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Sat, 8 Feb 2025 09:25:46 -0700 Subject: [PATCH] kernel-6.12.13-200 * Sat Feb 08 2025 Justin M. Forbes [6.12.13-0] - Config update for 6.12.13 (Justin M. Forbes) - media: ov08x40: Don't log ov08x40_check_hwcfg() errors twice (Hans de Goede) - media: ov08x40: Add missing '\n' to ov08x40_check_hwcfg() error messages (Hans de Goede) - media: ov08x40: Add missing ov08x40_identify_module() call on stream-start (Hans de Goede) - media: ov08x40: Improve ov08x40_[read|write]_reg() error returns (Hans de Goede) - media: ov08x40: Improve ov08x40_identify_module() error logging (Hans de Goede) - media: ov08x40: Move ov08x40_identify_module() function up (Hans de Goede) - media: ov08x40: Get clock on ACPI platforms too (Hans de Goede) - media: ov08x40: Get reset GPIO and regulators on ACPI platforms too (Hans de Goede) - media: ov08x40: Move fwnode_graph_get_next_endpoint() call up (Hans de Goede) - media: ov08x40: Properly turn sensor on/off when runtime-suspended (Hans de Goede) - media: ov08x40: Add OF probe support (Bryan O'Donoghue) - media: ov08x40: Rename ext_clk to xvclk (Bryan O'Donoghue) - Reapply "init/main.c: Initialize early LSMs after arch code, static keys and calls." (Justin M. Forbes) - Linux v6.12.13 Resolves: Signed-off-by: Justin M. Forbes --- Patchlist.changelog | 39 ++ kernel-aarch64-16k-debug-fedora.config | 1 + kernel-aarch64-16k-fedora.config | 1 + kernel-aarch64-64k-debug-rhel.config | 1 + kernel-aarch64-64k-rhel.config | 1 + kernel-aarch64-automotive-debug-rhel.config | 1 + kernel-aarch64-automotive-rhel.config | 1 + kernel-aarch64-debug-fedora.config | 1 + kernel-aarch64-debug-rhel.config | 1 + kernel-aarch64-fedora.config | 1 + kernel-aarch64-rhel.config | 1 + kernel-aarch64-rt-debug-fedora.config | 1 + kernel-aarch64-rt-debug-rhel.config | 1 + kernel-aarch64-rt-fedora.config | 1 + kernel-aarch64-rt-rhel.config | 1 + kernel.changelog | 18 + kernel.spec | 25 +- patch-6.12-redhat.patch | 462 ++++++++++++++++++-- sources | 6 +- 19 files changed, 527 insertions(+), 37 deletions(-) diff --git a/Patchlist.changelog b/Patchlist.changelog index 688c4d03e..12754017c 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,3 +1,42 @@ +https://gitlab.com/cki-project/kernel-ark/-/commit/eab4e4a537c1ecea380079999716d24f5cc67aa5 + eab4e4a537c1ecea380079999716d24f5cc67aa5 Reapply "init/main.c: Initialize early LSMs after arch code, static keys and calls." + +https://gitlab.com/cki-project/kernel-ark/-/commit/afd7b1238ef1cd8d8478aa9d855ab0b447a9d4ad + afd7b1238ef1cd8d8478aa9d855ab0b447a9d4ad media: ov08x40: Don't log ov08x40_check_hwcfg() errors twice + +https://gitlab.com/cki-project/kernel-ark/-/commit/85dd6dca65b39302dd3e40c474cc44f5a0bebfd5 + 85dd6dca65b39302dd3e40c474cc44f5a0bebfd5 media: ov08x40: Add missing '\n' to ov08x40_check_hwcfg() error messages + +https://gitlab.com/cki-project/kernel-ark/-/commit/d9a8a9706720c071ca5b6a1711dfabe5a3f86a57 + d9a8a9706720c071ca5b6a1711dfabe5a3f86a57 media: ov08x40: Add missing ov08x40_identify_module() call on stream-start + +https://gitlab.com/cki-project/kernel-ark/-/commit/5fb737e3b391b0f96372256e60af0b0ca1b8692c + 5fb737e3b391b0f96372256e60af0b0ca1b8692c media: ov08x40: Improve ov08x40_[read|write]_reg() error returns + +https://gitlab.com/cki-project/kernel-ark/-/commit/17af9df680a647db4b1293bab7fca1ba5d603fc0 + 17af9df680a647db4b1293bab7fca1ba5d603fc0 media: ov08x40: Improve ov08x40_identify_module() error logging + +https://gitlab.com/cki-project/kernel-ark/-/commit/b79d5c494ad271bcc466daf23ba33dc084c1e776 + b79d5c494ad271bcc466daf23ba33dc084c1e776 media: ov08x40: Move ov08x40_identify_module() function up + +https://gitlab.com/cki-project/kernel-ark/-/commit/99e766920a7373b66006985837cf0977a21a464e + 99e766920a7373b66006985837cf0977a21a464e media: ov08x40: Get clock on ACPI platforms too + +https://gitlab.com/cki-project/kernel-ark/-/commit/86a850bd23358ac0cf9d4adef67494ccf78e1ed0 + 86a850bd23358ac0cf9d4adef67494ccf78e1ed0 media: ov08x40: Get reset GPIO and regulators on ACPI platforms too + +https://gitlab.com/cki-project/kernel-ark/-/commit/b1f6394a5ee065c5c3dff2c0087ed047645e2fc8 + b1f6394a5ee065c5c3dff2c0087ed047645e2fc8 media: ov08x40: Move fwnode_graph_get_next_endpoint() call up + +https://gitlab.com/cki-project/kernel-ark/-/commit/fece7301f7798ba1b51583863ffee38d20bdbb71 + fece7301f7798ba1b51583863ffee38d20bdbb71 media: ov08x40: Properly turn sensor on/off when runtime-suspended + +https://gitlab.com/cki-project/kernel-ark/-/commit/c061d21a08e4996c7259b34d2dbb01f2537ed35c + c061d21a08e4996c7259b34d2dbb01f2537ed35c media: ov08x40: Add OF probe support + +https://gitlab.com/cki-project/kernel-ark/-/commit/9743c6dce736d6d6029184bd41af3ff01c1d3560 + 9743c6dce736d6d6029184bd41af3ff01c1d3560 media: ov08x40: Rename ext_clk to xvclk + https://gitlab.com/cki-project/kernel-ark/-/commit/32bcbd3a01f3693778efa32201859259cbac0161 32bcbd3a01f3693778efa32201859259cbac0161 Revert "init/main.c: Initialize early LSMs after arch code, static keys and calls." diff --git a/kernel-aarch64-16k-debug-fedora.config b/kernel-aarch64-16k-debug-fedora.config index 112d2a202..ae8da168c 100644 --- a/kernel-aarch64-16k-debug-fedora.config +++ b/kernel-aarch64-16k-debug-fedora.config @@ -3483,6 +3483,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m CONFIG_INFINIBAND_ERDMA=m +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y diff --git a/kernel-aarch64-16k-fedora.config b/kernel-aarch64-16k-fedora.config index 26486646f..7c0dbc8f5 100644 --- a/kernel-aarch64-16k-fedora.config +++ b/kernel-aarch64-16k-fedora.config @@ -3466,6 +3466,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m CONFIG_INFINIBAND_ERDMA=m +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y diff --git a/kernel-aarch64-64k-debug-rhel.config b/kernel-aarch64-64k-debug-rhel.config index 9ee139e58..8175db9cc 100644 --- a/kernel-aarch64-64k-debug-rhel.config +++ b/kernel-aarch64-64k-debug-rhel.config @@ -2859,6 +2859,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-64k-rhel.config b/kernel-aarch64-64k-rhel.config index af81f7769..a73a3c65a 100644 --- a/kernel-aarch64-64k-rhel.config +++ b/kernel-aarch64-64k-rhel.config @@ -2843,6 +2843,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-automotive-debug-rhel.config b/kernel-aarch64-automotive-debug-rhel.config index 9f250d740..258ec007b 100644 --- a/kernel-aarch64-automotive-debug-rhel.config +++ b/kernel-aarch64-automotive-debug-rhel.config @@ -3051,6 +3051,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-automotive-rhel.config b/kernel-aarch64-automotive-rhel.config index e8a184b3d..0952d9b9a 100644 --- a/kernel-aarch64-automotive-rhel.config +++ b/kernel-aarch64-automotive-rhel.config @@ -3035,6 +3035,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-debug-fedora.config b/kernel-aarch64-debug-fedora.config index 6c05d9884..dd90f8dfb 100644 --- a/kernel-aarch64-debug-fedora.config +++ b/kernel-aarch64-debug-fedora.config @@ -3483,6 +3483,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m CONFIG_INFINIBAND_ERDMA=m +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y diff --git a/kernel-aarch64-debug-rhel.config b/kernel-aarch64-debug-rhel.config index e96fa208a..d4731408b 100644 --- a/kernel-aarch64-debug-rhel.config +++ b/kernel-aarch64-debug-rhel.config @@ -2856,6 +2856,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-fedora.config b/kernel-aarch64-fedora.config index d268b24e0..7ebf0abb3 100644 --- a/kernel-aarch64-fedora.config +++ b/kernel-aarch64-fedora.config @@ -3466,6 +3466,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m CONFIG_INFINIBAND_ERDMA=m +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y diff --git a/kernel-aarch64-rhel.config b/kernel-aarch64-rhel.config index 864196ae6..98f1c69e3 100644 --- a/kernel-aarch64-rhel.config +++ b/kernel-aarch64-rhel.config @@ -2840,6 +2840,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-rt-debug-fedora.config b/kernel-aarch64-rt-debug-fedora.config index d39917b2c..f3f4f98b1 100644 --- a/kernel-aarch64-rt-debug-fedora.config +++ b/kernel-aarch64-rt-debug-fedora.config @@ -3488,6 +3488,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m CONFIG_INFINIBAND_ERDMA=m +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y diff --git a/kernel-aarch64-rt-debug-rhel.config b/kernel-aarch64-rt-debug-rhel.config index f71e59711..97952dcd5 100644 --- a/kernel-aarch64-rt-debug-rhel.config +++ b/kernel-aarch64-rt-debug-rhel.config @@ -2897,6 +2897,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel-aarch64-rt-fedora.config b/kernel-aarch64-rt-fedora.config index 84a3c2775..90f9b62c9 100644 --- a/kernel-aarch64-rt-fedora.config +++ b/kernel-aarch64-rt-fedora.config @@ -3471,6 +3471,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m CONFIG_INFINIBAND_ERDMA=m +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y diff --git a/kernel-aarch64-rt-rhel.config b/kernel-aarch64-rt-rhel.config index 538bcf13b..0129f48c4 100644 --- a/kernel-aarch64-rt-rhel.config +++ b/kernel-aarch64-rt-rhel.config @@ -2881,6 +2881,7 @@ CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m # CONFIG_INFINIBAND_ERDMA is not set +# CONFIG_INFINIBAND_HNS_HIP08 is not set # CONFIG_INFINIBAND_HNS is not set CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set diff --git a/kernel.changelog b/kernel.changelog index 3ef8c1479..048b5fc40 100644 --- a/kernel.changelog +++ b/kernel.changelog @@ -1,3 +1,21 @@ +* Sat Feb 08 2025 Justin M. Forbes [6.12.13-0] +- Config update for 6.12.13 (Justin M. Forbes) +- media: ov08x40: Don't log ov08x40_check_hwcfg() errors twice (Hans de Goede) +- media: ov08x40: Add missing '\n' to ov08x40_check_hwcfg() error messages (Hans de Goede) +- media: ov08x40: Add missing ov08x40_identify_module() call on stream-start (Hans de Goede) +- media: ov08x40: Improve ov08x40_[read|write]_reg() error returns (Hans de Goede) +- media: ov08x40: Improve ov08x40_identify_module() error logging (Hans de Goede) +- media: ov08x40: Move ov08x40_identify_module() function up (Hans de Goede) +- media: ov08x40: Get clock on ACPI platforms too (Hans de Goede) +- media: ov08x40: Get reset GPIO and regulators on ACPI platforms too (Hans de Goede) +- media: ov08x40: Move fwnode_graph_get_next_endpoint() call up (Hans de Goede) +- media: ov08x40: Properly turn sensor on/off when runtime-suspended (Hans de Goede) +- media: ov08x40: Add OF probe support (Bryan O'Donoghue) +- media: ov08x40: Rename ext_clk to xvclk (Bryan O'Donoghue) +- Reapply "init/main.c: Initialize early LSMs after arch code, static keys and calls." (Justin M. Forbes) +- Linux v6.12.13 +Resolves: + * Sat Feb 01 2025 Justin M. Forbes [6.12.12-0] - Revert "init/main.c: Initialize early LSMs after arch code, static keys and calls." (Justin M. Forbes) - Linux v6.12.12 diff --git a/kernel.spec b/kernel.spec index dbbe32872..3c758e380 100644 --- a/kernel.spec +++ b/kernel.spec @@ -159,18 +159,18 @@ Summary: The Linux kernel # the --with-release option overrides this setting.) %define debugbuildsenabled 1 # define buildid .local -%define specrpmversion 6.12.12 -%define specversion 6.12.12 +%define specrpmversion 6.12.13 +%define specversion 6.12.13 %define patchversion 6.12 %define pkgrelease 200 %define kversion 6 -%define tarfile_release 6.12.12 +%define tarfile_release 6.12.13 # This is needed to do merge window version magic %define patchlevel 12 # This allows pkg_release to have configurable %%{?dist} tag %define specrelease 200%{?buildid}%{?dist} # This defines the kabi tarball version -%define kabiversion 6.12.12 +%define kabiversion 6.12.13 # If this variable is set to 1, a bpf selftests build failure will cause a # fatal kernel package build error @@ -4164,6 +4164,23 @@ fi\ # # %changelog +* Sat Feb 08 2025 Justin M. Forbes [6.12.13-0] +- Config update for 6.12.13 (Justin M. Forbes) +- media: ov08x40: Don't log ov08x40_check_hwcfg() errors twice (Hans de Goede) +- media: ov08x40: Add missing '\n' to ov08x40_check_hwcfg() error messages (Hans de Goede) +- media: ov08x40: Add missing ov08x40_identify_module() call on stream-start (Hans de Goede) +- media: ov08x40: Improve ov08x40_[read|write]_reg() error returns (Hans de Goede) +- media: ov08x40: Improve ov08x40_identify_module() error logging (Hans de Goede) +- media: ov08x40: Move ov08x40_identify_module() function up (Hans de Goede) +- media: ov08x40: Get clock on ACPI platforms too (Hans de Goede) +- media: ov08x40: Get reset GPIO and regulators on ACPI platforms too (Hans de Goede) +- media: ov08x40: Move fwnode_graph_get_next_endpoint() call up (Hans de Goede) +- media: ov08x40: Properly turn sensor on/off when runtime-suspended (Hans de Goede) +- media: ov08x40: Add OF probe support (Bryan O'Donoghue) +- media: ov08x40: Rename ext_clk to xvclk (Bryan O'Donoghue) +- Reapply "init/main.c: Initialize early LSMs after arch code, static keys and calls." (Justin M. Forbes) +- Linux v6.12.13 + * Sat Feb 01 2025 Justin M. Forbes [6.12.12-0] - Revert "init/main.c: Initialize early LSMs after arch code, static keys and calls." (Justin M. Forbes) - Linux v6.12.12 diff --git a/patch-6.12-redhat.patch b/patch-6.12-redhat.patch index ffe8cfde5..967152e7c 100644 --- a/patch-6.12-redhat.patch +++ b/patch-6.12-redhat.patch @@ -39,6 +39,7 @@ drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 + drivers/input/rmi4/rmi_driver.c | 124 +-- drivers/iommu/iommu.c | 22 + + drivers/media/i2c/ov08x40.c | 249 ++++-- drivers/pci/quirks.c | 24 + drivers/scsi/sd.c | 10 + drivers/usb/core/hub.c | 7 + @@ -47,7 +48,6 @@ include/linux/lsm_hook_defs.h | 2 + include/linux/rmi.h | 1 + include/linux/security.h | 5 + - init/main.c | 6 +- kernel/module/signing.c | 9 +- scripts/tags.sh | 2 + security/integrity/platform_certs/load_uefi.c | 6 +- @@ -55,10 +55,10 @@ security/lockdown/lockdown.c | 1 + security/security.c | 12 + tools/tracing/rtla/src/utils.c | 32 +- - 57 files changed, 2986 insertions(+), 266 deletions(-) + 57 files changed, 3166 insertions(+), 329 deletions(-) diff --git a/Makefile b/Makefile -index 9e6246e733eb..d9fe5187333c 100644 +index 5442ff45f963..339e99dc5908 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \ @@ -873,7 +873,7 @@ index 5fa203f4bc6b..80761c2b63fe 100644 + return !!ipl_secure_flag; +} diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c -index a3fea683b227..a3162d93f437 100644 +index 99f165726ca9..70b4ef0d86b8 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -49,6 +49,7 @@ @@ -1053,7 +1053,7 @@ index fdfa7b266218..f5f8ba457c93 100644 tmp = ata_wait_register(ap, port_mmio + PORT_CMD, PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500); diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c -index 0c85c981a833..5cd7310efaeb 100644 +index 258a5cb6f27a..e96c66c9de7a 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -295,6 +295,8 @@ static const struct usb_device_id quirks_table[] = { @@ -3959,6 +3959,433 @@ index 83c8e617a2c5..27f9b4517095 100644 /** * iommu_setup_default_domain - Set the default_domain for the group * @group: Group to change +diff --git a/drivers/media/i2c/ov08x40.c b/drivers/media/i2c/ov08x40.c +index 67b86dabc67e..c2a399e3bb41 100644 +--- a/drivers/media/i2c/ov08x40.c ++++ b/drivers/media/i2c/ov08x40.c +@@ -3,10 +3,13 @@ + + #include + #include ++#include + #include ++#include + #include + #include + #include ++#include + #include + #include + #include +@@ -1215,7 +1218,7 @@ static const char * const ov08x40_test_pattern_menu[] = { + /* Configurations for supported link frequencies */ + #define OV08X40_LINK_FREQ_400MHZ 400000000ULL + #define OV08X40_SCLK_96MHZ 96000000ULL +-#define OV08X40_EXT_CLK 19200000 ++#define OV08X40_XVCLK 19200000 + #define OV08X40_DATA_LANES 4 + + /* +@@ -1279,6 +1282,12 @@ static const struct ov08x40_mode supported_modes[] = { + }, + }; + ++static const char * const ov08x40_supply_names[] = { ++ "dovdd", /* Digital I/O power */ ++ "avdd", /* Analog power */ ++ "dvdd", /* Digital core power */ ++}; ++ + struct ov08x40 { + struct v4l2_subdev sd; + struct media_pad pad; +@@ -1291,6 +1300,10 @@ struct ov08x40 { + struct v4l2_ctrl *hblank; + struct v4l2_ctrl *exposure; + ++ struct clk *xvclk; ++ struct gpio_desc *reset_gpio; ++ struct regulator_bulk_data supplies[ARRAY_SIZE(ov08x40_supply_names)]; ++ + /* Current mode */ + const struct ov08x40_mode *cur_mode; + +@@ -1303,6 +1316,55 @@ struct ov08x40 { + + #define to_ov08x40(_sd) container_of(_sd, struct ov08x40, sd) + ++static int ov08x40_power_on(struct device *dev) ++{ ++ struct v4l2_subdev *sd = dev_get_drvdata(dev); ++ struct ov08x40 *ov08x = to_ov08x40(sd); ++ int ret; ++ ++ ret = clk_prepare_enable(ov08x->xvclk); ++ if (ret < 0) { ++ dev_err(dev, "failed to enable xvclk\n"); ++ return ret; ++ } ++ ++ if (ov08x->reset_gpio) { ++ gpiod_set_value_cansleep(ov08x->reset_gpio, 1); ++ usleep_range(1000, 2000); ++ } ++ ++ ret = regulator_bulk_enable(ARRAY_SIZE(ov08x40_supply_names), ++ ov08x->supplies); ++ if (ret < 0) { ++ dev_err(dev, "failed to enable regulators\n"); ++ goto disable_clk; ++ } ++ ++ gpiod_set_value_cansleep(ov08x->reset_gpio, 0); ++ usleep_range(1500, 1800); ++ ++ return 0; ++ ++disable_clk: ++ gpiod_set_value_cansleep(ov08x->reset_gpio, 1); ++ clk_disable_unprepare(ov08x->xvclk); ++ ++ return ret; ++} ++ ++static int ov08x40_power_off(struct device *dev) ++{ ++ struct v4l2_subdev *sd = dev_get_drvdata(dev); ++ struct ov08x40 *ov08x = to_ov08x40(sd); ++ ++ gpiod_set_value_cansleep(ov08x->reset_gpio, 1); ++ regulator_bulk_disable(ARRAY_SIZE(ov08x40_supply_names), ++ ov08x->supplies); ++ clk_disable_unprepare(ov08x->xvclk); ++ ++ return 0; ++} ++ + /* Read registers up to 4 at a time */ + static int ov08x40_read_reg(struct ov08x40 *ov08x, + u16 reg, u32 len, u32 *val) +@@ -1332,7 +1394,7 @@ static int ov08x40_read_reg(struct ov08x40 *ov08x, + + ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); + if (ret != ARRAY_SIZE(msgs)) +- return -EIO; ++ return ret < 0 ? ret : -EIO; + + *val = be32_to_cpu(data_be); + +@@ -1401,7 +1463,7 @@ static int ov08x40_write_reg(struct ov08x40 *ov08x, + u16 reg, u32 len, u32 __val) + { + struct i2c_client *client = v4l2_get_subdevdata(&ov08x->sd); +- int buf_i, val_i; ++ int buf_i, val_i, ret; + u8 buf[6], *val_p; + __be32 val; + +@@ -1419,8 +1481,9 @@ static int ov08x40_write_reg(struct ov08x40 *ov08x, + while (val_i < 4) + buf[buf_i++] = val_p[val_i++]; + +- if (i2c_master_send(client, buf, len + 2) != len + 2) +- return -EIO; ++ ret = i2c_master_send(client, buf, len + 2); ++ if (ret != len + 2) ++ return ret < 0 ? ret : -EIO; + + return 0; + } +@@ -1869,6 +1932,34 @@ static int ov08x40_stop_streaming(struct ov08x40 *ov08x) + OV08X40_REG_VALUE_08BIT, OV08X40_MODE_STANDBY); + } + ++/* Verify chip ID */ ++static int ov08x40_identify_module(struct ov08x40 *ov08x) ++{ ++ struct i2c_client *client = v4l2_get_subdevdata(&ov08x->sd); ++ int ret; ++ u32 val; ++ ++ if (ov08x->identified) ++ return 0; ++ ++ ret = ov08x40_read_reg(ov08x, OV08X40_REG_CHIP_ID, ++ OV08X40_REG_VALUE_24BIT, &val); ++ if (ret) { ++ dev_err(&client->dev, "error reading chip-id register: %d\n", ret); ++ return ret; ++ } ++ ++ if (val != OV08X40_CHIP_ID) { ++ dev_err(&client->dev, "chip id mismatch: %x!=%x\n", ++ OV08X40_CHIP_ID, val); ++ return -ENXIO; ++ } ++ ++ ov08x->identified = true; ++ ++ return 0; ++} ++ + static int ov08x40_set_stream(struct v4l2_subdev *sd, int enable) + { + struct ov08x40 *ov08x = to_ov08x40(sd); +@@ -1882,6 +1973,10 @@ static int ov08x40_set_stream(struct v4l2_subdev *sd, int enable) + if (ret < 0) + goto err_unlock; + ++ ret = ov08x40_identify_module(ov08x); ++ if (ret) ++ goto err_rpm_put; ++ + /* + * Apply default & customized values + * and then start streaming. +@@ -1906,32 +2001,6 @@ static int ov08x40_set_stream(struct v4l2_subdev *sd, int enable) + return ret; + } + +-/* Verify chip ID */ +-static int ov08x40_identify_module(struct ov08x40 *ov08x) +-{ +- struct i2c_client *client = v4l2_get_subdevdata(&ov08x->sd); +- int ret; +- u32 val; +- +- if (ov08x->identified) +- return 0; +- +- ret = ov08x40_read_reg(ov08x, OV08X40_REG_CHIP_ID, +- OV08X40_REG_VALUE_24BIT, &val); +- if (ret) +- return ret; +- +- if (val != OV08X40_CHIP_ID) { +- dev_err(&client->dev, "chip id mismatch: %x!=%x\n", +- OV08X40_CHIP_ID, val); +- return -ENXIO; +- } +- +- ov08x->identified = true; +- +- return 0; +-} +- + static const struct v4l2_subdev_video_ops ov08x40_video_ops = { + .s_stream = ov08x40_set_stream, + }; +@@ -2072,7 +2141,7 @@ static void ov08x40_free_controls(struct ov08x40 *ov08x) + mutex_destroy(&ov08x->mutex); + } + +-static int ov08x40_check_hwcfg(struct device *dev) ++static int ov08x40_check_hwcfg(struct ov08x40 *ov08x, struct device *dev) + { + struct v4l2_fwnode_endpoint bus_cfg = { + .bus_type = V4L2_MBUS_CSI2_DPHY +@@ -2081,42 +2150,71 @@ static int ov08x40_check_hwcfg(struct device *dev) + struct fwnode_handle *fwnode = dev_fwnode(dev); + unsigned int i, j; + int ret; +- u32 ext_clk; +- +- if (!fwnode) +- return -ENXIO; +- +- ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency", +- &ext_clk); +- if (ret) { +- dev_err(dev, "can't get clock frequency"); +- return ret; +- } +- +- if (ext_clk != OV08X40_EXT_CLK) { +- dev_err(dev, "external clock %d is not supported", +- ext_clk); +- return -EINVAL; +- } ++ u32 xvclk_rate; + ++ /* ++ * Sometimes the fwnode graph is initialized by the bridge driver. ++ * Bridge drivers doing this also add sensor properties, wait for this. ++ */ + ep = fwnode_graph_get_next_endpoint(fwnode, NULL); + if (!ep) +- return -ENXIO; ++ return dev_err_probe(dev, -EPROBE_DEFER, ++ "waiting for fwnode graph endpoint\n"); + + ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg); + fwnode_handle_put(ep); + if (ret) +- return ret; ++ return dev_err_probe(dev, ret, "parsing endpoint failed\n"); ++ ++ ov08x->reset_gpio = devm_gpiod_get_optional(dev, "reset", ++ GPIOD_OUT_LOW); ++ if (IS_ERR(ov08x->reset_gpio)) { ++ ret = dev_err_probe(dev, PTR_ERR(ov08x->reset_gpio), ++ "getting reset GPIO\n"); ++ goto out_err; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(ov08x40_supply_names); i++) ++ ov08x->supplies[i].supply = ov08x40_supply_names[i]; ++ ++ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ov08x40_supply_names), ++ ov08x->supplies); ++ if (ret) ++ goto out_err; ++ ++ ov08x->xvclk = devm_clk_get_optional(dev, NULL); ++ if (IS_ERR(ov08x->xvclk)) { ++ ret = dev_err_probe(dev, PTR_ERR(ov08x->xvclk), ++ "getting xvclk\n"); ++ goto out_err; ++ } ++ if (ov08x->xvclk) { ++ xvclk_rate = clk_get_rate(ov08x->xvclk); ++ } else { ++ ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency", ++ &xvclk_rate); ++ if (ret) { ++ dev_err(dev, "can't get clock frequency\n"); ++ goto out_err; ++ } ++ } ++ ++ if (xvclk_rate != OV08X40_XVCLK) { ++ dev_err(dev, "external clock %d is not supported\n", ++ xvclk_rate); ++ ret = -EINVAL; ++ goto out_err; ++ } + + if (bus_cfg.bus.mipi_csi2.num_data_lanes != OV08X40_DATA_LANES) { +- dev_err(dev, "number of CSI2 data lanes %d is not supported", ++ dev_err(dev, "number of CSI2 data lanes %d is not supported\n", + bus_cfg.bus.mipi_csi2.num_data_lanes); + ret = -EINVAL; + goto out_err; + } + + if (!bus_cfg.nr_of_link_frequencies) { +- dev_err(dev, "no link frequencies defined"); ++ dev_err(dev, "no link frequencies defined\n"); + ret = -EINVAL; + goto out_err; + } +@@ -2129,7 +2227,7 @@ static int ov08x40_check_hwcfg(struct device *dev) + } + + if (j == bus_cfg.nr_of_link_frequencies) { +- dev_err(dev, "no link frequency %lld supported", ++ dev_err(dev, "no link frequency %lld supported\n", + link_freq_menu_items[i]); + ret = -EINVAL; + goto out_err; +@@ -2143,33 +2241,34 @@ static int ov08x40_check_hwcfg(struct device *dev) + } + + static int ov08x40_probe(struct i2c_client *client) +-{ +- struct ov08x40 *ov08x; ++{ struct ov08x40 *ov08x; + int ret; + bool full_power; + +- /* Check HW config */ +- ret = ov08x40_check_hwcfg(&client->dev); +- if (ret) { +- dev_err(&client->dev, "failed to check hwcfg: %d", ret); +- return ret; +- } +- + ov08x = devm_kzalloc(&client->dev, sizeof(*ov08x), GFP_KERNEL); + if (!ov08x) + return -ENOMEM; + ++ /* Check HW config */ ++ ret = ov08x40_check_hwcfg(ov08x, &client->dev); ++ if (ret) ++ return ret; ++ + /* Initialize subdev */ + v4l2_i2c_subdev_init(&ov08x->sd, client, &ov08x40_subdev_ops); + + full_power = acpi_dev_state_d0(&client->dev); + if (full_power) { +- /* Check module identity */ +- ret = ov08x40_identify_module(ov08x); ++ ret = ov08x40_power_on(&client->dev); + if (ret) { +- dev_err(&client->dev, "failed to find sensor: %d\n", ret); ++ dev_err(&client->dev, "failed to power on\n"); + return ret; + } ++ ++ /* Check module identity */ ++ ret = ov08x40_identify_module(ov08x); ++ if (ret) ++ goto probe_power_off; + } + + /* Set default mode to max resolution */ +@@ -2177,7 +2276,7 @@ static int ov08x40_probe(struct i2c_client *client) + + ret = ov08x40_init_controls(ov08x); + if (ret) +- return ret; ++ goto probe_power_off; + + /* Initialize subdev */ + ov08x->sd.internal_ops = &ov08x40_internal_ops; +@@ -2210,6 +2309,9 @@ static int ov08x40_probe(struct i2c_client *client) + error_handler_free: + ov08x40_free_controls(ov08x); + ++probe_power_off: ++ ov08x40_power_off(&client->dev); ++ + return ret; + } + +@@ -2223,9 +2325,14 @@ static void ov08x40_remove(struct i2c_client *client) + ov08x40_free_controls(ov08x); + + pm_runtime_disable(&client->dev); ++ if (!pm_runtime_status_suspended(&client->dev)) ++ ov08x40_power_off(&client->dev); + pm_runtime_set_suspended(&client->dev); + } + ++static DEFINE_RUNTIME_DEV_PM_OPS(ov08x40_pm_ops, ov08x40_power_off, ++ ov08x40_power_on, NULL); ++ + #ifdef CONFIG_ACPI + static const struct acpi_device_id ov08x40_acpi_ids[] = { + {"OVTI08F4"}, +@@ -2235,10 +2342,18 @@ static const struct acpi_device_id ov08x40_acpi_ids[] = { + MODULE_DEVICE_TABLE(acpi, ov08x40_acpi_ids); + #endif + ++static const struct of_device_id ov08x40_of_match[] = { ++ { .compatible = "ovti,ov08x40" }, ++ { /* sentinel */ } ++}; ++MODULE_DEVICE_TABLE(of, ov08x40_of_match); ++ + static struct i2c_driver ov08x40_i2c_driver = { + .driver = { + .name = "ov08x40", + .acpi_match_table = ACPI_PTR(ov08x40_acpi_ids), ++ .of_match_table = ov08x40_of_match, ++ .pm = pm_sleep_ptr(&ov08x40_pm_ops), + }, + .probe = ov08x40_probe, + .remove = ov08x40_remove, diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 8103bc24a54e..ea629c78fa7c 100644 --- a/drivers/pci/quirks.c @@ -4194,31 +4621,6 @@ index 2ec8f3014757..7273b2b8b23b 100644 static inline int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len, void *val, size_t val_len, u64 id, u64 flags) -diff --git a/init/main.c b/init/main.c -index c4778edae797..206acdde51f5 100644 ---- a/init/main.c -+++ b/init/main.c -@@ -922,11 +922,8 @@ void start_kernel(void) - boot_cpu_init(); - page_address_init(); - pr_notice("%s", linux_banner); -- setup_arch(&command_line); -- /* Static keys and static calls are needed by LSMs */ -- jump_label_init(); -- static_call_init(); - early_security_init(); -+ setup_arch(&command_line); - setup_boot_config(); - setup_command_line(command_line); - setup_nr_cpu_ids(); -@@ -937,6 +934,7 @@ void start_kernel(void) - - pr_notice("Kernel command line: %s\n", saved_command_line); - /* parameters may set static keys */ -+ jump_label_init(); - parse_early_param(); - after_dashes = parse_args("Booting kernel", - static_command_line, __start___param, diff --git a/kernel/module/signing.c b/kernel/module/signing.c index a2ff4242e623..f0d2be1ee4f1 100644 --- a/kernel/module/signing.c diff --git a/sources b/sources index de1f7bb34..056f8c860 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (linux-6.12.12.tar.xz) = 13d5b85fb724b81b123f88264057968fe7ea7ba9cd5c2c3483a971e14ace26b9c4cac4fa2e3e50500afe08a5fa8e35135be9ea6fc2f12fa9f53ac6f78e3a1559 -SHA512 (kernel-abi-stablelists-6.12.12.tar.xz) = 9d48237e3b7d012a363ce502487b3d3a0a69aaccc9b8b4db71d5dd43cdaa5d4d1669362aeae34bc1a8e4286b76ba17608fe17a1e551f3fc95e9b356f77f8f8a5 -SHA512 (kernel-kabi-dw-6.12.12.tar.xz) = 6f003628c855228059764f13057424097284b90133e87d68249ceb2d100c9e5f9ae15f9ded98df36f80d461dfe3b41ff7db60c97aed221e3b5613b5999fde731 +SHA512 (linux-6.12.13.tar.xz) = ef0e3b152530b476bdb05aa6a2140e96342936d2a2a07852bd951518f28e22a0239d31abcb8c6332f192a09a1a01a708f73e909bd6feedd3f85e6bd790dcd053 +SHA512 (kernel-abi-stablelists-6.12.13.tar.xz) = d84bb18c2dd554cc768f6bfffe81371903b6bd68ba14b29ebcc9047f9a547f37665c9d4e0192d930346fdfe0cdbc554e6546b5bdf57bdff3df0f18aefd9e2848 +SHA512 (kernel-kabi-dw-6.12.13.tar.xz) = affbed5e5c12103fbae8de48177658185c062081edb5642d6cb5557056a00309aa868b96df7e6a89a3864171c9e31468eec96c0d38105087b1bca5f6ef81c522