Skip to content

Commit 9173606

Browse files
author
Alex Shi
committed
Merge tag 'v4.4.88' into linux-linaro-lsk-v4.4
This is the 4.4.88 stable release
2 parents f397aef + b52c908 commit 9173606

32 files changed

Lines changed: 237 additions & 139 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
VERSION = 4
22
PATCHLEVEL = 4
3-
SUBLEVEL = 87
3+
SUBLEVEL = 88
44
EXTRAVERSION =
55
NAME = Blurry Fish Butt
66

arch/arm/mm/fault.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,11 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
314314
* signal first. We do not need to release the mmap_sem because
315315
* it would already be released in __lock_page_or_retry in
316316
* mm/filemap.c. */
317-
if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
317+
if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
318+
if (!user_mode(regs))
319+
goto no_context;
318320
return 0;
321+
}
319322

320323
/*
321324
* Major/minor page fault accounting is only done on the

drivers/ata/pata_amd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ static const struct pci_device_id amd[] = {
616616
{ PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE), 8 },
617617
{ PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE), 8 },
618618
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 9 },
619+
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_DEV_IDE), 9 },
619620

620621
{ },
621622
};

drivers/ata/pata_cs5536.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ static int cs5536_init_one(struct pci_dev *dev, const struct pci_device_id *id)
289289

290290
static const struct pci_device_id cs5536[] = {
291291
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), },
292+
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_DEV_IDE), },
292293
{ },
293294
};
294295

drivers/base/bus.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ int bus_add_driver(struct device_driver *drv)
737737

738738
out_unregister:
739739
kobject_put(&priv->kobj);
740-
kfree(drv->p);
740+
/* drv->p is freed in driver_release() */
741741
drv->p = NULL;
742742
out_put_bus:
743743
bus_put(bus);

drivers/bluetooth/btusb.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ static const struct usb_device_id blacklist_table[] = {
333333
{ USB_DEVICE(0x13d3, 0x3410), .driver_info = BTUSB_REALTEK },
334334
{ USB_DEVICE(0x13d3, 0x3416), .driver_info = BTUSB_REALTEK },
335335
{ USB_DEVICE(0x13d3, 0x3459), .driver_info = BTUSB_REALTEK },
336+
{ USB_DEVICE(0x13d3, 0x3494), .driver_info = BTUSB_REALTEK },
336337

337338
/* Additional Realtek 8821AE Bluetooth devices */
338339
{ USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },

drivers/gpu/drm/i2c/adv7511.c

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ struct adv7511 {
3636
bool edid_read;
3737

3838
wait_queue_head_t wq;
39+
struct work_struct hpd_work;
40+
3941
struct drm_encoder *encoder;
42+
struct drm_connector connector;
4043

4144
bool embedded_sync;
4245
enum adv7511_sync_polarity vsync_polarity;
@@ -48,6 +51,10 @@ struct adv7511 {
4851
struct gpio_desc *gpio_pd;
4952
};
5053

54+
static const int edid_i2c_addr = 0x7e;
55+
static const int packet_i2c_addr = 0x70;
56+
static const int cec_i2c_addr = 0x78;
57+
5158
static struct adv7511 *encoder_to_adv7511(struct drm_encoder *encoder)
5259
{
5360
return to_encoder_slave(encoder)->slave_priv;
@@ -362,12 +369,19 @@ static void adv7511_power_on(struct adv7511 *adv7511)
362369
{
363370
adv7511->current_edid_segment = -1;
364371

365-
regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
366-
ADV7511_INT0_EDID_READY);
367-
regmap_write(adv7511->regmap, ADV7511_REG_INT(1),
368-
ADV7511_INT1_DDC_ERROR);
369372
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
370373
ADV7511_POWER_POWER_DOWN, 0);
374+
if (adv7511->i2c_main->irq) {
375+
/*
376+
* Documentation says the INT_ENABLE registers are reset in
377+
* POWER_DOWN mode. My 7511w preserved the bits, however.
378+
* Still, let's be safe and stick to the documentation.
379+
*/
380+
regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(0),
381+
ADV7511_INT0_EDID_READY);
382+
regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(1),
383+
ADV7511_INT1_DDC_ERROR);
384+
}
371385

