mirror of
https://gitee.com/open-loongarch/linux-6.12.git
synced 2026-10-25 12:37:11 +08:00
update to 9f12731260
1.dts:ls2k300:Correct label of spi 2.ls2k300:Add a defconfig for rt 3.fix SD-card CMD48 stuck 4.fix i2c hang when touch for a long time
This commit is contained in:
@@ -747,7 +747,7 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi2: spi@0x1601c000 {
|
||||
spi2: spi@0x1610c000 {
|
||||
compatible = "loongson,ls-spi-io";
|
||||
reg = <0 0x1610c000 0 0x2000>;
|
||||
#address-cells = <1>;
|
||||
@@ -758,7 +758,7 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi3: spi@0x1601e000 {
|
||||
spi3: spi@0x1610e000 {
|
||||
compatible = "loongson,ls-spi-io";
|
||||
reg = <0 0x1610e000 0 0x2000>;
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -6,7 +6,7 @@ CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_PREEMPT_RT=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_TASKSTATS=y
|
||||
@@ -349,7 +349,6 @@ CONFIG_EFI_ZBOOT=y
|
||||
CONFIG_EFI_BOOTLOADER_CONTROL=m
|
||||
CONFIG_EFI_CAPSULE_LOADER=m
|
||||
CONFIG_EFI_TEST=m
|
||||
# CONFIG_EFI_DISABLE_RUNTIME is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
|
||||
@@ -0,0 +1,800 @@
|
||||
CONFIG_LOCALVERSION=".lsgd"
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_PREEMPT_RT=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_TASKSTATS=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASK_XACCT=y
|
||||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_CFS_BANDWIDTH=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_CGROUP_PIDS=y
|
||||
CONFIG_CGROUP_RDMA=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_CGROUP_PERF=y
|
||||
CONFIG_CGROUP_BPF=y
|
||||
CONFIG_CGROUP_MISC=y
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_CHECKPOINT_RESTORE=y
|
||||
CONFIG_SCHED_AUTOGROUP=y
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_LOONGSON_2K300=y
|
||||
CONFIG_HZ_1000=y
|
||||
CONFIG_CMDLINE="fbcon=logo-pos:center fbcon=logo-count:1"
|
||||
CONFIG_CMDLINE_EXTEND=y
|
||||
CONFIG_BUILTIN_DTB=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM=y
|
||||
# CONFIG_ACPI_AC is not set
|
||||
# CONFIG_ACPI_BATTERY is not set
|
||||
# CONFIG_ACPI_BUTTON is not set
|
||||
# CONFIG_ACPI_FAN is not set
|
||||
# CONFIG_ACPI_PROCESSOR is not set
|
||||
# CONFIG_ACPI_TABLE_UPGRADE is not set
|
||||
CONFIG_JUMP_LABEL=y
|
||||
# CONFIG_RANDOMIZE_KSTACK_OFFSET is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_FORCE_LOAD=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_BLK_DEV_INTEGRITY=y
|
||||
CONFIG_BLK_DEV_ZONED=y
|
||||
CONFIG_BLK_DEV_THROTTLING=y
|
||||
CONFIG_BLK_WBT=y
|
||||
CONFIG_BLK_CGROUP_IOLATENCY=y
|
||||
CONFIG_BLK_CGROUP_IOCOST=y
|
||||
CONFIG_BLK_CGROUP_IOPRIO=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_CMDLINE_PARTITION=y
|
||||
CONFIG_ZSWAP=y
|
||||
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y
|
||||
CONFIG_ZBUD=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_SPARSEMEM_MANUAL=y
|
||||
CONFIG_PAGE_REPORTING=y
|
||||
CONFIG_KSM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_SYSFS=y
|
||||
CONFIG_CMA_AREAS=20
|
||||
CONFIG_USERFAULTFD=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_TLS=m
|
||||
CONFIG_TLS_DEVICE=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_XDP_SOCKETS=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPGRE_BROADCAST=y
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
CONFIG_INET_ESPINTCP=y
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_UDP_DIAG=y
|
||||
CONFIG_TCP_CONG_ADVANCED=y
|
||||
CONFIG_TCP_CONG_BBR=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_IPV6_ROUTE_INFO=y
|
||||
CONFIG_INET6_AH=y
|
||||
CONFIG_INET6_ESP=y
|
||||
CONFIG_INET6_ESP_OFFLOAD=y
|
||||
CONFIG_INET6_ESPINTCP=y
|
||||
CONFIG_INET6_IPCOMP=y
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
CONFIG_MPTCP=y
|
||||
CONFIG_NETWORK_PHY_TIMESTAMPING=y
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_BRIDGE_NETFILTER=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_CT_NETLINK=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=y
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_CONNLIMIT=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_MASQ=m
|
||||
CONFIG_NFT_REDIR=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_TUNNEL=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_QUOTA=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_FIB_INET=m
|
||||
CONFIG_NFT_SOCKET=m
|
||||
CONFIG_NFT_OSF=m
|
||||
CONFIG_NFT_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CT=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LED=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CPU=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DCCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPVS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_VS=m
|
||||
CONFIG_IP_VS_IPV6=y
|
||||
CONFIG_IP_VS_PROTO_TCP=y
|
||||
CONFIG_IP_VS_PROTO_UDP=y
|
||||
CONFIG_IP_VS_PROTO_ESP=y
|
||||
CONFIG_IP_VS_PROTO_AH=y
|
||||
CONFIG_IP_VS_PROTO_SCTP=y
|
||||
CONFIG_IP_VS_RR=m
|
||||
CONFIG_IP_VS_WRR=m
|
||||
CONFIG_IP_VS_NFCT=y
|
||||
CONFIG_NFT_DUP_IPV4=m
|
||||
CONFIG_NFT_FIB_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=y
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_SECURITY=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NFT_FIB_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=y
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_MATCH_SRH=m
|
||||
CONFIG_IP6_NF_FILTER=y
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_IP6_NF_SECURITY=m
|
||||
CONFIG_IP6_NF_NAT=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_NF_CONNTRACK_BRIDGE=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
CONFIG_BRIDGE_EBT_T_NAT=m
|
||||
CONFIG_BRIDGE_EBT_ARP=m
|
||||
CONFIG_BRIDGE_EBT_IP=m
|
||||
CONFIG_BRIDGE_EBT_IP6=m
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_RDS=y
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_L2TP_V3=y
|
||||
CONFIG_L2TP_IP=m
|
||||
CONFIG_L2TP_ETH=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_VLAN_8021Q_GVRP=y
|
||||
CONFIG_VLAN_8021Q_MVRP=y
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_NET_SCH_HTB=m
|
||||
CONFIG_NET_SCH_PRIO=m
|
||||
CONFIG_NET_SCH_SFQ=m
|
||||
CONFIG_NET_SCH_TBF=m
|
||||
CONFIG_NET_SCH_NETEM=m
|
||||
CONFIG_NET_SCH_INGRESS=m
|
||||
CONFIG_NET_CLS_BASIC=m
|
||||
CONFIG_NET_CLS_FW=m
|
||||
CONFIG_NET_CLS_U32=m
|
||||
CONFIG_NET_CLS_CGROUP=m
|
||||
CONFIG_NET_CLS_BPF=m
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
CONFIG_NET_ACT_POLICE=m
|
||||
CONFIG_NET_ACT_GACT=m
|
||||
CONFIG_NET_ACT_MIRRED=m
|
||||
CONFIG_NET_ACT_NAT=m
|
||||
CONFIG_NET_ACT_BPF=m
|
||||
CONFIG_OPENVSWITCH=m
|
||||
CONFIG_VSOCKETS=m
|
||||
CONFIG_VIRTIO_VSOCKETS=m
|
||||
CONFIG_NETLINK_DIAG=y
|
||||
CONFIG_CGROUP_NET_PRIO=y
|
||||
CONFIG_BPF_STREAM_PARSER=y
|
||||
CONFIG_CAN=y
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=m
|
||||
CONFIG_BT_BNEP_MC_FILTER=y
|
||||
CONFIG_BT_BNEP_PROTO_FILTER=y
|
||||
CONFIG_BT_HIDP=m
|
||||
CONFIG_BT_HCIBTUSB=m
|
||||
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
|
||||
CONFIG_BT_HCIBTUSB_MTK=y
|
||||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_BCSP=y
|
||||
CONFIG_BT_HCIUART_ATH3K=y
|
||||
CONFIG_BT_HCIUART_INTEL=y
|
||||
CONFIG_BT_HCIUART_AG6XX=y
|
||||
CONFIG_BT_HCIBCM203X=m
|
||||
CONFIG_BT_HCIBPA10X=m
|
||||
CONFIG_BT_HCIBFUSB=m
|
||||
CONFIG_BT_HCIVHCI=m
|
||||
CONFIG_BT_MRVL=m
|
||||
CONFIG_BT_ATH3K=m
|
||||
CONFIG_BT_VIRTIO=m
|
||||
CONFIG_CFG80211=m
|
||||
CONFIG_CFG80211_WEXT=y
|
||||
CONFIG_MAC80211=m
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_RFKILL_INPUT=y
|
||||
# CONFIG_PCIEASPM is not set
|
||||
# CONFIG_VGA_ARB is not set
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCI_SW_SWITCHTEC=m
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_FW_LOADER_COMPRESS=y
|
||||
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
|
||||
CONFIG_EFI_ZBOOT=y
|
||||
CONFIG_EFI_BOOTLOADER_CONTROL=m
|
||||
CONFIG_EFI_CAPSULE_LOADER=m
|
||||
CONFIG_EFI_TEST=m
|
||||
# CONFIG_EFI_DISABLE_RUNTIME is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_BLOCK2MTD=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=32768
|
||||
CONFIG_VIRTIO_BLK=y
|
||||
CONFIG_EEPROM_AT24=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_BONDING=m
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_WIREGUARD=m
|
||||
CONFIG_MACVLAN=m
|
||||
CONFIG_MACVTAP=m
|
||||
CONFIG_IPVLAN=m
|
||||
CONFIG_VXLAN=y
|
||||
CONFIG_TUN=m
|
||||
CONFIG_VETH=m
|
||||
CONFIG_VIRTIO_NET=m
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_NET_VENDOR_ADAPTEC is not set
|
||||
# CONFIG_NET_VENDOR_AGERE is not set
|
||||
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
||||
# CONFIG_NET_VENDOR_ALTEON is not set
|
||||
# CONFIG_NET_VENDOR_AMAZON is not set
|
||||
# CONFIG_NET_VENDOR_AMD is not set
|
||||
# CONFIG_NET_VENDOR_AQUANTIA is not set
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_ASIX is not set
|
||||
# CONFIG_NET_VENDOR_ATHEROS is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CADENCE is not set
|
||||
# CONFIG_NET_VENDOR_CAVIUM is not set
|
||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||
# CONFIG_NET_VENDOR_CISCO is not set
|
||||
# CONFIG_NET_VENDOR_CORTINA is not set
|
||||
# CONFIG_NET_VENDOR_DAVICOM is not set
|
||||
# CONFIG_NET_VENDOR_DEC is not set
|
||||
# CONFIG_NET_VENDOR_DLINK is not set
|
||||
# CONFIG_NET_VENDOR_EMULEX is not set
|
||||
# CONFIG_NET_VENDOR_ENGLEDER is not set
|
||||
# CONFIG_NET_VENDOR_EZCHIP is not set
|
||||
# CONFIG_NET_VENDOR_FUNGIBLE is not set
|
||||
# CONFIG_NET_VENDOR_GOOGLE is not set
|
||||
# CONFIG_NET_VENDOR_HUAWEI is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_ADI is not set
|
||||
# CONFIG_NET_VENDOR_LITEX is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MELLANOX is not set
|
||||
# CONFIG_NET_VENDOR_META is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
||||
# CONFIG_NET_VENDOR_MICROSOFT is not set
|
||||
# CONFIG_NET_VENDOR_MYRI is not set
|
||||
# CONFIG_NET_VENDOR_NI is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_NETERION is not set
|
||||
# CONFIG_NET_VENDOR_NETRONOME is not set
|
||||
# CONFIG_NET_VENDOR_NVIDIA is not set
|
||||
# CONFIG_NET_VENDOR_OKI is not set
|
||||
# CONFIG_NET_VENDOR_PENSANDO is not set
|
||||
# CONFIG_NET_VENDOR_QLOGIC is not set
|
||||
# CONFIG_NET_VENDOR_BROCADE is not set
|
||||
# CONFIG_NET_VENDOR_QUALCOMM is not set
|
||||
# CONFIG_NET_VENDOR_RDC is not set
|
||||
# CONFIG_NET_VENDOR_REALTEK is not set
|
||||
# CONFIG_NET_VENDOR_RENESAS is not set
|
||||
# CONFIG_NET_VENDOR_ROCKER is not set
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SILAN is not set
|
||||
# CONFIG_NET_VENDOR_SIS is not set
|
||||
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
# CONFIG_NET_VENDOR_SOCIONEXT is not set
|
||||
CONFIG_STMMAC_ETH=y
|
||||
# CONFIG_DWMAC_LOONGSON is not set
|
||||
# CONFIG_NET_VENDOR_SUN is not set
|
||||
# CONFIG_NET_VENDOR_SYNOPSYS is not set
|
||||
# CONFIG_NET_VENDOR_TEHUTI is not set
|
||||
# CONFIG_NET_VENDOR_TI is not set
|
||||
# CONFIG_NET_VENDOR_VERTEXCOM is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WANGXUN is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
# CONFIG_NET_VENDOR_XILINX is not set
|
||||
CONFIG_MOTORCOMM_PHY=y
|
||||
CONFIG_REALTEK_PHY=m
|
||||
CONFIG_CAN_LSCANFD=y
|
||||
CONFIG_CAN_LSCANFD_PLATFORM=y
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_USB_RTL8150=m
|
||||
CONFIG_USB_RTL8152=m
|
||||
# CONFIG_WLAN_VENDOR_ADMTEK is not set
|
||||
# CONFIG_WLAN_VENDOR_ATH is not set
|
||||
# CONFIG_WLAN_VENDOR_ATMEL is not set
|
||||
# CONFIG_WLAN_VENDOR_BROADCOM is not set
|
||||
# CONFIG_WLAN_VENDOR_INTEL is not set
|
||||
# CONFIG_WLAN_VENDOR_INTERSIL is not set
|
||||
# CONFIG_WLAN_VENDOR_MARVELL is not set
|
||||
# CONFIG_WLAN_VENDOR_MEDIATEK is not set
|
||||
# CONFIG_WLAN_VENDOR_MICROCHIP is not set
|
||||
# CONFIG_WLAN_VENDOR_PURELIFI is not set
|
||||
CONFIG_RT2X00=m
|
||||
CONFIG_RT2800USB=m
|
||||
# CONFIG_RT2800USB_RT33XX is not set
|
||||
# CONFIG_RT2800USB_RT35XX is not set
|
||||
CONFIG_RTL8187=m
|
||||
CONFIG_RTL8192CE=m
|
||||
CONFIG_RTL8192SE=m
|
||||
CONFIG_RTL8192DE=m
|
||||
CONFIG_RTL8723AE=m
|
||||
CONFIG_RTL8723BE=m
|
||||
CONFIG_RTL8188EE=m
|
||||
CONFIG_RTL8192EE=m
|
||||
CONFIG_RTL8821AE=m
|
||||
CONFIG_RTL8192CU=m
|
||||
# CONFIG_RTLWIFI_DEBUG is not set
|
||||
CONFIG_RTL8XXXU=m
|
||||
CONFIG_RTW88=m
|
||||
CONFIG_RTW88_8822BU=m
|
||||
CONFIG_RTW88_8822CU=m
|
||||
CONFIG_RTW88_8723DU=m
|
||||
CONFIG_RTW88_8821CU=m
|
||||
# CONFIG_WLAN_VENDOR_RSI is not set
|
||||
# CONFIG_WLAN_VENDOR_SILABS is not set
|
||||
# CONFIG_WLAN_VENDOR_ST is not set
|
||||
# CONFIG_WLAN_VENDOR_TI is not set
|
||||
# CONFIG_WLAN_VENDOR_ZYDAS is not set
|
||||
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
|
||||
CONFIG_INPUT_SPARSEKMAP=y
|
||||
CONFIG_INPUT_MOUSEDEV=y
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_XTKBD=m
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_GOODIX=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_UINPUT=m
|
||||
CONFIG_SERIO=m
|
||||
CONFIG_SERIO_LIBPS2=m
|
||||
CONFIG_SERIO_RAW=m
|
||||
CONFIG_LEGACY_PTY_COUNT=16
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=16
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=16
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
# CONFIG_SERIAL_8250_PERICOM is not set
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_NONSTANDARD=y
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
CONFIG_IPMI_HANDLER=m
|
||||
CONFIG_IPMI_DEVICE_INTERFACE=m
|
||||
CONFIG_IPMI_SI=m
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_VIRTIO=m
|
||||
# CONFIG_ACPI_I2C_OPREGION is not set
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_GPIO=y
|
||||
CONFIG_I2C_LSFS=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_LS=y
|
||||
CONFIG_SPI_LS_IO=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_SINGLE=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_LOONGSON_IRQCHIP=y
|
||||
CONFIG_GPIO_LOONGSON_64BIT=y
|
||||
CONFIG_GPIO_PCA953X=y
|
||||
CONFIG_GPIO_PCA953X_IRQ=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_RESTART=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
|
||||
CONFIG_SYSCON_REBOOT_MODE=y
|
||||
CONFIG_SENSORS_W83795=m
|
||||
CONFIG_SENSORS_W83627HF=m
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_LOONGSON2_THERMAL=y
|
||||
# CONFIG_MEDIA_CEC_SUPPORT is not set
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
# CONFIG_DVB_CORE is not set
|
||||
CONFIG_MEDIA_USB_SUPPORT=y
|
||||
CONFIG_USB_VIDEO_CLASS=y
|
||||
# CONFIG_RADIO_ADAPTERS is not set
|
||||
# CONFIG_MEDIA_TUNER_E4000 is not set
|
||||
# CONFIG_MEDIA_TUNER_FC0011 is not set
|
||||
# CONFIG_MEDIA_TUNER_FC0012 is not set
|
||||
# CONFIG_MEDIA_TUNER_FC0013 is not set
|
||||
# CONFIG_MEDIA_TUNER_FC2580 is not set
|
||||
# CONFIG_MEDIA_TUNER_IT913X is not set
|
||||
# CONFIG_MEDIA_TUNER_M88RS6000T is not set
|
||||
# CONFIG_MEDIA_TUNER_MAX2165 is not set
|
||||
# CONFIG_MEDIA_TUNER_MC44S803 is not set
|
||||
# CONFIG_MEDIA_TUNER_MSI001 is not set
|
||||
# CONFIG_MEDIA_TUNER_MT2060 is not set
|
||||
# CONFIG_MEDIA_TUNER_MT2063 is not set
|
||||
# CONFIG_MEDIA_TUNER_MT20XX is not set
|
||||
# CONFIG_MEDIA_TUNER_MT2131 is not set
|
||||
# CONFIG_MEDIA_TUNER_MT2266 is not set
|
||||
# CONFIG_MEDIA_TUNER_MXL301RF is not set
|
||||
# CONFIG_MEDIA_TUNER_MXL5005S is not set
|
||||
# CONFIG_MEDIA_TUNER_MXL5007T is not set
|
||||
# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set
|
||||
# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set
|
||||
# CONFIG_MEDIA_TUNER_QT1010 is not set
|
||||
# CONFIG_MEDIA_TUNER_R820T is not set
|
||||
# CONFIG_MEDIA_TUNER_SI2157 is not set
|
||||
# CONFIG_MEDIA_TUNER_SIMPLE is not set
|
||||
# CONFIG_MEDIA_TUNER_TDA18212 is not set
|
||||
# CONFIG_MEDIA_TUNER_TDA18218 is not set
|
||||
# CONFIG_MEDIA_TUNER_TDA18250 is not set
|
||||
# CONFIG_MEDIA_TUNER_TDA18271 is not set
|
||||
# CONFIG_MEDIA_TUNER_TDA827X is not set
|
||||
# CONFIG_MEDIA_TUNER_TDA8290 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_TUA9001 is not set
|
||||
# CONFIG_MEDIA_TUNER_XC2028 is not set
|
||||
# CONFIG_MEDIA_TUNER_XC4000 is not set
|
||||
# CONFIG_MEDIA_TUNER_XC5000 is not set
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_PANEL_LVDS=y
|
||||
CONFIG_DRM_DISPLAY_CONNECTOR=y
|
||||
CONFIG_DRM_SIMPLE_BRIDGE=y
|
||||
CONFIG_DRM_LOONGSON=y
|
||||
CONFIG_DRM_SIMPLEDRM=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_EFI=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_LCD_PLATFORM=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_GPIO=y
|
||||
CONFIG_BACKLIGHT_LED=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_BT87X=m
|
||||
CONFIG_SND_BT87X_OVERCLOCK=y
|
||||
CONFIG_SND_HDA_INTEL=y
|
||||
CONFIG_SND_HDA_HWDEP=y
|
||||
CONFIG_SND_HDA_INPUT_BEEP=y
|
||||
CONFIG_SND_HDA_PATCH_LOADER=y
|
||||
CONFIG_SND_HDA_CODEC_REALTEK=y
|
||||
CONFIG_SND_HDA_CODEC_SIGMATEL=y
|
||||
CONFIG_SND_HDA_CODEC_HDMI=y
|
||||
CONFIG_SND_HDA_CODEC_CONEXANT=y
|
||||
CONFIG_SND_USB_AUDIO=m
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_SOC_LOONGSON=y
|
||||
CONFIG_SND_LS=y
|
||||
CONFIG_SND_LS_PCM=y
|
||||
CONFIG_SND_LS_PCM_GENERIC_DMA=y
|
||||
CONFIG_SND_SOC_ES8328_I2C=y
|
||||
CONFIG_SND_VIRTIO=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
CONFIG_HID_A4TECH=m
|
||||
CONFIG_HID_CHERRY=m
|
||||
CONFIG_HID_LOGITECH=m
|
||||
CONFIG_HID_LOGITECH_DJ=m
|
||||
CONFIG_LOGITECH_FF=y
|
||||
CONFIG_LOGIRUMBLEPAD2_FF=y
|
||||
CONFIG_LOGIG940_FF=y
|
||||
CONFIG_HID_MICROSOFT=m
|
||||
CONFIG_HID_MULTITOUCH=m
|
||||
CONFIG_HID_SUNPLUS=m
|
||||
CONFIG_USB_HIDDEV=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_PCI is not set
|
||||
CONFIG_USB_OTG=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
||||
CONFIG_USB_ACM=m
|
||||
CONFIG_USB_PRINTER=m
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_UAS=y
|
||||
CONFIG_USB_DWC2=y
|
||||
CONFIG_USB_DWC2_HOST=y
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_CH341=m
|
||||
CONFIG_USB_SERIAL_CP210X=m
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
CONFIG_USB_SERIAL_PL2303=m
|
||||
CONFIG_USB_SERIAL_OPTION=m
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_TYPEC=m
|
||||
CONFIG_TYPEC_TCPM=m
|
||||
CONFIG_TYPEC_TCPCI=m
|
||||
CONFIG_TYPEC_UCSI=m
|
||||
CONFIG_UCSI_ACPI=m
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_LS2K=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_EFI=y
|
||||
CONFIG_RTC_DRV_LOONGSON=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_LOONGSON2_APB_DMA=y
|
||||
CONFIG_LSIA_DMA=y
|
||||
CONFIG_UDMABUF=y
|
||||
CONFIG_DMABUF_HEAPS=y
|
||||
CONFIG_DMABUF_HEAPS_SYSTEM=y
|
||||
CONFIG_DMABUF_HEAPS_CMA=y
|
||||
CONFIG_UIO=y
|
||||
CONFIG_UIO_PDRV_GENIRQ=y
|
||||
CONFIG_UIO_DMEM_GENIRQ=y
|
||||
# CONFIG_VIRTIO_MENU is not set
|
||||
# CONFIG_VHOST_MENU is not set
|
||||
# CONFIG_LOONGARCH_PLATFORM_DEVICES is not set
|
||||
CONFIG_COMMON_CLK_LOONGSON2=y
|
||||
CONFIG_IOMMU_DEBUGFS=y
|
||||
CONFIG_LOONGSON2_GUTS=y
|
||||
CONFIG_LOONGSON2_PM=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_LS_2K300_ADC=y
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_LOONGSON=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
||||
CONFIG_EXT3_FS_SECURITY=y
|
||||
CONFIG_EXPORTFS_BLOCK_OPS=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
|
||||
CONFIG_QUOTA=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_OVERLAY_FS=y
|
||||
CONFIG_OVERLAY_FS_INDEX=y
|
||||
CONFIG_OVERLAY_FS_XINO_AUTO=y
|
||||
CONFIG_OVERLAY_FS_METACOPY=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=936
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="gb2312"
|
||||
CONFIG_EXFAT_FS=y
|
||||
CONFIG_NTFS3_FS=y
|
||||
CONFIG_NTFS3_64BIT_CLUSTER=y
|
||||
CONFIG_NTFS3_LZX_XPRESS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3_ACL=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_V4_1=y
|
||||
CONFIG_NFS_V4_2=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_NFS_DISABLE_UDP_SUPPORT is not set
|
||||
CONFIG_NLS_CODEPAGE_936=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_KEY_DH_OPERATIONS=y
|
||||
CONFIG_SECURITY=y
|
||||
CONFIG_SECURITY_SELINUX=y
|
||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
||||
CONFIG_SECURITY_APPARMOR=y
|
||||
CONFIG_SECURITY_YAMA=y
|
||||
CONFIG_DEFAULT_SECURITY_DAC=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||
CONFIG_CRYPTO_ESSIV=m
|
||||
CONFIG_CRYPTO_BLAKE2B=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_XXHASH=y
|
||||
CONFIG_CRYPTO_CRC32=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_842=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
CONFIG_CRYPTO_USER_API_RNG=m
|
||||
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||
CONFIG_CRYPTO_DEV_VIRTIO=m
|
||||
CONFIG_CRC_ITU_T=m
|
||||
# CONFIG_XZ_DEC_POWERPC is not set
|
||||
# CONFIG_XZ_DEC_SPARC is not set
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_CMA_SIZE_MBYTES=0
|
||||
CONFIG_IRQ_POLL=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
CONFIG_STRIP_ASM_SYMS=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_SCHEDSTATS=y
|
||||
# CONFIG_FTRACE is not set
|
||||
CONFIG_UNWINDER_ORC=y
|
||||
+285
-253
@@ -103,6 +103,7 @@ struct priv_msg {
|
||||
* @complete: completion of I2C message
|
||||
* @speed: Standard or Fast are supported
|
||||
* @msg: I2C transfer information
|
||||
* @freq: I2C controller input clock freq
|
||||
*/
|
||||
struct ls_i2c_dev {
|
||||
struct i2c_adapter adap;
|
||||
@@ -111,6 +112,7 @@ struct ls_i2c_dev {
|
||||
struct completion complete;
|
||||
int speed;
|
||||
struct priv_msg msg;
|
||||
int freq;
|
||||
};
|
||||
|
||||
static inline void i2c_set_bits(void __iomem *reg, u32 mask)
|
||||
@@ -130,7 +132,7 @@ static void ls_i2c_disable_irq(struct ls_i2c_dev *i2c_dev)
|
||||
i2c_clr_bits(reg, I2C_CR2_IRQ_MASK);
|
||||
}
|
||||
|
||||
#define INPUT_REF_CLK 120000000
|
||||
#define INPUT_DEFAULT_CLK 200000000
|
||||
|
||||
static int ls_i2c_hw_config(struct ls_i2c_dev *i2c_dev)
|
||||
{
|
||||
@@ -142,9 +144,9 @@ static int ls_i2c_hw_config(struct ls_i2c_dev *i2c_dev)
|
||||
i2c_set_bits(i2c_dev->base + I2C_TRISE, 0x3f);
|
||||
|
||||
if (i2c_dev->speed == LS_I2C_SPEED_STANDARD) {
|
||||
val = DIV_ROUND_UP(INPUT_REF_CLK, 100000 * 2);
|
||||
val = DIV_ROUND_UP(i2c_dev->freq, 100000 * 2);
|
||||
} else {
|
||||
val = DIV_ROUND_UP(INPUT_REF_CLK, 400000 * 3);
|
||||
val = DIV_ROUND_UP(i2c_dev->freq, 400000 * 3);
|
||||
|
||||
/* Select Fast mode */
|
||||
ccr |= I2C_CCR_FS;
|
||||
@@ -166,7 +168,7 @@ static int ls_i2c_wait_free_bus(struct ls_i2c_dev *i2c_dev)
|
||||
ret = readl_poll_timeout(i2c_dev->base + I2C_SR2,
|
||||
status,
|
||||
!(status & I2C_SR2_BUSY),
|
||||
10, 1000);
|
||||
10, 2000);
|
||||
if (ret) {
|
||||
dev_dbg(i2c_dev->dev, "bus not free\n");
|
||||
ret = -EBUSY;
|
||||
@@ -175,262 +177,280 @@ static int ls_i2c_wait_free_bus(struct ls_i2c_dev *i2c_dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ls_i2c_write_byte(struct ls_i2c_dev *i2c_dev, u8 byte)
|
||||
static int i2c_wait_EV_signal(struct ls_i2c_dev *i2c_dev, int reg, int mask, int target)
|
||||
{
|
||||
writel(byte, i2c_dev->base + I2C_DR);
|
||||
}
|
||||
|
||||
static void ls_i2c_read_msg(struct ls_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
|
||||
*msg->buf++ = readl(i2c_dev->base + I2C_DR);
|
||||
msg->count--;
|
||||
}
|
||||
|
||||
static void ls_i2c_terminate_xfer(struct ls_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
|
||||
ls_i2c_disable_irq(i2c_dev);
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, (1 << (8 + msg->stop)));
|
||||
complete(&i2c_dev->complete);
|
||||
}
|
||||
|
||||
static void ls_i2c_handle_write(struct ls_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
void __iomem *reg = i2c_dev->base + I2C_CR2;
|
||||
|
||||
if (msg->count) {
|
||||
ls_i2c_write_byte(i2c_dev, *msg->buf++);
|
||||
msg->count--;
|
||||
if (!msg->count)
|
||||
i2c_clr_bits(reg, I2C_CR2_ITBUFEN);
|
||||
} else {
|
||||
ls_i2c_terminate_xfer(i2c_dev);
|
||||
}
|
||||
}
|
||||
|
||||
static void ls_i2c_handle_read(struct ls_i2c_dev *i2c_dev, int flag)
|
||||
{
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
void __iomem *reg = i2c_dev->base + I2C_CR2;
|
||||
int i;
|
||||
|
||||
switch (msg->count) {
|
||||
case 1:
|
||||
/* only transmit 1 bytes condition */
|
||||
ls_i2c_disable_irq(i2c_dev);
|
||||
ls_i2c_read_msg(i2c_dev);
|
||||
complete(&i2c_dev->complete);
|
||||
break;
|
||||
case 2:
|
||||
if (flag != 1) {
|
||||
/* ensure only transmit 2 bytes condition */
|
||||
i2c_clr_bits(reg, I2C_CR2_ITBUFEN);
|
||||
break;
|
||||
}
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, (1 << (8 + msg->stop)));
|
||||
|
||||
ls_i2c_disable_irq(i2c_dev);
|
||||
|
||||
for (i = 2; i > 0; i--)
|
||||
ls_i2c_read_msg(i2c_dev);
|
||||
|
||||
i2c_clr_bits(i2c_dev->base + I2C_CR1, I2C_CR1_POS);
|
||||
complete(&i2c_dev->complete);
|
||||
break;
|
||||
case 3:
|
||||
if (readl(i2c_dev->base + I2C_CR2) & I2C_CR2_ITBUFEN) {
|
||||
i2c_clr_bits(reg, I2C_CR2_ITBUFEN);
|
||||
break;
|
||||
}
|
||||
|
||||
reg = i2c_dev->base + I2C_CR1;
|
||||
i2c_clr_bits(reg, I2C_CR1_ACK);
|
||||
fallthrough;
|
||||
default:
|
||||
ls_i2c_read_msg(i2c_dev);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ls_i2c_handle_rx_addr()
|
||||
* master receiver
|
||||
* @i2c_dev: Controller's private data
|
||||
*/
|
||||
static void ls_i2c_handle_rx_addr(struct ls_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
|
||||
switch (msg->count) {
|
||||
case 0:
|
||||
ls_i2c_terminate_xfer(i2c_dev);
|
||||
break;
|
||||
case 1:
|
||||
i2c_clr_bits(i2c_dev->base + I2C_CR1,
|
||||
(I2C_CR1_ACK | I2C_CR1_POS));
|
||||
/* start or stop */
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, (1 << (8 + msg->stop)));
|
||||
break;
|
||||
case 2:
|
||||
i2c_clr_bits(i2c_dev->base + I2C_CR1, I2C_CR1_ACK);
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, I2C_CR1_POS);
|
||||
break;
|
||||
|
||||
default:
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, I2C_CR1_ACK);
|
||||
i2c_clr_bits(i2c_dev->base + I2C_CR1, I2C_CR1_POS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t ls_i2c_isr_error(u32 status, void *data)
|
||||
{
|
||||
struct ls_i2c_dev *i2c_dev = data;
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
|
||||
/* Arbitration lost */
|
||||
if (status & I2C_SR1_ARLO) {
|
||||
i2c_clr_bits(i2c_dev->base + I2C_SR1, I2C_SR1_ARLO);
|
||||
msg->result = -EAGAIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* Acknowledge failure:
|
||||
* In master transmitter mode a Stop must be generated by software
|
||||
*/
|
||||
if (status & I2C_SR1_AF) {
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, I2C_CR1_STOP);
|
||||
i2c_clr_bits(i2c_dev->base + I2C_SR1, I2C_SR1_AF);
|
||||
msg->result = -EIO;
|
||||
}
|
||||
|
||||
/* Bus error */
|
||||
if (status & I2C_SR1_BERR) {
|
||||
i2c_clr_bits(i2c_dev->base + I2C_SR1, I2C_SR1_BERR);
|
||||
msg->result = -EIO;
|
||||
}
|
||||
|
||||
ls_i2c_disable_irq(i2c_dev);
|
||||
complete(&i2c_dev->complete);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/**
|
||||
* ls_i2c_isr_event() - Interrupt routine for I2C bus event
|
||||
* @irq: interrupt number
|
||||
* @data: Controller's private data
|
||||
*/
|
||||
static irqreturn_t ls_i2c_isr_event(int irq, void *data)
|
||||
{
|
||||
struct ls_i2c_dev *i2c_dev = data;
|
||||
struct priv_msg *msg = &i2c_dev->msg;
|
||||
u32 status, ien, event, cr2;
|
||||
u32 possible_status = I2C_SR1_ITEVTEN_MASK;
|
||||
int i;
|
||||
|
||||
status = readl(i2c_dev->base + I2C_SR1);
|
||||
if (status & (I2C_SR1_ARLO | I2C_SR1_AF | I2C_SR1_BERR))
|
||||
return ls_i2c_isr_error(status, data);
|
||||
|
||||
cr2 = readl(i2c_dev->base + I2C_CR2);
|
||||
ien = cr2 & I2C_CR2_IRQ_MASK;
|
||||
|
||||
/* Update possible_status if buffer interrupt is enabled */
|
||||
if (ien & I2C_CR2_ITBUFEN)
|
||||
possible_status |= I2C_SR1_ITBUFEN_MASK;
|
||||
event = status & possible_status;
|
||||
|
||||
if (!event) {
|
||||
dev_dbg(i2c_dev->dev,
|
||||
"spurious evt irq (status=0x%08x, ien=0x%08x)\n",
|
||||
status, ien);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
/* Start condition generated */
|
||||
if (event & I2C_SR1_SB)
|
||||
ls_i2c_write_byte(i2c_dev, msg->addr);
|
||||
|
||||
/* I2C Address sent */
|
||||
if (event & I2C_SR1_ADDR) {
|
||||
if (msg->addr & I2C_M_RD)
|
||||
ls_i2c_handle_rx_addr(i2c_dev);
|
||||
/* Clear ADDR flag */
|
||||
readl(i2c_dev->base + I2C_SR2);
|
||||
/* Enable buffer interrupts for RX/TX not empty events */
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR2, I2C_CR2_ITBUFEN);
|
||||
}
|
||||
|
||||
if (msg->addr & I2C_M_RD) {
|
||||
/* RX */
|
||||
if (event & 0x40)
|
||||
ls_i2c_handle_read(i2c_dev, 0);
|
||||
if (event & 0x4)
|
||||
ls_i2c_handle_read(i2c_dev, 1);
|
||||
} else {
|
||||
/* TX */
|
||||
if (event & 0x84)
|
||||
for (i = 0; i < 1 + !!((event & 0x84) == 0x84); i++)
|
||||
ls_i2c_handle_write(i2c_dev);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int ls_i2c_xfer_msg(struct ls_i2c_dev *i2c_dev,
|
||||
struct i2c_msg *msg, bool is_stop)
|
||||
{
|
||||
struct priv_msg *priv_msg = &i2c_dev->msg;
|
||||
unsigned long timeout;
|
||||
u32 status;
|
||||
int ret;
|
||||
|
||||
priv_msg->addr = i2c_8bit_addr_from_msg(msg);
|
||||
priv_msg->buf = msg->buf;
|
||||
priv_msg->count = msg->len;
|
||||
priv_msg->stop = is_stop;
|
||||
priv_msg->result = 0;
|
||||
|
||||
reinit_completion(&i2c_dev->complete);
|
||||
|
||||
/* Enable events and errors interrupts */
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR2,
|
||||
I2C_CR2_ITEVTEN | I2C_CR2_ITERREN);
|
||||
|
||||
timeout = wait_for_completion_timeout(&i2c_dev->complete,
|
||||
i2c_dev->adap.timeout);
|
||||
ret = priv_msg->result;
|
||||
|
||||
if (!timeout)
|
||||
ret = -ETIMEDOUT;
|
||||
ret = readl_poll_timeout(i2c_dev->base + reg,
|
||||
status,
|
||||
(!!(status & mask) == target),
|
||||
20, 1000);
|
||||
if (ret) {
|
||||
dev_dbg(i2c_dev->dev, "wait timeout\n");
|
||||
ret = -EBUSY;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// i2c_wait_EV_signal 返回非 0 时所在对应函数返回 I2C_XFER_TIMEOUT_ERROR
|
||||
#define i2c_wait_EV_signal_t(dev, reg_offset, mask, target) if (i2c_wait_EV_signal(dev, reg_offset, mask, target)) { return -EBUSY;}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式,接收状态结束时的设置
|
||||
* @param: base: i2c控制器基地址
|
||||
* @param: stop: 是否发送关闭i2c总线信号
|
||||
*/
|
||||
static inline void i2c_setup_CR1_end_read(unsigned char *base, uint8_t stop)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
temp = readl((base + I2C_CR1));
|
||||
temp |= (I2C_CR1_ACK | I2C_CR1_POS);
|
||||
temp ^= (I2C_CR1_ACK | I2C_CR1_POS);
|
||||
temp |= (stop << 9);
|
||||
|
||||
writel(temp, (base + I2C_CR1));
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式接收状态,读取i2c DR 寄存器,放到msg的data里面
|
||||
* @param: base: i2c控制器基地址
|
||||
* @param: msg: i2c读取描述(i2c_msg)实例指针
|
||||
* @param: i: 当前读取数据所在data数组的下标
|
||||
*/
|
||||
static inline void i2c_update_read_msg_data(unsigned char *base, struct i2c_msg *msg, int i)
|
||||
{
|
||||
msg->buf[i] = ((readl(base + I2C_DR)) & 0xff);
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式接收状态,当只读取1个字节时的操作函数(从地址发送后的操作)
|
||||
* @param: i2c_dev: ls_i2c_dev
|
||||
* @param: msg: i2c读取描述(i2c_msg)实例指针
|
||||
* @return: 0代表操作成功,否则操作失败
|
||||
*/
|
||||
static int i2c_xfer_r_1(struct ls_i2c_dev *i2c_dev, struct i2c_msg *msg, int is_stop)
|
||||
{
|
||||
unsigned char* base;
|
||||
base = i2c_dev->base;
|
||||
|
||||
i2c_setup_CR1_end_read(base, is_stop);
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_RXNE, 1);
|
||||
i2c_update_read_msg_data(base, msg, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式接收状态,当只读取2个字节时的操作函数(从地址发送后的操作)
|
||||
* @param: i2c_dev: ls_i2c_dev
|
||||
* @param: msg: i2c读取描述(i2c_msg)实例指针
|
||||
* @return: 0代表操作成功,否则操作失败
|
||||
*/
|
||||
static int i2c_xfer_r_2(struct ls_i2c_dev *i2c_dev, struct i2c_msg *msg, int is_stop)
|
||||
{
|
||||
unsigned char* base;
|
||||
base = i2c_dev->base;
|
||||
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_RXNE, 1);
|
||||
i2c_update_read_msg_data(base, msg, 0);
|
||||
i2c_setup_CR1_end_read(base, is_stop);
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_RXNE, 1);
|
||||
i2c_update_read_msg_data(base, msg, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式接收状态,当读取大于等于3个字节时的操作函数(从地址发送后的操作)
|
||||
* @param: i2c_dev: ls_i2c_dev
|
||||
* @param: msg: i2c读取描述(i2c_msg)实例指针
|
||||
* @return: 0代表操作成功,否则操作失败
|
||||
*/
|
||||
static int i2c_xfer_r_3m(struct ls_i2c_dev *i2c_dev, struct i2c_msg *msg, int is_stop)
|
||||
{
|
||||
unsigned char* base;
|
||||
int i;
|
||||
int remain_read;
|
||||
|
||||
base = i2c_dev->base;
|
||||
|
||||
i = 0;
|
||||
remain_read = msg->len;
|
||||
while (1)
|
||||
{
|
||||
if (remain_read <= 3)
|
||||
{
|
||||
break;
|
||||
}
|
||||
// 倒数3个字节之前,看 I2C_SR1_RXNE 信号即可,有就读取DR
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_RXNE, 1);
|
||||
i2c_update_read_msg_data(base, msg, i++);
|
||||
--remain_read;
|
||||
}
|
||||
// 见2k300手册 主接收模式(非及时、3 字节)示意图
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_BTF, 1); // 倒数3个字节,I2C_SR1_BTF信号为1时,代表已经接收了两个字节
|
||||
i2c_update_read_msg_data(base, msg, i++); // 读取DR,此时倒数第二个字节开始从移位寄存器到DR
|
||||
i2c_setup_CR1_end_read(base, is_stop); // 下一个字节(也就是最后一个字节)之后需要发送 NACK 和 stop 命令了
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_BTF, 1); // 这时已经最后一个字节到来
|
||||
i2c_update_read_msg_data(base, msg, i++); // 这次读取之后,等待移位寄存器填充DR
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_RXNE, 1); // 没有字节传输动作,但是移位寄存器已经把最后一个字节填充到DR
|
||||
i2c_update_read_msg_data(base, msg, i++); // 读取DR
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式读取数据处理函数
|
||||
* @param: i2c_dev: ls_i2c_dev
|
||||
* @param: msg: i2c读取描述(i2c_msg)实例指针
|
||||
* @return: 0代表操作成功,否则操作失败
|
||||
*/
|
||||
static int i2c_xfer_r(struct ls_i2c_dev *i2c_dev, struct i2c_msg *msg, int is_stop)
|
||||
{
|
||||
unsigned char* base;
|
||||
unsigned int temp;
|
||||
unsigned char xfer_data;
|
||||
int ret;
|
||||
|
||||
base = i2c_dev->base;
|
||||
|
||||
// START信号发送开始命令,ACK则会在接收到数据后发送ACK命令
|
||||
temp = readl((base + I2C_CR1));
|
||||
temp |= I2C_CR1_START;
|
||||
temp |= I2C_CR1_ACK;
|
||||
writel(temp, (base + I2C_CR1));
|
||||
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_SB, 1);
|
||||
|
||||
// 把7bit地址左移一位,然后最后1bit设置为1,代表此从地址用于读取
|
||||
xfer_data = msg->addr;
|
||||
xfer_data <<= 1;
|
||||
xfer_data |= 1; // bit 0 == 1 read
|
||||
writeb(xfer_data, (base + I2C_DR));
|
||||
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_ADDR, 1);
|
||||
temp = readl((base + I2C_SR2));
|
||||
|
||||
// 针对不同的需要读取的字节数,调用不同的处理函数
|
||||
if (msg->len == 1) // read 1 byte
|
||||
{
|
||||
ret = i2c_xfer_r_1(i2c_dev, msg, is_stop);
|
||||
}
|
||||
else if (msg->len == 2) // read 2 byte
|
||||
{
|
||||
ret = i2c_xfer_r_2(i2c_dev, msg, is_stop);
|
||||
}
|
||||
else if (msg->len > 3) // read 3 or more than 3 byte
|
||||
{
|
||||
ret = i2c_xfer_r_3m(i2c_dev, msg, is_stop);
|
||||
}
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
// 如果需要关闭总线,等待busy信号为0,代表总线总体已经空闲
|
||||
if (is_stop)
|
||||
{
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR2, I2C_SR2_BUSY, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief: i2c主模式写入数据处理函数
|
||||
* @param: i2c_dev: ls_i2c_dev
|
||||
* @param: msg: i2c写入描述(i2c_msg)实例指针
|
||||
* @return: 0代表操作成功,否则操作失败
|
||||
*/
|
||||
static int i2c_xfer_w(struct ls_i2c_dev *i2c_dev, struct i2c_msg *msg, int is_stop)
|
||||
{
|
||||
unsigned char* base;
|
||||
unsigned int temp;
|
||||
int i;
|
||||
unsigned char xfer_data;
|
||||
|
||||
base = i2c_dev->base;
|
||||
|
||||
// START信号发送开始命令,ACK则会在接收到数据后发送ACK命令
|
||||
temp = readl((base + I2C_CR1));
|
||||
temp |= I2C_CR1_START;
|
||||
writel(temp, (base + I2C_CR1));
|
||||
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_SB, 1);
|
||||
|
||||
// 把7bit地址左移一位,然后最后1bit设置为1,代表此从地址用于读取
|
||||
xfer_data = msg->addr;
|
||||
xfer_data <<= 1; // bit 0 == 0 write
|
||||
writeb(xfer_data, (base + I2C_DR));
|
||||
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_ADDR, 1);
|
||||
temp = readl((base + I2C_SR2));
|
||||
|
||||
// 等待发送数据寄存器为空
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_TXE, 1);
|
||||
|
||||
i = 0;
|
||||
while (1)
|
||||
{
|
||||
if (i == msg->len)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
xfer_data = msg->buf[i];
|
||||
++i;
|
||||
writeb(xfer_data, (base + I2C_DR));
|
||||
|
||||
// 等待传送结束
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR1, I2C_SR1_BTF, 1);
|
||||
}
|
||||
|
||||
if (is_stop)
|
||||
{
|
||||
// 关闭总线
|
||||
temp = readl((base + I2C_CR1));
|
||||
temp |= (I2C_CR1_STOP);
|
||||
writel(temp, (base + I2C_CR1));
|
||||
// 等待busy信号为0,代表总线总体已经空闲
|
||||
i2c_wait_EV_signal_t(i2c_dev, I2C_SR2, I2C_SR2_BUSY, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ls_i2c_xfer() - Transfer combined I2C message
|
||||
* @i2c_adap: Adapter pointer to the controller
|
||||
* @msgs: Pointer to data to be written.
|
||||
* @num: Number of messages to be executed
|
||||
*/
|
||||
static int ls_i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[],
|
||||
int num)
|
||||
static int ls_i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num)
|
||||
{
|
||||
struct ls_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
|
||||
int ret = 0;
|
||||
struct i2c_msg* cur_msg;
|
||||
int i;
|
||||
int stop;
|
||||
|
||||
ret = ls_i2c_wait_free_bus(i2c_dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* START generation */
|
||||
i2c_set_bits(i2c_dev->base + I2C_CR1, I2C_CR1_START);
|
||||
|
||||
for (i = 0; i < num && !ret; i++)
|
||||
ret = ls_i2c_xfer_msg(i2c_dev, &msgs[i], i == num - 1);
|
||||
for (i = 0; i < num; i++) {
|
||||
cur_msg = msgs + i;
|
||||
stop = (i == (num - 1));
|
||||
if (cur_msg->flags & I2C_M_RD)
|
||||
{
|
||||
ret += i2c_xfer_r(i2c_dev, cur_msg, stop);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret += i2c_xfer_w(i2c_dev, cur_msg, stop);
|
||||
}
|
||||
if (ret)
|
||||
dev_err(i2c_dev->dev, "i2c %s error(%d)\r\n", (cur_msg->flags & I2C_M_RD) ? "read" : "write", ret);
|
||||
}
|
||||
|
||||
return (ret < 0) ? ret : num;
|
||||
}
|
||||
@@ -445,12 +465,36 @@ static const struct i2c_algorithm ls_i2c_algo = {
|
||||
.functionality = ls_i2c_func,
|
||||
};
|
||||
|
||||
static void ls_i2c_bus_clock_probe(struct ls_i2c_dev *i2c_dev)
|
||||
{
|
||||
int ret;
|
||||
struct clk* clk;
|
||||
int of_clk_freq;
|
||||
|
||||
i2c_dev->freq = INPUT_DEFAULT_CLK;
|
||||
ret = 1;
|
||||
clk = devm_clk_get_optional_enabled(i2c_dev->dev, NULL);
|
||||
if (clk) {
|
||||
ret = devm_clk_rate_exclusive_get(i2c_dev->dev, clk);
|
||||
if (!ret)
|
||||
i2c_dev->freq = clk_get_rate(clk);
|
||||
} else {
|
||||
if (!of_property_read_u32(i2c_dev->dev->of_node, "clock-frequency", &of_clk_freq)) {
|
||||
ret = 0;
|
||||
i2c_dev->freq = of_clk_freq;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret)
|
||||
pr_info("%s warning: use default clk freq %d\n", __func__, INPUT_DEFAULT_CLK);
|
||||
}
|
||||
|
||||
static int ls_i2c_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct ls_i2c_dev *i2c_dev;
|
||||
struct resource *res;
|
||||
u32 irq_event, clk_rate;
|
||||
u32 clk_rate;
|
||||
struct i2c_adapter *adap;
|
||||
int ret;
|
||||
int name_buffer_len;
|
||||
@@ -461,12 +505,6 @@ static int ls_i2c_probe(struct platform_device *pdev)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
irq_event = platform_get_irq(pdev, 0);
|
||||
if (irq_event <= 0) {
|
||||
dev_err(&pdev->dev, "IRQ event missing or invalid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
|
||||
if (!i2c_dev)
|
||||
return -ENOMEM;
|
||||
@@ -486,15 +524,9 @@ static int ls_i2c_probe(struct platform_device *pdev)
|
||||
|
||||
i2c_dev->dev = &pdev->dev;
|
||||
|
||||
ret = request_irq(irq_event, ls_i2c_isr_event, IRQF_SHARED,
|
||||
pdev->name, i2c_dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to request irq event %i\n",
|
||||
irq_event);
|
||||
goto free_i2c_ioremap;
|
||||
}
|
||||
|
||||
ls_i2c_bus_clock_probe(i2c_dev);
|
||||
ls_i2c_hw_config(i2c_dev);
|
||||
ls_i2c_disable_irq(i2c_dev); // 不需要中断 轮询等待
|
||||
|
||||
adap = &i2c_dev->adap;
|
||||
i2c_set_adapdata(adap, i2c_dev);
|
||||
|
||||
@@ -780,7 +780,15 @@ static void ls2k_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
|
||||
host->status = "mmc request";
|
||||
host->cmd_is_stop = 0;
|
||||
host->mrq = mrq;
|
||||
|
||||
#if 1
|
||||
// 部分 SD 卡会读取 EXT-REG 触发 CMD48(SD_READ_EXTR_SINGLE)
|
||||
// 然而 LS2K300 CMD48 丢失中断,故直接不发送 CMD48 规避该问题
|
||||
if (mrq->cmd->opcode == 48)
|
||||
{
|
||||
mmc_request_done(mmc, mrq);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if (ls2k_mci_card_present(mmc) == 0) {
|
||||
dbg(host, dbg_err, "%s: no medium present\n", __func__);
|
||||
host->mrq->cmd->error = -ENOMEDIUM;
|
||||
|
||||
@@ -8,11 +8,19 @@
|
||||
# matching values else you do not screw only LS CAN FD build but even
|
||||
# base kernel build
|
||||
|
||||
ifeq ($(CONFIG_PREEMPT_RT), y)
|
||||
quiet_cmd_build_lscanfd_dma = GEN $@
|
||||
cmd_build_lscanfd_dma = cp $(obj)/lscanfd_dma.o_shipped_rt $@
|
||||
|
||||
quiet_cmd_build_lscanfd_platform = GEN $@
|
||||
cmd_build_lscanfd_platform = cp $(obj)/lscanfd_platform.o_shipped_rt $@
|
||||
else
|
||||
quiet_cmd_build_lscanfd_dma = GEN $@
|
||||
cmd_build_lscanfd_dma = cp $(obj)/lscanfd_dma.o_shipped $@
|
||||
|
||||
quiet_cmd_build_lscanfd_platform = GEN $@
|
||||
cmd_build_lscanfd_platform = cp $(obj)/lscanfd_platform.o_shipped $@
|
||||
endif
|
||||
|
||||
$(obj)/lscanfd_dma.o: FORCE
|
||||
$(call if_changed,build_lscanfd_dma)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user