Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
a15be9a
x86/irq: Define trace events conditionally
arndb Feb 25, 2025
a87e44c
mptcp: safety check before fallback
matttbe Feb 24, 2025
cd2dbe7
drm/nouveau: Do not override forced connector status
tdz Jan 14, 2025
574701e
net: Handle napi_schedule() calls from non-interrupt
Feb 23, 2025
9442d46
mm: add nommu variant of vm_insert_pages()
axboe Mar 16, 2024
4347889
io_uring: get rid of remap_pfn_range() for mapping rings/sqes
axboe Mar 13, 2024
5f7a685
io_uring: don't attempt to mmap larger than what the user asks for
axboe May 29, 2024
56ad893
io_uring: fix corner case forgetting to vunmap
isilence Nov 25, 2024
7102707
io_uring: use vmap() for ring mapping
axboe Mar 13, 2024
84b6602
io_uring: unify io_pin_pages()
axboe Mar 13, 2024
efed7e9
io_uring/kbuf: vmap pinned buffer ring
axboe Mar 12, 2024
463e011
io_uring/kbuf: use vm_insert_pages() for mmap'ed pbuf ring
axboe Mar 13, 2024
bfbae6c
io_uring: use unpin_user_pages() where appropriate
axboe Mar 13, 2024
e3ece6a
io_uring: fix error pbuf checking
isilence Jul 18, 2024
02d9033
Input: ads7846 - fix gpiod allocation
goldelico Feb 1, 2025
0650760
Input: iqs7222 - preserve system status register
jlabundy Mar 10, 2025
fefc639
Input: xpad - add 8BitDo SN30 Pro, Hyperkin X91 and Gamesir G7 SE con…
niltonperimneto Feb 3, 2025
b3a9047
Input: xpad - add multiple supported devices
paroj Feb 3, 2025
b45ad56
Input: xpad - add support for ZOTAC Gaming Zone
antheas Feb 25, 2025
a0099e3
Input: xpad - add support for TECNO Pocket Go
antheas Feb 25, 2025
65f56e8
Input: xpad - rename QH controller to Legion Go S
antheas Feb 25, 2025
7177647
Input: i8042 - swap old quirk combination with new quirk for NHxxRZQ
tuxedo-wse Feb 21, 2025
cbca51e
Input: i8042 - add required quirks for missing old boardnames
tuxedo-wse Feb 21, 2025
c6bbf7d
Input: i8042 - swap old quirk combination with new quirk for several …
tuxedo-wse Feb 21, 2025
e64afb0
Input: i8042 - swap old quirk combination with new quirk for more dev…
tuxedo-wse Feb 21, 2025
cec9016
USB: serial: ftdi_sio: add support for Altera USB Blaster 3
ngboonkhai Mar 12, 2025
9116573
USB: serial: option: add Telit Cinterion FE990B compositions
fabio-porcedda Mar 4, 2025
41d08bb
USB: serial: option: fix Telit Cinterion FE990A name
fabio-porcedda Mar 4, 2025
d83b318
USB: serial: option: match on interface class for Telit FN990B
jhovold Mar 6, 2025
f517703
x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes
FlorentRevest Mar 10, 2025
62e7bf4
drm/i915/cdclk: Do cdclk post plane programming later
vsyrjala Feb 18, 2025
f171176
drm/atomic: Filter out redundant DPMS calls
vsyrjala Feb 19, 2025
c204dfa
drm/dp_mst: Fix locking when skipping CSN before topology probing
ideak Mar 7, 2025
b02a7ac
drm/amd/display: Disable unneeded hpd interrupts during dm_init
leo-sunli1 Feb 20, 2025
d90df7d
drm/amd/display: Restore correct backlight brightness after a GPU reset
superm1 Feb 23, 2025
c06f6c1
drm/amd/display: Assign normalized_pix_clk when color depth = 14
Feb 27, 2025
f00682a
drm/amd/display: Fix slab-use-after-free on hdcp_work
superm1 Feb 28, 2025
8f923c3
ksmbd: fix use-after-free in ksmbd_free_work_struct
namjaejeon Mar 5, 2025
a35b91e
ksmbd: prevent connection release during oplock break notification
namjaejeon Mar 6, 2025
2a3ec83
clk: samsung: update PLL locktime for PLL142XX used on FSD platform
Feb 25, 2025
d750986
ASoC: amd: yc: Support mic on another Lenovo ThinkPad E16 Gen 2 model
ThomasMiz Mar 8, 2025
5b6f1d3
dm-flakey: Fix memory corruption in optional corrupt_bio_byte feature
Mar 8, 2025
163a35b
arm64: mm: Populate vmemmap at the page level if not section aligned
Mar 4, 2025
325eacc
qlcnic: fix memory leak issues in qlcnic_sriov_common.c
Mar 7, 2025
249e4ef
smb: client: fix regression with guest option
Mar 12, 2025
588c139
rust: Disallow BTF generation with Rust + LTO
maurer Jan 8, 2025
a9e5784
rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` an…
BennoLossin Mar 5, 2025
219d05d
lib/buildid: Handle memfd_secret() files in build_id_parse()
anakryiko Oct 17, 2024
279388e
mm: split critical region in remap_file_pages() and invoke LSMs in be…
kiryl Oct 18, 2024
bd123d1
ASoC: ops: Consistently treat platform_max as control value
charleskeepax Feb 28, 2025
03ecf72
rust: error: add missing newline to pr_warn! calls
albankurti Feb 6, 2025
777fadc
drm/gma500: Add NULL check for pci_gfx_root in mid_get_vbt_data()
Mar 6, 2025
ddef2e8
ASoC: cs42l43: Fix maximum ADC Volume
charleskeepax Mar 6, 2025
41b003c
rust: init: add missing newline to pr_info! calls
albankurti Feb 6, 2025
aa6c7a6
ASoC: rt722-sdca: add missing readable registers
bardliao Mar 10, 2025
274bb40
ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe()
tititiou36 Mar 10, 2025
0f40990
scripts: generate_rust_analyzer: add missing macros deps
tamird Feb 10, 2025
1a4fe26
cifs: Fix integer overflow while processing acregmax mount option
Mar 11, 2025
d2cac95
cifs: Fix integer overflow while processing acdirmax mount option
Mar 11, 2025
b2be092
cifs: Fix integer overflow while processing actimeo mount option
Mar 11, 2025
c7a7cea
cifs: Fix integer overflow while processing closetimeo mount option
Mar 11, 2025
182ef18
cifs: Validate content of WSL reparse point buffers
pali Sep 20, 2024
731a9ae
cifs: Throw -EOPNOTSUPP error on unsupported reparse point type from …
pali Sep 17, 2024
f4d6674
i2c: ali1535: Fix an error handling path in ali1535_probe()
tititiou36 Mar 3, 2025
2938be8
i2c: ali15x3: Fix an error handling path in ali15x3_probe()
tititiou36 Mar 3, 2025
5de5616
i2c: sis630: Fix an error handling path in sis630_probe()
tititiou36 Mar 3, 2025
fac94cb
stmmac: loongson: Pass correct arg to PCI function
Feb 26, 2025
b41af7c
smb3: add support for IAKerb
smfrench Jan 28, 2025
12a5a65
smb: client: Fix match_session bug preventing session reuse
hac-v Mar 11, 2025
7d59449
Bluetooth: L2CAP: Fix corrupted list in hci_chan_del
Vudentz Feb 6, 2025
ee5db36
nvme-fc: rely on state transitions to handle connectivity loss
igaw Feb 14, 2025
73def52
HID: apple: disable Fn key handling on the Omoton KB066
alexhenrie Feb 24, 2025
141156b
nvme-tcp: Fix a C2HTermReq error message
maurizio-lombardi Feb 24, 2025
3c2101b
rust: lockdep: Remove support for dynamically allocated LockClassKeys
chessturo Mar 7, 2025
c0b6882
netfilter: nf_tables: use timestamp to check for set element timeout
ummakynes Feb 5, 2024
9f668fd
netfilter: nf_tables: bail out if stateful expression provides no .clone
ummakynes Mar 18, 2025
502eabb
netfilter: nf_tables: allow clone callbacks to sleep
Mar 18, 2025
36ddc2f
Linux 6.6.82
gregkh Mar 9, 2025
e1a7af7
Linux 6.6.83
gregkh Mar 13, 2025
6ba7515
Linux 6.6.84
gregkh Mar 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 6
PATCHLEVEL = 6
SUBLEVEL = 81
SUBLEVEL = 84
EXTRAVERSION =
NAME = Pinguïn Aangedreven

Expand Down
5 changes: 4 additions & 1 deletion arch/arm64/mm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1150,8 +1150,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
struct vmem_altmap *altmap)
{
WARN_ON((start < VMEMMAP_START) || (end > VMEMMAP_END));
/* [start, end] should be within one section */
WARN_ON_ONCE(end - start > PAGES_PER_SECTION * sizeof(struct page));

if (!IS_ENABLED(CONFIG_ARM64_4K_PAGES))
if (!IS_ENABLED(CONFIG_ARM64_4K_PAGES) ||
(end - start < PAGES_PER_SECTION * sizeof(struct page)))
return vmemmap_populate_basepages(start, end, node, altmap);
else
return vmemmap_populate_hugepages(start, end, node, altmap);
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/cpu/microcode/amd.c
Original file line number Diff line number Diff line change
Expand Up @@ -885,7 +885,7 @@ static enum ucode_state load_microcode_amd(u8 family, const u8 *data, size_t siz
return ret;
}

for_each_node(nid) {
for_each_node_with_cpus(nid) {
cpu = cpumask_first(cpumask_of_node(nid));
c = &cpu_data(cpu);

Expand Down
2 changes: 2 additions & 0 deletions arch/x86/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@
#include <asm/traps.h>
#include <asm/thermal.h>

#if defined(CONFIG_X86_LOCAL_APIC) || defined(CONFIG_X86_THERMAL_VECTOR)
#define CREATE_TRACE_POINTS
#include <asm/trace/irq_vectors.h>
#endif

DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
EXPORT_PER_CPU_SYMBOL(irq_stat);
Expand Down
7 changes: 6 additions & 1 deletion drivers/clk/samsung/clk-pll.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ static const struct clk_ops samsung_pll3000_clk_ops = {
*/
/* Maximum lock time can be 270 * PDIV cycles */
#define PLL35XX_LOCK_FACTOR (270)
#define PLL142XX_LOCK_FACTOR (150)

#define PLL35XX_MDIV_MASK (0x3FF)
#define PLL35XX_PDIV_MASK (0x3F)
Expand Down Expand Up @@ -272,7 +273,11 @@ static int samsung_pll35xx_set_rate(struct clk_hw *hw, unsigned long drate,
}

/* Set PLL lock time. */
writel_relaxed(rate->pdiv * PLL35XX_LOCK_FACTOR,
if (pll->type == pll_142xx)
writel_relaxed(rate->pdiv * PLL142XX_LOCK_FACTOR,
pll->lock_reg);
else
writel_relaxed(rate->pdiv * PLL35XX_LOCK_FACTOR,
pll->lock_reg);

/* Change PLL PMS values */
Expand Down
10 changes: 10 additions & 0 deletions drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector);
static void handle_hpd_rx_irq(void *param);

static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
int bl_idx,
u32 user_brightness);

static bool
is_timing_unchanged_for_freesync(struct drm_crtc_state *old_crtc_state,
struct drm_crtc_state *new_crtc_state);
Expand Down Expand Up @@ -2879,6 +2883,12 @@ static int dm_resume(void *handle)

mutex_unlock(&dm->dc_lock);

/* set the backlight after a reset */
for (i = 0; i < dm->num_of_edps; i++) {
if (dm->backlight_dev[i])
amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]);
}

return 0;
}
/* Recreate dc_state - DC invalidates it when setting power state to S3. */
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ void hdcp_destroy(struct kobject *kobj, struct hdcp_workqueue *hdcp_work)
for (i = 0; i < hdcp_work->max_link; i++) {
cancel_delayed_work_sync(&hdcp_work[i].callback_dwork);
cancel_delayed_work_sync(&hdcp_work[i].watchdog_timer_dwork);
cancel_delayed_work_sync(&hdcp_work[i].property_validate_dwork);
}

sysfs_remove_bin_file(kobj, &hdcp_work[0].attr);
Expand Down
64 changes: 45 additions & 19 deletions drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -891,19 +891,48 @@ void amdgpu_dm_hpd_init(struct amdgpu_device *adev)
struct drm_device *dev = adev_to_drm(adev);
struct drm_connector *connector;
struct drm_connector_list_iter iter;
int irq_type;
int i;

/* First, clear all hpd and hpdrx interrupts */
for (i = DC_IRQ_SOURCE_HPD1; i <= DC_IRQ_SOURCE_HPD6RX; i++) {
if (!dc_interrupt_set(adev->dm.dc, i, false))
drm_err(dev, "Failed to clear hpd(rx) source=%d on init\n",
i);
}

drm_connector_list_iter_begin(dev, &iter);
drm_for_each_connector_iter(connector, &iter) {
struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_dm_connector(connector);

const struct dc_link *dc_link = amdgpu_dm_connector->dc_link;

/*
* Get a base driver irq reference for hpd ints for the lifetime
* of dm. Note that only hpd interrupt types are registered with
* base driver; hpd_rx types aren't. IOW, amdgpu_irq_get/put on
* hpd_rx isn't available. DM currently controls hpd_rx
* explicitly with dc_interrupt_set()
*/
if (dc_link->irq_source_hpd != DC_IRQ_SOURCE_INVALID) {
dc_interrupt_set(adev->dm.dc,
dc_link->irq_source_hpd,
true);
irq_type = dc_link->irq_source_hpd - DC_IRQ_SOURCE_HPD1;
/*
* TODO: There's a mismatch between mode_info.num_hpd
* and what bios reports as the # of connectors with hpd
* sources. Since the # of hpd source types registered
* with base driver == mode_info.num_hpd, we have to
* fallback to dc_interrupt_set for the remaining types.
*/
if (irq_type < adev->mode_info.num_hpd) {
if (amdgpu_irq_get(adev, &adev->hpd_irq, irq_type))
drm_err(dev, "DM_IRQ: Failed get HPD for source=%d)!\n",
dc_link->irq_source_hpd);
} else {
dc_interrupt_set(adev->dm.dc,
dc_link->irq_source_hpd,
true);
}
}

if (dc_link->irq_source_hpd_rx != DC_IRQ_SOURCE_INVALID) {
Expand All @@ -913,12 +942,6 @@ void amdgpu_dm_hpd_init(struct amdgpu_device *adev)
}
}
drm_connector_list_iter_end(&iter);

/* Update reference counts for HPDs */
for (i = DC_IRQ_SOURCE_HPD1; i <= adev->mode_info.num_hpd; i++) {
if (amdgpu_irq_get(adev, &adev->hpd_irq, i - DC_IRQ_SOURCE_HPD1))
drm_err(dev, "DM_IRQ: Failed get HPD for source=%d)!\n", i);
}
}

/**
Expand All @@ -934,7 +957,7 @@ void amdgpu_dm_hpd_fini(struct amdgpu_device *adev)
struct drm_device *dev = adev_to_drm(adev);
struct drm_connector *connector;
struct drm_connector_list_iter iter;
int i;
int irq_type;

drm_connector_list_iter_begin(dev, &iter);
drm_for_each_connector_iter(connector, &iter) {
Expand All @@ -943,9 +966,18 @@ void amdgpu_dm_hpd_fini(struct amdgpu_device *adev)
const struct dc_link *dc_link = amdgpu_dm_connector->dc_link;

if (dc_link->irq_source_hpd != DC_IRQ_SOURCE_INVALID) {
dc_interrupt_set(adev->dm.dc,
dc_link->irq_source_hpd,
false);
irq_type = dc_link->irq_source_hpd - DC_IRQ_SOURCE_HPD1;

/* TODO: See same TODO in amdgpu_dm_hpd_init() */
if (irq_type < adev->mode_info.num_hpd) {
if (amdgpu_irq_put(adev, &adev->hpd_irq, irq_type))
drm_err(dev, "DM_IRQ: Failed put HPD for source=%d!\n",
dc_link->irq_source_hpd);
} else {
dc_interrupt_set(adev->dm.dc,
dc_link->irq_source_hpd,
false);
}
}

if (dc_link->irq_source_hpd_rx != DC_IRQ_SOURCE_INVALID) {
Expand All @@ -955,10 +987,4 @@ void amdgpu_dm_hpd_fini(struct amdgpu_device *adev)
}
}
drm_connector_list_iter_end(&iter);

/* Update reference counts for HPDs */
for (i = DC_IRQ_SOURCE_HPD1; i <= adev->mode_info.num_hpd; i++) {
if (amdgpu_irq_put(adev, &adev->hpd_irq, i - DC_IRQ_SOURCE_HPD1))
drm_err(dev, "DM_IRQ: Failed put HPD for source=%d!\n", i);
}
}
7 changes: 5 additions & 2 deletions drivers/gpu/drm/amd/display/dc/core/dc_resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -2567,10 +2567,13 @@ static int get_norm_pix_clk(const struct dc_crtc_timing *timing)
break;
case COLOR_DEPTH_121212:
normalized_pix_clk = (pix_clk * 36) / 24;
break;
break;
case COLOR_DEPTH_141414:
normalized_pix_clk = (pix_clk * 42) / 24;
break;
case COLOR_DEPTH_161616:
normalized_pix_clk = (pix_clk * 48) / 24;
break;
break;
default:
ASSERT(0);
break;
Expand Down
40 changes: 24 additions & 16 deletions drivers/gpu/drm/display/drm_dp_mst_topology.c
Original file line number Diff line number Diff line change
Expand Up @@ -3959,6 +3959,22 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)
return 0;
}

static bool primary_mstb_probing_is_done(struct drm_dp_mst_topology_mgr *mgr)
{
bool probing_done = false;

mutex_lock(&mgr->lock);

if (mgr->mst_primary && drm_dp_mst_topology_try_get_mstb(mgr->mst_primary)) {
probing_done = mgr->mst_primary->link_address_sent;
drm_dp_mst_topology_put_mstb(mgr->mst_primary);
}

mutex_unlock(&mgr->lock);

return probing_done;
}

static inline bool
drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_pending_up_req *up_req)
Expand Down Expand Up @@ -3989,8 +4005,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,

/* TODO: Add missing handler for DP_RESOURCE_STATUS_NOTIFY events */
if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY) {
dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat);
hotplug = true;
if (!primary_mstb_probing_is_done(mgr)) {
drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.\n");
} else {
dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat);
hotplug = true;
}
}

drm_dp_mst_topology_put_mstb(mstb);
Expand Down Expand Up @@ -4069,10 +4089,11 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
drm_dp_send_up_ack_reply(mgr, mst_primary, up_req->msg.req_type,
false);

drm_dp_mst_topology_put_mstb(mst_primary);

if (up_req->msg.req_type == DP_CONNECTION_STATUS_NOTIFY) {
const struct drm_dp_connection_status_notify *conn_stat =
&up_req->msg.u.conn_stat;
bool handle_csn;

drm_dbg_kms(mgr->dev, "Got CSN: pn: %d ldps:%d ddps: %d mcs: %d ip: %d pdt: %d\n",
conn_stat->port_number,
Expand All @@ -4081,16 +4102,6 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
conn_stat->message_capability_status,
conn_stat->input_port,
conn_stat->peer_device_type);

mutex_lock(&mgr->probe_lock);
handle_csn = mst_primary->link_address_sent;
mutex_unlock(&mgr->probe_lock);

if (!handle_csn) {
drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.");
kfree(up_req);
goto out_put_primary;
}
} else if (up_req->msg.req_type == DP_RESOURCE_STATUS_NOTIFY) {
const struct drm_dp_resource_status_notify *res_stat =
&up_req->msg.u.resource_stat;
Expand All @@ -4105,9 +4116,6 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
list_add_tail(&up_req->next, &mgr->up_req_list);
mutex_unlock(&mgr->up_req_lock);
queue_work(system_long_wq, &mgr->up_req_work);

out_put_primary:
drm_dp_mst_topology_put_mstb(mst_primary);
out_clear_reply:
memset(&mgr->up_req_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
return 0;
Expand Down
4 changes: 4 additions & 0 deletions drivers/gpu/drm/drm_atomic_uapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -974,6 +974,10 @@ int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state,

if (mode != DRM_MODE_DPMS_ON)
mode = DRM_MODE_DPMS_OFF;

if (connector->dpms == mode)
goto out;

connector->dpms = mode;

crtc = connector->state->crtc;
Expand Down
4 changes: 4 additions & 0 deletions drivers/gpu/drm/drm_connector.c
Original file line number Diff line number Diff line change
Expand Up @@ -1162,6 +1162,10 @@ static const u32 dp_colorspaces =
* callback. For atomic drivers the remapping to the "ACTIVE" property is
* implemented in the DRM core.
*
* On atomic drivers any DPMS setproperty ioctl where the value does not
* change is completely skipped, otherwise a full atomic commit will occur.
* On legacy drivers the exact behavior is driver specific.
*
* Note that this property cannot be set through the MODE_ATOMIC ioctl,
* userspace must use "ACTIVE" on the CRTC instead.
*
Expand Down
5 changes: 5 additions & 0 deletions drivers/gpu/drm/gma500/mid_bios.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,11 @@ static void mid_get_vbt_data(struct drm_psb_private *dev_priv)
0, PCI_DEVFN(2, 0));
int ret = -1;

if (pci_gfx_root == NULL) {
WARN_ON(1);
return;
}

/* Get the address of the platform config vbt */
pci_read_config_dword(pci_gfx_root, 0xFC, &addr);
pci_dev_put(pci_gfx_root);
Expand Down
5 changes: 2 additions & 3 deletions drivers/gpu/drm/i915/display/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -7049,9 +7049,6 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
/* Now enable the clocks, plane, pipe, and connectors that we set up. */
dev_priv->display.funcs.display->commit_modeset_enables(state);

if (state->modeset)
intel_set_cdclk_post_plane_update(state);

intel_wait_for_vblank_workers(state);

/* FIXME: We should call drm_atomic_helper_commit_hw_done() here
Expand Down Expand Up @@ -7132,6 +7129,8 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
intel_verify_planes(state);

intel_sagv_post_plane_update(state);
if (state->modeset)
intel_set_cdclk_post_plane_update(state);
intel_pmdemand_post_plane_update(state);

drm_atomic_helper_commit_hw_done(&state->base);
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/nouveau/nouveau_connector.c
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,6 @@ nouveau_connector_force(struct drm_connector *connector)
if (!nv_encoder) {
NV_ERROR(drm, "can't find encoder to force %s on!\n",
connector->name);
connector->status = connector_status_disconnected;
return;
}

Expand Down
11 changes: 7 additions & 4 deletions drivers/hid/hid-apple.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,12 @@ static bool apple_is_non_apple_keyboard(struct hid_device *hdev)
return false;
}

static bool apple_is_omoton_kb066(struct hid_device *hdev)
{
return hdev->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI &&
strcmp(hdev->name, "Bluetooth Keyboard") == 0;
}

static inline void apple_setup_key_translation(struct input_dev *input,
const struct apple_key_translation *table)
{
Expand Down Expand Up @@ -531,9 +537,6 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
}
}

if (usage->hid == 0xc0301) /* Omoton KB066 quirk */
code = KEY_F6;

if (usage->code != code) {
input_event_with_scancode(input, usage->type, code, usage->hid, value);

Expand Down Expand Up @@ -713,7 +716,7 @@ static int apple_input_configured(struct hid_device *hdev,
{
struct apple_sc *asc = hid_get_drvdata(hdev);

if ((asc->quirks & APPLE_HAS_FN) && !asc->fn_found) {
if (((asc->quirks & APPLE_HAS_FN) && !asc->fn_found) || apple_is_omoton_kb066(hdev)) {
hid_info(hdev, "Fn key not found (Apple Wireless Keyboard clone?), disabling Fn key handling\n");
asc->quirks &= ~APPLE_HAS_FN;
}
Expand Down
Loading
Loading