Created
October 27, 2015 18:07
-
-
Save jduck/caf1eddcd4c9ac27d818 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From cfd6ecdccd84f7a6da447f2873130038c0fddeee Mon Sep 17 00:00:00 2001 | |
From: "Joshua J. Drake" <[email protected]> | |
Date: Tue, 27 Oct 2015 12:50:12 -0500 | |
Subject: [PATCH] Enable KGDB support for hammerhead | |
1. Add RETRY support per kgdb-android repo | |
2. Implement poll support for ttyHSL driver | |
3. Add modified kernel config for KGDB | |
--- | |
arch/arm/configs/hammerhead_kgdb_defconfig | 614 +++++++++++++++++++++++++++++ | |
drivers/tty/serial/kgdboc.c | 34 +- | |
drivers/tty/serial/msm_serial_hs_lite.c | 149 +++++++ | |
include/linux/serial_core.h | 1 + | |
4 files changed, 797 insertions(+), 1 deletion(-) | |
create mode 100644 arch/arm/configs/hammerhead_kgdb_defconfig | |
diff --git a/arch/arm/configs/hammerhead_kgdb_defconfig b/arch/arm/configs/hammerhead_kgdb_defconfig | |
new file mode 100644 | |
index 0000000..08135a0 | |
--- /dev/null | |
+++ b/arch/arm/configs/hammerhead_kgdb_defconfig | |
@@ -0,0 +1,614 @@ | |
+# CONFIG_ARM_PATCH_PHYS_VIRT is not set | |
+CONFIG_EXPERIMENTAL=y | |
+# CONFIG_SWAP is not set | |
+CONFIG_SYSVIPC=y | |
+CONFIG_AUDIT=y | |
+CONFIG_RCU_FAST_NO_HZ=y | |
+CONFIG_LOG_BUF_SHIFT=19 | |
+CONFIG_CGROUPS=y | |
+CONFIG_CGROUP_DEBUG=y | |
+CONFIG_CGROUP_FREEZER=y | |
+CONFIG_CGROUP_CPUACCT=y | |
+CONFIG_RESOURCE_COUNTERS=y | |
+CONFIG_CGROUP_SCHED=y | |
+CONFIG_RT_GROUP_SCHED=y | |
+CONFIG_NAMESPACES=y | |
+# CONFIG_UTS_NS is not set | |
+# CONFIG_IPC_NS is not set | |
+# CONFIG_USER_NS is not set | |
+# CONFIG_PID_NS is not set | |
+CONFIG_RELAY=y | |
+CONFIG_BLK_DEV_INITRD=y | |
+CONFIG_RD_BZIP2=y | |
+CONFIG_RD_LZMA=y | |
+CONFIG_PANIC_TIMEOUT=5 | |
+CONFIG_KALLSYMS_ALL=y | |
+CONFIG_EMBEDDED=y | |
+CONFIG_SLUB_DEBUG=y | |
+CONFIG_PROFILING=y | |
+CONFIG_PARTITION_ADVANCED=y | |
+CONFIG_EFI_PARTITION=y | |
+CONFIG_ARCH_MSM=y | |
+CONFIG_ARCH_MSM8974=y | |
+CONFIG_MSM_KRAIT_TBB_ABORT_HANDLER=y | |
+CONFIG_MACH_MSM8974_HAMMERHEAD=y | |
+CONFIG_LGE_HANDLE_PANIC=y | |
+CONFIG_LGE_BLUETOOTH=y | |
+# CONFIG_MSM_STACKED_MEMORY is not set | |
+CONFIG_CPU_HAS_L2_PMU=y | |
+# CONFIG_MSM_FIQ_SUPPORT is not set | |
+# CONFIG_MSM_PROC_COMM is not set | |
+CONFIG_MSM_SMD=y | |
+CONFIG_MSM_SMD_PKG4=y | |
+CONFIG_MSM_BAM_DMUX=y | |
+CONFIG_MSM_SMP2P=y | |
+CONFIG_MSM_SMP2P_TEST=y | |
+# CONFIG_MSM_RESET_MODEM is not set | |
+CONFIG_MSM_IPC_LOGGING=y | |
+# CONFIG_MSM_SMD_TTY is not set | |
+CONFIG_MSM_IPC_ROUTER=y | |
+CONFIG_MSM_IPC_ROUTER_SMD_XPRT=y | |
+CONFIG_MSM_IPC_ROUTER_SECURITY=y | |
+CONFIG_MSM_QMI_INTERFACE=y | |
+# CONFIG_MSM_DMA_TEST is not set | |
+CONFIG_WIFI_CONTROL_FUNC=y | |
+CONFIG_MSM_SUBSYSTEM_RESTART=y | |
+CONFIG_MSM_SYSMON_COMM=y | |
+CONFIG_MSM_PIL_LPASS_QDSP6V5=y | |
+CONFIG_MSM_PIL_MSS_QDSP6V5=y | |
+CONFIG_MSM_PIL_VENUS=y | |
+# CONFIG_MSM_BUSPM_DEV is not set | |
+CONFIG_MSM_TZ_LOG=y | |
+CONFIG_MSM_RPM_RBCPR_STATS_V2_LOG=y | |
+CONFIG_MSM_DIRECT_SCLK_ACCESS=y | |
+CONFIG_MSM_EVENT_TIMER=y | |
+CONFIG_MSM_BUS_SCALING=y | |
+CONFIG_MSM_WATCHDOG_V2=y | |
+CONFIG_MSM_MEMORY_DUMP=y | |
+CONFIG_MSM_DLOAD_MODE=y | |
+CONFIG_MSM_ADSP_LOADER=y | |
+CONFIG_MSM_OCMEM=y | |
+CONFIG_MSM_OCMEM_LOCAL_POWER_CTRL=y | |
+CONFIG_MSM_OCMEM_DEBUG=y | |
+CONFIG_SENSORS_ADSP=y | |
+CONFIG_MSM_CACHE_ERP=y | |
+CONFIG_MSM_L1_ERR_PANIC=y | |
+CONFIG_MSM_L1_RECOV_ERR_PANIC=y | |
+CONFIG_MSM_L1_ERR_LOG=y | |
+CONFIG_MSM_ENABLE_WDOG_DEBUG_CONTROL=y | |
+CONFIG_MSM_UARTDM_Core_v14=y | |
+CONFIG_STRICT_MEMORY_RWX=n | |
+CONFIG_NO_HZ=y | |
+CONFIG_HIGH_RES_TIMERS=y | |
+CONFIG_SMP=y | |
+# CONFIG_SMP_ON_UP is not set | |
+CONFIG_SCHED_MC=y | |
+CONFIG_ARM_ARCH_TIMER=y | |
+CONFIG_PREEMPT=y | |
+CONFIG_AEABI=y | |
+CONFIG_HIGHMEM=y | |
+CONFIG_COMPACTION=y | |
+CONFIG_CC_STACKPROTECTOR=y | |
+CONFIG_USE_OF=y | |
+CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE=y | |
+CONFIG_CPU_FREQ=y | |
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y | |
+CONFIG_CPU_FREQ_GOV_USERSPACE=y | |
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y | |
+CONFIG_CPU_FREQ_GOV_INTERACTIVE=y | |
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y | |
+CONFIG_CPU_IDLE=y | |
+CONFIG_VFP=y | |
+CONFIG_NEON=y | |
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | |
+CONFIG_PM_AUTOSLEEP=y | |
+CONFIG_PM_WAKELOCKS=y | |
+CONFIG_PM_WAKELOCKS_LIMIT=0 | |
+# CONFIG_PM_WAKELOCKS_GC is not set | |
+CONFIG_PM_RUNTIME=y | |
+CONFIG_NET=y | |
+CONFIG_PACKET=y | |
+CONFIG_UNIX=y | |
+CONFIG_XFRM_USER=y | |
+CONFIG_NET_KEY=y | |
+CONFIG_INET=y | |
+CONFIG_IP_ADVANCED_ROUTER=y | |
+CONFIG_IP_MULTIPLE_TABLES=y | |
+CONFIG_IP_ROUTE_VERBOSE=y | |
+CONFIG_IP_PNP=y | |
+CONFIG_IP_PNP_DHCP=y | |
+CONFIG_INET_AH=y | |
+CONFIG_INET_ESP=y | |
+CONFIG_INET_IPCOMP=y | |
+# CONFIG_INET_LRO is not set | |
+CONFIG_IPV6_PRIVACY=y | |
+CONFIG_IPV6_ROUTER_PREF=y | |
+CONFIG_IPV6_ROUTE_INFO=y | |
+CONFIG_IPV6_OPTIMISTIC_DAD=y | |
+CONFIG_INET6_AH=y | |
+CONFIG_INET6_ESP=y | |
+CONFIG_INET6_IPCOMP=y | |
+CONFIG_IPV6_MIP6=y | |
+CONFIG_IPV6_MULTIPLE_TABLES=y | |
+CONFIG_IPV6_SUBTREES=y | |
+CONFIG_NETFILTER=y | |
+CONFIG_NETFILTER_NETLINK_LOG=y | |
+CONFIG_NF_CONNTRACK=y | |
+CONFIG_NF_CONNTRACK_SECMARK=y | |
+CONFIG_NF_CONNTRACK_EVENTS=y | |
+CONFIG_NF_CT_PROTO_DCCP=y | |
+CONFIG_NF_CT_PROTO_SCTP=y | |
+CONFIG_NF_CT_PROTO_UDPLITE=y | |
+CONFIG_NF_CONNTRACK_AMANDA=y | |
+CONFIG_NF_CONNTRACK_FTP=y | |
+CONFIG_NF_CONNTRACK_H323=y | |
+CONFIG_NF_CONNTRACK_IRC=y | |
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y | |
+CONFIG_NF_CONNTRACK_PPTP=y | |
+CONFIG_NF_CONNTRACK_SANE=y | |
+CONFIG_NF_CONNTRACK_TFTP=y | |
+CONFIG_NF_CT_NETLINK=y | |
+CONFIG_NETFILTER_TPROXY=y | |
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y | |
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y | |
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y | |
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y | |
+CONFIG_NETFILTER_XT_TARGET_LOG=y | |
+CONFIG_NETFILTER_XT_TARGET_MARK=y | |
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y | |
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y | |
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y | |
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y | |
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y | |
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y | |
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y | |
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y | |
+CONFIG_NETFILTER_XT_MATCH_HELPER=y | |
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y | |
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y | |
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y | |
+CONFIG_NETFILTER_XT_MATCH_MAC=y | |
+CONFIG_NETFILTER_XT_MATCH_MARK=y | |
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y | |
+CONFIG_NETFILTER_XT_MATCH_POLICY=y | |
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y | |
+CONFIG_NETFILTER_XT_MATCH_QTAGUID=y | |
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y | |
+CONFIG_NETFILTER_XT_MATCH_QUOTA2=y | |
+CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y | |
+CONFIG_NETFILTER_XT_MATCH_SOCKET=y | |
+CONFIG_NETFILTER_XT_MATCH_STATE=y | |
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y | |
+CONFIG_NETFILTER_XT_MATCH_STRING=y | |
+CONFIG_NETFILTER_XT_MATCH_TIME=y | |
+CONFIG_NETFILTER_XT_MATCH_U32=y | |
+CONFIG_NF_CONNTRACK_IPV4=y | |
+CONFIG_IP_NF_IPTABLES=y | |
+CONFIG_IP_NF_MATCH_AH=y | |
+CONFIG_IP_NF_MATCH_ECN=y | |
+CONFIG_IP_NF_MATCH_TTL=y | |
+CONFIG_IP_NF_FILTER=y | |
+CONFIG_IP_NF_TARGET_REJECT=y | |
+CONFIG_IP_NF_TARGET_REJECT_SKERR=y | |
+CONFIG_NF_NAT=y | |
+CONFIG_IP_NF_TARGET_MASQUERADE=y | |
+CONFIG_IP_NF_TARGET_NETMAP=y | |
+CONFIG_IP_NF_TARGET_REDIRECT=y | |
+CONFIG_IP_NF_MANGLE=y | |
+CONFIG_IP_NF_RAW=y | |
+CONFIG_IP_NF_SECURITY=y | |
+CONFIG_IP_NF_ARPTABLES=y | |
+CONFIG_IP_NF_ARPFILTER=y | |
+CONFIG_IP_NF_ARP_MANGLE=y | |
+CONFIG_NF_CONNTRACK_IPV6=y | |
+CONFIG_IP6_NF_IPTABLES=y | |
+CONFIG_IP6_NF_FILTER=y | |
+CONFIG_IP6_NF_TARGET_REJECT=y | |
+CONFIG_IP6_NF_TARGET_REJECT_SKERR=y | |
+CONFIG_IP6_NF_MANGLE=y | |
+CONFIG_IP6_NF_RAW=y | |
+CONFIG_BRIDGE_NF_EBTABLES=y | |
+CONFIG_BRIDGE_EBT_BROUTE=y | |
+CONFIG_L2TP=y | |
+CONFIG_BRIDGE=y | |
+CONFIG_NET_SCHED=y | |
+CONFIG_NET_SCH_HTB=y | |
+CONFIG_NET_SCH_PRIO=y | |
+CONFIG_NET_CLS_FW=y | |
+CONFIG_NET_CLS_U32=y | |
+CONFIG_CLS_U32_MARK=y | |
+CONFIG_NET_CLS_FLOW=y | |
+CONFIG_NET_EMATCH=y | |
+CONFIG_NET_EMATCH_CMP=y | |
+CONFIG_NET_EMATCH_NBYTE=y | |
+CONFIG_NET_EMATCH_U32=y | |
+CONFIG_NET_EMATCH_META=y | |
+CONFIG_NET_EMATCH_TEXT=y | |
+CONFIG_NET_CLS_ACT=y | |
+CONFIG_BT=y | |
+CONFIG_BT_RFCOMM=y | |
+CONFIG_BT_RFCOMM_TTY=y | |
+CONFIG_BT_BNEP=y | |
+CONFIG_BT_BNEP_MC_FILTER=y | |
+CONFIG_BT_BNEP_PROTO_FILTER=y | |
+CONFIG_BT_HIDP=y | |
+CONFIG_BT_MSM_SLEEP=y | |
+# CONFIG_MSM_BT_POWER is not set | |
+CONFIG_CFG80211=y | |
+CONFIG_NL80211_TESTMODE=y | |
+CONFIG_RFKILL=y | |
+CONFIG_NFC_BCM2079X=y | |
+CONFIG_CMA=y | |
+CONFIG_BLK_DEV_LOOP=y | |
+CONFIG_BLK_DEV_RAM=y | |
+CONFIG_UID_STAT=y | |
+CONFIG_HAPTIC_ISA1200=y | |
+CONFIG_MSM8974_PWM_VIBRATOR=y | |
+CONFIG_QSEECOM=y | |
+CONFIG_QPNP_MISC=y | |
+CONFIG_TI_DRV2667=y | |
+CONFIG_EARJACK_DEBUGGER=y | |
+CONFIG_FAN48632_BOOST=y | |
+CONFIG_SCSI=y | |
+CONFIG_SCSI_TGT=y | |
+CONFIG_BLK_DEV_SD=y | |
+CONFIG_CHR_DEV_SG=y | |
+CONFIG_CHR_DEV_SCH=y | |
+CONFIG_SCSI_MULTI_LUN=y | |
+CONFIG_SCSI_CONSTANTS=y | |
+CONFIG_SCSI_LOGGING=y | |
+CONFIG_SCSI_SCAN_ASYNC=y | |
+CONFIG_MD=y | |
+CONFIG_BLK_DEV_DM=y | |
+CONFIG_DM_CRYPT=y | |
+CONFIG_DM_VERITY=y | |
+CONFIG_NETDEVICES=y | |
+CONFIG_TUN=y | |
+# CONFIG_NET_VENDOR_BROADCOM is not set | |
+# CONFIG_NET_VENDOR_CHELSIO is not set | |
+# CONFIG_NET_VENDOR_CIRRUS is not set | |
+# CONFIG_NET_VENDOR_FARADAY is not set | |
+# CONFIG_NET_VENDOR_INTEL is not set | |
+# CONFIG_NET_VENDOR_MARVELL is not set | |
+# CONFIG_NET_VENDOR_MICROCHIP is not set | |
+# CONFIG_MSM_RMNET is not set | |
+CONFIG_MSM_RMNET_BAM=y | |
+# CONFIG_NET_VENDOR_NATSEMI is not set | |
+# CONFIG_NET_VENDOR_SEEQ is not set | |
+# CONFIG_NET_VENDOR_SMSC is not set | |
+# CONFIG_NET_VENDOR_STMICRO is not set | |
+CONFIG_PPP=y | |
+CONFIG_PPP_BSDCOMP=y | |
+CONFIG_PPP_DEFLATE=y | |
+CONFIG_PPP_FILTER=y | |
+CONFIG_PPP_MPPE=y | |
+CONFIG_PPP_MULTILINK=y | |
+CONFIG_PPPOE=y | |
+CONFIG_PPPOL2TP=y | |
+CONFIG_PPPOLAC=y | |
+CONFIG_PPPOPNS=y | |
+CONFIG_PPP_ASYNC=y | |
+CONFIG_PPP_SYNC_TTY=y | |
+CONFIG_SLIP=y | |
+CONFIG_SLIP_COMPRESSED=y | |
+CONFIG_SLIP_MODE_SLIP6=y | |
+CONFIG_USB_CATC=y | |
+CONFIG_USB_KAWETH=y | |
+CONFIG_USB_PEGASUS=y | |
+CONFIG_USB_RTL8150=y | |
+CONFIG_USB_USBNET=y | |
+CONFIG_USB_NET_CDC_EEM=y | |
+CONFIG_USB_NET_DM9601=y | |
+CONFIG_USB_NET_SMSC75XX=y | |
+CONFIG_USB_NET_SMSC95XX=y | |
+CONFIG_USB_NET_GL620A=y | |
+CONFIG_USB_NET_PLUSB=y | |
+CONFIG_USB_NET_MCS7830=y | |
+CONFIG_USB_NET_RNDIS_HOST=y | |
+CONFIG_USB_ALI_M5632=y | |
+CONFIG_USB_AN2720=y | |
+CONFIG_USB_EPSON2888=y | |
+CONFIG_USB_KC2190=y | |
+CONFIG_USB_NET_CX82310_ETH=y | |
+CONFIG_USB_NET_KALMIA=y | |
+CONFIG_USB_NET_QMI_WWAN=y | |
+CONFIG_USB_HSO=y | |
+CONFIG_USB_NET_INT51X1=y | |
+CONFIG_USB_IPHETH=y | |
+CONFIG_USB_SIERRA_NET=y | |
+CONFIG_BCMDHD=y | |
+CONFIG_BCM4339=y | |
+CONFIG_BCMDHD_FW_PATH="/vendor/firmware/fw_bcmdhd.bin" | |
+CONFIG_BCMDHD_NVRAM_PATH="/etc/wifi/bcmdhd.cal" | |
+CONFIG_DHD_USE_SCHED_SCAN=y | |
+# CONFIG_INPUT_MOUSEDEV is not set | |
+CONFIG_INPUT_EVDEV=y | |
+CONFIG_INPUT_KEYRESET=y | |
+# CONFIG_KEYBOARD_ATKBD is not set | |
+CONFIG_KEYBOARD_GPIO=y | |
+# CONFIG_INPUT_MOUSE is not set | |
+CONFIG_INPUT_JOYSTICK=y | |
+CONFIG_JOYSTICK_XPAD=y | |
+CONFIG_JOYSTICK_XPAD_FF=y | |
+CONFIG_JOYSTICK_XPAD_LEDS=y | |
+CONFIG_INPUT_TABLET=y | |
+CONFIG_TABLET_USB_ACECAD=y | |
+CONFIG_TABLET_USB_AIPTEK=y | |
+CONFIG_TABLET_USB_GTCO=y | |
+CONFIG_TABLET_USB_HANWANG=y | |
+CONFIG_TABLET_USB_KBTAB=y | |
+CONFIG_TABLET_USB_WACOM=y | |
+CONFIG_INPUT_TOUCHSCREEN=y | |
+CONFIG_TOUCHSCREEN_LGE_SYNAPTICS=y | |
+CONFIG_TOUCHSCREEN_CHARGER_NOTIFY=y | |
+CONFIG_INPUT_MISC=y | |
+CONFIG_INPUT_KEYCHORD=y | |
+CONFIG_INPUT_UINPUT=y | |
+# CONFIG_SERIO is not set | |
+# CONFIG_LEGACY_PTYS is not set | |
+CONFIG_SERIAL_MSM_HS=y | |
+CONFIG_SERIAL_MSM_HSL=y | |
+CONFIG_SERIAL_MSM_HSL_CONSOLE=y | |
+CONFIG_HW_RANDOM_MSM=y | |
+CONFIG_I2C=y | |
+CONFIG_I2C_CHARDEV=y | |
+CONFIG_I2C_QUP=y | |
+CONFIG_SPI=y | |
+CONFIG_SPI_QUP=y | |
+CONFIG_SPMI=y | |
+CONFIG_SPMI_MSM_PMIC_ARB=y | |
+CONFIG_MSM_QPNP_INT=y | |
+CONFIG_SLIMBUS_MSM_NGD=y | |
+CONFIG_DEBUG_GPIO=y | |
+CONFIG_GPIO_SYSFS=y | |
+CONFIG_GPIO_QPNP_PIN=y | |
+CONFIG_GPIO_QPNP_PIN_DEBUG=y | |
+CONFIG_SMB349_CHARGER=y | |
+CONFIG_QPNP_CHARGER=y | |
+CONFIG_MAX17048_FUELGAUGE=y | |
+CONFIG_BQ51013B_CHARGER=y | |
+CONFIG_BQ24192_CHARGER=y | |
+CONFIG_BATTERY_TEMP_CONTROL=y | |
+CONFIG_SENSORS_EPM_ADC=y | |
+CONFIG_SENSORS_QPNP_ADC_VOLTAGE=y | |
+CONFIG_SENSORS_QPNP_ADC_CURRENT=y | |
+CONFIG_THERMAL=y | |
+CONFIG_THERMAL_TSENS8974=y | |
+CONFIG_THERMAL_MONITOR=y | |
+CONFIG_THERMAL_QPNP=y | |
+CONFIG_THERMAL_QPNP_ADC_TM=y | |
+CONFIG_WCD9320_CODEC=y | |
+CONFIG_REGULATOR_FIXED_VOLTAGE=y | |
+CONFIG_REGULATOR_STUB=y | |
+CONFIG_REGULATOR_QPNP=y | |
+CONFIG_MEDIA_SUPPORT=y | |
+CONFIG_MEDIA_CONTROLLER=y | |
+CONFIG_VIDEO_DEV=y | |
+CONFIG_VIDEO_V4L2_SUBDEV_API=y | |
+# CONFIG_MSM_CAMERA is not set | |
+CONFIG_MSM_CAMERA_SENSOR=y | |
+CONFIG_MSM_EEPROM=y | |
+CONFIG_MSM_CPP=y | |
+CONFIG_MSM_CCI=y | |
+CONFIG_MSM_CSI30_HEADER=y | |
+CONFIG_MSM_CSIPHY=y | |
+CONFIG_MSM_CSID=y | |
+CONFIG_MSM_ISPIF=y | |
+CONFIG_MSMB_CAMERA=y | |
+CONFIG_IMX179=y | |
+CONFIG_OIS_ROHM_BU24205GWL=y | |
+CONFIG_OIS_ONSEMI_LC898111A=y | |
+CONFIG_MT9M114B=y | |
+CONFIG_MSMB_JPEG=y | |
+CONFIG_MSM_VIDC_V4L2=y | |
+# CONFIG_MEDIA_TUNER_SIMPLE is not set | |
+# CONFIG_MEDIA_TUNER_TDA8290 is not set | |
+# CONFIG_MEDIA_TUNER_TDA827X is not set | |
+# CONFIG_MEDIA_TUNER_TDA18271 is not set | |
+# CONFIG_MEDIA_TUNER_TDA9887 is not set | |
+# CONFIG_MEDIA_TUNER_TEA5761 is not set | |
+# CONFIG_MEDIA_TUNER_TEA5767 is not set | |
+# CONFIG_MEDIA_TUNER_MT20XX is not set | |
+# CONFIG_MEDIA_TUNER_MT2060 is not set | |
+# CONFIG_MEDIA_TUNER_MT2063 is not set | |
+# CONFIG_MEDIA_TUNER_MT2266 is not set | |
+# CONFIG_MEDIA_TUNER_MT2131 is not set | |
+# CONFIG_MEDIA_TUNER_QT1010 is not set | |
+# CONFIG_MEDIA_TUNER_XC2028 is not set | |
+# CONFIG_MEDIA_TUNER_XC5000 is not set | |
+# CONFIG_MEDIA_TUNER_XC4000 is not set | |
+# CONFIG_MEDIA_TUNER_MXL5005S is not set | |
+# CONFIG_MEDIA_TUNER_MXL5007T is not set | |
+# CONFIG_MEDIA_TUNER_MC44S803 is not set | |
+# CONFIG_MEDIA_TUNER_MAX2165 is not set | |
+# CONFIG_MEDIA_TUNER_TDA18218 is not set | |
+# CONFIG_MEDIA_TUNER_TDA18212 is not set | |
+CONFIG_VIDEOBUF2_MSM_MEM=y | |
+CONFIG_USB_VIDEO_CLASS=y | |
+# CONFIG_USB_GSPCA is not set | |
+CONFIG_V4L_PLATFORM_DRIVERS=y | |
+CONFIG_ION=y | |
+CONFIG_ION_MSM=y | |
+CONFIG_MSM_KGSL=y | |
+CONFIG_KGSL_PER_PROCESS_PAGE_TABLE=y | |
+CONFIG_FB=y | |
+CONFIG_FB_MSM=y | |
+# CONFIG_FB_MSM_BACKLIGHT is not set | |
+CONFIG_FB_MSM_MDSS=y | |
+CONFIG_FB_MSM_MDSS_WRITEBACK=y | |
+CONFIG_FB_MSM_MDSS_HDMI_PANEL=y | |
+CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
+# CONFIG_LCD_CLASS_DEVICE is not set | |
+# CONFIG_BACKLIGHT_GENERIC is not set | |
+CONFIG_BACKLIGHT_LM3630=y | |
+CONFIG_SLIMPORT_ANX7808=y | |
+CONFIG_SOUND=y | |
+CONFIG_SND=y | |
+CONFIG_SND_USB_AUDIO=y | |
+CONFIG_SND_SOC=y | |
+CONFIG_SND_SOC_MSM8974=y | |
+CONFIG_SND_SOC_MSM_HDMI_CODEC_RX=y | |
+CONFIG_UHID=y | |
+CONFIG_USB_HIDDEV=y | |
+CONFIG_HID_A4TECH=y | |
+CONFIG_HID_ACRUX=y | |
+CONFIG_HID_APPLE=y | |
+CONFIG_HID_BELKIN=y | |
+CONFIG_HID_CHERRY=y | |
+CONFIG_HID_CHICONY=y | |
+CONFIG_HID_PRODIKEYS=y | |
+CONFIG_HID_CYPRESS=y | |
+CONFIG_HID_DRAGONRISE=y | |
+CONFIG_HID_EMS_FF=y | |
+CONFIG_HID_ELECOM=y | |
+CONFIG_HID_EZKEY=y | |
+CONFIG_HID_HOLTEK=y | |
+CONFIG_HID_KEYTOUCH=y | |
+CONFIG_HID_KYE=y | |
+CONFIG_HID_UCLOGIC=y | |
+CONFIG_HID_WALTOP=y | |
+CONFIG_HID_GYRATION=y | |
+CONFIG_HID_TWINHAN=y | |
+CONFIG_HID_KENSINGTON=y | |
+CONFIG_HID_LCPOWER=y | |
+CONFIG_HID_LOGITECH=y | |
+CONFIG_HID_MAGICMOUSE=y | |
+CONFIG_HID_MICROSOFT=y | |
+CONFIG_HID_MONTEREY=y | |
+CONFIG_HID_MULTITOUCH=y | |
+CONFIG_HID_NTRIG=y | |
+CONFIG_HID_ORTEK=y | |
+CONFIG_HID_PANTHERLORD=y | |
+CONFIG_HID_PETALYNX=y | |
+CONFIG_HID_PICOLCD=y | |
+CONFIG_HID_PRIMAX=y | |
+CONFIG_HID_ROCCAT=y | |
+CONFIG_HID_SAITEK=y | |
+CONFIG_HID_SAMSUNG=y | |
+CONFIG_HID_SONY=y | |
+CONFIG_HID_SPEEDLINK=y | |
+CONFIG_HID_SUNPLUS=y | |
+CONFIG_HID_GREENASIA=y | |
+CONFIG_HID_SMARTJOYPLUS=y | |
+CONFIG_HID_TIVO=y | |
+CONFIG_HID_TOPSEED=y | |
+CONFIG_HID_THRUSTMASTER=y | |
+CONFIG_HID_WACOM=y | |
+CONFIG_HID_WACOM_POWER_SUPPLY=y | |
+CONFIG_HID_WIIMOTE=y | |
+CONFIG_HID_ZEROPLUS=y | |
+CONFIG_HID_ZYDACRON=y | |
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | |
+CONFIG_USB_SUSPEND=y | |
+CONFIG_USB_XHCI_HCD=y | |
+CONFIG_USB_ACM=y | |
+CONFIG_USB_PRINTER=y | |
+CONFIG_USB_STORAGE=y | |
+CONFIG_USB_STORAGE_DATAFAB=y | |
+CONFIG_USB_STORAGE_FREECOM=y | |
+CONFIG_USB_STORAGE_ISD200=y | |
+CONFIG_USB_STORAGE_USBAT=y | |
+CONFIG_USB_STORAGE_SDDR09=y | |
+CONFIG_USB_STORAGE_SDDR55=y | |
+CONFIG_USB_STORAGE_JUMPSHOT=y | |
+CONFIG_USB_STORAGE_ALAUDA=y | |
+CONFIG_USB_STORAGE_ONETOUCH=y | |
+CONFIG_USB_STORAGE_KARMA=y | |
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y | |
+CONFIG_USB_STORAGE_ENE_UB6250=y | |
+CONFIG_USB_TRANCEVIBRATOR=y | |
+CONFIG_USB_GADGET=y | |
+CONFIG_USB_GADGET_DEBUG_FILES=y | |
+CONFIG_USB_DWC3_MSM=y | |
+CONFIG_USB_G_ANDROID=y | |
+CONFIG_MMC=y | |
+CONFIG_MMC_PERF_PROFILING=y | |
+CONFIG_MMC_UNSAFE_RESUME=y | |
+CONFIG_MMC_CLKGATE=y | |
+CONFIG_MMC_PARANOID_SD_INIT=y | |
+CONFIG_MMC_BLOCK_MINORS=32 | |
+# CONFIG_MMC_BLOCK_BOUNCE is not set | |
+CONFIG_MMC_BLOCK_TEST=y | |
+CONFIG_MMC_SDHCI=y | |
+CONFIG_MMC_SDHCI_PLTFM=y | |
+CONFIG_MMC_SDHCI_MSM=y | |
+CONFIG_MMC_SDHCI_MSM_DISABLE_HPI=y | |
+CONFIG_MMC_MSM=y | |
+CONFIG_MMC_MSM_SPS_SUPPORT=y | |
+CONFIG_LEDS_GPIO=y | |
+CONFIG_LEDS_QPNP=y | |
+CONFIG_LEDS_TRIGGERS=y | |
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y | |
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | |
+CONFIG_SWITCH=y | |
+CONFIG_SWITCH_MAX1462X=y | |
+CONFIG_RTC_CLASS=y | |
+# CONFIG_RTC_DRV_MSM is not set | |
+CONFIG_RTC_DRV_QPNP=y | |
+CONFIG_UIO=y | |
+CONFIG_UIO_MSM_SHAREDMEM=y | |
+CONFIG_STAGING=y | |
+CONFIG_ANDROID=y | |
+CONFIG_ANDROID_BINDER_IPC=y | |
+CONFIG_ASHMEM=y | |
+CONFIG_ANDROID_RAM_CONSOLE=y | |
+CONFIG_PERSISTENT_TRACER=y | |
+CONFIG_ANDROID_TIMED_GPIO=y | |
+CONFIG_ANDROID_LOW_MEMORY_KILLER=y | |
+CONFIG_SPS=y | |
+CONFIG_USB_BAM=y | |
+CONFIG_SPS_SUPPORT_BAMDMA=y | |
+CONFIG_SPS_SUPPORT_NDP_BAM=y | |
+CONFIG_QPNP_PWM=y | |
+CONFIG_QPNP_POWER_ON=y | |
+CONFIG_QPNP_CLKDIV=y | |
+CONFIG_QPNP_REVID=y | |
+CONFIG_QPNP_COINCELL=y | |
+CONFIG_MSM_IOMMU_V1=y | |
+CONFIG_IOMMU_PGTABLES_L2=y | |
+CONFIG_EXT2_FS=y | |
+CONFIG_EXT2_FS_XATTR=y | |
+CONFIG_EXT3_FS=y | |
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | |
+CONFIG_EXT4_FS=y | |
+CONFIG_EXT4_FS_SECURITY=y | |
+CONFIG_FUSE_FS=y | |
+CONFIG_VFAT_FS=y | |
+CONFIG_TMPFS=y | |
+# CONFIG_MISC_FILESYSTEMS is not set | |
+CONFIG_CIFS=y | |
+CONFIG_CIFS_XATTR=y | |
+CONFIG_CIFS_POSIX=y | |
+CONFIG_NLS_CODEPAGE_437=y | |
+CONFIG_NLS_ASCII=y | |
+CONFIG_NLS_ISO8859_1=y | |
+CONFIG_NLS_UTF8=y | |
+CONFIG_PRINTK_TIME=y | |
+CONFIG_MAGIC_SYSRQ=y | |
+# CONFIG_SCHED_DEBUG is not set | |
+CONFIG_SCHEDSTATS=y | |
+CONFIG_TIMER_STATS=y | |
+# CONFIG_DEBUG_PREEMPT is not set | |
+CONFIG_DEBUG_MUTEXES=y | |
+CONFIG_DEBUG_INFO=y | |
+# CONFIG_RCU_CPU_STALL_VERBOSE is not set | |
+CONFIG_DYNAMIC_DEBUG=y | |
+CONFIG_PANIC_ON_DATA_CORRUPTION=y | |
+CONFIG_PID_IN_CONTEXTIDR=y | |
+CONFIG_KEYS=y | |
+CONFIG_SECCOMP=y | |
+CONFIG_SECURITY=y | |
+CONFIG_SECURITY_NETWORK=y | |
+CONFIG_LSM_MMAP_MIN_ADDR=4096 | |
+CONFIG_SECURITY_SELINUX=y | |
+CONFIG_CRYPTO_NULL=y | |
+CONFIG_CRYPTO_TWOFISH=y | |
+# CONFIG_CRYPTO_ANSI_CPRNG is not set | |
+CONFIG_SLABINFO=y | |
+CONFIG_CRYPTO_AES_ARM=y | |
+CONFIG_KGDB=y | |
+CONFIG_KPROBES=y | |
+CONFIG_WATCHDOG=n | |
+CONFIG_FIQ_DEBUGGER=n | |
+CONFIG_CONSOLE_POLL=n | |
+ | |
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c | |
index 2b42a01..ef018fb 100644 | |
--- a/drivers/tty/serial/kgdboc.c | |
+++ b/drivers/tty/serial/kgdboc.c | |
@@ -29,6 +29,7 @@ static struct kgdb_io kgdboc_io_ops; | |
static int configured = -1; | |
static char config[MAX_CONFIG_LEN]; | |
+static int config_retry_time = 0; | |
static struct kparam_string kps = { | |
.string = config, | |
.maxlen = MAX_CONFIG_LEN, | |
@@ -150,6 +151,28 @@ static void cleanup_kgdboc(void) | |
kgdb_unregister_io_module(&kgdboc_io_ops); | |
} | |
+static int kgdbretry_option_setup(char *opt) | |
+{ | |
+ if (strlen(opt) > MAX_CONFIG_LEN) { | |
+ printk(KERN_ERR "kgdbretry: config string too long\n"); | |
+ return -ENOSPC; | |
+ } | |
+ config_retry_time = simple_strtoul(opt, NULL, 10); | |
+ | |
+ return 0; | |
+} | |
+ | |
+__setup("kgdbretry=", kgdbretry_option_setup); | |
+ | |
+static int configure_kgdboc(void); | |
+static void ttycheck_func(struct work_struct *work) | |
+{ | |
+ config_retry_time = 0; | |
+ configure_kgdboc(); | |
+} | |
+ | |
+static DECLARE_DELAYED_WORK(ttycheck_work, ttycheck_func); | |
+ | |
static int configure_kgdboc(void) | |
{ | |
struct tty_driver *p; | |
@@ -176,8 +199,15 @@ static int configure_kgdboc(void) | |
goto do_register; | |
p = tty_find_polling_driver(cptr, &tty_line); | |
- if (!p) | |
+ if (!p) { | |
+ printk(KERN_INFO "kgdb will retry in %d secs\n", config_retry_time); | |
+ if (config_retry_time > 0) { | |
+ INIT_DELAYED_WORK(&ttycheck_work, ttycheck_func); | |
+ schedule_delayed_work(&ttycheck_work, config_retry_time * HZ); | |
+ return -ENODEV; | |
+ } | |
goto noconfig; | |
+ } | |
cons = console_drivers; | |
while (cons) { | |
@@ -203,6 +233,7 @@ do_register: | |
return 0; | |
noconfig: | |
+ printk(KERN_ERR "kgdb failed to initialize\n"); | |
config[0] = 0; | |
configured = 0; | |
cleanup_kgdboc(); | |
@@ -325,5 +356,6 @@ module_init(init_kgdboc); | |
module_exit(cleanup_kgdboc); | |
module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644); | |
MODULE_PARM_DESC(kgdboc, "<serial_device>[,baud]"); | |
+MODULE_PARM_DESC(kgdbretry, "<delay in seconds> before retrying tty"); | |
MODULE_DESCRIPTION("KGDB Console TTY Driver"); | |
MODULE_LICENSE("GPL"); | |
diff --git a/drivers/tty/serial/msm_serial_hs_lite.c b/drivers/tty/serial/msm_serial_hs_lite.c | |
index 2f08461..487a93a 100644 | |
--- a/drivers/tty/serial/msm_serial_hs_lite.c | |
+++ b/drivers/tty/serial/msm_serial_hs_lite.c | |
@@ -772,6 +772,10 @@ static void msm_hsl_reset(struct uart_port *port) | |
msm_hsl_write(port, RESET_BREAK_INT, regmap[vid][UARTDM_CR]); | |
msm_hsl_write(port, RESET_CTS, regmap[vid][UARTDM_CR]); | |
msm_hsl_write(port, RFR_LOW, regmap[vid][UARTDM_CR]); | |
+ | |
+ /* Disable DM modes */ | |
+ msm_hsl_write(port, 0, regmap[vid][UARTDM_DMEN]); | |
+ | |
} | |
static unsigned int msm_hsl_get_mctrl(struct uart_port *port) | |
@@ -1306,6 +1310,146 @@ static void msm_hsl_power(struct uart_port *port, unsigned int state, | |
} | |
} | |
+ | |
+ | |
+ | |
+ | |
+ | |
+#ifdef CONFIG_CONSOLE_POLL | |
+ | |
+/* defines from msm_serial.h */ | |
+#define UARTDM_DMEN_RX_SC_ENABLE BIT(5) | |
+#define UARTDM_DMEN_TX_SC_ENABLE BIT(4) | |
+ | |
+#define UARTDM_RXFS_BUF_SHIFT 0x7 | |
+#define UARTDM_RXFS_BUF_MASK 0x7 | |
+ | |
+static int msm_poll_init(struct uart_port *port) | |
+{ | |
+ unsigned int vid; | |
+ | |
+ vid = UART_TO_MSM(port)->ver_id; | |
+ | |
+ /* Enable single character mode on RX FIFO */ | |
+ /* A later patch from David Boyd suggests this causes problems... */ | |
+ /*msm_hsl_write(port, UARTDM_DMEN_RX_SC_ENABLE, regmap[vid][UARTDM_DMEN]);*/ | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int msm_poll_get_char_dm(struct uart_port *port) | |
+{ | |
+ int c; | |
+ static u32 slop; | |
+ static int count; | |
+ unsigned char *sp = (unsigned char *)&slop; | |
+ unsigned int vid; | |
+ | |
+ vid = UART_TO_MSM(port)->ver_id; | |
+ | |
+ /* Check if a previous read had more than one char */ | |
+ if (count) { | |
+ c = sp[sizeof(slop) - count]; | |
+ count--; | |
+ /* Or if FIFO is empty */ | |
+ } else if (!(msm_hsl_read(port, regmap[vid][UARTDM_SR]) & UARTDM_SR_RXRDY_BMSK)) { /* bit 0 */ | |
+ /* | |
+ * If RX packing buffer has less than a word, force stale to | |
+ * push contents into RX FIFO | |
+ */ | |
+ count = msm_hsl_read(port, regmap[vid][UARTDM_RXFS]); | |
+ | |
+ count = (count >> UARTDM_RXFS_BUF_SHIFT) & UARTDM_RXFS_BUF_MASK; | |
+ if (count) { | |
+ msm_hsl_write(port, FORCE_STALE_EVENT, regmap[vid][UARTDM_CR]); | |
+ slop = msm_hsl_read(port, regmap[vid][UARTDM_RF]); | |
+ c = sp[0]; | |
+ count--; | |
+ | |
+ msm_hsl_write(port, RESET_STALE_INT, regmap[vid][UARTDM_CR]); | |
+ msm_hsl_write(port, 0xFF, regmap[vid][UARTDM_DMRX]); | |
+ msm_hsl_write(port, STALE_EVENT_ENABLE, regmap[vid][UARTDM_CR]); | |
+ | |
+ } else { | |
+ c = NO_POLL_CHAR; | |
+ } | |
+ /* FIFO has a word */ | |
+ } else { | |
+ slop = msm_hsl_read(port, regmap[vid][UARTDM_RF]); | |
+ c = sp[0]; | |
+ count = sizeof(slop) - 1; | |
+ } | |
+ | |
+ return c; | |
+} | |
+ | |
+ | |
+static int msm_poll_get_char(struct uart_port *port) | |
+{ | |
+ u32 imr; | |
+ int c; | |
+ unsigned int vid; | |
+ | |
+ vid = UART_TO_MSM(port)->ver_id; | |
+ | |
+ /* Disable all interrupts */ | |
+ imr = msm_hsl_read(port, regmap[vid][UARTDM_IMR]); | |
+ msm_hsl_write(port, 0, regmap[vid][UARTDM_IMR]); | |
+ | |
+ | |
+ c = msm_poll_get_char_dm(port); | |
+ | |
+ | |
+ /* Enable interrupts */ | |
+ msm_hsl_write(port, imr, regmap[vid][UARTDM_IMR]); | |
+ | |
+ return c; | |
+} | |
+ | |
+static void reset_dm_count(struct uart_port *port, int count) | |
+{ | |
+ unsigned int vid; | |
+ | |
+ vid = UART_TO_MSM(port)->ver_id; | |
+ | |
+ wait_for_xmitr(port); | |
+ msm_hsl_write(port, count, regmap[vid][UARTDM_NCF_TX]); | |
+ msm_hsl_read(port, regmap[vid][UARTDM_NCF_TX]); | |
+} | |
+ | |
+static void msm_poll_put_char(struct uart_port *port, unsigned char c) | |
+{ | |
+ u32 imr; | |
+ unsigned int vid; | |
+ | |
+ vid = UART_TO_MSM(port)->ver_id; | |
+ | |
+ /* Disable all interrupts */ | |
+ imr = msm_hsl_read(port, regmap[vid][UARTDM_IMR]); | |
+ msm_hsl_write(port, 0, regmap[vid][UARTDM_IMR]); | |
+ | |
+ /*if (msm_port->is_uartdm)*/ | |
+ reset_dm_count(port, 1); | |
+ | |
+ /* Wait until FIFO is empty */ | |
+ while (!(msm_hsl_read(port, regmap[vid][UARTDM_SR]) & UARTDM_SR_TXRDY_BMSK)) | |
+ cpu_relax(); | |
+ | |
+ /* Write a character */ | |
+ msm_hsl_write(port, c, regmap[vid][UARTDM_TF]); | |
+ | |
+ /* Wait until FIFO is empty */ | |
+ while (!(msm_hsl_read(port, regmap[vid][UARTDM_SR]) & UARTDM_SR_TXRDY_BMSK)) | |
+ cpu_relax(); | |
+ | |
+ /* Enable interrupts */ | |
+ msm_hsl_write(port, imr, regmap[vid][UARTDM_IMR]); | |
+ | |
+ return; | |
+} | |
+#endif | |
+ | |
+ | |
static struct uart_ops msm_hsl_uart_pops = { | |
.tx_empty = msm_hsl_tx_empty, | |
.set_mctrl = msm_hsl_set_mctrl, | |
@@ -1324,6 +1468,11 @@ static struct uart_ops msm_hsl_uart_pops = { | |
.config_port = msm_hsl_config_port, | |
.verify_port = msm_hsl_verify_port, | |
.pm = msm_hsl_power, | |
+#ifdef CONFIG_CONSOLE_POLL | |
+ .poll_init = msm_poll_init, | |
+ .poll_get_char = msm_poll_get_char, | |
+ .poll_put_char = msm_poll_put_char, | |
+#endif | |
}; | |
static struct msm_hsl_port msm_hsl_uart_ports[] = { | |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h | |
index 828c803..dc9502a 100644 | |
--- a/include/linux/serial_core.h | |
+++ b/include/linux/serial_core.h | |
@@ -274,6 +274,7 @@ struct uart_ops { | |
int (*verify_port)(struct uart_port *, struct serial_struct *); | |
int (*ioctl)(struct uart_port *, unsigned int, unsigned long); | |
#ifdef CONFIG_CONSOLE_POLL | |
+ int (*poll_init)(struct uart_port *); | |
void (*poll_put_char)(struct uart_port *, unsigned char); | |
int (*poll_get_char)(struct uart_port *); | |
#endif | |
-- | |
1.9.1 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment