diff --git a/arch/loongarch/boot/dts/loongson-2k0300.dtsi b/arch/loongarch/boot/dts/loongson-2k0300.dtsi index bdf731fa7..88a3bca21 100644 --- a/arch/loongarch/boot/dts/loongson-2k0300.dtsi +++ b/arch/loongarch/boot/dts/loongson-2k0300.dtsi @@ -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>; diff --git a/arch/loongarch/configs/loongson_2k300_defconfig b/arch/loongarch/configs/loongson_2k300_defconfig index 6cd8cbb8b..ea8bb099c 100644 --- a/arch/loongarch/configs/loongson_2k300_defconfig +++ b/arch/loongarch/configs/loongson_2k300_defconfig @@ -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 diff --git a/arch/loongarch/configs/loongson_2k300_rt_defconfig b/arch/loongarch/configs/loongson_2k300_rt_defconfig new file mode 100644 index 000000000..6cd8cbb8b --- /dev/null +++ b/arch/loongarch/configs/loongson_2k300_rt_defconfig @@ -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 diff --git a/drivers/i2c/busses/i2c-lsfs.c b/drivers/i2c/busses/i2c-lsfs.c index 50e95d874..890c63141 100644 --- a/drivers/i2c/busses/i2c-lsfs.c +++ b/drivers/i2c/busses/i2c-lsfs.c @@ -23,49 +23,49 @@ #include /* Loongson I2C offset registers */ -#define I2C_CR1 0x00 -#define I2C_CR2 0x04 -#define I2C_DR 0x10 -#define I2C_SR1 0x14 -#define I2C_SR2 0x18 -#define I2C_CCR 0x1C -#define I2C_TRISE 0x20 -#define I2C_FLTR 0x24 +#define I2C_CR1 0x00 +#define I2C_CR2 0x04 +#define I2C_DR 0x10 +#define I2C_SR1 0x14 +#define I2C_SR2 0x18 +#define I2C_CCR 0x1C +#define I2C_TRISE 0x20 +#define I2C_FLTR 0x24 /* Loongson I2C control 1*/ -#define I2C_CR1_POS BIT(11) -#define I2C_CR1_ACK BIT(10) -#define I2C_CR1_STOP BIT(9) -#define I2C_CR1_START BIT(8) -#define I2C_CR1_PE BIT(0) +#define I2C_CR1_POS BIT(11) +#define I2C_CR1_ACK BIT(10) +#define I2C_CR1_STOP BIT(9) +#define I2C_CR1_START BIT(8) +#define I2C_CR1_PE BIT(0) /* Loongson I2C control 2 */ -#define I2C_CR2_FREQ_MASK GENMASK(5, 0) -#define I2C_CR2_FREQ(n) ((n) & I2C_CR2_FREQ_MASK) -#define I2C_CR2_ITBUFEN BIT(10) -#define I2C_CR2_ITEVTEN BIT(9) -#define I2C_CR2_ITERREN BIT(8) -#define I2C_CR2_IRQ_MASK (I2C_CR2_ITBUFEN | \ - I2C_CR2_ITEVTEN | \ - I2C_CR2_ITERREN) +#define I2C_CR2_FREQ_MASK GENMASK(5, 0) +#define I2C_CR2_FREQ(n) ((n) & I2C_CR2_FREQ_MASK) +#define I2C_CR2_ITBUFEN BIT(10) +#define I2C_CR2_ITEVTEN BIT(9) +#define I2C_CR2_ITERREN BIT(8) +#define I2C_CR2_IRQ_MASK (I2C_CR2_ITBUFEN | \ + I2C_CR2_ITEVTEN | \ + I2C_CR2_ITERREN) /* Loongson I2C Status 1 */ -#define I2C_SR1_AF BIT(10) -#define I2C_SR1_ARLO BIT(9) -#define I2C_SR1_BERR BIT(8) -#define I2C_SR1_TXE BIT(7) -#define I2C_SR1_RXNE BIT(6) -#define I2C_SR1_BTF BIT(2) -#define I2C_SR1_ADDR BIT(1) -#define I2C_SR1_SB BIT(0) -#define I2C_SR1_ITEVTEN_MASK (I2C_SR1_BTF | \ - I2C_SR1_ADDR | \ - I2C_SR1_SB) -#define I2C_SR1_ITBUFEN_MASK (I2C_SR1_TXE | \ - I2C_SR1_RXNE) -#define I2C_SR1_ITERREN_MASK (I2C_SR1_AF | \ - I2C_SR1_ARLO | \ - I2C_SR1_BERR) +#define I2C_SR1_AF BIT(10) +#define I2C_SR1_ARLO BIT(9) +#define I2C_SR1_BERR BIT(8) +#define I2C_SR1_TXE BIT(7) +#define I2C_SR1_RXNE BIT(6) +#define I2C_SR1_BTF BIT(2) +#define I2C_SR1_ADDR BIT(1) +#define I2C_SR1_SB BIT(0) +#define I2C_SR1_ITEVTEN_MASK (I2C_SR1_BTF | \ + I2C_SR1_ADDR | \ + I2C_SR1_SB) +#define I2C_SR1_ITBUFEN_MASK (I2C_SR1_TXE | \ + I2C_SR1_RXNE) +#define I2C_SR1_ITERREN_MASK (I2C_SR1_AF | \ + I2C_SR1_ARLO | \ + I2C_SR1_BERR) /* Loongson I2C Status 2 */ #define I2C_SR2_BUSY BIT(1) @@ -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; @@ -164,9 +166,9 @@ static int ls_i2c_wait_free_bus(struct ls_i2c_dev *i2c_dev) int ret; ret = readl_poll_timeout(i2c_dev->base + I2C_SR2, - status, - !(status & I2C_SR2_BUSY), - 10, 1000); + status, + !(status & I2C_SR2_BUSY), + 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,15 +465,39 @@ 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; + int name_buffer_len; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { @@ -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,24 +524,18 @@ 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); adap->nr = pdev->id; - name_buffer_len = strlen(pdev->name); - name_buffer_len = (name_buffer_len >= sizeof(adap->name)) ? sizeof(adap->name) - 1 : name_buffer_len; - memset(adap->name, 0, name_buffer_len + 1); + name_buffer_len = strlen(pdev->name); + name_buffer_len = (name_buffer_len >= sizeof(adap->name)) ? sizeof(adap->name) - 1 : name_buffer_len; + memset(adap->name, 0, name_buffer_len + 1); strncpy(adap->name, pdev->name, name_buffer_len); - adap->name[name_buffer_len] = 0; + adap->name[name_buffer_len] = 0; adap->owner = THIS_MODULE; adap->retries = 5; adap->algo = &ls_i2c_algo; diff --git a/drivers/mmc/host/ls2kmci.c b/drivers/mmc/host/ls2kmci.c index 7f21d8681..35a4af5de 100644 --- a/drivers/mmc/host/ls2kmci.c +++ b/drivers/mmc/host/ls2kmci.c @@ -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; diff --git a/drivers/net/can/ls_canfd/Makefile b/drivers/net/can/ls_canfd/Makefile index a5c0f98fa..a98bfe7bb 100644 --- a/drivers/net/can/ls_canfd/Makefile +++ b/drivers/net/can/ls_canfd/Makefile @@ -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) diff --git a/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped b/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped index 70e76b947..f3384016a 100644 Binary files a/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped and b/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped differ diff --git a/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped_rt b/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped_rt new file mode 100644 index 000000000..70e76b947 Binary files /dev/null and b/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped_rt differ diff --git a/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped b/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped index c52be3d00..cde1e4998 100644 Binary files a/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped and b/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped differ diff --git a/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped_rt b/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped_rt new file mode 100644 index 000000000..c52be3d00 Binary files /dev/null and b/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped_rt differ