Merge Official Source
This commit is contained in:
commit
c23b2107be
@ -28,8 +28,8 @@ $(eval $(call TestHostCommand,proper-umask, \
|
||||
|
||||
$(eval $(call SetupHostCommand,gcc, \
|
||||
Please install the GNU C Compiler (gcc) 4.8 or later, \
|
||||
$(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
$(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
gcc48 --version | grep gcc, \
|
||||
gcc49 --version | grep gcc, \
|
||||
gcc5 --version | grep gcc, \
|
||||
@ -37,6 +37,7 @@ $(eval $(call SetupHostCommand,gcc, \
|
||||
gcc7 --version | grep gcc, \
|
||||
gcc8 --version | grep gcc, \
|
||||
gcc9 --version | grep gcc, \
|
||||
gcc10 --version | grep gcc, \
|
||||
gcc --version | grep -E 'Apple.(LLVM|clang)' ))
|
||||
|
||||
$(eval $(call TestHostCommand,working-gcc, \
|
||||
@ -47,8 +48,8 @@ $(eval $(call TestHostCommand,working-gcc, \
|
||||
|
||||
$(eval $(call SetupHostCommand,g++, \
|
||||
Please install the GNU C++ Compiler (g++) 4.8 or later, \
|
||||
$(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \
|
||||
$(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|10\.?)', \
|
||||
g++48 --version | grep g++, \
|
||||
g++49 --version | grep g++, \
|
||||
g++5 --version | grep g++, \
|
||||
@ -56,6 +57,7 @@ $(eval $(call SetupHostCommand,g++, \
|
||||
g++7 --version | grep g++, \
|
||||
g++8 --version | grep g++, \
|
||||
g++9 --version | grep g++, \
|
||||
g++10 --version | grep g++, \
|
||||
g++ --version | grep -E 'Apple.(LLVM|clang)' ))
|
||||
|
||||
$(eval $(call TestHostCommand,working-g++, \
|
||||
|
||||
@ -9,8 +9,8 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=bcm27xx-gpu-fw
|
||||
PKG_VERSION:=2020-02-28
|
||||
PKG_RELEASE:=bf83b506b4a6f9e592e711d02871a278fad5bd1e
|
||||
PKG_VERSION:=2020-03-10
|
||||
PKG_RELEASE:=9e2193537c48abf8225e02e15e319a209cca558a
|
||||
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)/rpi-firmware-$(PKG_RELEASE)
|
||||
|
||||
@ -33,7 +33,7 @@ define Download/bootcode_bin
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-bootcode.bin
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=bootcode.bin
|
||||
HASH:=6505bbc8798698bd8f1dff30789b22289ebb865ccba7833b87705264525cbe46
|
||||
HASH:=1a172fbc75af13411e4928682c72b095287a55007fb6d7233b9bbf9c49afe354
|
||||
endef
|
||||
$(eval $(call Download,bootcode_bin))
|
||||
|
||||
@ -65,7 +65,7 @@ define Download/fixup4_dat
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-fixup4.dat
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=fixup4.dat
|
||||
HASH:=02534602e0310d3c101820d87e8a33423d541ad9be1874f918fa03af18aaa6c2
|
||||
HASH:=f6a108c7ffa15b17b6749a4750646cae58fdda4a7b5f182e9fbe77c8f49cdddc
|
||||
endef
|
||||
$(eval $(call Download,fixup4_dat))
|
||||
|
||||
@ -73,7 +73,7 @@ define Download/fixup4cd_dat
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-fixup4cd.dat
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=fixup4cd.dat
|
||||
HASH:=b5e82f7f932d618ff36e7f089f0350bbc0b1c7830f3c44eec87603becf47c47e
|
||||
HASH:=aeac2e302e3e8136df0b312c54f9e290e9f5b8214eba424d24282053c65aa855
|
||||
endef
|
||||
$(eval $(call Download,fixup4cd_dat))
|
||||
|
||||
@ -81,7 +81,7 @@ define Download/fixup4x_dat
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-fixup4x.dat
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=fixup4x.dat
|
||||
HASH:=2078b1241cbbd2b7e6e5d77240b266a71afd9617a9c6ffc223fb19bcd8b177cf
|
||||
HASH:=ce9417b86cc4058a75e80d7b4d0236e78404e279f87c3b700411f8de1cf5da83
|
||||
endef
|
||||
$(eval $(call Download,fixup4x_dat))
|
||||
|
||||
@ -89,7 +89,7 @@ define Download/start_elf
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-start.elf
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=start.elf
|
||||
HASH:=ea2dac517aa5c99eae864a1653fde467f481ccf34bd16ec6776595b8520c4ade
|
||||
HASH:=1e47666306e3570c1c30a6e68dbdf206e696dc0b5105bdde6c0c86340d9e606a
|
||||
endef
|
||||
$(eval $(call Download,start_elf))
|
||||
|
||||
@ -97,7 +97,7 @@ define Download/start_cd_elf
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-start_cd.elf
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=start_cd.elf
|
||||
HASH:=f31559dde1c8984a2c681078b4a243c718383c481e5fd3dc8feafa8f8bc98113
|
||||
HASH:=ac8275d645f40b77210ccafa122b5c9ee17ac6248f6ba17d921f9f669ae9d500
|
||||
endef
|
||||
$(eval $(call Download,start_cd_elf))
|
||||
|
||||
@ -105,7 +105,7 @@ define Download/start_x_elf
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-start_x.elf
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=start_x.elf
|
||||
HASH:=9a18f7d063f9d721a779b23f189681f74b6ea04327bc0c7b5b868df974cf74f0
|
||||
HASH:=afb919bdaed4c56e4708c482062fd5158ca08a5dbc66fb95e937838383744884
|
||||
endef
|
||||
$(eval $(call Download,start_x_elf))
|
||||
|
||||
@ -113,7 +113,7 @@ define Download/start4_elf
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-start4.elf
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=start4.elf
|
||||
HASH:=88017c1e66ce10749540866bba331b6684f84eab333bf579b43ce7eea91140f7
|
||||
HASH:=e38d3dc0991fe6ffcf0ab1f0e2a4c1016b482b4e081604f937d485c548668be4
|
||||
endef
|
||||
$(eval $(call Download,start4_elf))
|
||||
|
||||
@ -121,7 +121,7 @@ define Download/start4cd_elf
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-start4cd.elf
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=start4cd.elf
|
||||
HASH:=7c658a86c42a86ffdb083294f21342c2cffe18fcef1bc457736173efbe71f419
|
||||
HASH:=2ec9775e0bffa772119e90c3e1fef017db8d4f22330f6cdf811ca1c56c81da13
|
||||
endef
|
||||
$(eval $(call Download,start4cd_elf))
|
||||
|
||||
@ -129,7 +129,7 @@ define Download/start4x_elf
|
||||
FILE:=$(RPI_FIRMWARE_FILE)-start4x.elf
|
||||
URL:=$(RPI_FIRMWARE_URL)
|
||||
URL_FILE:=start4x.elf
|
||||
HASH:=4a93c4ab29ad5e2aa537ef0a6b1ce0ed77d8283a44b443bc785af4c856ab20f5
|
||||
HASH:=a023230ff6fca93f465e7c36194dda2169b79eb49eacf470860542559952f0b0
|
||||
endef
|
||||
$(eval $(call Download,start4x_elf))
|
||||
|
||||
@ -148,20 +148,20 @@ endef
|
||||
define Build/Prepare
|
||||
rm -rf $(PKG_BUILD_DIR)
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-LICENCE.broadcom $(PKG_BUILD_DIR)/LICENCE.broadcom
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-bootcode.bin $(PKG_BUILD_DIR)/bootcode.bin
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup.dat $(PKG_BUILD_DIR)/fixup.dat
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup_cd.dat $(PKG_BUILD_DIR)/fixup_cd.dat
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup_x.dat $(PKG_BUILD_DIR)/fixup_x.dat
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup4.dat $(PKG_BUILD_DIR)/fixup4.dat
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup4cd.dat $(PKG_BUILD_DIR)/fixup4cd.dat
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup4x.dat $(PKG_BUILD_DIR)/fixup4x.dat
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start.elf $(PKG_BUILD_DIR)/start.elf
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start_cd.elf $(PKG_BUILD_DIR)/start_cd.elf
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start_x.elf $(PKG_BUILD_DIR)/start_x.elf
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start4.elf $(PKG_BUILD_DIR)/start4.elf
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start4cd.elf $(PKG_BUILD_DIR)/start4cd.elf
|
||||
cp $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start4x.elf $(PKG_BUILD_DIR)/start4x.elf
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-LICENCE.broadcom $(PKG_BUILD_DIR)/LICENCE.broadcom
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-bootcode.bin $(PKG_BUILD_DIR)/bootcode.bin
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup.dat $(PKG_BUILD_DIR)/fixup.dat
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup_cd.dat $(PKG_BUILD_DIR)/fixup_cd.dat
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup_x.dat $(PKG_BUILD_DIR)/fixup_x.dat
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup4.dat $(PKG_BUILD_DIR)/fixup4.dat
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup4cd.dat $(PKG_BUILD_DIR)/fixup4cd.dat
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-fixup4x.dat $(PKG_BUILD_DIR)/fixup4x.dat
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start.elf $(PKG_BUILD_DIR)/start.elf
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start_cd.elf $(PKG_BUILD_DIR)/start_cd.elf
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start_x.elf $(PKG_BUILD_DIR)/start_x.elf
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start4.elf $(PKG_BUILD_DIR)/start4.elf
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start4cd.elf $(PKG_BUILD_DIR)/start4cd.elf
|
||||
$(CP) $(DL_DIR)/$(RPI_FIRMWARE_FILE)-start4x.elf $(PKG_BUILD_DIR)/start4x.elf
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
|
||||
@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=dnsmasq
|
||||
PKG_UPSTREAM_VERSION:=2.81rc3
|
||||
PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION)))
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq/release-candidates
|
||||
|
||||
@ -866,6 +866,7 @@ dnsmasq_start()
|
||||
append_bool "$cfg" allservers "--all-servers"
|
||||
append_bool "$cfg" noping "--no-ping"
|
||||
append_bool "$cfg" rapidcommit "--dhcp-rapid-commit"
|
||||
append_bool "$cfg" scriptarp "--script-arp"
|
||||
|
||||
append_bool "$cfg" filter_aaaa "--filter-aaaa"
|
||||
|
||||
@ -919,6 +920,7 @@ dnsmasq_start()
|
||||
config_get user_dhcpscript $cfg dhcpscript
|
||||
if has_handler || [ -n "$user_dhcpscript" ]; then
|
||||
xappend "--dhcp-script=$DHCPSCRIPT"
|
||||
xappend "--script-arp"
|
||||
fi
|
||||
|
||||
config_get leasefile $cfg leasefile "/tmp/dhcp.leases"
|
||||
|
||||
@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bcm27xx-userland
|
||||
PKG_VERSION:=06bc6daa02137ca72b7a2104afad81e82a44de17
|
||||
PKG_VERSION:=6fb59736b1ae80fc62cddfe3309c800f72e1c07e
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/userland/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=cf4dff40a2f4ec38bc7e42a80b989df1bf88e12d714f7e681f83c4e5a588f5c9
|
||||
PKG_HASH:=f81fe28c636178645fb406cc87f543efa828ca896df856536f7b1b4ab54dfe0e
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
|
||||
@ -11,8 +11,7 @@ CPU_TYPE:=464fp
|
||||
FEATURES:=fpu dt gpio
|
||||
SUBTARGETS:=nand sata
|
||||
|
||||
KERNEL_PATCHVER:=4.19
|
||||
KERNEL_TESTING_PATCHVER:=5.4
|
||||
KERNEL_PATCHVER:=5.4
|
||||
|
||||
define Target/Description
|
||||
Build images for AppliedMicro APM821xx based boards.
|
||||
|
||||
@ -36,13 +36,25 @@
|
||||
|
||||
thermal-sensors = <&temp0 1>;
|
||||
|
||||
/*
|
||||
* REVISIT:
|
||||
*
|
||||
* Add the <&drive_temp>; sensor there and wire up
|
||||
* the coefficients = <1 1>; property.
|
||||
*
|
||||
* Note: The kernel does not yet support more than
|
||||
* one sensor (see of_thermal.c's function:
|
||||
* thermal_of_build_thermal_zon()). Once this is
|
||||
* implemented.
|
||||
*/
|
||||
|
||||
trips {
|
||||
/*
|
||||
* Once the thermal governers are a bit smarter
|
||||
* and do hysteresis properly, we can disable
|
||||
* the fan when the HDD and CPU has < 39 C.
|
||||
*/
|
||||
cpu_alert0: cpu-alert0 {
|
||||
cpu_alert0: board-alert0 {
|
||||
temperature = <25000>;
|
||||
hysteresis = <2000>;
|
||||
type = "active";
|
||||
@ -145,6 +157,17 @@
|
||||
|
||||
&SATA1 {
|
||||
status = "okay";
|
||||
|
||||
/*
|
||||
* This drive may have a temperature sensor with a
|
||||
* thermal zone we can use for thermal control of the
|
||||
* chassis temperature using the fan.
|
||||
*/
|
||||
|
||||
drive_temp: sata-port@0 {
|
||||
reg = <0>;
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&USBOTG0 {
|
||||
|
||||
@ -179,10 +179,20 @@
|
||||
|
||||
&SATA0 {
|
||||
status = "okay";
|
||||
|
||||
drive0: sata-port@0 {
|
||||
reg = <0>;
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&SATA1 {
|
||||
status = "okay";
|
||||
|
||||
drive1: sata-port@0 {
|
||||
reg = <0>;
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&UART0 {
|
||||
|
||||
@ -191,7 +191,7 @@ TARGET_DEVICES += netgear_wndap660
|
||||
define Device/netgear_wndr4700
|
||||
DEVICE_VENDOR := NETGEAR
|
||||
DEVICE_MODEL := Centria N900 WNDR4700/WNDR4720
|
||||
DEVICE_PACKAGES := badblocks block-mount e2fsprogs \
|
||||
DEVICE_PACKAGES := badblocks block-mount e2fsprogs kmod-hwmon-drivetemp \
|
||||
kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
|
||||
kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
|
||||
kmod-nls-utf8 kmod-usb3 kmod-usb-dwc2 kmod-usb-storage \
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
BOARDNAME := Devices which boot from SATA (NAS)
|
||||
FEATURES += ext4 usb ramdisk squashfs rootfs-part boot-part
|
||||
DEFAULT_PACKAGES += badblocks block-mount e2fsprogs \
|
||||
DEFAULT_PACKAGES += badblocks block-mount e2fsprogs kmod-hwmon-drivetemp \
|
||||
kmod-dm kmod-md-mod partx-utils mkf2fs f2fsck
|
||||
|
||||
define Target/Description
|
||||
|
||||
@ -631,11 +631,19 @@ static void ar934x_nfc_read_status(struct ar934x_nfc *nfc)
|
||||
nfc->buf[0] = status;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static void ar934x_nfc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
||||
int column, int page_addr)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
struct nand_chip *nand = &nfc->nand_chip;
|
||||
#else
|
||||
static void ar934x_nfc_cmdfunc(struct nand_chip *nand, unsigned int command,
|
||||
int column, int page_addr)
|
||||
{
|
||||
struct mtd_info *mtd = nand_to_mtd(nand);
|
||||
struct ar934x_nfc *nfc = nand->priv;
|
||||
#endif
|
||||
|
||||
nfc->read_id = false;
|
||||
if (command != NAND_CMD_PAGEPROG)
|
||||
@ -740,16 +748,28 @@ static void ar934x_nfc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
||||
}
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_dev_ready(struct mtd_info *mtd)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static int ar934x_nfc_dev_ready(struct nand_chip *chip)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
#endif
|
||||
|
||||
return __ar934x_nfc_dev_ready(nfc);
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static u8 ar934x_nfc_read_byte(struct mtd_info *mtd)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static u8 ar934x_nfc_read_byte(struct nand_chip *chip)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
#endif
|
||||
u8 data;
|
||||
|
||||
WARN_ON(nfc->buf_index >= nfc->buf_size);
|
||||
@ -764,9 +784,15 @@ static u8 ar934x_nfc_read_byte(struct mtd_info *mtd)
|
||||
return data;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static void ar934x_nfc_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static void ar934x_nfc_write_buf(struct nand_chip *chip, const u8 *buf, int len)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
#endif
|
||||
int i;
|
||||
|
||||
WARN_ON(nfc->buf_index + len > nfc->buf_size);
|
||||
@ -784,9 +810,15 @@ static void ar934x_nfc_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
|
||||
}
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static void ar934x_nfc_read_buf(struct mtd_info *mtd, u8 *buf, int len)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static void ar934x_nfc_read_buf(struct nand_chip *chip, u8 *buf, int len)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
#endif
|
||||
int buf_index;
|
||||
int i;
|
||||
|
||||
@ -821,10 +853,18 @@ static inline void ar934x_nfc_disable_hwecc(struct ar934x_nfc *nfc)
|
||||
nfc->ctrl_reg |= AR934X_NFC_CTRL_CUSTOM_SIZE_EN;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static int ar934x_nfc_read_oob(struct nand_chip *chip,
|
||||
int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
struct mtd_info *mtd = ar934x_nfc_to_mtd(nfc);
|
||||
#endif
|
||||
int err;
|
||||
|
||||
nfc_dbg(nfc, "read_oob: page:%d\n", page);
|
||||
@ -839,11 +879,18 @@ static int ar934x_nfc_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
|
||||
#else
|
||||
static int ar934x_nfc_write_oob(struct nand_chip *chip,
|
||||
int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
struct mtd_info *mtd = ar934x_nfc_to_mtd(nfc);
|
||||
#endif
|
||||
nfc_dbg(nfc, "write_oob: page:%d\n", page);
|
||||
|
||||
memcpy(nfc->buf, chip->oob_poi, mtd->oobsize);
|
||||
@ -852,11 +899,20 @@ static int ar934x_nfc_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
page, mtd->oobsize);
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_read_page_raw(struct mtd_info *mtd,
|
||||
struct nand_chip *chip, u8 *buf,
|
||||
int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static int ar934x_nfc_read_page_raw(
|
||||
struct nand_chip *chip, u8 *buf,
|
||||
int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
struct mtd_info *mtd = ar934x_nfc_to_mtd(nfc);
|
||||
#endif
|
||||
int len;
|
||||
int err;
|
||||
|
||||
@ -878,10 +934,18 @@ static int ar934x_nfc_read_page_raw(struct mtd_info *mtd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
u8 *buf, int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static int ar934x_nfc_read_page(struct nand_chip *chip,
|
||||
u8 *buf, int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
struct mtd_info *mtd = ar934x_nfc_to_mtd(nfc);
|
||||
#endif
|
||||
u32 ecc_ctrl;
|
||||
int max_bitflips = 0;
|
||||
bool ecc_failed;
|
||||
@ -950,11 +1014,20 @@ static int ar934x_nfc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
return max_bitflips;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_write_page_raw(struct mtd_info *mtd,
|
||||
struct nand_chip *chip, const u8 *buf,
|
||||
int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static int ar934x_nfc_write_page_raw(
|
||||
struct nand_chip *chip, const u8 *buf,
|
||||
int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
struct mtd_info *mtd = ar934x_nfc_to_mtd(nfc);
|
||||
#endif
|
||||
int len;
|
||||
|
||||
nfc_dbg(nfc, "write_page_raw: page:%d oob:%d\n", page, oob_required);
|
||||
@ -970,10 +1043,18 @@ static int ar934x_nfc_write_page_raw(struct mtd_info *mtd,
|
||||
return ar934x_nfc_send_write(nfc, NAND_CMD_PAGEPROG, 0, page, len);
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static int ar934x_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
const u8 *buf, int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
#else
|
||||
static int ar934x_nfc_write_page(struct nand_chip *chip,
|
||||
const u8 *buf, int oob_required, int page)
|
||||
{
|
||||
struct ar934x_nfc *nfc = chip->priv;
|
||||
struct mtd_info *mtd = ar934x_nfc_to_mtd(nfc);
|
||||
#endif
|
||||
int err;
|
||||
|
||||
nfc_dbg(nfc, "write_page: page:%d oob:%d\n", page, oob_required);
|
||||
@ -981,7 +1062,11 @@ static int ar934x_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
/* write OOB first */
|
||||
if (oob_required &&
|
||||
!is_all_ff(chip->oob_poi, mtd->oobsize)) {
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
err = ar934x_nfc_write_oob(mtd, chip, page);
|
||||
#else
|
||||
err = ar934x_nfc_write_oob(chip, page);
|
||||
#endif
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
@ -997,14 +1082,22 @@ static int ar934x_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ar934x_nfc_hw_reset_assert(struct ar934x_nfc *nfc) {
|
||||
reset_control_assert(nfc->rst);
|
||||
static int ar934x_nfc_hw_reset_assert(struct ar934x_nfc *nfc)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = reset_control_assert(nfc->rst);
|
||||
udelay(250);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ar934x_nfc_hw_reset_deassert(struct ar934x_nfc *nfc) {
|
||||
reset_control_deassert(nfc->rst);
|
||||
static int ar934x_nfc_hw_reset_deassert(struct ar934x_nfc *nfc)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = reset_control_deassert(nfc->rst);
|
||||
udelay(250);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ar934x_nfc_hw_init(struct ar934x_nfc *nfc)
|
||||
@ -1083,6 +1176,11 @@ static int ar934x_nfc_init_tail(struct mtd_info *mtd)
|
||||
{
|
||||
struct ar934x_nfc *nfc = mtd_to_ar934x_nfc(mtd);
|
||||
struct nand_chip *chip = &nfc->nand_chip;
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 2, 0)
|
||||
u64 chipsize = chip->chipsize;
|
||||
#else
|
||||
u64 chipsize = nanddev_target_size(&chip->base);
|
||||
#endif
|
||||
u32 ctrl;
|
||||
u32 t;
|
||||
int err;
|
||||
@ -1169,10 +1267,10 @@ static int ar934x_nfc_init_tail(struct mtd_info *mtd)
|
||||
if (nfc->small_page) {
|
||||
ctrl |= AR934X_NFC_CTRL_SMALL_PAGE;
|
||||
|
||||
if (chip->chipsize > (32 << 20)) {
|
||||
if (chipsize > (32 << 20)) {
|
||||
nfc->addr_count0 = 4;
|
||||
nfc->addr_count1 = 3;
|
||||
} else if (chip->chipsize > (2 << 16)) {
|
||||
} else if (chipsize > (2 << 16)) {
|
||||
nfc->addr_count0 = 3;
|
||||
nfc->addr_count1 = 2;
|
||||
} else {
|
||||
@ -1180,10 +1278,10 @@ static int ar934x_nfc_init_tail(struct mtd_info *mtd)
|
||||
nfc->addr_count1 = 1;
|
||||
}
|
||||
} else {
|
||||
if (chip->chipsize > (128 << 20)) {
|
||||
if (chipsize > (128 << 20)) {
|
||||
nfc->addr_count0 = 5;
|
||||
nfc->addr_count1 = 3;
|
||||
} else if (chip->chipsize > (8 << 16)) {
|
||||
} else if (chipsize > (8 << 16)) {
|
||||
nfc->addr_count0 = 4;
|
||||
nfc->addr_count1 = 2;
|
||||
} else {
|
||||
@ -1329,8 +1427,13 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand)
|
||||
|
||||
static u64 ar934x_nfc_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
static void ar934x_nfc_cmd_ctrl(struct mtd_info *mtd, int dat,
|
||||
unsigned int ctrl)
|
||||
#else
|
||||
static void ar934x_nfc_cmd_ctrl(struct nand_chip *chip, int dat,
|
||||
unsigned int ctrl)
|
||||
#endif
|
||||
{
|
||||
WARN_ON(dat != NAND_CMD_NONE);
|
||||
}
|
||||
@ -1401,6 +1504,7 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
|
||||
|
||||
nand_set_controller_data(nand, nfc);
|
||||
nand_set_flash_node(nand, pdev->dev.of_node);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
nand->chip_delay = 25;
|
||||
nand->dev_ready = ar934x_nfc_dev_ready;
|
||||
nand->cmdfunc = ar934x_nfc_cmdfunc;
|
||||
@ -1408,7 +1512,17 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
|
||||
nand->read_byte = ar934x_nfc_read_byte;
|
||||
nand->write_buf = ar934x_nfc_write_buf;
|
||||
nand->read_buf = ar934x_nfc_read_buf;
|
||||
#else
|
||||
nand->legacy.chip_delay = 25;
|
||||
nand->legacy.dev_ready = ar934x_nfc_dev_ready;
|
||||
nand->legacy.cmdfunc = ar934x_nfc_cmdfunc;
|
||||
nand->legacy.cmd_ctrl = ar934x_nfc_cmd_ctrl; /* dummy */
|
||||
nand->legacy.read_byte = ar934x_nfc_read_byte;
|
||||
nand->legacy.write_buf = ar934x_nfc_write_buf;
|
||||
nand->legacy.read_buf = ar934x_nfc_read_buf;
|
||||
#endif
|
||||
nand->ecc.mode = NAND_ECC_HW; /* default */
|
||||
nand->priv = nfc;
|
||||
platform_set_drvdata(pdev, nfc);
|
||||
|
||||
ret = ar934x_nfc_alloc_buf(nfc, AR934X_NFC_ID_BUF_SIZE);
|
||||
@ -1421,8 +1535,13 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
|
||||
goto err_free_buf;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
nand->dummy_controller.ops = &ar934x_nfc_controller_ops;
|
||||
ret = nand_scan(mtd, 1);
|
||||
#else
|
||||
nand->legacy.dummy_controller.ops = &ar934x_nfc_controller_ops;
|
||||
ret = nand_scan(nand, 1);
|
||||
#endif
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "nand_scan failed, err:%d\n", ret);
|
||||
goto err_free_buf;
|
||||
@ -1444,12 +1563,18 @@ err_free_buf:
|
||||
static int ar934x_nfc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ar934x_nfc *nfc;
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
struct mtd_info *mtd;
|
||||
#endif
|
||||
|
||||
nfc = platform_get_drvdata(pdev);
|
||||
if (nfc) {
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
|
||||
mtd = ar934x_nfc_to_mtd(nfc);
|
||||
nand_release(mtd);
|
||||
#else
|
||||
nand_release(&nfc->nand_chip);
|
||||
#endif
|
||||
ar934x_nfc_free_buf(nfc);
|
||||
}
|
||||
|
||||
|
||||
@ -44,7 +44,6 @@ CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
# CONFIG_ARM_SCMI_PROTOCOL is not set
|
||||
# CONFIG_ARM_SP805_WATCHDOG is not set
|
||||
CONFIG_ARM_THUMB=y
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
@ -101,7 +100,6 @@ CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_CPU_32v6=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_ABRT_EV6=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_CPU_CACHE_V6=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
@ -119,7 +117,6 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_HAS_ASID=y
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
@ -139,7 +136,6 @@ CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BCM2708=y
|
||||
CONFIG_DMA_BCM2835=y
|
||||
@ -158,9 +154,7 @@ CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
CONFIG_F2FS_FS=y
|
||||
# CONFIG_F2FS_FS_SECURITY is not set
|
||||
CONFIG_F2FS_FS_XATTR=y
|
||||
CONFIG_F2FS_STAT_FS=y
|
||||
CONFIG_FB=y
|
||||
@ -173,7 +167,6 @@ CONFIG_FB_CMDLINE=y
|
||||
CONFIG_FB_SIMPLE=y
|
||||
CONFIG_FIQ=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
@ -330,7 +323,6 @@ CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BCM2835=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
|
||||
@ -387,7 +379,6 @@ CONFIG_UEVENT_HELPER_PATH=""
|
||||
# CONFIG_UID16 is not set
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_UNWINDER_ARM=y
|
||||
# CONFIG_UNWINDER_FRAME_POINTER is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_COMMON=y
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
# CONFIG_AIO is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ARCH_32BIT_OFF_T=y
|
||||
# CONFIG_ARCH_AXXIA is not set
|
||||
CONFIG_ARCH_BCM=y
|
||||
CONFIG_ARCH_BCM2835=y
|
||||
# CONFIG_ARCH_BCM_HR2 is not set
|
||||
@ -59,9 +58,7 @@ CONFIG_ARM_PATCH_IDIV=y
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
# CONFIG_ARM_SCMI_PROTOCOL is not set
|
||||
# CONFIG_ARM_SP805_WATCHDOG is not set
|
||||
CONFIG_ARM_THUMB=y
|
||||
# CONFIG_ARM_THUMBEE is not set
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
@ -125,7 +122,6 @@ CONFIG_CPUFREQ_DT_PLATDEV=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_32v7=y
|
||||
CONFIG_CPU_ABRT_EV7=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_CPU_CACHE_V7=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
@ -143,9 +139,6 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_HAS_ASID=y
|
||||
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
# CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
@ -189,7 +182,6 @@ CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
CONFIG_DIMLIB=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BCM2708=y
|
||||
@ -209,9 +201,7 @@ CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
CONFIG_F2FS_FS=y
|
||||
# CONFIG_F2FS_FS_SECURITY is not set
|
||||
CONFIG_F2FS_FS_XATTR=y
|
||||
CONFIG_F2FS_STAT_FS=y
|
||||
CONFIG_FB=y
|
||||
@ -225,7 +215,6 @@ CONFIG_FB_SIMPLE=y
|
||||
CONFIG_FIQ=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
@ -321,7 +310,6 @@ CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
CONFIG_HW_CONSOLE=y
|
||||
CONFIG_HZ_FIXED=0
|
||||
CONFIG_I2C=y
|
||||
@ -428,7 +416,6 @@ CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BCM2835=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
|
||||
@ -491,7 +478,6 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
CONFIG_TICK_CPU_ACCOUNTING=y
|
||||
CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
@ -502,7 +488,6 @@ CONFIG_UEVENT_HELPER_PATH=""
|
||||
# CONFIG_UID16 is not set
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_UNWINDER_ARM=y
|
||||
# CONFIG_UNWINDER_FRAME_POINTER is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_COMMON=y
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
CONFIG_64BIT=y
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_ARCH_AGILEX is not set
|
||||
CONFIG_ARCH_BCM2835=y
|
||||
# CONFIG_ARCH_BITMAIN is not set
|
||||
CONFIG_ARCH_CLOCKSOURCE_DATA=y
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
@ -82,12 +80,9 @@ CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y
|
||||
CONFIG_ARCH_WANT_FRAME_POINTERS=y
|
||||
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
|
||||
CONFIG_ARM64=y
|
||||
# CONFIG_ARM64_16K_PAGES is not set
|
||||
CONFIG_ARM64_4K_PAGES=y
|
||||
# CONFIG_ARM64_64K_PAGES is not set
|
||||
CONFIG_ARM64_CNP=y
|
||||
CONFIG_ARM64_CONT_SHIFT=4
|
||||
# CONFIG_ARM64_CRYPTO is not set
|
||||
CONFIG_ARM64_ERRATUM_1165522=y
|
||||
CONFIG_ARM64_ERRATUM_1286807=y
|
||||
CONFIG_ARM64_ERRATUM_819472=y
|
||||
@ -102,18 +97,13 @@ CONFIG_ARM64_PAGE_SHIFT=12
|
||||
CONFIG_ARM64_PAN=y
|
||||
CONFIG_ARM64_PA_BITS=48
|
||||
CONFIG_ARM64_PA_BITS_48=y
|
||||
# CONFIG_ARM64_PMEM is not set
|
||||
# CONFIG_ARM64_PSEUDO_NMI is not set
|
||||
# CONFIG_ARM64_PTDUMP_DEBUGFS is not set
|
||||
CONFIG_ARM64_PTR_AUTH=y
|
||||
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
|
||||
CONFIG_ARM64_SSBD=y
|
||||
CONFIG_ARM64_SVE=y
|
||||
CONFIG_ARM64_TAGGED_ADDR_ABI=y
|
||||
CONFIG_ARM64_UAO=y
|
||||
CONFIG_ARM64_VA_BITS=39
|
||||
CONFIG_ARM64_VA_BITS_39=y
|
||||
# CONFIG_ARM64_VA_BITS_48 is not set
|
||||
CONFIG_ARM64_VHE=y
|
||||
CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
|
||||
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
|
||||
@ -131,7 +121,6 @@ CONFIG_ARM_GIC_V3_ITS_PCI=y
|
||||
CONFIG_ARM_PSCI_FW=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
# CONFIG_ARM_SCMI_PROTOCOL is not set
|
||||
# CONFIG_ARM_SP805_WATCHDOG is not set
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ASSOCIATIVE_ARRAY=y
|
||||
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
|
||||
@ -187,7 +176,6 @@ CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_CPUFREQ_DT_PLATDEV=y
|
||||
# CONFIG_CPU_BIG_ENDIAN is not set
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
@ -199,7 +187,6 @@ CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
@ -256,9 +243,7 @@ CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
CONFIG_F2FS_FS=y
|
||||
# CONFIG_F2FS_FS_SECURITY is not set
|
||||
CONFIG_F2FS_FS_XATTR=y
|
||||
CONFIG_F2FS_STAT_FS=y
|
||||
CONFIG_FB=y
|
||||
@ -272,7 +257,6 @@ CONFIG_FB_SIMPLE=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
# CONFIG_FLATMEM_MANUAL is not set
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
@ -382,7 +366,6 @@ CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
|
||||
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
CONFIG_HOLES_IN_ZONE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
CONFIG_HW_CONSOLE=y
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_I2C_BCM2708 is not set
|
||||
@ -440,7 +423,6 @@ CONFIG_MAX_RAW_DEVS=256
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_RPISENSE_CORE is not set
|
||||
@ -473,7 +455,6 @@ CONFIG_NO_HZ=y
|
||||
CONFIG_NO_HZ_COMMON=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NR_CPUS=4
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_NVMEM=y
|
||||
# CONFIG_OCTEONTX2_AF is not set
|
||||
CONFIG_OF=y
|
||||
@ -505,7 +486,6 @@ CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BCM2835=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
|
||||
@ -517,7 +497,6 @@ CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_QUEUED_RWLOCKS=y
|
||||
CONFIG_QUEUED_SPINLOCKS=y
|
||||
# CONFIG_RANDOMIZE_BASE is not set
|
||||
CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_RASPBERRYPI_POWER=y
|
||||
CONFIG_RATIONAL=y
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
CONFIG_64BIT=y
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_ARCH_AGILEX is not set
|
||||
CONFIG_ARCH_BCM2835=y
|
||||
# CONFIG_ARCH_BITMAIN is not set
|
||||
CONFIG_ARCH_CLOCKSOURCE_DATA=y
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
@ -82,12 +80,9 @@ CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y
|
||||
CONFIG_ARCH_WANT_FRAME_POINTERS=y
|
||||
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
|
||||
CONFIG_ARM64=y
|
||||
# CONFIG_ARM64_16K_PAGES is not set
|
||||
CONFIG_ARM64_4K_PAGES=y
|
||||
# CONFIG_ARM64_64K_PAGES is not set
|
||||
CONFIG_ARM64_CNP=y
|
||||
CONFIG_ARM64_CONT_SHIFT=4
|
||||
# CONFIG_ARM64_CRYPTO is not set
|
||||
CONFIG_ARM64_ERRATUM_1165522=y
|
||||
CONFIG_ARM64_ERRATUM_1286807=y
|
||||
CONFIG_ARM64_ERRATUM_819472=y
|
||||
@ -102,18 +97,13 @@ CONFIG_ARM64_PAGE_SHIFT=12
|
||||
CONFIG_ARM64_PAN=y
|
||||
CONFIG_ARM64_PA_BITS=48
|
||||
CONFIG_ARM64_PA_BITS_48=y
|
||||
# CONFIG_ARM64_PMEM is not set
|
||||
# CONFIG_ARM64_PSEUDO_NMI is not set
|
||||
# CONFIG_ARM64_PTDUMP_DEBUGFS is not set
|
||||
CONFIG_ARM64_PTR_AUTH=y
|
||||
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
|
||||
CONFIG_ARM64_SSBD=y
|
||||
CONFIG_ARM64_SVE=y
|
||||
CONFIG_ARM64_TAGGED_ADDR_ABI=y
|
||||
CONFIG_ARM64_UAO=y
|
||||
CONFIG_ARM64_VA_BITS=39
|
||||
CONFIG_ARM64_VA_BITS_39=y
|
||||
# CONFIG_ARM64_VA_BITS_48 is not set
|
||||
CONFIG_ARM64_VHE=y
|
||||
CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
|
||||
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
|
||||
@ -131,7 +121,6 @@ CONFIG_ARM_GIC_V3_ITS_PCI=y
|
||||
CONFIG_ARM_PSCI_FW=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
# CONFIG_ARM_SCMI_PROTOCOL is not set
|
||||
# CONFIG_ARM_SP805_WATCHDOG is not set
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ASSOCIATIVE_ARRAY=y
|
||||
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
|
||||
@ -191,7 +180,6 @@ CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_CPUFREQ_DT_PLATDEV=y
|
||||
# CONFIG_CPU_BIG_ENDIAN is not set
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
@ -203,7 +191,6 @@ CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
@ -261,9 +248,7 @@ CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
# CONFIG_F2FS_CHECK_FS is not set
|
||||
CONFIG_F2FS_FS=y
|
||||
# CONFIG_F2FS_FS_SECURITY is not set
|
||||
CONFIG_F2FS_FS_XATTR=y
|
||||
CONFIG_F2FS_STAT_FS=y
|
||||
CONFIG_FB=y
|
||||
@ -277,7 +262,6 @@ CONFIG_FB_SIMPLE=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
# CONFIG_FLATMEM_MANUAL is not set
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
@ -388,7 +372,6 @@ CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
|
||||
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
CONFIG_HOLES_IN_ZONE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
CONFIG_HW_CONSOLE=y
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_I2C_BCM2708 is not set
|
||||
@ -447,7 +430,6 @@ CONFIG_MDIO_BCM_UNIMAC=y
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_RPISENSE_CORE is not set
|
||||
@ -479,7 +461,6 @@ CONFIG_NO_HZ=y
|
||||
CONFIG_NO_HZ_COMMON=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NR_CPUS=4
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_NVMEM=y
|
||||
# CONFIG_OCTEONTX2_AF is not set
|
||||
CONFIG_OF=y
|
||||
@ -514,7 +495,6 @@ CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BCM2835=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
|
||||
@ -526,7 +506,6 @@ CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_QUEUED_RWLOCKS=y
|
||||
CONFIG_QUEUED_SPINLOCKS=y
|
||||
# CONFIG_RANDOMIZE_BASE is not set
|
||||
CONFIG_RAS=y
|
||||
CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_RASPBERRYPI_POWER=y
|
||||
|
||||
@ -108,7 +108,7 @@ Signed-off-by: Serge Schneider <serge@raspberrypi.org>
|
||||
+the fan to the user space through the hwmon sysfs interface.
|
||||
--- a/drivers/hwmon/Kconfig
|
||||
+++ b/drivers/hwmon/Kconfig
|
||||
@@ -1346,6 +1346,17 @@ config SENSORS_RASPBERRYPI_HWMON
|
||||
@@ -1356,6 +1356,17 @@ config SENSORS_RASPBERRYPI_HWMON
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called raspberrypi-hwmon.
|
||||
|
||||
@ -128,7 +128,7 @@ Signed-off-by: Serge Schneider <serge@raspberrypi.org>
|
||||
depends on GPIOLIB || COMPILE_TEST
|
||||
--- a/drivers/hwmon/Makefile
|
||||
+++ b/drivers/hwmon/Makefile
|
||||
@@ -144,6 +144,7 @@ obj-$(CONFIG_SENSORS_PCF8591) += pcf8591
|
||||
@@ -145,6 +145,7 @@ obj-$(CONFIG_SENSORS_PCF8591) += pcf8591
|
||||
obj-$(CONFIG_SENSORS_POWR1220) += powr1220.o
|
||||
obj-$(CONFIG_SENSORS_PWM_FAN) += pwm-fan.o
|
||||
obj-$(CONFIG_SENSORS_RASPBERRYPI_HWMON) += raspberrypi-hwmon.o
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
From e253d03936265dc4ab8ae9ae89d2a885e80a45a6 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Reichl <hias@horus.com>
|
||||
Date: Fri, 6 Mar 2020 11:08:10 +0100
|
||||
Subject: [PATCH] gpio-ir-overlay: add parameter to configure signal
|
||||
polarity (#3490)
|
||||
|
||||
Standard IR receivers use inverted / active-low signalling
|
||||
and the gpio-ir overlay configures the GPIO appropriately
|
||||
as GPIO_ACTIVE_LOW (1).
|
||||
|
||||
In order to support (rather rare) non-inverted / active-high
|
||||
signalling the GPIO needs to be configured as GPIO_ACTIVE_HIGH (0).
|
||||
|
||||
Add an "invert" parameter to override this like in the gpio-ir-tx
|
||||
overlay.
|
||||
|
||||
Signed-off-by: Matthias Reichl <hias@horus.com>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/README | 4 ++++
|
||||
arch/arm/boot/dts/overlays/gpio-ir-overlay.dts | 1 +
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -754,6 +754,10 @@ Params: gpio_pin Input pi
|
||||
gpio_pull Desired pull-up/down state (off, down, up)
|
||||
Default is "up".
|
||||
|
||||
+ invert "1" = invert the input (active-low signalling).
|
||||
+ "0" = non-inverted input (active-high
|
||||
+ signalling). Default is "1".
|
||||
+
|
||||
rc-map-name Default rc keymap (can also be changed by
|
||||
ir-keytable), defaults to "rc-rc6-mce"
|
||||
|
||||
--- a/arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
|
||||
+++ b/arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
|
||||
@@ -42,6 +42,7 @@
|
||||
<&gpio_ir_pins>,"brcm,pins:0",
|
||||
<&gpio_ir_pins>,"reg:0";
|
||||
gpio_pull = <&gpio_ir_pins>,"brcm,pull:0"; // pull-up/down state
|
||||
+ invert = <&gpio_ir>,"gpios:8"; // 0 = active high input
|
||||
|
||||
rc-map-name = <&gpio_ir>,"linux,rc-map-name"; // default rc map
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,27 @@
|
||||
From e25d9a93812847b4ddc9e883d0cd45b32f8e2f76 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Tue, 17 Mar 2020 16:39:07 +0000
|
||||
Subject: [PATCH] ARM: dts: bcm2711: Add 32-bit PMU compatibility
|
||||
|
||||
The "arm" architecture has no support for the cortex-a72 as such, but
|
||||
the performance and measurement unit from the cortex-a15 seems to be
|
||||
compatible.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/boot/dts/bcm2711-rpi.dtsi | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm2711-rpi.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm2711-rpi.dtsi
|
||||
@@ -12,6 +12,10 @@
|
||||
sd_poll_once = <&emmc2>, "non-removable?";
|
||||
};
|
||||
|
||||
+ arm-pmu {
|
||||
+ compatible = "arm,cortex-a72-pmu", "arm,cortex-a15-pmu";
|
||||
+ };
|
||||
+
|
||||
v3dbus {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
@ -0,0 +1,67 @@
|
||||
From 70b0d5d07426e1b9c34ddd6ab4ee99b8c2fb81a6 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Thu, 19 Mar 2020 10:04:46 +0000
|
||||
Subject: [PATCH] ARM: dts: bcm271x: Use a53 pmu, drop RPI364
|
||||
|
||||
The upstream bcm2837.dtsi uses cortex-a53-pmu, so we can do the same
|
||||
but with a fallback to the cortex-a7-pmu which is supported by the
|
||||
32-bit kernel.
|
||||
|
||||
Now that we're using the natural fallback mechanism of compatible
|
||||
strings, the RPI364 macro no longer serves any purpose - remove it.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/boot/dts/bcm2710.dtsi | 6 +-----
|
||||
arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts | 2 --
|
||||
arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts | 2 --
|
||||
arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts | 2 --
|
||||
arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts | 2 --
|
||||
arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts | 2 --
|
||||
6 files changed, 1 insertion(+), 15 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm2710.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm2710.dtsi
|
||||
@@ -5,11 +5,7 @@
|
||||
compatible = "brcm,bcm2837", "brcm,bcm2836";
|
||||
|
||||
arm-pmu {
|
||||
-#ifdef RPI364
|
||||
- compatible = "arm,armv8-pmuv3", "arm,cortex-a7-pmu";
|
||||
-#else
|
||||
- compatible = "arm,cortex-a7-pmu";
|
||||
-#endif
|
||||
+ compatible = "arm,cortex-a53-pmu", "arm,cortex-a7-pmu";
|
||||
};
|
||||
|
||||
soc {
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts
|
||||
@@ -1,3 +1 @@
|
||||
-#define RPI364
|
||||
-
|
||||
#include "../../../../arm/boot/dts/bcm2710-rpi-2-b.dts"
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts
|
||||
@@ -1,3 +1 @@
|
||||
-#define RPI364
|
||||
-
|
||||
#include "../../../../arm/boot/dts/bcm2710-rpi-3-b-plus.dts"
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts
|
||||
@@ -1,3 +1 @@
|
||||
-#define RPI364
|
||||
-
|
||||
#include "../../../../arm/boot/dts/bcm2710-rpi-3-b.dts"
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
|
||||
@@ -1,3 +1 @@
|
||||
-#define RPI364
|
||||
-
|
||||
#include "../../../../arm/boot/dts/bcm2710-rpi-cm3.dts"
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts
|
||||
@@ -1,3 +1 @@
|
||||
-#define RPI364
|
||||
-
|
||||
#include "../../../../arm/boot/dts/bcm2711-rpi-4-b.dts"
|
||||
@ -0,0 +1,32 @@
|
||||
From cff8c5c2a95a4afd65bfa3198258d03bc790cddb Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Date: Tue, 25 Feb 2020 14:11:59 +0100
|
||||
Subject: [PATCH] net: bcmgenet: Clear ID_MODE_DIS in
|
||||
EXT_RGMII_OOB_CTRL when not needed
|
||||
|
||||
commit 402482a6a78e5c61d8a2ec6311fc5b4aca392cd6 upstream.
|
||||
|
||||
Outdated Raspberry Pi 4 firmware might configure the external PHY as
|
||||
rgmii although the kernel currently sets it as rgmii-rxid. This makes
|
||||
connections unreliable as ID_MODE_DIS is left enabled. To avoid this,
|
||||
explicitly clear that bit whenever we don't need it.
|
||||
|
||||
Fixes: da38802211cc ("net: bcmgenet: Add RGMII_RXID support")
|
||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Matthias Reichl <hias@horus.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/genet/bcmmii.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
@@ -292,6 +292,7 @@ int bcmgenet_mii_config(struct net_devic
|
||||
*/
|
||||
if (priv->ext_phy) {
|
||||
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
|
||||
+ reg &= ~ID_MODE_DIS;
|
||||
reg |= id_mode_dis;
|
||||
if (GENET_IS_V1(priv) || GENET_IS_V2(priv) || GENET_IS_V3(priv))
|
||||
reg |= RGMII_MODE_EN_V123;
|
||||
@ -0,0 +1,141 @@
|
||||
From fade8b3cf37785297b4f8a9bbd13ab107208af5a Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:22 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Fix possible reference past
|
||||
end of string
|
||||
|
||||
Commit 8582e244e5fe72d2e9ace186fa8f3ed3bb4122e1 upstream.
|
||||
|
||||
Before this commit, if the last option of a video=... option is for
|
||||
example "rotate" without a "=<value>" after it then delim will point to
|
||||
the terminating 0 of the string, and value which is sets to <delim + 1>
|
||||
will point one position past the end of the string.
|
||||
|
||||
This commit fixes this by enforcing that the contents of delim equals '='
|
||||
as it should be for options which take a value, this check is done in a
|
||||
new drm_mode_parse_cmdline_int helper function which factors out the
|
||||
common integer parsing code for all the options which take an int.
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-1-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 68 ++++++++++++++++---------------------
|
||||
1 file changed, 30 insertions(+), 38 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1568,11 +1568,34 @@ static int drm_mode_parse_cmdline_res_mo
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int drm_mode_parse_cmdline_int(const char *delim, unsigned int *int_ret)
|
||||
+{
|
||||
+ const char *value;
|
||||
+ char *endp;
|
||||
+
|
||||
+ /*
|
||||
+ * delim must point to the '=', otherwise it is a syntax error and
|
||||
+ * if delim points to the terminating zero, then delim + 1 wil point
|
||||
+ * past the end of the string.
|
||||
+ */
|
||||
+ if (*delim != '=')
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ value = delim + 1;
|
||||
+ *int_ret = simple_strtol(value, &endp, 10);
|
||||
+
|
||||
+ /* Make sure we have parsed something */
|
||||
+ if (endp == value)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int drm_mode_parse_cmdline_options(char *str, size_t len,
|
||||
const struct drm_connector *connector,
|
||||
struct drm_cmdline_mode *mode)
|
||||
{
|
||||
- unsigned int rotation = 0;
|
||||
+ unsigned int deg, margin, rotation = 0;
|
||||
char *sep = str;
|
||||
|
||||
while ((sep = strchr(sep, ','))) {
|
||||
@@ -1588,13 +1611,7 @@ static int drm_mode_parse_cmdline_option
|
||||
}
|
||||
|
||||
if (!strncmp(option, "rotate", delim - option)) {
|
||||
- const char *value = delim + 1;
|
||||
- unsigned int deg;
|
||||
-
|
||||
- deg = simple_strtol(value, &sep, 10);
|
||||
-
|
||||
- /* Make sure we have parsed something */
|
||||
- if (sep == value)
|
||||
+ if (drm_mode_parse_cmdline_int(delim, °))
|
||||
return -EINVAL;
|
||||
|
||||
switch (deg) {
|
||||
@@ -1619,57 +1636,32 @@ static int drm_mode_parse_cmdline_option
|
||||
}
|
||||
} else if (!strncmp(option, "reflect_x", delim - option)) {
|
||||
rotation |= DRM_MODE_REFLECT_X;
|
||||
- sep = delim;
|
||||
} else if (!strncmp(option, "reflect_y", delim - option)) {
|
||||
rotation |= DRM_MODE_REFLECT_Y;
|
||||
- sep = delim;
|
||||
} else if (!strncmp(option, "margin_right", delim - option)) {
|
||||
- const char *value = delim + 1;
|
||||
- unsigned int margin;
|
||||
-
|
||||
- margin = simple_strtol(value, &sep, 10);
|
||||
-
|
||||
- /* Make sure we have parsed something */
|
||||
- if (sep == value)
|
||||
+ if (drm_mode_parse_cmdline_int(delim, &margin))
|
||||
return -EINVAL;
|
||||
|
||||
mode->tv_margins.right = margin;
|
||||
} else if (!strncmp(option, "margin_left", delim - option)) {
|
||||
- const char *value = delim + 1;
|
||||
- unsigned int margin;
|
||||
-
|
||||
- margin = simple_strtol(value, &sep, 10);
|
||||
-
|
||||
- /* Make sure we have parsed something */
|
||||
- if (sep == value)
|
||||
+ if (drm_mode_parse_cmdline_int(delim, &margin))
|
||||
return -EINVAL;
|
||||
|
||||
mode->tv_margins.left = margin;
|
||||
} else if (!strncmp(option, "margin_top", delim - option)) {
|
||||
- const char *value = delim + 1;
|
||||
- unsigned int margin;
|
||||
-
|
||||
- margin = simple_strtol(value, &sep, 10);
|
||||
-
|
||||
- /* Make sure we have parsed something */
|
||||
- if (sep == value)
|
||||
+ if (drm_mode_parse_cmdline_int(delim, &margin))
|
||||
return -EINVAL;
|
||||
|
||||
mode->tv_margins.top = margin;
|
||||
} else if (!strncmp(option, "margin_bottom", delim - option)) {
|
||||
- const char *value = delim + 1;
|
||||
- unsigned int margin;
|
||||
-
|
||||
- margin = simple_strtol(value, &sep, 10);
|
||||
-
|
||||
- /* Make sure we have parsed something */
|
||||
- if (sep == value)
|
||||
+ if (drm_mode_parse_cmdline_int(delim, &margin))
|
||||
return -EINVAL;
|
||||
|
||||
mode->tv_margins.bottom = margin;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
+ sep = delim;
|
||||
}
|
||||
|
||||
mode->rotation_reflection = rotation;
|
||||
@ -0,0 +1,50 @@
|
||||
From 250363a413cd08e723789e1b8821608ff5eebfe6 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:23 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Make various char pointers
|
||||
const
|
||||
|
||||
Commit 83e14ea3a64f00897cc31974d3ae4e27e5a7405b upstream.
|
||||
|
||||
We are not supposed to modify the passed in string, make char pointers
|
||||
used in drm_mode_parse_cmdline_options() const char * where possible.
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-2-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1591,15 +1591,15 @@ static int drm_mode_parse_cmdline_int(co
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int drm_mode_parse_cmdline_options(char *str, size_t len,
|
||||
+static int drm_mode_parse_cmdline_options(const char *str, size_t len,
|
||||
const struct drm_connector *connector,
|
||||
struct drm_cmdline_mode *mode)
|
||||
{
|
||||
unsigned int deg, margin, rotation = 0;
|
||||
- char *sep = str;
|
||||
+ const char *sep = str;
|
||||
|
||||
while ((sep = strchr(sep, ','))) {
|
||||
- char *delim, *option;
|
||||
+ const char *delim, *option;
|
||||
|
||||
option = sep + 1;
|
||||
delim = strchr(option, '=');
|
||||
@@ -1718,8 +1718,8 @@ bool drm_mode_parse_command_line_for_con
|
||||
bool named_mode = false, parse_extras = false;
|
||||
unsigned int bpp_off = 0, refresh_off = 0, options_off = 0;
|
||||
unsigned int mode_end = 0;
|
||||
- char *bpp_ptr = NULL, *refresh_ptr = NULL, *extra_ptr = NULL;
|
||||
- char *options_ptr = NULL;
|
||||
+ const char *bpp_ptr = NULL, *refresh_ptr = NULL, *extra_ptr = NULL;
|
||||
+ const char *options_ptr = NULL;
|
||||
char *bpp_end_ptr = NULL, *refresh_end_ptr = NULL;
|
||||
int ret;
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
From 0e7c5e80d8d310a881d723a426762e8822d5bf35 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:24 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Stop parsing extras after
|
||||
bpp / refresh at ', '
|
||||
|
||||
Commit c2ed3e941901810ad3d55ce1935fa22c5007fee4 upstream.
|
||||
|
||||
Before this commit it was impossible to add an extra mode argument after
|
||||
a bpp or refresh specifier, combined with an option, e.g.
|
||||
video=HDMI-1:720x480-24e,rotate=180 would not work, either the "e" to
|
||||
force enable would need to be dropped or the ",rotate=180", otherwise
|
||||
the mode_option would not be accepted.
|
||||
|
||||
This commit fixes this by fixing the length calculation if extras_ptr
|
||||
is set to stop the extra parsing at the start of the options (stop at the
|
||||
',' options_ptr points to).
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-3-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 10 ++++---
|
||||
.../gpu/drm/selftests/drm_cmdline_selftests.h | 1 +
|
||||
.../drm/selftests/test-drm_cmdline_parser.c | 26 +++++++++++++++++++
|
||||
3 files changed, 33 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1721,7 +1721,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
const char *bpp_ptr = NULL, *refresh_ptr = NULL, *extra_ptr = NULL;
|
||||
const char *options_ptr = NULL;
|
||||
char *bpp_end_ptr = NULL, *refresh_end_ptr = NULL;
|
||||
- int ret;
|
||||
+ int i, len, ret;
|
||||
|
||||
#ifdef CONFIG_FB
|
||||
if (!mode_option)
|
||||
@@ -1841,9 +1841,11 @@ bool drm_mode_parse_command_line_for_con
|
||||
else if (refresh_ptr)
|
||||
extra_ptr = refresh_end_ptr;
|
||||
|
||||
- if (extra_ptr &&
|
||||
- extra_ptr != options_ptr) {
|
||||
- int len = strlen(name) - (extra_ptr - name);
|
||||
+ if (extra_ptr) {
|
||||
+ if (options_ptr)
|
||||
+ len = options_ptr - extra_ptr;
|
||||
+ else
|
||||
+ len = strlen(extra_ptr);
|
||||
|
||||
ret = drm_mode_parse_cmdline_extra(extra_ptr, len, false,
|
||||
connector, mode);
|
||||
--- a/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
+++ b/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
@@ -60,3 +60,4 @@ cmdline_test(drm_cmdline_test_vmirror)
|
||||
cmdline_test(drm_cmdline_test_margin_options)
|
||||
cmdline_test(drm_cmdline_test_multiple_options)
|
||||
cmdline_test(drm_cmdline_test_invalid_option)
|
||||
+cmdline_test(drm_cmdline_test_bpp_extra_and_option)
|
||||
--- a/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
+++ b/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
@@ -992,6 +992,32 @@ static int drm_cmdline_test_invalid_opti
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int drm_cmdline_test_bpp_extra_and_option(void *ignored)
|
||||
+{
|
||||
+ struct drm_cmdline_mode mode = { };
|
||||
+
|
||||
+ FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24e,rotate=180",
|
||||
+ &no_connector,
|
||||
+ &mode));
|
||||
+ FAIL_ON(!mode.specified);
|
||||
+ FAIL_ON(mode.xres != 720);
|
||||
+ FAIL_ON(mode.yres != 480);
|
||||
+ FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
|
||||
+
|
||||
+ FAIL_ON(mode.refresh_specified);
|
||||
+
|
||||
+ FAIL_ON(!mode.bpp_specified);
|
||||
+ FAIL_ON(mode.bpp != 24);
|
||||
+
|
||||
+ FAIL_ON(mode.rb);
|
||||
+ FAIL_ON(mode.cvt);
|
||||
+ FAIL_ON(mode.interlace);
|
||||
+ FAIL_ON(mode.margins);
|
||||
+ FAIL_ON(mode.force != DRM_FORCE_ON);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#include "drm_selftest.c"
|
||||
|
||||
static int __init test_drm_cmdline_init(void)
|
||||
@ -0,0 +1,77 @@
|
||||
From bc4d8c5519c74b9bdf4d35369ba76bac01be8ca2 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:25 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Accept extras directly
|
||||
after mode combined with options
|
||||
|
||||
Commit cfb0881b8f621b656a9e23b31944a5db94cf5842 upstream.
|
||||
|
||||
Before this commit it was impossible to combine an extra mode argument
|
||||
specified directly after the resolution with an option, e.g.
|
||||
video=HDMI-1:720x480e,rotate=180 would not work, either the "e" to force
|
||||
enable would need to be dropped or the ",rotate=180", otherwise the
|
||||
mode_option would not be accepted.
|
||||
|
||||
This commit fixes this by setting parse_extras to true in this case, so
|
||||
that drm_mode_parse_cmdline_res_mode() parses the extra arguments directly
|
||||
after the resolution.
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-4-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 1 +
|
||||
.../gpu/drm/selftests/drm_cmdline_selftests.h | 1 +
|
||||
.../drm/selftests/test-drm_cmdline_parser.c | 24 +++++++++++++++++++
|
||||
3 files changed, 26 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1794,6 +1794,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
mode_end = refresh_off;
|
||||
} else if (options_ptr) {
|
||||
mode_end = options_off;
|
||||
+ parse_extras = true;
|
||||
} else {
|
||||
mode_end = strlen(name);
|
||||
parse_extras = true;
|
||||
--- a/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
+++ b/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
@@ -61,3 +61,4 @@ cmdline_test(drm_cmdline_test_margin_opt
|
||||
cmdline_test(drm_cmdline_test_multiple_options)
|
||||
cmdline_test(drm_cmdline_test_invalid_option)
|
||||
cmdline_test(drm_cmdline_test_bpp_extra_and_option)
|
||||
+cmdline_test(drm_cmdline_test_extra_and_option)
|
||||
--- a/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
+++ b/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
@@ -1018,6 +1018,30 @@ static int drm_cmdline_test_bpp_extra_an
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int drm_cmdline_test_extra_and_option(void *ignored)
|
||||
+{
|
||||
+ struct drm_cmdline_mode mode = { };
|
||||
+
|
||||
+ FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480e,rotate=180",
|
||||
+ &no_connector,
|
||||
+ &mode));
|
||||
+ FAIL_ON(!mode.specified);
|
||||
+ FAIL_ON(mode.xres != 720);
|
||||
+ FAIL_ON(mode.yres != 480);
|
||||
+ FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
|
||||
+
|
||||
+ FAIL_ON(mode.refresh_specified);
|
||||
+ FAIL_ON(mode.bpp_specified);
|
||||
+
|
||||
+ FAIL_ON(mode.rb);
|
||||
+ FAIL_ON(mode.cvt);
|
||||
+ FAIL_ON(mode.interlace);
|
||||
+ FAIL_ON(mode.margins);
|
||||
+ FAIL_ON(mode.force != DRM_FORCE_ON);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#include "drm_selftest.c"
|
||||
|
||||
static int __init test_drm_cmdline_init(void)
|
||||
@ -0,0 +1,76 @@
|
||||
From 5b6257773b43e7a7b28f86359d2e9ebe15346b78 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:26 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Rework
|
||||
drm_mode_parse_cmdline_options()
|
||||
|
||||
Commit 739b200c2edcaaa7a86f37b0c11db57956433dfb upstream.
|
||||
|
||||
Refactor drm_mode_parse_cmdline_options() so that it takes a pointer
|
||||
to the first option, rather then a pointer to the ',' before the first
|
||||
option.
|
||||
|
||||
This is a preparation patch for allowing parsing of stand-alone options
|
||||
without a mode before them, e.g.: video=HDMI-1:margin_right=14,...
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-5-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 21 +++++++++------------
|
||||
1 file changed, 9 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1591,23 +1591,21 @@ static int drm_mode_parse_cmdline_int(co
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int drm_mode_parse_cmdline_options(const char *str, size_t len,
|
||||
+static int drm_mode_parse_cmdline_options(const char *str,
|
||||
const struct drm_connector *connector,
|
||||
struct drm_cmdline_mode *mode)
|
||||
{
|
||||
unsigned int deg, margin, rotation = 0;
|
||||
- const char *sep = str;
|
||||
+ const char *delim, *option, *sep;
|
||||
|
||||
- while ((sep = strchr(sep, ','))) {
|
||||
- const char *delim, *option;
|
||||
-
|
||||
- option = sep + 1;
|
||||
+ option = str;
|
||||
+ do {
|
||||
delim = strchr(option, '=');
|
||||
if (!delim) {
|
||||
delim = strchr(option, ',');
|
||||
|
||||
if (!delim)
|
||||
- delim = str + len;
|
||||
+ delim = option + strlen(option);
|
||||
}
|
||||
|
||||
if (!strncmp(option, "rotate", delim - option)) {
|
||||
@@ -1661,8 +1659,9 @@ static int drm_mode_parse_cmdline_option
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
- sep = delim;
|
||||
- }
|
||||
+ sep = strchr(delim, ',');
|
||||
+ option = sep + 1;
|
||||
+ } while (sep);
|
||||
|
||||
mode->rotation_reflection = rotation;
|
||||
|
||||
@@ -1855,9 +1854,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
}
|
||||
|
||||
if (options_ptr) {
|
||||
- int len = strlen(name) - (options_ptr - name);
|
||||
-
|
||||
- ret = drm_mode_parse_cmdline_options(options_ptr, len,
|
||||
+ ret = drm_mode_parse_cmdline_options(options_ptr + 1,
|
||||
connector, mode);
|
||||
if (ret)
|
||||
return false;
|
||||
@ -0,0 +1,49 @@
|
||||
From d3c76025a7de614fade5ffcaa8c1d88d8d64213e Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:27 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Add freestanding argument
|
||||
to drm_mode_parse_cmdline_options()
|
||||
|
||||
Commit 99e2716e053734b70434502867be24d20a3e2d84 upstream.
|
||||
|
||||
Add a freestanding function argument to drm_mode_parse_cmdline_options()
|
||||
similar to how drm_mode_parse_cmdline_extra() already has this.
|
||||
|
||||
This is a preparation patch for allowing parsing of stand-alone options
|
||||
without a mode before them, e.g.: video=HDMI-1:margin_right=14,...
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-6-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1592,6 +1592,7 @@ static int drm_mode_parse_cmdline_int(co
|
||||
}
|
||||
|
||||
static int drm_mode_parse_cmdline_options(const char *str,
|
||||
+ bool freestanding,
|
||||
const struct drm_connector *connector,
|
||||
struct drm_cmdline_mode *mode)
|
||||
{
|
||||
@@ -1663,6 +1664,9 @@ static int drm_mode_parse_cmdline_option
|
||||
option = sep + 1;
|
||||
} while (sep);
|
||||
|
||||
+ if (rotation && freestanding)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
mode->rotation_reflection = rotation;
|
||||
|
||||
return 0;
|
||||
@@ -1855,6 +1859,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
|
||||
if (options_ptr) {
|
||||
ret = drm_mode_parse_cmdline_options(options_ptr + 1,
|
||||
+ false,
|
||||
connector, mode);
|
||||
if (ret)
|
||||
return false;
|
||||
@ -0,0 +1,64 @@
|
||||
From 5b7efd2fa0c75164373d6faf28fec4b89065d39c Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:28 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Set bpp/refresh_specified
|
||||
after successful parsing
|
||||
|
||||
Commit 6a2d163756545aa3180d7851d5f8322b865e72be upstream.
|
||||
|
||||
drm_connector_get_cmdline_mode() calls
|
||||
drm_mode_parse_command_line_for_connector() with &connector->cmdline_mode
|
||||
as mode argument, so anything which we store in the mode arguments gets
|
||||
kept even if we return false.
|
||||
|
||||
Avoid storing a possibly false-postive bpp/refresh_specified setting
|
||||
in connector->cmdline_mode by moving the setting of these to after
|
||||
successful parsing of the bpp/refresh parts of the video= argument.
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-7-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1771,10 +1771,8 @@ bool drm_mode_parse_command_line_for_con
|
||||
|
||||
/* Try to locate the bpp and refresh specifiers, if any */
|
||||
bpp_ptr = strchr(name, '-');
|
||||
- if (bpp_ptr) {
|
||||
+ if (bpp_ptr)
|
||||
bpp_off = bpp_ptr - name;
|
||||
- mode->bpp_specified = true;
|
||||
- }
|
||||
|
||||
refresh_ptr = strchr(name, '@');
|
||||
if (refresh_ptr) {
|
||||
@@ -1782,7 +1780,6 @@ bool drm_mode_parse_command_line_for_con
|
||||
return false;
|
||||
|
||||
refresh_off = refresh_ptr - name;
|
||||
- mode->refresh_specified = true;
|
||||
}
|
||||
|
||||
/* Locate the start of named options */
|
||||
@@ -1825,6 +1822,8 @@ bool drm_mode_parse_command_line_for_con
|
||||
ret = drm_mode_parse_cmdline_bpp(bpp_ptr, &bpp_end_ptr, mode);
|
||||
if (ret)
|
||||
return false;
|
||||
+
|
||||
+ mode->bpp_specified = true;
|
||||
}
|
||||
|
||||
if (refresh_ptr) {
|
||||
@@ -1832,6 +1831,8 @@ bool drm_mode_parse_command_line_for_con
|
||||
&refresh_end_ptr, mode);
|
||||
if (ret)
|
||||
return false;
|
||||
+
|
||||
+ mode->refresh_specified = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -0,0 +1,247 @@
|
||||
From b3212eba63b541206e12c8dc31fc0d99d916b210 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:29 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Allow specifying
|
||||
stand-alone options
|
||||
|
||||
Commit 7b1cce760afe38b40f0989cdf10b2190dccf9815 upstream.
|
||||
|
||||
Some options which can be specified on the commandline, such as
|
||||
margin_right=..., margin_left=..., etc. are applied not only to the
|
||||
specified mode, but to all modes. As such it would be nice if the user
|
||||
can simply say e.g.
|
||||
video=HDMI-1:margin_right=14,margin_left=24,margin_bottom=36,margin_top=42
|
||||
|
||||
This commit refactors drm_mode_parse_command_line_for_connector() to
|
||||
add support for this, and as a nice side effect also cleans up the
|
||||
function a bit.
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-8-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 92 +++++++------------
|
||||
.../gpu/drm/selftests/drm_cmdline_selftests.h | 2 +
|
||||
.../drm/selftests/test-drm_cmdline_parser.c | 50 ++++++++++
|
||||
3 files changed, 86 insertions(+), 58 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1677,17 +1677,6 @@ static const char * const drm_named_mode
|
||||
"PAL",
|
||||
};
|
||||
|
||||
-static bool drm_named_mode_is_in_whitelist(const char *mode, unsigned int size)
|
||||
-{
|
||||
- int i;
|
||||
-
|
||||
- for (i = 0; i < ARRAY_SIZE(drm_named_modes_whitelist); i++)
|
||||
- if (!strncmp(mode, drm_named_modes_whitelist[i], size))
|
||||
- return true;
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* drm_mode_parse_command_line_for_connector - parse command line modeline for connector
|
||||
* @mode_option: optional per connector mode option
|
||||
@@ -1718,7 +1707,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
struct drm_cmdline_mode *mode)
|
||||
{
|
||||
const char *name;
|
||||
- bool named_mode = false, parse_extras = false;
|
||||
+ bool freestanding = false, parse_extras = false;
|
||||
unsigned int bpp_off = 0, refresh_off = 0, options_off = 0;
|
||||
unsigned int mode_end = 0;
|
||||
const char *bpp_ptr = NULL, *refresh_ptr = NULL, *extra_ptr = NULL;
|
||||
@@ -1738,49 +1727,14 @@ bool drm_mode_parse_command_line_for_con
|
||||
|
||||
name = mode_option;
|
||||
|
||||
- /*
|
||||
- * This is a bit convoluted. To differentiate between the
|
||||
- * named modes and poorly formatted resolutions, we need a
|
||||
- * bunch of things:
|
||||
- * - We need to make sure that the first character (which
|
||||
- * would be our resolution in X) is a digit.
|
||||
- * - If not, then it's either a named mode or a force on/off.
|
||||
- * To distinguish between the two, we need to run the
|
||||
- * extra parsing function, and if not, then we consider it
|
||||
- * a named mode.
|
||||
- *
|
||||
- * If this isn't enough, we should add more heuristics here,
|
||||
- * and matching unit-tests.
|
||||
- */
|
||||
- if (!isdigit(name[0]) && name[0] != 'x') {
|
||||
- unsigned int namelen = strlen(name);
|
||||
-
|
||||
- /*
|
||||
- * Only the force on/off options can be in that case,
|
||||
- * and they all take a single character.
|
||||
- */
|
||||
- if (namelen == 1) {
|
||||
- ret = drm_mode_parse_cmdline_extra(name, namelen, true,
|
||||
- connector, mode);
|
||||
- if (!ret)
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- named_mode = true;
|
||||
- }
|
||||
-
|
||||
/* Try to locate the bpp and refresh specifiers, if any */
|
||||
bpp_ptr = strchr(name, '-');
|
||||
if (bpp_ptr)
|
||||
bpp_off = bpp_ptr - name;
|
||||
|
||||
refresh_ptr = strchr(name, '@');
|
||||
- if (refresh_ptr) {
|
||||
- if (named_mode)
|
||||
- return false;
|
||||
-
|
||||
+ if (refresh_ptr)
|
||||
refresh_off = refresh_ptr - name;
|
||||
- }
|
||||
|
||||
/* Locate the start of named options */
|
||||
options_ptr = strchr(name, ',');
|
||||
@@ -1800,23 +1754,45 @@ bool drm_mode_parse_command_line_for_con
|
||||
parse_extras = true;
|
||||
}
|
||||
|
||||
- if (named_mode) {
|
||||
- if (mode_end + 1 > DRM_DISPLAY_MODE_LEN)
|
||||
- return false;
|
||||
-
|
||||
- if (!drm_named_mode_is_in_whitelist(name, mode_end))
|
||||
- return false;
|
||||
+ /* First check for a named mode */
|
||||
+ for (i = 0; i < ARRAY_SIZE(drm_named_modes_whitelist); i++) {
|
||||
+ ret = str_has_prefix(name, drm_named_modes_whitelist[i]);
|
||||
+ if (ret == mode_end) {
|
||||
+ if (refresh_ptr)
|
||||
+ return false; /* named + refresh is invalid */
|
||||
+
|
||||
+ strcpy(mode->name, drm_named_modes_whitelist[i]);
|
||||
+ mode->specified = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- strscpy(mode->name, name, mode_end + 1);
|
||||
- } else {
|
||||
+ /* No named mode? Check for a normal mode argument, e.g. 1024x768 */
|
||||
+ if (!mode->specified && isdigit(name[0])) {
|
||||
ret = drm_mode_parse_cmdline_res_mode(name, mode_end,
|
||||
parse_extras,
|
||||
connector,
|
||||
mode);
|
||||
if (ret)
|
||||
return false;
|
||||
+
|
||||
+ mode->specified = true;
|
||||
+ }
|
||||
+
|
||||
+ /* No mode? Check for freestanding extras and/or options */
|
||||
+ if (!mode->specified) {
|
||||
+ unsigned int len = strlen(mode_option);
|
||||
+
|
||||
+ if (bpp_ptr || refresh_ptr)
|
||||
+ return false; /* syntax error */
|
||||
+
|
||||
+ if (len == 1 || (len >= 2 && mode_option[1] == ','))
|
||||
+ extra_ptr = mode_option;
|
||||
+ else
|
||||
+ options_ptr = mode_option - 1;
|
||||
+
|
||||
+ freestanding = true;
|
||||
}
|
||||
- mode->specified = true;
|
||||
|
||||
if (bpp_ptr) {
|
||||
ret = drm_mode_parse_cmdline_bpp(bpp_ptr, &bpp_end_ptr, mode);
|
||||
@@ -1852,7 +1828,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
else
|
||||
len = strlen(extra_ptr);
|
||||
|
||||
- ret = drm_mode_parse_cmdline_extra(extra_ptr, len, false,
|
||||
+ ret = drm_mode_parse_cmdline_extra(extra_ptr, len, freestanding,
|
||||
connector, mode);
|
||||
if (ret)
|
||||
return false;
|
||||
@@ -1860,7 +1836,7 @@ bool drm_mode_parse_command_line_for_con
|
||||
|
||||
if (options_ptr) {
|
||||
ret = drm_mode_parse_cmdline_options(options_ptr + 1,
|
||||
- false,
|
||||
+ freestanding,
|
||||
connector, mode);
|
||||
if (ret)
|
||||
return false;
|
||||
--- a/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
+++ b/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
@@ -62,3 +62,5 @@ cmdline_test(drm_cmdline_test_multiple_o
|
||||
cmdline_test(drm_cmdline_test_invalid_option)
|
||||
cmdline_test(drm_cmdline_test_bpp_extra_and_option)
|
||||
cmdline_test(drm_cmdline_test_extra_and_option)
|
||||
+cmdline_test(drm_cmdline_test_freestanding_options)
|
||||
+cmdline_test(drm_cmdline_test_freestanding_force_e_and_options)
|
||||
--- a/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
+++ b/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
@@ -1042,6 +1042,56 @@ static int drm_cmdline_test_extra_and_op
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int drm_cmdline_test_freestanding_options(void *ignored)
|
||||
+{
|
||||
+ struct drm_cmdline_mode mode = { };
|
||||
+
|
||||
+ FAIL_ON(!drm_mode_parse_command_line_for_connector("margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
|
||||
+ &no_connector,
|
||||
+ &mode));
|
||||
+ FAIL_ON(mode.specified);
|
||||
+ FAIL_ON(mode.refresh_specified);
|
||||
+ FAIL_ON(mode.bpp_specified);
|
||||
+
|
||||
+ FAIL_ON(mode.tv_margins.right != 14);
|
||||
+ FAIL_ON(mode.tv_margins.left != 24);
|
||||
+ FAIL_ON(mode.tv_margins.bottom != 36);
|
||||
+ FAIL_ON(mode.tv_margins.top != 42);
|
||||
+
|
||||
+ FAIL_ON(mode.rb);
|
||||
+ FAIL_ON(mode.cvt);
|
||||
+ FAIL_ON(mode.interlace);
|
||||
+ FAIL_ON(mode.margins);
|
||||
+ FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int drm_cmdline_test_freestanding_force_e_and_options(void *ignored)
|
||||
+{
|
||||
+ struct drm_cmdline_mode mode = { };
|
||||
+
|
||||
+ FAIL_ON(!drm_mode_parse_command_line_for_connector("e,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
|
||||
+ &no_connector,
|
||||
+ &mode));
|
||||
+ FAIL_ON(mode.specified);
|
||||
+ FAIL_ON(mode.refresh_specified);
|
||||
+ FAIL_ON(mode.bpp_specified);
|
||||
+
|
||||
+ FAIL_ON(mode.tv_margins.right != 14);
|
||||
+ FAIL_ON(mode.tv_margins.left != 24);
|
||||
+ FAIL_ON(mode.tv_margins.bottom != 36);
|
||||
+ FAIL_ON(mode.tv_margins.top != 42);
|
||||
+
|
||||
+ FAIL_ON(mode.rb);
|
||||
+ FAIL_ON(mode.cvt);
|
||||
+ FAIL_ON(mode.interlace);
|
||||
+ FAIL_ON(mode.margins);
|
||||
+ FAIL_ON(mode.force != DRM_FORCE_ON);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#include "drm_selftest.c"
|
||||
|
||||
static int __init test_drm_cmdline_init(void)
|
||||
@ -0,0 +1,157 @@
|
||||
From 7d395633947fa6595a117f40e0f27ba87be77d6c Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:30 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Add support for specifying
|
||||
panel_orientation (v2)
|
||||
|
||||
Commit 4e7a4a6fbdc669c44e6079f9d5eb25673749455f upstream.
|
||||
|
||||
Sometimes we want to override a connector's panel_orientation from the
|
||||
kernel commandline. Either for testing and for special cases, e.g. a kiosk
|
||||
like setup which uses a TV mounted in portrait mode.
|
||||
|
||||
Users can already specify a "rotate" option through a video= kernel cmdline
|
||||
option. But that only supports 0/180 degrees (see drm_client_modeset TODO)
|
||||
and only works for in kernel modeset clients, not for userspace kms users.
|
||||
|
||||
The "panel-orientation" connector property OTOH does support 90/270 degrees
|
||||
as it leaves dealing with the rotation up to userspace and this does work
|
||||
for userspace kms clients (at least those which support this property).
|
||||
|
||||
Changes in v2:
|
||||
-Add missing ':' after @panel_orientation (reported by kbuild test robot)
|
||||
|
||||
BugLink: https://gitlab.freedesktop.org/plymouth/plymouth/merge_requests/83
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-9-hdegoede@redhat.com
|
||||
---
|
||||
Documentation/fb/modedb.rst | 3 ++
|
||||
drivers/gpu/drm/drm_modes.c | 32 +++++++++++++++++++
|
||||
.../gpu/drm/selftests/drm_cmdline_selftests.h | 1 +
|
||||
.../drm/selftests/test-drm_cmdline_parser.c | 22 +++++++++++++
|
||||
include/drm/drm_connector.h | 8 +++++
|
||||
5 files changed, 66 insertions(+)
|
||||
|
||||
--- a/Documentation/fb/modedb.rst
|
||||
+++ b/Documentation/fb/modedb.rst
|
||||
@@ -65,6 +65,9 @@ Valid options are::
|
||||
- reflect_y (boolean): Perform an axial symmetry on the Y axis
|
||||
- rotate (integer): Rotate the initial framebuffer by x
|
||||
degrees. Valid values are 0, 90, 180 and 270.
|
||||
+ - panel_orientation, one of "normal", "upside_down", "left_side_up", or
|
||||
+ "right_side_up". For KMS drivers only, this sets the "panel orientation"
|
||||
+ property on the kms connector as hint for kms users.
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1591,6 +1591,33 @@ static int drm_mode_parse_cmdline_int(co
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int drm_mode_parse_panel_orientation(const char *delim,
|
||||
+ struct drm_cmdline_mode *mode)
|
||||
+{
|
||||
+ const char *value;
|
||||
+
|
||||
+ if (*delim != '=')
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ value = delim + 1;
|
||||
+ delim = strchr(value, ',');
|
||||
+ if (!delim)
|
||||
+ delim = value + strlen(value);
|
||||
+
|
||||
+ if (!strncmp(value, "normal", delim - value))
|
||||
+ mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL;
|
||||
+ else if (!strncmp(value, "upside_down", delim - value))
|
||||
+ mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
|
||||
+ else if (!strncmp(value, "left_side_up", delim - value))
|
||||
+ mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP;
|
||||
+ else if (!strncmp(value, "right_side_up", delim - value))
|
||||
+ mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP;
|
||||
+ else
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int drm_mode_parse_cmdline_options(const char *str,
|
||||
bool freestanding,
|
||||
const struct drm_connector *connector,
|
||||
@@ -1657,6 +1684,9 @@ static int drm_mode_parse_cmdline_option
|
||||
return -EINVAL;
|
||||
|
||||
mode->tv_margins.bottom = margin;
|
||||
+ } else if (!strncmp(option, "panel_orientation", delim - option)) {
|
||||
+ if (drm_mode_parse_panel_orientation(delim, mode))
|
||||
+ return -EINVAL;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -1715,6 +1745,8 @@ bool drm_mode_parse_command_line_for_con
|
||||
char *bpp_end_ptr = NULL, *refresh_end_ptr = NULL;
|
||||
int i, len, ret;
|
||||
|
||||
+ mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
|
||||
+
|
||||
#ifdef CONFIG_FB
|
||||
if (!mode_option)
|
||||
mode_option = fb_mode_option;
|
||||
--- a/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
+++ b/drivers/gpu/drm/selftests/drm_cmdline_selftests.h
|
||||
@@ -64,3 +64,4 @@ cmdline_test(drm_cmdline_test_bpp_extra_
|
||||
cmdline_test(drm_cmdline_test_extra_and_option)
|
||||
cmdline_test(drm_cmdline_test_freestanding_options)
|
||||
cmdline_test(drm_cmdline_test_freestanding_force_e_and_options)
|
||||
+cmdline_test(drm_cmdline_test_panel_orientation)
|
||||
--- a/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
+++ b/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
|
||||
@@ -1092,6 +1092,28 @@ static int drm_cmdline_test_freestanding
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int drm_cmdline_test_panel_orientation(void *ignored)
|
||||
+{
|
||||
+ struct drm_cmdline_mode mode = { };
|
||||
+
|
||||
+ FAIL_ON(!drm_mode_parse_command_line_for_connector("panel_orientation=upside_down",
|
||||
+ &no_connector,
|
||||
+ &mode));
|
||||
+ FAIL_ON(mode.specified);
|
||||
+ FAIL_ON(mode.refresh_specified);
|
||||
+ FAIL_ON(mode.bpp_specified);
|
||||
+
|
||||
+ FAIL_ON(mode.panel_orientation != DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP);
|
||||
+
|
||||
+ FAIL_ON(mode.rb);
|
||||
+ FAIL_ON(mode.cvt);
|
||||
+ FAIL_ON(mode.interlace);
|
||||
+ FAIL_ON(mode.margins);
|
||||
+ FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#include "drm_selftest.c"
|
||||
|
||||
static int __init test_drm_cmdline_init(void)
|
||||
--- a/include/drm/drm_connector.h
|
||||
+++ b/include/drm/drm_connector.h
|
||||
@@ -1066,6 +1066,14 @@ struct drm_cmdline_mode {
|
||||
unsigned int rotation_reflection;
|
||||
|
||||
/**
|
||||
+ * @panel_orientation:
|
||||
+ *
|
||||
+ * drm-connector "panel orientation" property override value,
|
||||
+ * DRM_MODE_PANEL_ORIENTATION_UNKNOWN if not set.
|
||||
+ */
|
||||
+ enum drm_panel_orientation panel_orientation;
|
||||
+
|
||||
+ /**
|
||||
* @tv_margins: TV margins to apply to the mode.
|
||||
*/
|
||||
struct drm_connector_tv_margins tv_margins;
|
||||
@ -0,0 +1,38 @@
|
||||
From 339666068713986cfe1456175dd8a7514f6ed2ab Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:31 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Remove some unnecessary
|
||||
code (v2)
|
||||
|
||||
Commit 5b926617cdef41ce0696e09834991194b1759e28 upstream.
|
||||
|
||||
fb_get_options() will return fb_mode_option if no video=<connector-name>
|
||||
argument is present on the kernel commandline, so there is no need to also
|
||||
do this in drm_mode_parse_command_line_for_connector() as our only caller
|
||||
uses fb_get_options() to get the mode_option argument.
|
||||
|
||||
Changes in v2:
|
||||
-Split out the changes dealing with the initialization of the mode struct
|
||||
into a separate patch
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-10-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 5 -----
|
||||
1 file changed, 5 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1747,11 +1747,6 @@ bool drm_mode_parse_command_line_for_con
|
||||
|
||||
mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
|
||||
|
||||
-#ifdef CONFIG_FB
|
||||
- if (!mode_option)
|
||||
- mode_option = fb_mode_option;
|
||||
-#endif
|
||||
-
|
||||
if (!mode_option) {
|
||||
mode->specified = false;
|
||||
return false;
|
||||
@ -0,0 +1,41 @@
|
||||
From d89b3f22cf7b6bba8081f6d16c9087019fdcf586 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 18 Nov 2019 16:51:32 +0100
|
||||
Subject: [PATCH] drm/modes: parse_cmdline: Explicitly memset the
|
||||
passed in drm_cmdline_mode struct
|
||||
|
||||
Commit d1fe276b5115f0d581c3cfe6154633b3547e8aab upstream.
|
||||
|
||||
Instead of only setting mode->specified on false on an early exit and
|
||||
leaving e.g. mode->bpp_specified and mode->refresh_specified as is,
|
||||
lets be consistent and just zero out the entire passed in struct at
|
||||
the top of drm_mode_parse_command_line_for_connector()
|
||||
|
||||
Changes in v3:
|
||||
-Drop "mode->specified = false;" line instead of the "return false;" (oops)
|
||||
This crasher was reported-by: kernel test robot <lkp@intel.com>
|
||||
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-11-hdegoede@redhat.com
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1745,12 +1745,11 @@ bool drm_mode_parse_command_line_for_con
|
||||
char *bpp_end_ptr = NULL, *refresh_end_ptr = NULL;
|
||||
int i, len, ret;
|
||||
|
||||
+ memset(mode, 0, sizeof(*mode));
|
||||
mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
|
||||
|
||||
- if (!mode_option) {
|
||||
- mode->specified = false;
|
||||
+ if (!mode_option)
|
||||
return false;
|
||||
- }
|
||||
|
||||
name = mode_option;
|
||||
|
||||
@ -122,6 +122,7 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||
CONFIG_VIA_RHINE=y
|
||||
CONFIG_VIA_RHINE_MMIO=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
# CONFIG_WDT is not set
|
||||
# CONFIG_X86_ACPI_CPUFREQ is not set
|
||||
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
||||
|
||||
@ -122,6 +122,7 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||
CONFIG_VIA_RHINE=y
|
||||
CONFIG_VIA_RHINE_MMIO=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
# CONFIG_WDT is not set
|
||||
# CONFIG_X86_ACPI_CPUFREQ is not set
|
||||
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
BOARDNAME:=AMD Geode based systems
|
||||
FEATURES:=pci usb gpio
|
||||
FEATURES += pci usb gpio
|
||||
DEFAULT_PACKAGES += \
|
||||
kmod-crypto-hw-geode kmod-crypto-cbc \
|
||||
kmod-ath5k kmod-ath9k \
|
||||
|
||||
@ -128,6 +128,10 @@ ifeq ($(SUBTARGET),generic)
|
||||
include generic.mk
|
||||
endif
|
||||
|
||||
ifeq ($(SUBTARGET),geode)
|
||||
include geode.mk
|
||||
endif
|
||||
|
||||
ifeq ($(SUBTARGET),legacy)
|
||||
include legacy.mk
|
||||
endif
|
||||
|
||||
@ -206,6 +206,7 @@ CONFIG_USB_STORAGE=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||
# CONFIG_VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT is not set
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
# CONFIG_WDT is not set
|
||||
CONFIG_X86_ACPI_CPUFREQ=y
|
||||
# CONFIG_X86_ACPI_CPUFREQ_CPB is not set
|
||||
|
||||
@ -206,6 +206,7 @@ CONFIG_USB_STORAGE=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||
# CONFIG_VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT is not set
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
# CONFIG_WDT is not set
|
||||
CONFIG_X86_ACPI_CPUFREQ=y
|
||||
# CONFIG_X86_ACPI_CPUFREQ_CPB is not set
|
||||
|
||||
Loading…
Reference in New Issue
Block a user