372386
/*
373387
* Per spec it is allowed to pulse the HDP signal to indicate that the
@@ -422,7 +436,27 @@ static bool adv7511_hpd(struct adv7511 *adv7511)
422436
return false;
423437
}
424438

425-
static int adv7511_irq_process(struct adv7511 *adv7511)
439+
static void adv7511_hpd_work(struct work_struct *work)
440+
{
441+
struct adv7511 *adv7511 = container_of(work, struct adv7511, hpd_work);
442+
enum drm_connector_status status;
443+
unsigned int val;
444+
int ret;
445+
ret = regmap_read(adv7511->regmap, ADV7511_REG_STATUS, &val);
446+
if (ret < 0)
447+
status = connector_status_disconnected;
448+
else if (val & ADV7511_STATUS_HPD)
449+
status = connector_status_connected;
450+
else
451+
status = connector_status_disconnected;
452+
453+
if (adv7511->connector.status != status) {
454+
adv7511->connector.status = status;
455+
drm_kms_helper_hotplug_event(adv7511->connector.dev);
456+
}
457+
}
458+
459+
static int adv7511_irq_process(struct adv7511 *adv7511, bool process_hpd)
426460
{
427461
unsigned int irq0, irq1;
428462
int ret;
@@ -438,8 +472,8 @@ static int adv7511_irq_process(struct adv7511 *adv7511)
438472
regmap_write(adv7511->regmap, ADV7511_REG_INT(0), irq0);
439473
regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1);
440474

441-
if (irq0 & ADV7511_INT0_HDP && adv7511->encoder)
442-
drm_helper_hpd_irq_event(adv7511->encoder->dev);
475+
if (process_hpd && irq0 & ADV7511_INT0_HDP && adv7511->encoder)
476+
schedule_work(&adv7511->hpd_work);
443477

444478
if (irq0 & ADV7511_INT0_EDID_READY || irq1 & ADV7511_INT1_DDC_ERROR) {
445479
adv7511->edid_read = true;
@@ -456,7 +490,7 @@ static irqreturn_t adv7511_irq_handler(int irq, void *devid)
456490
struct adv7511 *adv7511 = devid;
457491
int ret;
458492

459-
ret = adv7511_irq_process(adv7511);
493+
ret = adv7511_irq_process(adv7511, true);
460494
return ret < 0 ? IRQ_NONE : IRQ_HANDLED;
461495
}
462496

@@ -473,7 +507,7 @@ static int adv7511_wait_for_edid(struct adv7511 *adv7511, int timeout)
473507
adv7511->edid_read, msecs_to_jiffies(timeout));
474508
} else {
475509
for (; timeout > 0; timeout -= 25) {
476-
ret = adv7511_irq_process(adv7511);
510+
ret = adv7511_irq_process(adv7511, false);
477511
if (ret < 0)
478512
break;
479513

@@ -567,13 +601,18 @@ static int adv7511_get_modes(struct drm_encoder *encoder,
567601

568602
/* Reading the EDID only works if the device is powered */
569603
if (!adv7511->powered) {
570-
regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
571-
ADV7511_INT0_EDID_READY);
572-
regmap_write(adv7511->regmap, ADV7511_REG_INT(1),
573-
ADV7511_INT1_DDC_ERROR);
574604
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
575605
ADV7511_POWER_POWER_DOWN, 0);
606+
if (adv7511->i2c_main->irq) {
607+
regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(0),
608+
ADV7511_INT0_EDID_READY);
609+
regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(1),
610+
ADV7511_INT1_DDC_ERROR);
611+
}
576612
adv7511->current_edid_segment = -1;
613+
/* Reset the EDID_I2C_ADDR register as it might be cleared */
614+
regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR,
615+
edid_i2c_addr);
577616
}
578617

579618
edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511);
@@ -849,10 +888,6 @@ static int adv7511_parse_dt(struct device_node *np,
849888
return 0;
850889
}
851890

852-
static const int edid_i2c_addr = 0x7e;
853-
static const int packet_i2c_addr = 0x70;
854-
static const int cec_i2c_addr = 0x78;
855-
856891
static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
857892
{
858893
struct adv7511_link_config link_config;
@@ -913,6 +948,8 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
913948
if (!adv7511->i2c_edid)
914949
return -ENOMEM;
915950

951+
INIT_WORK(&adv7511->hpd_work, adv7511_hpd_work);
952+
916953
if (i2c->irq) {
917954
init_waitqueue_head(&adv7511->wq);
918955

drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device,
180180
}
181181
}
182182

183+
#ifdef __BIG_ENDIAN
184+
pci->msi = false;
185+
#endif
186+
183187
pci->msi = nvkm_boolopt(device->cfgopt, "NvMSI", pci->msi);
184188
if (pci->msi && func->msi_rearm) {
185189
pci->msi = pci_enable_msi(pci->pdev) == 0;

drivers/hwtracing/intel_th/pci.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
7272
PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa2a6),
7373
.driver_data = (kernel_ulong_t)0,
7474
},
75+
{
76+
/* Cannon Lake H */
77+
PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa326),
78+
.driver_data = (kernel_ulong_t)0,
79+
},
80+
{
81+
/* Cannon Lake LP */
82+
PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x9da6),
83+
.driver_data = (kernel_ulong_t)0,
84+
},
7585
{ 0 },
7686
};
7787

drivers/input/mouse/trackpoint.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,8 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties)
381381
return 0;
382382

383383
if (trackpoint_read(&psmouse->ps2dev, TP_EXT_BTN, &button_info)) {
384-
psmouse_warn(psmouse, "failed to get extended button data\n");
385-
button_info = 0;
384+
psmouse_warn(psmouse, "failed to get extended button data, assuming 3 buttons\n");
385+
button_info = 0x33;
386386
}
387387

388388
psmouse->private = kzalloc(sizeof(struct trackpoint_data), GFP_KERNEL);

0 commit comments

Comments
 (0)