Merge 6d7ddd8051 ("Merge tag 'soc-fixes-6.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc") into android-mainline
Steps on the way to v6.9 Signed-off-by: Lee Jones <joneslee@google.com> Change-Id: Ibda154c884024a03bd911a181bc24b6bbde5416b
This commit is contained in:
@@ -4598,9 +4598,10 @@
|
||||
norid [S390] ignore the RID field and force use of
|
||||
one PCI domain per PCI function
|
||||
|
||||
pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power
|
||||
pcie_aspm= [PCIE] Forcibly enable or ignore PCIe Active State Power
|
||||
Management.
|
||||
off Disable ASPM.
|
||||
off Don't touch ASPM configuration at all. Leave any
|
||||
configuration done by firmware unchanged.
|
||||
force Enable ASPM even on devices that claim not to support it.
|
||||
WARNING: Forcing ASPM on may cause system lockups.
|
||||
|
||||
|
||||
@@ -367,6 +367,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
&pmm8155au_1_gpios {
|
||||
pmm8155au_1_sdc2_cd: sdc2-cd-default-state {
|
||||
pins = "gpio4";
|
||||
function = "normal";
|
||||
input-enable;
|
||||
bias-pull-up;
|
||||
power-source = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&qupv3_id_1 {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -384,10 +394,10 @@
|
||||
&sdhc_2 {
|
||||
status = "okay";
|
||||
|
||||
cd-gpios = <&tlmm 4 GPIO_ACTIVE_LOW>;
|
||||
cd-gpios = <&pmm8155au_1_gpios 4 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&sdc2_on>;
|
||||
pinctrl-1 = <&sdc2_off>;
|
||||
pinctrl-0 = <&sdc2_on &pmm8155au_1_sdc2_cd>;
|
||||
pinctrl-1 = <&sdc2_off &pmm8155au_1_sdc2_cd>;
|
||||
vqmmc-supply = <&vreg_l13c_2p96>; /* IO line power */
|
||||
vmmc-supply = <&vreg_l17a_2p96>; /* Card power line */
|
||||
bus-width = <4>;
|
||||
@@ -505,13 +515,6 @@
|
||||
bias-pull-up; /* pull up */
|
||||
drive-strength = <16>; /* 16 MA */
|
||||
};
|
||||
|
||||
sd-cd-pins {
|
||||
pins = "gpio96";
|
||||
function = "gpio";
|
||||
bias-pull-up; /* pull up */
|
||||
drive-strength = <2>; /* 2 MA */
|
||||
};
|
||||
};
|
||||
|
||||
sdc2_off: sdc2-off-state {
|
||||
@@ -532,13 +535,6 @@
|
||||
bias-pull-up; /* pull up */
|
||||
drive-strength = <2>; /* 2 MA */
|
||||
};
|
||||
|
||||
sd-cd-pins {
|
||||
pins = "gpio96";
|
||||
function = "gpio";
|
||||
bias-pull-up; /* pull up */
|
||||
drive-strength = <2>; /* 2 MA */
|
||||
};
|
||||
};
|
||||
|
||||
usb2phy_ac_en1_default: usb2phy-ac-en1-default-state {
|
||||
|
||||
+179
-167
@@ -16,6 +16,9 @@ menuconfig AUXDISPLAY
|
||||
|
||||
if AUXDISPLAY
|
||||
|
||||
#
|
||||
# Character LCD section
|
||||
#
|
||||
config CHARLCD
|
||||
tristate "Character LCD core support" if COMPILE_TEST
|
||||
help
|
||||
@@ -25,12 +28,6 @@ config CHARLCD
|
||||
This is some character LCD core interface that multiple drivers can
|
||||
use.
|
||||
|
||||
config LINEDISP
|
||||
tristate "Character line display core support" if COMPILE_TEST
|
||||
help
|
||||
This is the core support for single-line character displays, to be
|
||||
selected by drivers that use it.
|
||||
|
||||
config HD44780_COMMON
|
||||
tristate "Common functions for HD44780 (and compatibles) LCD displays" if COMPILE_TEST
|
||||
select CHARLCD
|
||||
@@ -52,145 +49,6 @@ config HD44780
|
||||
kernel and started at boot.
|
||||
If you don't understand what all this is about, say N.
|
||||
|
||||
config KS0108
|
||||
tristate "KS0108 LCD Controller"
|
||||
depends on PARPORT_PC
|
||||
default n
|
||||
help
|
||||
If you have a LCD controlled by one or more KS0108
|
||||
controllers, say Y. You will need also another more specific
|
||||
driver for your LCD.
|
||||
|
||||
Depends on Parallel Port support. If you say Y at
|
||||
parport, you will be able to compile this as a module (M)
|
||||
and built-in as well (Y).
|
||||
|
||||
To compile this as a module, choose M here:
|
||||
the module will be called ks0108.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config KS0108_PORT
|
||||
hex "Parallel port where the LCD is connected"
|
||||
depends on KS0108
|
||||
default 0x378
|
||||
help
|
||||
The address of the parallel port where the LCD is connected.
|
||||
|
||||
The first standard parallel port address is 0x378.
|
||||
The second standard parallel port address is 0x278.
|
||||
The third standard parallel port address is 0x3BC.
|
||||
|
||||
You can specify a different address if you need.
|
||||
|
||||
If you don't know what I'm talking about, load the parport module,
|
||||
and execute "dmesg" or "cat /proc/ioports". You can see there how
|
||||
many parallel ports are present and which address each one has.
|
||||
|
||||
Usually you only need to use 0x378.
|
||||
|
||||
If you compile this as a module, you can still override this
|
||||
using the module parameters.
|
||||
|
||||
config KS0108_DELAY
|
||||
int "Delay between each control writing (microseconds)"
|
||||
depends on KS0108
|
||||
default "2"
|
||||
help
|
||||
Amount of time the ks0108 should wait between each control write
|
||||
to the parallel port.
|
||||
|
||||
If your LCD seems to miss random writings, increment this.
|
||||
|
||||
If you don't know what I'm talking about, ignore it.
|
||||
|
||||
If you compile this as a module, you can still override this
|
||||
value using the module parameters.
|
||||
|
||||
config CFAG12864B
|
||||
tristate "CFAG12864B LCD"
|
||||
depends on X86
|
||||
depends on FB
|
||||
depends on KS0108
|
||||
select FB_SYSMEM_HELPERS
|
||||
default n
|
||||
help
|
||||
If you have a Crystalfontz 128x64 2-color LCD, cfag12864b Series,
|
||||
say Y. You also need the ks0108 LCD Controller driver.
|
||||
|
||||
For help about how to wire your LCD to the parallel port,
|
||||
check Documentation/admin-guide/auxdisplay/cfag12864b.rst
|
||||
|
||||
Depends on the x86 arch and the framebuffer support.
|
||||
|
||||
The LCD framebuffer driver can be attached to a console.
|
||||
It will work fine. However, you can't attach it to the fbdev driver
|
||||
of the xorg server.
|
||||
|
||||
To compile this as a module, choose M here:
|
||||
the modules will be called cfag12864b and cfag12864bfb.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config CFAG12864B_RATE
|
||||
int "Refresh rate (hertz)"
|
||||
depends on CFAG12864B
|
||||
default "20"
|
||||
help
|
||||
Refresh rate of the LCD.
|
||||
|
||||
As the LCD is not memory mapped, the driver has to make the work by
|
||||
software. This means you should be careful setting this value higher.
|
||||
If your CPUs are really slow or you feel the system is slowed down,
|
||||
decrease the value.
|
||||
|
||||
Be careful modifying this value to a very high value:
|
||||
You can freeze the computer, or the LCD maybe can't draw as fast as you
|
||||
are requesting.
|
||||
|
||||
If you don't know what I'm talking about, ignore it.
|
||||
|
||||
If you compile this as a module, you can still override this
|
||||
value using the module parameters.
|
||||
|
||||
config IMG_ASCII_LCD
|
||||
tristate "Imagination Technologies ASCII LCD Display"
|
||||
depends on HAS_IOMEM
|
||||
default y if MIPS_MALTA
|
||||
select MFD_SYSCON
|
||||
select LINEDISP
|
||||
help
|
||||
Enable this to support the simple ASCII LCD displays found on
|
||||
development boards such as the MIPS Boston, MIPS Malta & MIPS SEAD3
|
||||
from Imagination Technologies.
|
||||
|
||||
config HT16K33
|
||||
tristate "Holtek Ht16K33 LED controller with keyscan"
|
||||
depends on FB && I2C && INPUT
|
||||
select FB_SYSMEM_HELPERS
|
||||
select INPUT_MATRIXKMAP
|
||||
select FB_BACKLIGHT
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
select LINEDISP
|
||||
help
|
||||
Say yes here to add support for Holtek HT16K33, RAM mapping 16*8
|
||||
LED controller driver with keyscan.
|
||||
|
||||
config MAX6959
|
||||
tristate "Maxim MAX6958/6959 7-segment LED controller"
|
||||
depends on I2C
|
||||
select REGMAP_I2C
|
||||
select LINEDISP
|
||||
help
|
||||
If you say yes here you get support for the following Maxim chips
|
||||
(I2C 7-segment LED display controller):
|
||||
- MAX6958
|
||||
- MAX6959 (input support)
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called max6959.
|
||||
|
||||
config LCD2S
|
||||
tristate "lcd2s 20x4 character display over I2C console"
|
||||
depends on I2C
|
||||
@@ -201,27 +59,6 @@ config LCD2S
|
||||
is a simple single color character display. You have to connect it
|
||||
to an I2C bus.
|
||||
|
||||
config ARM_CHARLCD
|
||||
bool "ARM Ltd. Character LCD Driver"
|
||||
depends on PLAT_VERSATILE
|
||||
help
|
||||
This is a driver for the character LCD found on the ARM Ltd.
|
||||
Versatile and RealView Platform Baseboards. It doesn't do
|
||||
very much more than display the text "ARM Linux" on the first
|
||||
line and the Linux version on the second line, but that's
|
||||
still useful.
|
||||
|
||||
config SEG_LED_GPIO
|
||||
tristate "Generic 7-segment LED display"
|
||||
depends on GPIOLIB || COMPILE_TEST
|
||||
select LINEDISP
|
||||
help
|
||||
This driver supports a generic 7-segment LED display made up
|
||||
of GPIO pins connected to the individual segments.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called seg-led-gpio.
|
||||
|
||||
menuconfig PARPORT_PANEL
|
||||
tristate "Parallel port LCD/Keypad Panel support"
|
||||
depends on PARPORT
|
||||
@@ -480,7 +317,6 @@ endif # PARPORT_PANEL
|
||||
config PANEL_CHANGE_MESSAGE
|
||||
bool "Change LCD initialization message ?"
|
||||
depends on CHARLCD
|
||||
default "n"
|
||||
help
|
||||
This allows you to replace the boot message indicating the kernel version
|
||||
and the driver version with a custom message. This is useful on appliances
|
||||
@@ -529,8 +365,184 @@ choice
|
||||
|
||||
endchoice
|
||||
|
||||
#
|
||||
# Samsung KS0108 LCD controller section
|
||||
#
|
||||
config KS0108
|
||||
tristate "KS0108 LCD Controller"
|
||||
depends on PARPORT_PC
|
||||
help
|
||||
If you have a LCD controlled by one or more KS0108
|
||||
controllers, say Y. You will need also another more specific
|
||||
driver for your LCD.
|
||||
|
||||
Depends on Parallel Port support. If you say Y at
|
||||
parport, you will be able to compile this as a module (M)
|
||||
and built-in as well (Y).
|
||||
|
||||
To compile this as a module, choose M here:
|
||||
the module will be called ks0108.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config KS0108_PORT
|
||||
hex "Parallel port where the LCD is connected"
|
||||
depends on KS0108
|
||||
default 0x378
|
||||
help
|
||||
The address of the parallel port where the LCD is connected.
|
||||
|
||||
The first standard parallel port address is 0x378.
|
||||
The second standard parallel port address is 0x278.
|
||||
The third standard parallel port address is 0x3BC.
|
||||
|
||||
You can specify a different address if you need.
|
||||
|
||||
If you don't know what I'm talking about, load the parport module,
|
||||
and execute "dmesg" or "cat /proc/ioports". You can see there how
|
||||
many parallel ports are present and which address each one has.
|
||||
|
||||
Usually you only need to use 0x378.
|
||||
|
||||
If you compile this as a module, you can still override this
|
||||
using the module parameters.
|
||||
|
||||
config KS0108_DELAY
|
||||
int "Delay between each control writing (microseconds)"
|
||||
depends on KS0108
|
||||
default "2"
|
||||
help
|
||||
Amount of time the ks0108 should wait between each control write
|
||||
to the parallel port.
|
||||
|
||||
If your LCD seems to miss random writings, increment this.
|
||||
|
||||
If you don't know what I'm talking about, ignore it.
|
||||
|
||||
If you compile this as a module, you can still override this
|
||||
value using the module parameters.
|
||||
|
||||
config CFAG12864B
|
||||
tristate "CFAG12864B LCD"
|
||||
depends on X86
|
||||
depends on FB
|
||||
depends on KS0108
|
||||
select FB_SYSMEM_HELPERS
|
||||
help
|
||||
If you have a Crystalfontz 128x64 2-color LCD, cfag12864b Series,
|
||||
say Y. You also need the ks0108 LCD Controller driver.
|
||||
|
||||
For help about how to wire your LCD to the parallel port,
|
||||
check Documentation/admin-guide/auxdisplay/cfag12864b.rst
|
||||
|
||||
Depends on the x86 arch and the framebuffer support.
|
||||
|
||||
The LCD framebuffer driver can be attached to a console.
|
||||
It will work fine. However, you can't attach it to the fbdev driver
|
||||
of the xorg server.
|
||||
|
||||
To compile this as a module, choose M here:
|
||||
the modules will be called cfag12864b and cfag12864bfb.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config CFAG12864B_RATE
|
||||
int "Refresh rate (hertz)"
|
||||
depends on CFAG12864B
|
||||
default "20"
|
||||
help
|
||||
Refresh rate of the LCD.
|
||||
|
||||
As the LCD is not memory mapped, the driver has to make the work by
|
||||
software. This means you should be careful setting this value higher.
|
||||
If your CPUs are really slow or you feel the system is slowed down,
|
||||
decrease the value.
|
||||
|
||||
Be careful modifying this value to a very high value:
|
||||
You can freeze the computer, or the LCD maybe can't draw as fast as you
|
||||
are requesting.
|
||||
|
||||
If you don't know what I'm talking about, ignore it.
|
||||
|
||||
If you compile this as a module, you can still override this
|
||||
value using the module parameters.
|
||||
|
||||
#
|
||||
# Single character line display section
|
||||
#
|
||||
config LINEDISP
|
||||
tristate "Character line display core support" if COMPILE_TEST
|
||||
help
|
||||
This is the core support for single-line character displays, to be
|
||||
selected by drivers that use it.
|
||||
|
||||
config IMG_ASCII_LCD
|
||||
tristate "Imagination Technologies ASCII LCD Display"
|
||||
depends on HAS_IOMEM
|
||||
default y if MIPS_MALTA
|
||||
select MFD_SYSCON
|
||||
select LINEDISP
|
||||
help
|
||||
Enable this to support the simple ASCII LCD displays found on
|
||||
development boards such as the MIPS Boston, MIPS Malta & MIPS SEAD3
|
||||
from Imagination Technologies.
|
||||
|
||||
config HT16K33
|
||||
tristate "Holtek Ht16K33 LED controller with keyscan"
|
||||
depends on FB && I2C && INPUT
|
||||
select FB_SYSMEM_HELPERS
|
||||
select INPUT_MATRIXKMAP
|
||||
select FB_BACKLIGHT
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
select LINEDISP
|
||||
help
|
||||
Say yes here to add support for Holtek HT16K33, RAM mapping 16*8
|
||||
LED controller driver with keyscan.
|
||||
|
||||
config MAX6959
|
||||
tristate "Maxim MAX6958/6959 7-segment LED controller"
|
||||
depends on I2C
|
||||
select REGMAP_I2C
|
||||
select LINEDISP
|
||||
help
|
||||
If you say yes here you get support for the following Maxim chips
|
||||
(I2C 7-segment LED display controller):
|
||||
- MAX6958
|
||||
- MAX6959 (input support)
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called max6959.
|
||||
|
||||
config SEG_LED_GPIO
|
||||
tristate "Generic 7-segment LED display"
|
||||
depends on GPIOLIB || COMPILE_TEST
|
||||
select LINEDISP
|
||||
help
|
||||
This driver supports a generic 7-segment LED display made up
|
||||
of GPIO pins connected to the individual segments.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called seg-led-gpio.
|
||||
|
||||
#
|
||||
# Character LCD with non-conforming interface section
|
||||
#
|
||||
config ARM_CHARLCD
|
||||
bool "ARM Ltd. Character LCD Driver"
|
||||
depends on PLAT_VERSATILE
|
||||
help
|
||||
This is a driver for the character LCD found on the ARM Ltd.
|
||||
Versatile and RealView Platform Baseboards. It doesn't do
|
||||
very much more than display the text "ARM Linux" on the first
|
||||
line and the Linux version on the second line, but that's
|
||||
still useful.
|
||||
|
||||
endif # AUXDISPLAY
|
||||
|
||||
#
|
||||
# Deprecated options
|
||||
#
|
||||
config PANEL
|
||||
tristate "Parallel port LCD/Keypad Panel support (OLD OPTION)"
|
||||
depends on PARPORT
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
# Makefile for the kernel auxiliary displays device drivers.
|
||||
#
|
||||
|
||||
obj-$(CONFIG_ARM_CHARLCD) += arm-charlcd.o
|
||||
obj-$(CONFIG_CFAG12864B) += cfag12864b.o cfag12864bfb.o
|
||||
obj-$(CONFIG_CHARLCD) += charlcd.o
|
||||
obj-$(CONFIG_HD44780_COMMON) += hd44780_common.o
|
||||
obj-$(CONFIG_ARM_CHARLCD) += arm-charlcd.o
|
||||
obj-$(CONFIG_KS0108) += ks0108.o
|
||||
obj-$(CONFIG_CFAG12864B) += cfag12864b.o cfag12864bfb.o
|
||||
obj-$(CONFIG_IMG_ASCII_LCD) += img-ascii-lcd.o
|
||||
obj-$(CONFIG_HD44780) += hd44780.o
|
||||
obj-$(CONFIG_HT16K33) += ht16k33.o
|
||||
obj-$(CONFIG_PARPORT_PANEL) += panel.o
|
||||
obj-$(CONFIG_IMG_ASCII_LCD) += img-ascii-lcd.o
|
||||
obj-$(CONFIG_KS0108) += ks0108.o
|
||||
obj-$(CONFIG_LCD2S) += lcd2s.o
|
||||
obj-$(CONFIG_LINEDISP) += line-display.o
|
||||
obj-$(CONFIG_MAX6959) += max6959.o
|
||||
obj-$(CONFIG_PARPORT_PANEL) += panel.o
|
||||
obj-$(CONFIG_SEG_LED_GPIO) += seg-led-gpio.o
|
||||
|
||||
@@ -17,7 +17,9 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#ifndef CONFIG_PANEL_BOOT_MESSAGE
|
||||
#include <generated/utsrelease.h>
|
||||
#endif
|
||||
|
||||
#include "charlcd.h"
|
||||
|
||||
@@ -678,4 +680,5 @@ int charlcd_unregister(struct charlcd *lcd)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(charlcd_unregister);
|
||||
|
||||
MODULE_DESCRIPTION("Character LCD core support");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
@@ -81,14 +81,12 @@ static int seg_led_probe(struct platform_device *pdev)
|
||||
return linedisp_register(&priv->linedisp, dev, 1, &seg_led_linedisp_ops);
|
||||
}
|
||||
|
||||
static int seg_led_remove(struct platform_device *pdev)
|
||||
static void seg_led_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct seg_led_priv *priv = platform_get_drvdata(pdev);
|
||||
|
||||
cancel_delayed_work_sync(&priv->work);
|
||||
linedisp_unregister(&priv->linedisp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id seg_led_of_match[] = {
|
||||
@@ -99,7 +97,7 @@ MODULE_DEVICE_TABLE(of, seg_led_of_match);
|
||||
|
||||
static struct platform_driver seg_led_driver = {
|
||||
.probe = seg_led_probe,
|
||||
.remove = seg_led_remove,
|
||||
.remove_new = seg_led_remove,
|
||||
.driver = {
|
||||
.name = "seg-led-gpio",
|
||||
.of_match_table = seg_led_of_match,
|
||||
|
||||
Vendored
+1
-1
@@ -290,7 +290,7 @@ static int __init sifive_ccache_init(void)
|
||||
struct device_node *np;
|
||||
struct resource res;
|
||||
const struct of_device_id *match;
|
||||
unsigned long quirks;
|
||||
unsigned long quirks __maybe_unused;
|
||||
int rc;
|
||||
|
||||
np = of_find_matching_node_and_match(NULL, sifive_ccache_ids, &match);
|
||||
|
||||
@@ -206,10 +206,12 @@ static int mpfs_auto_update_verify_image(struct fw_upload *fw_uploader)
|
||||
if (ret | response->resp_status) {
|
||||
dev_warn(priv->dev, "Verification of Upgrade Image failed!\n");
|
||||
ret = ret ? ret : -EBADMSG;
|
||||
goto free_message;
|
||||
}
|
||||
|
||||
dev_info(priv->dev, "Verification of Upgrade Image passed!\n");
|
||||
|
||||
free_message:
|
||||
devm_kfree(priv->dev, message);
|
||||
free_response:
|
||||
devm_kfree(priv->dev, response);
|
||||
@@ -265,7 +267,7 @@ static int mpfs_auto_update_set_image_address(struct mpfs_auto_update_priv *priv
|
||||
AUTO_UPDATE_DIRECTORY_WIDTH);
|
||||
memset(buffer + AUTO_UPDATE_BLANK_DIRECTORY, 0x0, AUTO_UPDATE_DIRECTORY_WIDTH);
|
||||
|
||||
dev_info(priv->dev, "Writing the image address (%x) to the flash directory (%llx)\n",
|
||||
dev_info(priv->dev, "Writing the image address (0x%x) to the flash directory (0x%llx)\n",
|
||||
image_address, directory_address);
|
||||
|
||||
ret = mtd_write(priv->flash, 0x0, erase_size, &bytes_written, (u_char *)buffer);
|
||||
@@ -313,7 +315,7 @@ static int mpfs_auto_update_write_bitstream(struct fw_upload *fw_uploader, const
|
||||
erase.len = round_up(size, (size_t)priv->flash->erasesize);
|
||||
erase.addr = image_address;
|
||||
|
||||
dev_info(priv->dev, "Erasing the flash at address (%x)\n", image_address);
|
||||
dev_info(priv->dev, "Erasing the flash at address (0x%x)\n", image_address);
|
||||
ret = mtd_erase(priv->flash, &erase);
|
||||
if (ret)
|
||||
goto out;
|
||||
@@ -323,7 +325,7 @@ static int mpfs_auto_update_write_bitstream(struct fw_upload *fw_uploader, const
|
||||
* will do all of that itself - including verifying that the bitstream
|
||||
* is valid.
|
||||
*/
|
||||
dev_info(priv->dev, "Writing the image to the flash at address (%x)\n", image_address);
|
||||
dev_info(priv->dev, "Writing the image to the flash at address (0x%x)\n", image_address);
|
||||
ret = mtd_write(priv->flash, (loff_t)image_address, size, &bytes_written, data);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
@@ -58,56 +58,16 @@ static long qxl_fence_wait(struct dma_fence *fence, bool intr,
|
||||
signed long timeout)
|
||||
{
|
||||
struct qxl_device *qdev;
|
||||
struct qxl_release *release;
|
||||
int count = 0, sc = 0;
|
||||
bool have_drawable_releases;
|
||||
unsigned long cur, end = jiffies + timeout;
|
||||
|
||||
qdev = container_of(fence->lock, struct qxl_device, release_lock);
|
||||
release = container_of(fence, struct qxl_release, base);
|
||||
have_drawable_releases = release->type == QXL_RELEASE_DRAWABLE;
|
||||
|
||||
retry:
|
||||
sc++;
|
||||
if (!wait_event_timeout(qdev->release_event,
|
||||
(dma_fence_is_signaled(fence) ||
|
||||
(qxl_io_notify_oom(qdev), 0)),
|
||||
timeout))
|
||||
return 0;
|
||||
|
||||
if (dma_fence_is_signaled(fence))
|
||||
goto signaled;
|
||||
|
||||
qxl_io_notify_oom(qdev);
|
||||
|
||||
for (count = 0; count < 11; count++) {
|
||||
if (!qxl_queue_garbage_collect(qdev, true))
|
||||
break;
|
||||
|
||||
if (dma_fence_is_signaled(fence))
|
||||
goto signaled;
|
||||
}
|
||||
|
||||
if (dma_fence_is_signaled(fence))
|
||||
goto signaled;
|
||||
|
||||
if (have_drawable_releases || sc < 4) {
|
||||
if (sc > 2)
|
||||
/* back off */
|
||||
usleep_range(500, 1000);
|
||||
|
||||
if (time_after(jiffies, end))
|
||||
return 0;
|
||||
|
||||
if (have_drawable_releases && sc > 300) {
|
||||
DMA_FENCE_WARN(fence,
|
||||
"failed to wait on release %llu after spincount %d\n",
|
||||
fence->context & ~0xf0000000, sc);
|
||||
goto signaled;
|
||||
}
|
||||
goto retry;
|
||||
}
|
||||
/*
|
||||
* yeah, original sync_obj_wait gave up after 3 spins when
|
||||
* have_drawable_releases is not set.
|
||||
*/
|
||||
|
||||
signaled:
|
||||
cur = jiffies;
|
||||
if (time_after(cur, end))
|
||||
return 0;
|
||||
|
||||
@@ -177,8 +177,8 @@ void pci_restore_aspm_l1ss_state(struct pci_dev *pdev)
|
||||
/* Restore L0s/L1 if they were enabled */
|
||||
if (FIELD_GET(PCI_EXP_LNKCTL_ASPMC, clnkctl) ||
|
||||
FIELD_GET(PCI_EXP_LNKCTL_ASPMC, plnkctl)) {
|
||||
pcie_capability_write_word(parent, PCI_EXP_LNKCTL, clnkctl);
|
||||
pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, plnkctl);
|
||||
pcie_capability_write_word(parent, PCI_EXP_LNKCTL, plnkctl);
|
||||
pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, clnkctl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3045,6 +3045,8 @@ int btrfs_qgroup_check_inherit(struct btrfs_fs_info *fs_info,
|
||||
struct btrfs_qgroup_inherit *inherit,
|
||||
size_t size)
|
||||
{
|
||||
if (!btrfs_qgroup_enabled(fs_info))
|
||||
return 0;
|
||||
if (inherit->flags & ~BTRFS_QGROUP_INHERIT_FLAGS_SUPP)
|
||||
return -EOPNOTSUPP;
|
||||
if (size < sizeof(*inherit) || size > PAGE_SIZE)
|
||||
|
||||
+15
-15
@@ -1797,6 +1797,11 @@ enum btrfs_tree_block_status __btrfs_check_leaf(struct extent_buffer *leaf)
|
||||
return BTRFS_TREE_BLOCK_INVALID_LEVEL;
|
||||
}
|
||||
|
||||
if (unlikely(!btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_WRITTEN))) {
|
||||
generic_err(leaf, 0, "invalid flag for leaf, WRITTEN not set");
|
||||
return BTRFS_TREE_BLOCK_WRITTEN_NOT_SET;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extent buffers from a relocation tree have a owner field that
|
||||
* corresponds to the subvolume tree they are based on. So just from an
|
||||
@@ -1858,6 +1863,7 @@ enum btrfs_tree_block_status __btrfs_check_leaf(struct extent_buffer *leaf)
|
||||
for (slot = 0; slot < nritems; slot++) {
|
||||
u32 item_end_expected;
|
||||
u64 item_data_end;
|
||||
enum btrfs_tree_block_status ret;
|
||||
|
||||
btrfs_item_key_to_cpu(leaf, &key, slot);
|
||||
|
||||
@@ -1913,21 +1919,10 @@ enum btrfs_tree_block_status __btrfs_check_leaf(struct extent_buffer *leaf)
|
||||
return BTRFS_TREE_BLOCK_INVALID_OFFSETS;
|
||||
}
|
||||
|
||||
/*
|
||||
* We only want to do this if WRITTEN is set, otherwise the leaf
|
||||
* may be in some intermediate state and won't appear valid.
|
||||
*/
|
||||
if (btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_WRITTEN)) {
|
||||
enum btrfs_tree_block_status ret;
|
||||
|
||||
/*
|
||||
* Check if the item size and content meet other
|
||||
* criteria
|
||||
*/
|
||||
ret = check_leaf_item(leaf, &key, slot, &prev_key);
|
||||
if (unlikely(ret != BTRFS_TREE_BLOCK_CLEAN))
|
||||
return ret;
|
||||
}
|
||||
/* Check if the item size and content meet other criteria. */
|
||||
ret = check_leaf_item(leaf, &key, slot, &prev_key);
|
||||
if (unlikely(ret != BTRFS_TREE_BLOCK_CLEAN))
|
||||
return ret;
|
||||
|
||||
prev_key.objectid = key.objectid;
|
||||
prev_key.type = key.type;
|
||||
@@ -1957,6 +1952,11 @@ enum btrfs_tree_block_status __btrfs_check_node(struct extent_buffer *node)
|
||||
int level = btrfs_header_level(node);
|
||||
u64 bytenr;
|
||||
|
||||
if (unlikely(!btrfs_header_flag(node, BTRFS_HEADER_FLAG_WRITTEN))) {
|
||||
generic_err(node, 0, "invalid flag for node, WRITTEN not set");
|
||||
return BTRFS_TREE_BLOCK_WRITTEN_NOT_SET;
|
||||
}
|
||||
|
||||
if (unlikely(level <= 0 || level >= BTRFS_MAX_LEVEL)) {
|
||||
generic_err(node, 0,
|
||||
"invalid level for node, have %d expect [1, %d]",
|
||||
|
||||
@@ -53,6 +53,7 @@ enum btrfs_tree_block_status {
|
||||
BTRFS_TREE_BLOCK_INVALID_BLOCKPTR,
|
||||
BTRFS_TREE_BLOCK_INVALID_ITEM,
|
||||
BTRFS_TREE_BLOCK_INVALID_OWNER,
|
||||
BTRFS_TREE_BLOCK_WRITTEN_NOT_SET,
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -682,11 +682,4 @@ static inline bool dma_fence_is_container(struct dma_fence *fence)
|
||||
return dma_fence_is_array(fence) || dma_fence_is_chain(fence);
|
||||
}
|
||||
|
||||
#define DMA_FENCE_WARN(f, fmt, args...) \
|
||||
do { \
|
||||
struct dma_fence *__ff = (f); \
|
||||
pr_warn("f %llu#%llu: " fmt, __ff->context, __ff->seqno,\
|
||||
##args); \
|
||||
} while (0)
|
||||
|
||||
#endif /* __LINUX_DMA_FENCE_H */
|
||||
|
||||
@@ -266,7 +266,7 @@ void kfree(const void *objp);
|
||||
void kfree_sensitive(const void *objp);
|
||||
size_t __ksize(const void *objp);
|
||||
|
||||
DEFINE_FREE(kfree, void *, if (_T) kfree(_T))
|
||||
DEFINE_FREE(kfree, void *, if (!IS_ERR_OR_NULL(_T)) kfree(_T))
|
||||
|
||||
/**
|
||||
* ksize - Report actual allocation size of associated object
|
||||
@@ -792,7 +792,7 @@ static inline __alloc_size(1, 2) void *kvcalloc(size_t n, size_t size, gfp_t fla
|
||||
extern void *kvrealloc(const void *p, size_t oldsize, size_t newsize, gfp_t flags)
|
||||
__realloc_size(3);
|
||||
extern void kvfree(const void *addr);
|
||||
DEFINE_FREE(kvfree, void *, if (_T) kvfree(_T))
|
||||
DEFINE_FREE(kvfree, void *, if (!IS_ERR_OR_NULL(_T)) kvfree(_T))
|
||||
|
||||
extern void kvfree_sensitive(const void *addr, size_t len);
|
||||
|
||||
|
||||
@@ -557,6 +557,26 @@ static inline void set_freepointer(struct kmem_cache *s, void *object, void *fp)
|
||||
*(freeptr_t *)freeptr_addr = freelist_ptr_encode(s, fp, freeptr_addr);
|
||||
}
|
||||
|
||||
/*
|
||||
* See comment in calculate_sizes().
|
||||
*/
|
||||
static inline bool freeptr_outside_object(struct kmem_cache *s)
|
||||
{
|
||||
return s->offset >= s->inuse;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return offset of the end of info block which is inuse + free pointer if
|
||||
* not overlapping with object.
|
||||
*/
|
||||
static inline unsigned int get_info_end(struct kmem_cache *s)
|
||||
{
|
||||
if (freeptr_outside_object(s))
|
||||
return s->inuse + sizeof(void *);
|
||||
else
|
||||
return s->inuse;
|
||||
}
|
||||
|
||||
/* Loop over all objects in a slab */
|
||||
#define for_each_object(__p, __s, __addr, __objects) \
|
||||
for (__p = fixup_red_left(__s, __addr); \
|
||||
@@ -845,26 +865,6 @@ static void print_section(char *level, char *text, u8 *addr,
|
||||
metadata_access_disable();
|
||||
}
|
||||
|
||||
/*
|
||||
* See comment in calculate_sizes().
|
||||
*/
|
||||
static inline bool freeptr_outside_object(struct kmem_cache *s)
|
||||
{
|
||||
return s->offset >= s->inuse;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return offset of the end of info block which is inuse + free pointer if
|
||||
* not overlapping with object.
|
||||
*/
|
||||
static inline unsigned int get_info_end(struct kmem_cache *s)
|
||||
{
|
||||
if (freeptr_outside_object(s))
|
||||
return s->inuse + sizeof(void *);
|
||||
else
|
||||
return s->inuse;
|
||||
}
|
||||
|
||||
static struct track *get_track(struct kmem_cache *s, void *object,
|
||||
enum track_item alloc)
|
||||
{
|
||||
@@ -2092,15 +2092,20 @@ bool slab_free_hook(struct kmem_cache *s, void *x, bool init)
|
||||
*
|
||||
* The initialization memset's clear the object and the metadata,
|
||||
* but don't touch the SLAB redzone.
|
||||
*
|
||||
* The object's freepointer is also avoided if stored outside the
|
||||
* object.
|
||||
*/
|
||||
if (unlikely(init)) {
|
||||
int rsize;
|
||||
unsigned int inuse;
|
||||
|
||||
inuse = get_info_end(s);
|
||||
if (!kasan_has_integrated_init())
|
||||
memset(kasan_reset_tag(x), 0, s->object_size);
|
||||
rsize = (s->flags & SLAB_RED_ZONE) ? s->red_left_pad : 0;
|
||||
memset((char *)kasan_reset_tag(x) + s->inuse, 0,
|
||||
s->size - s->inuse - rsize);
|
||||
memset((char *)kasan_reset_tag(x) + inuse, 0,
|
||||
s->size - inuse - rsize);
|
||||
}
|
||||
/* KASAN might put x into memory quarantine, delaying its reuse. */
|
||||
return !kasan_slab_free(s, x, init);
|
||||
@@ -3722,7 +3727,8 @@ static void *__slab_alloc_node(struct kmem_cache *s,
|
||||
static __always_inline void maybe_wipe_obj_freeptr(struct kmem_cache *s,
|
||||
void *obj)
|
||||
{
|
||||
if (unlikely(slab_want_init_on_free(s)) && obj)
|
||||
if (unlikely(slab_want_init_on_free(s)) && obj &&
|
||||
!freeptr_outside_object(s))
|
||||
memset((void *)((char *)kasan_reset_tag(obj) + s->offset),
|
||||
0, sizeof(void *));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user