motorola-nash: new device (Moto Z2 Force) (MR 1567)
This commit is contained in:
parent
9db239a9d8
commit
da72051070
11 changed files with 6696 additions and 0 deletions
22
device/testing/device-motorola-nash/APKBUILD
Normal file
22
device/testing/device-motorola-nash/APKBUILD
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Reference: <https://postmarketos.org/devicepkg>
|
||||
pkgname=device-motorola-nash
|
||||
pkgdesc="Motorola Moto Z2 Force"
|
||||
pkgver=0.1
|
||||
pkgrel=0
|
||||
url="https://postmarketos.org"
|
||||
license="MIT"
|
||||
arch="aarch64"
|
||||
options="!check !archcheck"
|
||||
depends="postmarketos-base linux-motorola-nash mkbootimg mesa-dri-gallium msm-fb-refresher"
|
||||
makedepends="devicepkg-dev"
|
||||
source="deviceinfo"
|
||||
|
||||
build() {
|
||||
devicepkg_build $startdir $pkgname
|
||||
}
|
||||
|
||||
package() {
|
||||
devicepkg_package $startdir $pkgname
|
||||
}
|
||||
|
||||
sha512sums="3b33d954b4d1eddd1c613d51b19d44dd9e4f775c3e05d4f9bc74e907ea7dec33ff8d45f1cba8f12467d25c03aeccba7b1cb131a800d84207945a6af6e0cc6a90 deviceinfo"
|
35
device/testing/device-motorola-nash/deviceinfo
Normal file
35
device/testing/device-motorola-nash/deviceinfo
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Reference: <https://postmarketos.org/deviceinfo>
|
||||
# Please use double quotes only. You can source this file in shell scripts.
|
||||
|
||||
deviceinfo_format_version="0"
|
||||
deviceinfo_name="Motorola Moto Z2 Force"
|
||||
deviceinfo_manufacturer="Motorola"
|
||||
deviceinfo_codename="motorola-nash"
|
||||
deviceinfo_year="2017"
|
||||
deviceinfo_dtb=""
|
||||
deviceinfo_modules_initfs=""
|
||||
deviceinfo_arch="aarch64"
|
||||
|
||||
# Device related
|
||||
deviceinfo_chassis="handset"
|
||||
deviceinfo_keyboard="false"
|
||||
deviceinfo_external_storage="true"
|
||||
deviceinfo_screen_width="1440"
|
||||
deviceinfo_screen_height="2560"
|
||||
|
||||
# Bootloader related
|
||||
deviceinfo_flash_method="fastboot"
|
||||
deviceinfo_kernel_cmdline="console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc1b0000 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x237 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 sched_enable_hmp=1 sched_enable_power_aware=1 service_locator.enable=1 swiotlb=2048 androidboot.configfs=true androidboot.usbcontroller=a800000.dwc3 androidboot.hab.csv=4 androidboot.hab.product=nash androidboot.hab.cid=50 androidboot.fastboot=1 buildvariant=eng "
|
||||
deviceinfo_generate_bootimg="true"
|
||||
deviceinfo_bootimg_qcdt="false"
|
||||
deviceinfo_bootimg_dtb_second="false"
|
||||
deviceinfo_flash_offset_base="0x00000000"
|
||||
deviceinfo_flash_offset_kernel="0x00008000"
|
||||
deviceinfo_flash_offset_ramdisk="0x01000000"
|
||||
deviceinfo_flash_offset_second="0x00f00000"
|
||||
deviceinfo_flash_offset_tags="0x00000100"
|
||||
deviceinfo_flash_pagesize="4096"
|
||||
deviceinfo_flash_sparse="true"
|
||||
|
||||
# USB related
|
||||
deviceinfo_usb_rndis_function="rndis.gs4"
|
|
@ -0,0 +1,561 @@
|
|||
diff --git a/drivers/usb/gadget/function/ci13xxx_udc.h b/drivers/usb/gadget/function/ci13xxx_udc.h
|
||||
new file mode 100644
|
||||
index 0000000..7983bfd
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/gadget/function/ci13xxx_udc.h
|
||||
@@ -0,0 +1,280 @@
|
||||
+/*
|
||||
+ * ci13xxx_udc.h - structures, registers, and macros MIPS USB IP core
|
||||
+ *
|
||||
+ * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
|
||||
+ *
|
||||
+ * Author: David Lopo
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * Description: MIPS USB IP core family device controller
|
||||
+ * Structures, registers and logging macros
|
||||
+ */
|
||||
+
|
||||
+#ifndef _CI13XXX_h_
|
||||
+#define _CI13XXX_h_
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * DEFINE
|
||||
+ *****************************************************************************/
|
||||
+#define CI13XXX_PAGE_SIZE 4096ul /* page size for TD's */
|
||||
+#define ENDPT_MAX (32)
|
||||
+#define CTRL_PAYLOAD_MAX (64)
|
||||
+#define RX (0) /* similar to USB_DIR_OUT but can be used as an index */
|
||||
+#define TX (1) /* similar to USB_DIR_IN but can be used as an index */
|
||||
+
|
||||
+/* UDC private data:
|
||||
+ * 16MSb - Vendor ID | 16 LSb Vendor private data
|
||||
+ */
|
||||
+#define CI13XX_REQ_VENDOR_ID(id) (id & 0xFFFF0000UL)
|
||||
+
|
||||
+#define MSM_ETD_TYPE BIT(1)
|
||||
+#define MSM_EP_PIPE_ID_RESET_VAL 0x1F001F
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * STRUCTURES
|
||||
+ *****************************************************************************/
|
||||
+/* DMA layout of transfer descriptors */
|
||||
+struct ci13xxx_td {
|
||||
+ /* 0 */
|
||||
+ u32 next;
|
||||
+#define TD_TERMINATE BIT(0)
|
||||
+#define TD_ADDR_MASK (0xFFFFFFEUL << 5)
|
||||
+ /* 1 */
|
||||
+ u32 token;
|
||||
+#define TD_STATUS (0x00FFUL << 0)
|
||||
+#define TD_STATUS_TR_ERR BIT(3)
|
||||
+#define TD_STATUS_DT_ERR BIT(5)
|
||||
+#define TD_STATUS_HALTED BIT(6)
|
||||
+#define TD_STATUS_ACTIVE BIT(7)
|
||||
+#define TD_MULTO (0x0003UL << 10)
|
||||
+#define TD_IOC BIT(15)
|
||||
+#define TD_TOTAL_BYTES (0x7FFFUL << 16)
|
||||
+ /* 2 */
|
||||
+ u32 page[5];
|
||||
+#define TD_CURR_OFFSET (0x0FFFUL << 0)
|
||||
+#define TD_FRAME_NUM (0x07FFUL << 0)
|
||||
+#define TD_RESERVED_MASK (0x0FFFUL << 0)
|
||||
+} __attribute__ ((packed, aligned(4)));
|
||||
+
|
||||
+/* DMA layout of queue heads */
|
||||
+struct ci13xxx_qh {
|
||||
+ /* 0 */
|
||||
+ u32 cap;
|
||||
+#define QH_IOS BIT(15)
|
||||
+#define QH_MAX_PKT (0x07FFUL << 16)
|
||||
+#define QH_ZLT BIT(29)
|
||||
+#define QH_MULT (0x0003UL << 30)
|
||||
+#define QH_MULT_SHIFT 11
|
||||
+ /* 1 */
|
||||
+ u32 curr;
|
||||
+ /* 2 - 8 */
|
||||
+ struct ci13xxx_td td;
|
||||
+ /* 9 */
|
||||
+ u32 RESERVED;
|
||||
+ struct usb_ctrlrequest setup;
|
||||
+} __attribute__ ((packed, aligned(4)));
|
||||
+
|
||||
+/* cache of larger request's original attributes */
|
||||
+struct ci13xxx_multi_req {
|
||||
+ unsigned len;
|
||||
+ unsigned actual;
|
||||
+ void *buf;
|
||||
+};
|
||||
+
|
||||
+/* Extension of usb_request */
|
||||
+struct ci13xxx_req {
|
||||
+ struct usb_request req;
|
||||
+ unsigned map;
|
||||
+ struct list_head queue;
|
||||
+ struct ci13xxx_td *ptr;
|
||||
+ dma_addr_t dma;
|
||||
+ struct ci13xxx_td *zptr;
|
||||
+ dma_addr_t zdma;
|
||||
+ struct ci13xxx_multi_req multi;
|
||||
+};
|
||||
+
|
||||
+/* Extension of usb_ep */
|
||||
+struct ci13xxx_ep {
|
||||
+ struct usb_ep ep;
|
||||
+ const struct usb_endpoint_descriptor *desc;
|
||||
+ u8 dir;
|
||||
+ u8 num;
|
||||
+ u8 type;
|
||||
+ char name[16];
|
||||
+ struct {
|
||||
+ struct list_head queue;
|
||||
+ struct ci13xxx_qh *ptr;
|
||||
+ dma_addr_t dma;
|
||||
+ } qh;
|
||||
+ struct list_head rw_queue;
|
||||
+ int wedge;
|
||||
+
|
||||
+ /* global resources */
|
||||
+ spinlock_t *lock;
|
||||
+ struct device *device;
|
||||
+ struct dma_pool *td_pool;
|
||||
+ struct ci13xxx_td *last_zptr;
|
||||
+ dma_addr_t last_zdma;
|
||||
+ unsigned long dTD_update_fail_count;
|
||||
+ unsigned long dTD_active_re_q_count;
|
||||
+ unsigned long prime_fail_count;
|
||||
+ int prime_timer_count;
|
||||
+ struct timer_list prime_timer;
|
||||
+
|
||||
+ bool multi_req;
|
||||
+};
|
||||
+
|
||||
+struct ci13xxx;
|
||||
+struct ci13xxx_udc_driver {
|
||||
+ const char *name;
|
||||
+ unsigned long flags;
|
||||
+ unsigned int nz_itc;
|
||||
+#define CI13XXX_REGS_SHARED BIT(0)
|
||||
+#define CI13XXX_REQUIRE_TRANSCEIVER BIT(1)
|
||||
+#define CI13XXX_PULLUP_ON_VBUS BIT(2)
|
||||
+#define CI13XXX_DISABLE_STREAMING BIT(3)
|
||||
+#define CI13XXX_ZERO_ITC BIT(4)
|
||||
+#define CI13XXX_ENABLE_AHB2AHB_BYPASS BIT(6)
|
||||
+
|
||||
+#define CI13XXX_CONTROLLER_RESET_EVENT 0
|
||||
+#define CI13XXX_CONTROLLER_CONNECT_EVENT 1
|
||||
+#define CI13XXX_CONTROLLER_SUSPEND_EVENT 2
|
||||
+#define CI13XXX_CONTROLLER_REMOTE_WAKEUP_EVENT 3
|
||||
+#define CI13XXX_CONTROLLER_RESUME_EVENT 4
|
||||
+#define CI13XXX_CONTROLLER_DISCONNECT_EVENT 5
|
||||
+#define CI13XXX_CONTROLLER_UDC_STARTED_EVENT 6
|
||||
+#define CI13XXX_CONTROLLER_ERROR_EVENT 7
|
||||
+
|
||||
+ void (*notify_event)(struct ci13xxx *udc, unsigned event);
|
||||
+ bool (*in_lpm)(struct ci13xxx *udc);
|
||||
+};
|
||||
+
|
||||
+/* CI13XXX UDC descriptor & global resources */
|
||||
+struct ci13xxx {
|
||||
+ spinlock_t *lock; /* ctrl register bank access */
|
||||
+ void __iomem *regs; /* registers address space */
|
||||
+
|
||||
+ struct dma_pool *qh_pool; /* DMA pool for queue heads */
|
||||
+ struct dma_pool *td_pool; /* DMA pool for transfer descs */
|
||||
+ struct usb_request *status; /* ep0 status request */
|
||||
+ void *status_buf;/* GET_STATUS buffer */
|
||||
+
|
||||
+ struct usb_gadget gadget; /* USB slave device */
|
||||
+ struct ci13xxx_ep ci13xxx_ep[ENDPT_MAX]; /* extended endpts */
|
||||
+ u32 ep0_dir; /* ep0 direction */
|
||||
+#define ep0out ci13xxx_ep[0]
|
||||
+#define ep0in ci13xxx_ep[hw_ep_max / 2]
|
||||
+ u8 suspended; /* suspended by the host */
|
||||
+ u8 configured; /* is device configured */
|
||||
+ u8 test_mode; /* the selected test mode */
|
||||
+ bool rw_pending; /* Remote wakeup pending flag */
|
||||
+ struct delayed_work rw_work; /* remote wakeup delayed work */
|
||||
+ struct usb_gadget_driver *driver; /* 3rd party gadget driver */
|
||||
+ struct ci13xxx_udc_driver *udc_driver; /* device controller driver */
|
||||
+ int vbus_active; /* is VBUS active */
|
||||
+ int softconnect; /* is pull-up enable allowed */
|
||||
+ unsigned long dTD_update_fail_count;
|
||||
+ struct usb_phy *transceiver; /* Transceiver struct */
|
||||
+ bool skip_flush; /* skip flushing remaining EP
|
||||
+ upon flush timeout for the
|
||||
+ first EP. */
|
||||
+};
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * REGISTERS
|
||||
+ *****************************************************************************/
|
||||
+/* register size */
|
||||
+#define REG_BITS (32)
|
||||
+
|
||||
+/* HCCPARAMS */
|
||||
+#define HCCPARAMS_LEN BIT(17)
|
||||
+
|
||||
+/* DCCPARAMS */
|
||||
+#define DCCPARAMS_DEN (0x1F << 0)
|
||||
+#define DCCPARAMS_DC BIT(7)
|
||||
+
|
||||
+/* TESTMODE */
|
||||
+#define TESTMODE_FORCE BIT(0)
|
||||
+
|
||||
+/* AHB_MODE */
|
||||
+#define AHB2AHB_BYPASS BIT(31)
|
||||
+
|
||||
+/* USBCMD */
|
||||
+#define USBCMD_RS BIT(0)
|
||||
+#define USBCMD_RST BIT(1)
|
||||
+#define USBCMD_SUTW BIT(13)
|
||||
+#define USBCMD_ATDTW BIT(14)
|
||||
+
|
||||
+/* USBSTS & USBINTR */
|
||||
+#define USBi_UI BIT(0)
|
||||
+#define USBi_UEI BIT(1)
|
||||
+#define USBi_PCI BIT(2)
|
||||
+#define USBi_URI BIT(6)
|
||||
+#define USBi_SLI BIT(8)
|
||||
+
|
||||
+/* DEVICEADDR */
|
||||
+#define DEVICEADDR_USBADRA BIT(24)
|
||||
+#define DEVICEADDR_USBADR (0x7FUL << 25)
|
||||
+
|
||||
+/* PORTSC */
|
||||
+#define PORTSC_FPR BIT(6)
|
||||
+#define PORTSC_SUSP BIT(7)
|
||||
+#define PORTSC_PR BIT(8)
|
||||
+#define PORTSC_HSP BIT(9)
|
||||
+#define PORTSC_PTC (0x0FUL << 16)
|
||||
+
|
||||
+/* DEVLC */
|
||||
+#define DEVLC_PSPD (0x03UL << 25)
|
||||
+#define DEVLC_PSPD_HS (0x02UL << 25)
|
||||
+
|
||||
+/* USBMODE */
|
||||
+#define USBMODE_CM (0x03UL << 0)
|
||||
+#define USBMODE_CM_IDLE (0x00UL << 0)
|
||||
+#define USBMODE_CM_DEVICE (0x02UL << 0)
|
||||
+#define USBMODE_CM_HOST (0x03UL << 0)
|
||||
+#define USBMODE_SLOM BIT(3)
|
||||
+#define USBMODE_SDIS BIT(4)
|
||||
+#define USBCMD_ITC(n) (n << 16) /* n = 0, 1, 2, 4, 8, 16, 32, 64 */
|
||||
+#define USBCMD_ITC_MASK (0xFF << 16)
|
||||
+
|
||||
+/* ENDPTCTRL */
|
||||
+#define ENDPTCTRL_RXS BIT(0)
|
||||
+#define ENDPTCTRL_RXT (0x03UL << 2)
|
||||
+#define ENDPTCTRL_RXR BIT(6) /* reserved for port 0 */
|
||||
+#define ENDPTCTRL_RXE BIT(7)
|
||||
+#define ENDPTCTRL_TXS BIT(16)
|
||||
+#define ENDPTCTRL_TXT (0x03UL << 18)
|
||||
+#define ENDPTCTRL_TXR BIT(22) /* reserved for port 0 */
|
||||
+#define ENDPTCTRL_TXE BIT(23)
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * LOGGING
|
||||
+ *****************************************************************************/
|
||||
+#define ci13xxx_printk(level, format, args...) \
|
||||
+do { \
|
||||
+ if (_udc == NULL) \
|
||||
+ printk(level "[%s] " format "\n", __func__, ## args); \
|
||||
+ else \
|
||||
+ dev_printk(level, _udc->gadget.dev.parent, \
|
||||
+ "[%s] " format "\n", __func__, ## args); \
|
||||
+} while (0)
|
||||
+
|
||||
+#ifndef err
|
||||
+#define err(format, args...) ci13xxx_printk(KERN_ERR, format, ## args)
|
||||
+#endif
|
||||
+
|
||||
+#define warn(format, args...) ci13xxx_printk(KERN_WARNING, format, ## args)
|
||||
+#define info(format, args...) ci13xxx_printk(KERN_INFO, format, ## args)
|
||||
+
|
||||
+#ifdef TRACE
|
||||
+#define trace(format, args...) ci13xxx_printk(KERN_DEBUG, format, ## args)
|
||||
+#define dbg_trace(format, args...) dev_dbg(dev, format, ##args)
|
||||
+#else
|
||||
+#define trace(format, args...) do {} while (0)
|
||||
+#define dbg_trace(format, args...) do {} while (0)
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _CI13XXX_h_ */
|
||||
diff --git a/drivers/usb/gadget/function/configfs.h b/drivers/usb/gadget/function/configfs.h
|
||||
new file mode 100644
|
||||
index 0000000..36c468c
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/gadget/function/configfs.h
|
||||
@@ -0,0 +1,19 @@
|
||||
+#ifndef USB__GADGET__CONFIGFS__H
|
||||
+#define USB__GADGET__CONFIGFS__H
|
||||
+
|
||||
+#include <linux/configfs.h>
|
||||
+
|
||||
+void unregister_gadget_item(struct config_item *item);
|
||||
+
|
||||
+int usb_os_desc_prepare_interf_dir(struct config_group *parent,
|
||||
+ int n_interf,
|
||||
+ struct usb_os_desc **desc,
|
||||
+ char **names,
|
||||
+ struct module *owner);
|
||||
+
|
||||
+static inline struct usb_os_desc *to_usb_os_desc(struct config_item *item)
|
||||
+{
|
||||
+ return container_of(to_config_group(item), struct usb_os_desc, group);
|
||||
+}
|
||||
+
|
||||
+#endif /* USB__GADGET__CONFIGFS__H */
|
||||
diff --git a/drivers/usb/gadget/function/debug.h b/drivers/usb/gadget/function/debug.h
|
||||
new file mode 100644
|
||||
index 0000000..8729aca
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/gadget/function/debug.h
|
||||
@@ -0,0 +1,55 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 and
|
||||
+ * only version 2 as published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#ifndef __DEBUG_H_
|
||||
+#define __DEBUG_H_
|
||||
+
|
||||
+#define DBG_MAX_MSG 1024UL
|
||||
+#define DBG_MSG_LEN 80UL
|
||||
+#define TIME_BUF_LEN 17
|
||||
+#define DBG_EVENT_LEN (DBG_MSG_LEN - TIME_BUF_LEN)
|
||||
+
|
||||
+extern unsigned int enable_event_log;
|
||||
+extern void put_timestamp(char *tbuf);
|
||||
+extern void add_event_to_buf(char *tbuf);
|
||||
+extern int debug_debugfs_init(void);
|
||||
+extern void debug_debugfs_exit(void);
|
||||
+
|
||||
+#define LOGLEVEL_NONE 8
|
||||
+#define LOGLEVEL_DEBUG 7
|
||||
+#define LOGLEVEL_INFO 6
|
||||
+#define LOGLEVEL_ERR 3
|
||||
+
|
||||
+#define log_event(log_level, x...) \
|
||||
+do { \
|
||||
+ char buf[DBG_MSG_LEN]; \
|
||||
+ if (log_level == LOGLEVEL_DEBUG) \
|
||||
+ pr_debug(x); \
|
||||
+ else if (log_level == LOGLEVEL_ERR) \
|
||||
+ pr_err(x); \
|
||||
+ else if (log_level == LOGLEVEL_INFO) \
|
||||
+ pr_info(x); \
|
||||
+ if (enable_event_log) { \
|
||||
+ put_timestamp(buf); \
|
||||
+ snprintf(&buf[TIME_BUF_LEN - 1], DBG_EVENT_LEN, x); \
|
||||
+ add_event_to_buf(buf); \
|
||||
+ } \
|
||||
+} while (0)
|
||||
+
|
||||
+#define log_event_none(x, ...) log_event(LOGLEVEL_NONE, x, ##__VA_ARGS__)
|
||||
+#define log_event_dbg(x, ...) log_event(LOGLEVEL_DEBUG, x, ##__VA_ARGS__)
|
||||
+#define log_event_err(x, ...) log_event(LOGLEVEL_ERR, x, ##__VA_ARGS__)
|
||||
+#define log_event_info(x, ...) log_event(LOGLEVEL_INFO, x, ##__VA_ARGS__)
|
||||
+
|
||||
+#endif /* __DEBUG_H_ */
|
||||
diff --git a/drivers/usb/gadget/function/f_ccid.h b/drivers/usb/gadget/function/f_ccid.h
|
||||
index 935308cf..e74da305 100644
|
||||
--- a/drivers/usb/gadget/function/f_ccid.h
|
||||
+++ b/drivers/usb/gadget/function/f_ccid.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2011, 2017 The Linux Foundation. All rights reserved.
|
||||
+ * Copyright (c) 2011, The Linux Foundation. All rights reserved.
|
||||
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
@@ -55,29 +55,29 @@
|
||||
#define CCID_READ_DTR _IOR('C', 3, int)
|
||||
|
||||
struct usb_ccid_notification {
|
||||
- __u8 buf[4];
|
||||
+ unsigned char buf[4];
|
||||
} __packed;
|
||||
|
||||
struct ccid_bulk_in_header {
|
||||
- __u8 bMessageType;
|
||||
- __u32 wLength;
|
||||
- __u8 bSlot;
|
||||
- __u8 bSeq;
|
||||
- __u8 bStatus;
|
||||
- __u8 bError;
|
||||
- __u8 bSpecific;
|
||||
- __u8 abData[ABDATA_SIZE];
|
||||
- __u8 bSizeToSend;
|
||||
+ unsigned char bMessageType;
|
||||
+ unsigned long wLength;
|
||||
+ unsigned char bSlot;
|
||||
+ unsigned char bSeq;
|
||||
+ unsigned char bStatus;
|
||||
+ unsigned char bError;
|
||||
+ unsigned char bSpecific;
|
||||
+ unsigned char abData[ABDATA_SIZE];
|
||||
+ unsigned char bSizeToSend;
|
||||
} __packed;
|
||||
|
||||
struct ccid_bulk_out_header {
|
||||
- __u8 bMessageType;
|
||||
- __u32 wLength;
|
||||
- __u8 bSlot;
|
||||
- __u8 bSeq;
|
||||
- __u8 bSpecific_0;
|
||||
- __u8 bSpecific_1;
|
||||
- __u8 bSpecific_2;
|
||||
- __u8 APDU[ABDATA_SIZE];
|
||||
+ unsigned char bMessageType;
|
||||
+ unsigned long wLength;
|
||||
+ unsigned char bSlot;
|
||||
+ unsigned char bSeq;
|
||||
+ unsigned char bSpecific_0;
|
||||
+ unsigned char bSpecific_1;
|
||||
+ unsigned char bSpecific_2;
|
||||
+ unsigned char APDU[ABDATA_SIZE];
|
||||
} __packed;
|
||||
-#endif
|
||||
+#endif
|
||||
diff --git a/drivers/usb/gadget/function/u_os_desc.h b/drivers/usb/gadget/function/u_os_desc.h
|
||||
new file mode 100644
|
||||
index 0000000..947b7dd
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/gadget/function/u_os_desc.h
|
||||
@@ -0,0 +1,123 @@
|
||||
+/*
|
||||
+ * u_os_desc.h
|
||||
+ *
|
||||
+ * Utility definitions for "OS Descriptors" support
|
||||
+ *
|
||||
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
|
||||
+ * http://www.samsung.com
|
||||
+ *
|
||||
+ * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#ifndef __U_OS_DESC_H__
|
||||
+#define __U_OS_DESC_H__
|
||||
+
|
||||
+#include <asm/unaligned.h>
|
||||
+#include <linux/nls.h>
|
||||
+
|
||||
+#define USB_EXT_PROP_DW_SIZE 0
|
||||
+#define USB_EXT_PROP_DW_PROPERTY_DATA_TYPE 4
|
||||
+#define USB_EXT_PROP_W_PROPERTY_NAME_LENGTH 8
|
||||
+#define USB_EXT_PROP_B_PROPERTY_NAME 10
|
||||
+#define USB_EXT_PROP_DW_PROPERTY_DATA_LENGTH 10
|
||||
+#define USB_EXT_PROP_B_PROPERTY_DATA 14
|
||||
+
|
||||
+#define USB_EXT_PROP_RESERVED 0
|
||||
+#define USB_EXT_PROP_UNICODE 1
|
||||
+#define USB_EXT_PROP_UNICODE_ENV 2
|
||||
+#define USB_EXT_PROP_BINARY 3
|
||||
+#define USB_EXT_PROP_LE32 4
|
||||
+#define USB_EXT_PROP_BE32 5
|
||||
+#define USB_EXT_PROP_UNICODE_LINK 6
|
||||
+#define USB_EXT_PROP_UNICODE_MULTI 7
|
||||
+
|
||||
+static inline u8 *__usb_ext_prop_ptr(u8 *buf, size_t offset)
|
||||
+{
|
||||
+ return buf + offset;
|
||||
+}
|
||||
+
|
||||
+static inline u8 *usb_ext_prop_size_ptr(u8 *buf)
|
||||
+{
|
||||
+ return __usb_ext_prop_ptr(buf, USB_EXT_PROP_DW_SIZE);
|
||||
+}
|
||||
+
|
||||
+static inline u8 *usb_ext_prop_type_ptr(u8 *buf)
|
||||
+{
|
||||
+ return __usb_ext_prop_ptr(buf, USB_EXT_PROP_DW_PROPERTY_DATA_TYPE);
|
||||
+}
|
||||
+
|
||||
+static inline u8 *usb_ext_prop_name_len_ptr(u8 *buf)
|
||||
+{
|
||||
+ return __usb_ext_prop_ptr(buf, USB_EXT_PROP_W_PROPERTY_NAME_LENGTH);
|
||||
+}
|
||||
+
|
||||
+static inline u8 *usb_ext_prop_name_ptr(u8 *buf)
|
||||
+{
|
||||
+ return __usb_ext_prop_ptr(buf, USB_EXT_PROP_B_PROPERTY_NAME);
|
||||
+}
|
||||
+
|
||||
+static inline u8 *usb_ext_prop_data_len_ptr(u8 *buf, size_t off)
|
||||
+{
|
||||
+ return __usb_ext_prop_ptr(buf,
|
||||
+ USB_EXT_PROP_DW_PROPERTY_DATA_LENGTH + off);
|
||||
+}
|
||||
+
|
||||
+static inline u8 *usb_ext_prop_data_ptr(u8 *buf, size_t off)
|
||||
+{
|
||||
+ return __usb_ext_prop_ptr(buf, USB_EXT_PROP_B_PROPERTY_DATA + off);
|
||||
+}
|
||||
+
|
||||
+static inline void usb_ext_prop_put_size(u8 *buf, int dw_size)
|
||||
+{
|
||||
+ put_unaligned_le32(dw_size, usb_ext_prop_size_ptr(buf));
|
||||
+}
|
||||
+
|
||||
+static inline void usb_ext_prop_put_type(u8 *buf, int type)
|
||||
+{
|
||||
+ put_unaligned_le32(type, usb_ext_prop_type_ptr(buf));
|
||||
+}
|
||||
+
|
||||
+static inline int usb_ext_prop_put_name(u8 *buf, const char *name, int pnl)
|
||||
+{
|
||||
+ int result;
|
||||
+
|
||||
+ put_unaligned_le16(pnl, usb_ext_prop_name_len_ptr(buf));
|
||||
+ result = utf8s_to_utf16s(name, strlen(name), UTF16_LITTLE_ENDIAN,
|
||||
+ (wchar_t *) usb_ext_prop_name_ptr(buf), pnl - 2);
|
||||
+ if (result < 0)
|
||||
+ return result;
|
||||
+
|
||||
+ put_unaligned_le16(0, &buf[USB_EXT_PROP_B_PROPERTY_NAME + pnl - 2]);
|
||||
+
|
||||
+ return pnl;
|
||||
+}
|
||||
+
|
||||
+static inline void usb_ext_prop_put_binary(u8 *buf, int pnl, const u8 *data,
|
||||
+ int data_len)
|
||||
+{
|
||||
+ put_unaligned_le32(data_len, usb_ext_prop_data_len_ptr(buf, pnl));
|
||||
+ memcpy(usb_ext_prop_data_ptr(buf, pnl), data, data_len);
|
||||
+}
|
||||
+
|
||||
+static inline int usb_ext_prop_put_unicode(u8 *buf, int pnl, const char *string,
|
||||
+ int data_len)
|
||||
+{
|
||||
+ int result;
|
||||
+ put_unaligned_le32(data_len, usb_ext_prop_data_len_ptr(buf, pnl));
|
||||
+ result = utf8s_to_utf16s(string, data_len >> 1, UTF16_LITTLE_ENDIAN,
|
||||
+ (wchar_t *) usb_ext_prop_data_ptr(buf, pnl),
|
||||
+ data_len - 2);
|
||||
+ if (result < 0)
|
||||
+ return result;
|
||||
+
|
||||
+ put_unaligned_le16(0,
|
||||
+ &buf[USB_EXT_PROP_B_PROPERTY_DATA + pnl + data_len - 2]);
|
||||
+
|
||||
+ return data_len;
|
||||
+}
|
||||
+
|
||||
+#endif /* __U_OS_DESC_H__ */
|
42
device/testing/linux-motorola-nash/99_framebuffer.patch
Normal file
42
device/testing/linux-motorola-nash/99_framebuffer.patch
Normal file
|
@ -0,0 +1,42 @@
|
|||
This is needed for the display to display colors correctly.
|
||||
---
|
||||
diff --git a/drivers/video/msm/mdss/mdss_fb.c b/drivers/video/msm/mdss/mdss_fb.c
|
||||
index 075ee8a3880..b4531f66a06 100644
|
||||
--- a/drivers/video/fbdev/msm/mdss_fb.c
|
||||
+++ b/drivers/video/fbdev/msm/mdss_fb.c
|
||||
@@ -868,7 +868,8 @@ static int mdss_fb_probe(struct platform_device *pdev)
|
||||
mfd->bl_scale = 1024;
|
||||
mfd->bl_min_lvl = 30;
|
||||
mfd->ad_bl_level = 0;
|
||||
- mfd->fb_imgType = MDP_RGBA_8888;
|
||||
+ // Default framebuffer format.
|
||||
+ mfd->fb_imgType = MDP_BGRA_8888;
|
||||
mfd->calib_mode_bl = 0;
|
||||
|
||||
if (mfd->panel.type == MIPI_VIDEO_PANEL ||
|
||||
@@ -2143,6 +2144,25 @@ static int mdss_fb_register(struct msm_fb_data_type *mfd)
|
||||
bpp = 4;
|
||||
break;
|
||||
|
||||
+ case MDP_BGRA_8888:
|
||||
+ fix->type = FB_TYPE_PACKED_PIXELS;
|
||||
+ fix->xpanstep = 1;
|
||||
+ fix->ypanstep = 1;
|
||||
+ var->vmode = FB_VMODE_NONINTERLACED;
|
||||
+ var->blue.offset = 0;
|
||||
+ var->green.offset = 8;
|
||||
+ var->red.offset = 16;
|
||||
+ var->blue.length = 8;
|
||||
+ var->green.length = 8;
|
||||
+ var->red.length = 8;
|
||||
+ var->blue.msb_right = 0;
|
||||
+ var->green.msb_right = 0;
|
||||
+ var->red.msb_right = 0;
|
||||
+ var->transp.offset = 24;
|
||||
+ var->transp.length = 8;
|
||||
+ bpp = 4;
|
||||
+ break;
|
||||
+
|
||||
case MDP_YCRYCB_H2V1:
|
||||
fix->type = FB_TYPE_INTERLEAVED_PLANES;
|
||||
fix->xpanstep = 2;
|
56
device/testing/linux-motorola-nash/APKBUILD
Normal file
56
device/testing/linux-motorola-nash/APKBUILD
Normal file
|
@ -0,0 +1,56 @@
|
|||
# Reference: <https://postmarketos.org/vendorkernel>
|
||||
# Kernel config based on: arch/arm64/configs/lineageos_nash_defconfig
|
||||
|
||||
pkgname=linux-motorola-nash
|
||||
pkgver=4.4.235
|
||||
pkgrel=0
|
||||
pkgdesc="Motorola Moto Z2 Force kernel fork"
|
||||
arch="aarch64"
|
||||
_carch="arm64"
|
||||
_flavor="motorola-nash"
|
||||
url="https://kernel.org"
|
||||
license="GPL-2.0-only"
|
||||
options="!strip !check !tracedeps pmb:cross-native"
|
||||
makedepends="bash bc bison devicepkg-dev flex openssl-dev perl"
|
||||
|
||||
# Source
|
||||
_repository="android_kernel_motorola_msm8998"
|
||||
_commit="01625f8274aa4e16d5b4f64ea21bfed74958ad0f"
|
||||
_config="config-$_flavor.$arch"
|
||||
source="
|
||||
$pkgname-$_commit.tar.gz::https://github.com/LineageOS/$_repository/archive/$_commit.tar.gz
|
||||
$_config
|
||||
fix-virtual-terminal.patch
|
||||
remove_bootloader_cmdline_opts.patch
|
||||
mdss-panel-to-fb-var.patch
|
||||
99_framebuffer.patch
|
||||
f_fs_module_inittest.patch
|
||||
f_hid_module_inittest.patch
|
||||
"
|
||||
|
||||
builddir="$srcdir/$_repository-$_commit"
|
||||
_outdir="out"
|
||||
|
||||
prepare() {
|
||||
default_prepare
|
||||
. downstreamkernel_prepare
|
||||
}
|
||||
|
||||
build() {
|
||||
unset LDFLAGS
|
||||
make O="$_outdir" ARCH="$_carch" CC="${CC:-gcc}" \
|
||||
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-postmarketOS"
|
||||
}
|
||||
|
||||
package() {
|
||||
downstreamkernel_package "$builddir" "$pkgdir" "$_carch" "$_flavor" "$_outdir"
|
||||
}
|
||||
|
||||
sha512sums="ecccc68b1e9b81e7ec73b0613393ad1d551bcdff93a3c7f08ec1d4cdb2d91660e51726ab58aa691aba6860793271cead9702c2b454eaf5f390138d1f11027540 linux-motorola-nash-01625f8274aa4e16d5b4f64ea21bfed74958ad0f.tar.gz
|
||||
6400c94213b313a6e7f0de0f97766c2f2b7b2e1f51945b5399b01ab375b4fb8af9733064274ac8b2f4a937c1606e15958b20be32c577a8d8cfcfc1cac1e0366f config-motorola-nash.aarch64
|
||||
a62883a325d858eaff4e44e7e1f85f84803ee8360073f83f9657ba5bf1676618ff77e7e62971ecdfb661956ba081196bc2618179d4d7cafadf528d2aa00062cd fix-virtual-terminal.patch
|
||||
9ce867c4254b537ef5d2485780c26b72da8a3a8767ba71557f3b48d6c550e0e14c8c3e575b31bf65d2878f08a8a4926e48a1c2f1be534bf80a7a57f58313b0fd remove_bootloader_cmdline_opts.patch
|
||||
d5b868c64b8ebddcf74cb3aa478f30f0897af1e14e4fc42d977921104a6c568cc0bf36fc8a3b0f538cd3ca2ebf59244fdf23186a903259e5acc14d1c4ef4ccc3 mdss-panel-to-fb-var.patch
|
||||
d64746ff65de81cc894e33cd8f9b3bf0a5ee9e979d95f67a50a4c0bc7072aa459632841db4b64b68cfc01fa3503d2e8122d03f177932a5f0fbe0ddad5db3bb4d 99_framebuffer.patch
|
||||
bb9adbcd1df17f9197a9d66bacd0103164182ff3813a3b346128c88244135f40de3c3c7c6dd9391df47d9dccd5fd35ffcc248e0abae51214d09a2f5e7d960c31 f_fs_module_inittest.patch
|
||||
895f1eaf0fce84e8be8bc6fb6715b2e9a4bd121b7a99774c786a68eb96c55aff00e60aacfb3317c3fdc52e7363d646fc0556da0af252cc7bd84a9cc7544d1878 f_hid_module_inittest.patch"
|
5578
device/testing/linux-motorola-nash/config-motorola-nash.aarch64
Normal file
5578
device/testing/linux-motorola-nash/config-motorola-nash.aarch64
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,21 @@
|
|||
Remove f_fsmodule implementation which causes kernel build to fail.
|
||||
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
|
||||
index d7304ad18c2a..659d813ddd21 100644
|
||||
--- a/drivers/usb/gadget/function/f_fs.c
|
||||
+++ b/drivers/usb/gadget/function/f_fs.c
|
||||
@@ -4309,7 +4309,6 @@ static int ffs_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
-module_init(ffs_init);
|
||||
|
||||
static void __exit ffs_exit(void)
|
||||
{
|
||||
@@ -4332,7 +4331,6 @@ static void __exit ffs_exit(void)
|
||||
ffs_ipc_log = NULL;
|
||||
}
|
||||
}
|
||||
-module_exit(ffs_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Michal Nazarewicz");
|
|
@ -0,0 +1,16 @@
|
|||
Remove f_hidmodule implementation which causes kernel build to fail.
|
||||
diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
|
||||
index fef3c11d..f4e36021 100644
|
||||
--- a/drivers/usb/gadget/function/f_hid.c
|
||||
+++ b/drivers/usb/gadget/function/f_hid.c
|
||||
@@ -1145,8 +1145,8 @@ static void __exit afunc_exit(void)
|
||||
usb_function_unregister(&hidusb_func);
|
||||
}
|
||||
|
||||
-module_init(afunc_init);
|
||||
-module_exit(afunc_exit);
|
||||
+// module_init(afunc_init);
|
||||
+// module_exit(afunc_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Fabien Chouteau");
|
167
device/testing/linux-motorola-nash/fix-virtual-terminal.patch
Normal file
167
device/testing/linux-motorola-nash/fix-virtual-terminal.patch
Normal file
|
@ -0,0 +1,167 @@
|
|||
This is needed in order for the kernel to work. Without it, the kernel panics on startup.
|
||||
---
|
||||
diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
|
||||
index fd191761bfa1..844c7617b9e6 100644
|
||||
--- a/drivers/tty/serial/msm_serial_hs.c
|
||||
+++ b/drivers/tty/serial/msm_serial_hs.c
|
||||
@@ -62,7 +62,6 @@
|
||||
#include <linux/ipc_logging.h>
|
||||
#include <asm/irq.h>
|
||||
#include <linux/kthread.h>
|
||||
-#include <uapi/linux/sched.h>
|
||||
|
||||
#include <linux/msm-sps.h>
|
||||
#include <linux/platform_data/msm_serial_hs.h>
|
||||
@@ -3395,7 +3394,6 @@ static void msm_serial_hs_rt_init(struct uart_port *uport)
|
||||
msm_uport->pm_state = MSM_HS_PM_SUSPENDED;
|
||||
mutex_unlock(&msm_uport->mtx);
|
||||
pm_runtime_enable(uport->dev);
|
||||
- tty_port_set_policy(&uport->state->port, SCHED_FIFO, 1);
|
||||
}
|
||||
|
||||
static int msm_hs_runtime_suspend(struct device *dev)
|
||||
diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
|
||||
index 92af201f9030..4706df20191b 100644
|
||||
--- a/drivers/tty/tty_buffer.c
|
||||
+++ b/drivers/tty/tty_buffer.c
|
||||
@@ -71,7 +71,7 @@ void tty_buffer_unlock_exclusive(struct tty_port *port)
|
||||
atomic_dec(&buf->priority);
|
||||
mutex_unlock(&buf->lock);
|
||||
if (restart)
|
||||
- queue_kthread_work(&port->worker, &buf->work);
|
||||
+ queue_work(system_unbound_wq, &buf->work);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tty_buffer_unlock_exclusive);
|
||||
|
||||
@@ -132,8 +132,6 @@ void tty_buffer_free_all(struct tty_port *port)
|
||||
buf->tail = &buf->sentinel;
|
||||
|
||||
atomic_set(&buf->mem_used, 0);
|
||||
- if (!IS_ERR_OR_NULL(port->worker_thread))
|
||||
- kthread_stop(port->worker_thread);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -406,7 +404,7 @@ void tty_schedule_flip(struct tty_port *port)
|
||||
* flush_to_ldisc() sees buffer data.
|
||||
*/
|
||||
smp_store_release(&buf->tail->commit, buf->tail->used);
|
||||
- queue_kthread_work(&port->worker, &buf->work);
|
||||
+ queue_work(system_unbound_wq, &buf->work);
|
||||
}
|
||||
EXPORT_SYMBOL(tty_schedule_flip);
|
||||
|
||||
@@ -474,7 +472,7 @@ receive_buf(struct tty_struct *tty, struct tty_buffer *head, int count)
|
||||
* 'consumer'
|
||||
*/
|
||||
|
||||
-static void flush_to_ldisc(struct kthread_work *work)
|
||||
+static void flush_to_ldisc(struct work_struct *work)
|
||||
{
|
||||
struct tty_port *port = container_of(work, struct tty_port, buf.work);
|
||||
struct tty_bufhead *buf = &port->buf;
|
||||
@@ -564,20 +562,8 @@ void tty_buffer_init(struct tty_port *port)
|
||||
init_llist_head(&buf->free);
|
||||
atomic_set(&buf->mem_used, 0);
|
||||
atomic_set(&buf->priority, 0);
|
||||
+ INIT_WORK(&buf->work, flush_to_ldisc);
|
||||
buf->mem_limit = TTYB_DEFAULT_MEM_LIMIT;
|
||||
- init_kthread_work(&buf->work, flush_to_ldisc);
|
||||
- init_kthread_worker(&port->worker);
|
||||
- port->worker_thread = kthread_run(kthread_worker_fn, &port->worker,
|
||||
- "tty_worker_thread");
|
||||
- if (IS_ERR(port->worker_thread)) {
|
||||
- /*
|
||||
- * Not good, we can't unwind, this tty is going to be really
|
||||
- * sad...
|
||||
- */
|
||||
- pr_err("Unable to start tty_worker_thread\n");
|
||||
- }
|
||||
-
|
||||
-
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -605,15 +591,15 @@ void tty_buffer_set_lock_subclass(struct tty_port *port)
|
||||
|
||||
bool tty_buffer_restart_work(struct tty_port *port)
|
||||
{
|
||||
- return queue_kthread_work(&port->worker, &port->buf.work);
|
||||
+ return queue_work(system_unbound_wq, &port->buf.work);
|
||||
}
|
||||
|
||||
bool tty_buffer_cancel_work(struct tty_port *port)
|
||||
{
|
||||
- return kthread_cancel_work_sync(&port->buf.work);
|
||||
+ return cancel_work_sync(&port->buf.work);
|
||||
}
|
||||
|
||||
void tty_buffer_flush_work(struct tty_port *port)
|
||||
{
|
||||
- flush_kthread_work(&port->buf.work);
|
||||
+ flush_work(&port->buf.work);
|
||||
}
|
||||
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
|
||||
index 9f06fc11bc5f..482f33f20043 100644
|
||||
--- a/drivers/tty/tty_port.c
|
||||
+++ b/drivers/tty/tty_port.c
|
||||
@@ -16,7 +16,6 @@
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/module.h>
|
||||
-#include <uapi/linux/sched.h>
|
||||
|
||||
void tty_port_init(struct tty_port *port)
|
||||
{
|
||||
@@ -599,12 +598,3 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty,
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(tty_port_open);
|
||||
-
|
||||
-int tty_port_set_policy(struct tty_port *port, int policy, int sched_priority)
|
||||
-{
|
||||
- struct sched_param param = { .sched_priority = sched_priority };
|
||||
-
|
||||
- return sched_setscheduler(port->worker_thread, policy, ¶m);
|
||||
-}
|
||||
-EXPORT_SYMBOL_GPL(tty_port_set_policy);
|
||||
-
|
||||
diff --git a/include/linux/tty.h b/include/linux/tty.h
|
||||
index 1c1bb90f6819..572af7c9a65d 100644
|
||||
--- a/include/linux/tty.h
|
||||
+++ b/include/linux/tty.h
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <uapi/linux/tty.h>
|
||||
#include <linux/rwsem.h>
|
||||
#include <linux/llist.h>
|
||||
-#include <linux/kthread.h>
|
||||
|
||||
/*
|
||||
* Lock subclasses for tty locks
|
||||
@@ -82,7 +81,7 @@ static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs)
|
||||
|
||||
struct tty_bufhead {
|
||||
struct tty_buffer *head; /* Queue head */
|
||||
- struct kthread_work work;
|
||||
+ struct work_struct work;
|
||||
struct mutex lock;
|
||||
atomic_t priority;
|
||||
struct tty_buffer sentinel;
|
||||
@@ -240,8 +239,6 @@ struct tty_port {
|
||||
based drain is needed else
|
||||
set to size of fifo */
|
||||
struct kref kref; /* Ref counter */
|
||||
- struct kthread_worker worker; /* worker thread */
|
||||
- struct task_struct *worker_thread; /* worker thread */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -582,8 +579,6 @@ static inline int tty_port_users(struct tty_port *port)
|
||||
{
|
||||
return port->count + port->blocked_open;
|
||||
}
|
||||
-extern int tty_port_set_policy(struct tty_port *port, int policy,
|
||||
- int sched_priority);
|
||||
|
||||
extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
|
||||
extern int tty_unregister_ldisc(int disc);
|
118
device/testing/linux-motorola-nash/mdss-panel-to-fb-var.patch
Normal file
118
device/testing/linux-motorola-nash/mdss-panel-to-fb-var.patch
Normal file
|
@ -0,0 +1,118 @@
|
|||
From fe5131b250c373d152b7e73895f17846d1f1e6bd Mon Sep 17 00:00:00 2001
|
||||
From: Ion Agorria <ion@agorria.com>
|
||||
Date: Thu, 24 Jan 2019 18:52:58 +0100
|
||||
Subject: [PATCH] mdss: update fb mode at mdss_panelinfo_to_fb_var to fix Xorg
|
||||
|
||||
When mdss_panelinfo_to_fb_var is called at
|
||||
screen unblank it updates the values in fb_info->var,
|
||||
meanwhile the fb_info->mode and modelist remain with old
|
||||
values set at registering the fb causing mismatch when
|
||||
Xorg attempts to set mode.
|
||||
---
|
||||
drivers/video/fbdev/msm/mdss_fb.c | 25 ++++++++++++++++------
|
||||
drivers/video/fbdev/msm/mdss_fb.h | 3 +--
|
||||
drivers/video/fbdev/msm/mdss_mdp_overlay.c | 2 +-
|
||||
3 files changed, 20 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
|
||||
index 3e632076639d..2d2b37bffa5d 100644
|
||||
--- a/drivers/video/fbdev/msm/mdss_fb.c
|
||||
+++ b/drivers/video/fbdev/msm/mdss_fb.c
|
||||
@@ -2339,7 +2339,7 @@ static void mdss_panel_validate_debugfs_info(struct msm_fb_data_type *mfd)
|
||||
if (is_panel_split(mfd) && pdata->next)
|
||||
mdss_fb_validate_split(pdata->panel_info.xres,
|
||||
pdata->next->panel_info.xres, mfd);
|
||||
- mdss_panelinfo_to_fb_var(panel_info, var);
|
||||
+ mdss_panelinfo_to_fb_var(mfd);
|
||||
if (mdss_fb_send_panel_event(mfd, MDSS_EVENT_CHECK_PARAMS,
|
||||
panel_info))
|
||||
pr_err("Failed to send panel event CHECK_PARAMS\n");
|
||||
@@ -2452,7 +2452,7 @@ static int mdss_fb_blank_unblank(struct msm_fb_data_type *mfd)
|
||||
* programmed in the controller.
|
||||
* Update this info in the upstream structs.
|
||||
*/
|
||||
- mdss_panelinfo_to_fb_var(panel_info, var);
|
||||
+ mdss_panelinfo_to_fb_var(mfd);
|
||||
|
||||
/* Start the work thread to signal idle time */
|
||||
if (mfd->idle_time)
|
||||
@@ -3196,7 +3196,7 @@ static int mdss_fb_register(struct msm_fb_data_type *mfd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- mdss_panelinfo_to_fb_var(panel_info, var);
|
||||
+ mdss_panelinfo_to_fb_var(mfd);
|
||||
|
||||
fix->type = panel_info->is_3d_panel;
|
||||
if (mfd->mdp.fb_stride)
|
||||
@@ -3900,7 +3900,7 @@ static void mdss_fb_update_resolution(struct msm_fb_data_type *mfd,
|
||||
}
|
||||
var->xres_virtual = var->xres;
|
||||
var->yres_virtual = pinfo->yres * mfd->fb_page;
|
||||
- mdss_panelinfo_to_fb_var(pinfo, var);
|
||||
+ mdss_panelinfo_to_fb_var(mfd);
|
||||
}
|
||||
|
||||
int mdss_fb_atomic_commit(struct fb_info *info,
|
||||
@@ -4149,9 +4149,14 @@ static void mdss_fb_var_to_panelinfo(struct fb_var_screeninfo *var,
|
||||
pinfo->lcdc.v_polarity = 1;
|
||||
}
|
||||
|
||||
-void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo,
|
||||
- struct fb_var_screeninfo *var)
|
||||
+void mdss_panelinfo_to_fb_var(struct msm_fb_data_type *mfd)
|
||||
{
|
||||
+ if (!mfd)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ struct mdss_panel_info *pinfo = mfd->panel_info;
|
||||
+ struct fb_info *fbi = mfd->fbi;
|
||||
+ struct fb_var_screeninfo *var = &fbi->var;
|
||||
u32 frame_rate;
|
||||
|
||||
var->xres = mdss_fb_get_panel_xres(pinfo);
|
||||
@@ -4185,7 +4190,13 @@ void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo,
|
||||
if (pinfo->physical_height)
|
||||
var->height = pinfo->physical_height;
|
||||
|
||||
- pr_debug("ScreenInfo: res=%dx%d [%d, %d] [%d, %d]\n",
|
||||
+ //Hack to update current fbi->mode according to fbi->var when var is updated from panel info
|
||||
+ if (fbi->mode) {
|
||||
+ printk("Updating mdss fb mode from fb var\n");
|
||||
+ fb_var_to_videomode(fbi->mode, var);
|
||||
+ }
|
||||
+
|
||||
+ printk("ScreenInfo: res=%dx%d [%d, %d] [%d, %d]\n",
|
||||
var->xres, var->yres, var->left_margin,
|
||||
var->right_margin, var->upper_margin,
|
||||
var->lower_margin);
|
||||
diff --git a/drivers/video/fbdev/msm/mdss_fb.h b/drivers/video/fbdev/msm/mdss_fb.h
|
||||
index c6e8d37d7bc8..bbd17e1c72e2 100644
|
||||
--- a/drivers/video/fbdev/msm/mdss_fb.h
|
||||
+++ b/drivers/video/fbdev/msm/mdss_fb.h
|
||||
@@ -484,8 +484,7 @@ int mdss_fb_async_position_update(struct fb_info *info,
|
||||
|
||||
u32 mdss_fb_get_mode_switch(struct msm_fb_data_type *mfd);
|
||||
void mdss_fb_report_panel_dead(struct msm_fb_data_type *mfd);
|
||||
-void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo,
|
||||
- struct fb_var_screeninfo *var);
|
||||
+void mdss_panelinfo_to_fb_var(struct msm_fb_data_type *mfd);
|
||||
void mdss_fb_calc_fps(struct msm_fb_data_type *mfd);
|
||||
void mdss_fb_idle_pc(struct msm_fb_data_type *mfd);
|
||||
#endif /* MDSS_FB_H */
|
||||
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
|
||||
index 81218319d58b..cee8a8e5e449 100644
|
||||
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
|
||||
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
|
||||
@@ -3534,7 +3534,7 @@ int mdss_mdp_dfps_update_params(struct msm_fb_data_type *mfd,
|
||||
* data, so any further call to get the screen
|
||||
* info has the updated timings.
|
||||
*/
|
||||
- mdss_panelinfo_to_fb_var(&pdata->panel_info, var);
|
||||
+ mdss_panelinfo_to_fb_var(mfd);
|
||||
|
||||
MDSS_XLOG(dfps);
|
||||
mutex_unlock(&mdp5_data->dfps_lock);
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
From 92e3310d2db157deacb86ef5db8c8c8d38251312 Mon Sep 17 00:00:00 2001
|
||||
From: Alexey Min <alexey.min@gmail.com>
|
||||
Date: Wed, 11 Sep 2019 21:51:40 +0300
|
||||
Subject: [PATCH 3/6] Add config option to fix bootloader cmdline args
|
||||
|
||||
Android bootloader passes some arguments in kernel command
|
||||
line, that make booting custom OSes harder:
|
||||
|
||||
* skip_initramfs
|
||||
* root=PARTUUID=...
|
||||
* init=/init
|
||||
|
||||
Those parameters override default boot partition to hardcoded,
|
||||
set init binary to /init, disable booting from initramfs.
|
||||
|
||||
If enabled, those parameters will be erased from bootloader's
|
||||
command line, and custom OS can boot the way it likes.
|
||||
|
||||
Signed-off-by: Alexey Min <alexey.min@gmail.com>
|
||||
---
|
||||
arch/arm64/Kconfig | 17 +++++++++++++++++
|
||||
drivers/of/fdt.c | 14 ++++++++++++++
|
||||
2 files changed, 31 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
|
||||
index 2829edba6aa5..bd9f05f83c7e 100644
|
||||
--- a/arch/arm64/Kconfig
|
||||
+++ b/arch/arm64/Kconfig
|
||||
@@ -1125,6 +1125,23 @@ config CMDLINE_FORCE
|
||||
command-line options your boot loader passes to the kernel.
|
||||
endchoice
|
||||
|
||||
+config CMDLINE_DROP_DANGEROUS_ANDROID_OPTIONS
|
||||
+ bool "Drop certain dangerous options from cmdline"
|
||||
+ default n
|
||||
+ help
|
||||
+ Android bootloader passes some arguments in kernel command
|
||||
+ line, that make booting custom OSes harder:
|
||||
+
|
||||
+ * skip_initramfs
|
||||
+ * root=PARTUUID=...
|
||||
+ * init=/init
|
||||
+
|
||||
+ Those parameters override default boot partition to hardcoded,
|
||||
+ set init binary to /init, disable booting from initramfs.
|
||||
+
|
||||
+ If enabled, those parameters will be erased from bootloader's
|
||||
+ command line, and custom OS can boot the way it likes.
|
||||
+
|
||||
config EFI_STUB
|
||||
bool
|
||||
|
||||
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
|
||||
index ca175710c4c8..fd8257589648 100644
|
||||
--- a/drivers/of/fdt.c
|
||||
+++ b/drivers/of/fdt.c
|
||||
@@ -1012,6 +1012,20 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
|
||||
|
||||
pr_debug("Command line is: %s\n", (char*)data);
|
||||
|
||||
+#ifdef CONFIG_CMDLINE_DROP_DANGEROUS_ANDROID_OPTIONS
|
||||
+ pr_err("Replacing dangerous cmdline options...");
|
||||
+ cmdline = strstr((const char *)data, "skip_initramfs");
|
||||
+ if (cmdline)
|
||||
+ *cmdline = '_';
|
||||
+ cmdline = strstr((const char *)data, "root=");
|
||||
+ if (cmdline)
|
||||
+ *cmdline = '_';
|
||||
+ cmdline = strstr((const char *)data, "init=");
|
||||
+ if (cmdline)
|
||||
+ *cmdline = '_';
|
||||
+ pr_err("Command line now is: %s\n", (char*)data);
|
||||
+#endif
|
||||
+
|
||||
/* break now */
|
||||
return 1;
|
||||
}
|
||||
--
|
||||
2.24.1
|
||||
|
Loading…
Add table
Reference in a new issue