mirror of
https://gitee.com/bianbu-linux/openwrt
synced 2025-06-27 10:40:40 -04:00
add spacemit k1 platform support
1. add k1-sbc and k1-nas as solutions demo
This commit is contained in:
parent
a2c1580036
commit
1bed103474
53 changed files with 9955 additions and 6 deletions
|
@ -2,3 +2,4 @@ src-git packages https://git.openwrt.org/feed/packages.git;openwrt-23.05
|
|||
src-git luci https://git.openwrt.org/project/luci.git;openwrt-23.05
|
||||
src-git routing https://git.openwrt.org/feed/routing.git;openwrt-23.05
|
||||
src-git telephony https://git.openwrt.org/feed/telephony.git;openwrt-23.05
|
||||
src-git spacemit_openwrt_feeds https://gitee.com/bianbu-linux/spacemit-openwrt-feeds.git;k1-dev
|
||||
|
|
|
@ -26,11 +26,12 @@ remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
|||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||
|
||||
ifneq ($(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),)
|
||||
LINUX_VERSION:=$(call sanitize_uri,$(call remove_uri_prefix,$(CONFIG_KERNEL_GIT_CLONE_URI)))
|
||||
ifeq ($(call qstrip,$(CONFIG_KERNEL_GIT_REF)),)
|
||||
CONFIG_KERNEL_GIT_REF:=HEAD
|
||||
endif
|
||||
LINUX_VERSION:=$(LINUX_VERSION)-$(call sanitize_uri,$(CONFIG_KERNEL_GIT_REF))
|
||||
# LINUX_VERSION:=$(call sanitize_uri,$(call remove_uri_prefix,$(CONFIG_KERNEL_GIT_CLONE_URI)))
|
||||
# ifeq ($(call qstrip,$(CONFIG_KERNEL_GIT_REF)),)
|
||||
# CONFIG_KERNEL_GIT_REF:=HEAD
|
||||
# endif
|
||||
# LINUX_VERSION:=$(LINUX_VERSION)-$(call sanitize_uri,$(CONFIG_KERNEL_GIT_REF))
|
||||
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
||||
else
|
||||
ifdef KERNEL_PATCHVER
|
||||
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
||||
|
|
96
package/boot/opensbi-spacemit/Makefile
Normal file
96
package/boot/opensbi-spacemit/Makefile
Normal file
|
@ -0,0 +1,96 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
INTERNAL_ENV:=$(shell echo $${OPENWRT_INTERNAL_ENV})
|
||||
|
||||
ifeq ($(INTERNAL_ENV), yes)
|
||||
PKG_NAME:=local_opensbi
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=1.3
|
||||
LOCAL_SOURCE_DIR=$(TOPDIR)/../bsp-src/opensbi
|
||||
else
|
||||
PKG_NAME:=opensbi
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=1.3
|
||||
PKG_SOURCE_VERSION:=v1.0.3
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=https://gitee.com/bianbu-linux/opensbi.git
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
PKG_TARGETS:=bin
|
||||
PKG_FLAGS:=nonshared
|
||||
PKG_LICENSE:=BSD-2-Clause
|
||||
PKG_LICENSE_FILES:=COPYING.BSD
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/opensbi
|
||||
SECTION:=boot
|
||||
CATEGORY:=Boot Loaders
|
||||
DEPENDS:=@TARGET_spacemit
|
||||
VARIANT:=$(subst _,/,$(subst opensbi_,,$(1)))
|
||||
TITLE:=Spacemit customized version of OpenSBI
|
||||
OPENSBI_IMAGE:=
|
||||
PLAT:=
|
||||
endef
|
||||
|
||||
define Package/opensbi_spacemit
|
||||
$(Package/opensbi)
|
||||
TITLE:=Spacemit customized version of OpenSBI
|
||||
OPENSBI_IMAGE:=fw_dynamic.itb
|
||||
PLAT:=generic
|
||||
endef
|
||||
|
||||
export GCC_HONOUR_COPTS=s
|
||||
|
||||
MAKE_VARS = \
|
||||
CROSS_COMPILE="$(TARGET_CROSS)"
|
||||
|
||||
ifeq ($(INTERNAL_ENV), yes)
|
||||
|
||||
define Build/Compile
|
||||
$(eval $(Package/opensbi_$(BUILD_VARIANT))) \
|
||||
+$(MAKE_VARS) $(MAKE) -C $(LOCAL_SOURCE_DIR) \
|
||||
PLATFORM=$(PLAT) PLATFORM_DEFCONFIG=k1_defconfig
|
||||
endef
|
||||
|
||||
define Build/Clean
|
||||
$(MAKE) -C $(LOCAL_SOURCE_DIR) clean
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
$(CP) $(LOCAL_SOURCE_DIR)/build/platform/$(PLAT)/firmware/fw_dynamic.itb $(STAGING_DIR_IMAGE)/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,opensbi_spacemit))
|
||||
|
||||
else
|
||||
|
||||
define Build/Compile
|
||||
$(eval $(Package/opensbi_$(BUILD_VARIANT))) \
|
||||
+$(MAKE_VARS) $(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
PLATFORM=$(PLAT) PLATFORM_DEFCONFIG=k1_defconfig
|
||||
endef
|
||||
|
||||
define Build/Clean
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) clean
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
$(CP) $(PKG_BUILD_DIR)/build/platform/$(PLAT)/firmware/fw_dynamic.itb $(STAGING_DIR_IMAGE)/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,opensbi_spacemit))
|
||||
|
||||
endif
|
||||
|
94
package/boot/uboot-spacemit/Makefile
Normal file
94
package/boot/uboot-spacemit/Makefile
Normal file
|
@ -0,0 +1,94 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit LTD.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
INTERNAL_ENV:=$(shell echo $${OPENWRT_INTERNAL_ENV})
|
||||
|
||||
ifeq ($(INTERNAL_ENV), yes)
|
||||
PKG_SOURCE_PROTO:=local
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=2022.10
|
||||
LOCAL_SOURCE_DIR=$(TOPDIR)/../bsp-src/uboot-2022.10
|
||||
else
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=2022.10
|
||||
PKG_SOURCE_VERSION:=v1.0.3
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=https://gitee.com/bianbu-linux/uboot-2022.10.git
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define U-Boot/Default
|
||||
BUILD_TARGET:=spacemit
|
||||
BUILD_DEVICES=$(1)
|
||||
UBOOT_IMAGE:=u-boot.itb
|
||||
DTS_DIR:=arch/riscv/dts
|
||||
UENV:=default
|
||||
DEFAULT:=y
|
||||
endef
|
||||
|
||||
define U-Boot/k1
|
||||
NAME:=K1 deb1
|
||||
OPENSBI:=generic
|
||||
DEPENDS:=+opensbi_spacemit
|
||||
BUILD_DEVICES:=k1_deb1
|
||||
endef
|
||||
|
||||
UBOOT_TARGETS := \
|
||||
k1
|
||||
|
||||
ifeq ($(INTERNAL_ENV), yes)
|
||||
|
||||
define Build/Configure
|
||||
$(MAKE) -C $(LOCAL_SOURCE_DIR) k1_defconfig
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(UBOOT_MAKE_FLAGS) $(MAKE) -j4 CROSS_COMPILE=$(TARGET_CROSS) -C $(LOCAL_SOURCE_DIR)
|
||||
endef
|
||||
|
||||
define Build/Clean
|
||||
$(MAKE) -C $(LOCAL_SOURCE_DIR) clean
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)/factory
|
||||
|
||||
$(INSTALL_BIN) $(LOCAL_SOURCE_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/
|
||||
$(INSTALL_BIN) $(LOCAL_SOURCE_DIR)/$(UBOOT_IMAGE) $(PKG_BUILD_DIR)/
|
||||
$(INSTALL_BIN) $(LOCAL_SOURCE_DIR)/FSBL.bin $(STAGING_DIR_IMAGE)/factory/
|
||||
$(INSTALL_BIN) $(LOCAL_SOURCE_DIR)/bootinfo*.bin $(STAGING_DIR_IMAGE)/factory/
|
||||
$(INSTALL_BIN) $(LOCAL_SOURCE_DIR)/u-boot-env-default.bin $(STAGING_DIR_IMAGE)/env.bin
|
||||
|
||||
endef
|
||||
|
||||
else
|
||||
|
||||
define Build/Configure
|
||||
$(call Build/Configure/U-Boot)
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) k1_defconfig
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)/factory
|
||||
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/FSBL.bin $(STAGING_DIR_IMAGE)/factory/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bootinfo*.bin $(STAGING_DIR_IMAGE)/factory/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/u-boot-env-default.bin $(STAGING_DIR_IMAGE)/env.bin
|
||||
|
||||
endef
|
||||
|
||||
endif
|
||||
|
||||
$(eval $(call BuildPackage/U-Boot))
|
7
rules.mk
7
rules.mk
|
@ -111,7 +111,12 @@ endef
|
|||
|
||||
DL_DIR=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)$(if $(DL_SUBDIR),/$(DL_SUBDIR))
|
||||
OUTPUT_DIR:=$(if $(call qstrip,$(CONFIG_BINARY_FOLDER)),$(call qstrip,$(CONFIG_BINARY_FOLDER)),$(TOPDIR)/bin)
|
||||
BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET)
|
||||
ifeq ($(BOARD),spacemit)
|
||||
TARGET_PROFILE:=$(call qstrip,$(CONFIG_TARGET_PROFILE))
|
||||
BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(TARGET_PROFILE)
|
||||
else
|
||||
BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET)
|
||||
endif
|
||||
INCLUDE_DIR:=$(TOPDIR)/include
|
||||
SCRIPT_DIR:=$(TOPDIR)/scripts
|
||||
BUILD_DIR_BASE:=$(TOPDIR)/build_dir
|
||||
|
|
30
target/linux/spacemit/Makefile
Normal file
30
target/linux/spacemit/Makefile
Normal file
|
@ -0,0 +1,30 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
#
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
ARCH:=riscv64
|
||||
BOARD:=spacemit
|
||||
BOARDNAME:=Spacemit RISC-V Chipsets
|
||||
FEATURES:=ext4
|
||||
KERNELNAME:=Image dtbs
|
||||
SUBTARGETS:=k1-nas k1-sbc
|
||||
|
||||
KERNEL_PATCHVER:=6.1
|
||||
|
||||
INTERNAL_ENV:=$(shell echo $${OPENWRT_INTERNAL_ENV})
|
||||
ifeq ($(INTERNAL_ENV), yes)
|
||||
CONFIG_EXTERNAL_KERNEL_TREE=$(TOPDIR)/../bsp-src/linux-6.1
|
||||
CONFIG_KERNEL_GIT_CLONE_URI=""
|
||||
endif
|
||||
|
||||
include $(INCLUDE_DIR)/target.mk
|
||||
|
||||
DEFAULT_PACKAGES += mkf2fs e2fsprogs
|
||||
|
||||
define Target/Description
|
||||
Build firmware images for the SpaceMit K1 boards
|
||||
endef
|
||||
|
||||
$(eval $(call BuildTarget))
|
|
@ -0,0 +1,20 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDVzCCAj+gAwIBAgIQejBh5AwCG6hOlck2vgHb5jANBgkqhkiG9w0BAQsFADA9
|
||||
MRMwEQYKCZImiZPyLGQBGRYDY29tMRIwEAYKCZImiZPyLGQBGRYCZGMxEjAQBgNV
|
||||
BAMTCWRjLmNvbS1DQTAgFw0yMTA5MDQxMDI1MTJaGA8zMDIwMDkwNDEwMzUxMlow
|
||||
PTETMBEGCgmSJomT8ixkARkWA2NvbTESMBAGCgmSJomT8ixkARkWAmRjMRIwEAYD
|
||||
VQQDEwlkYy5jb20tQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCd
|
||||
wb/A4opys55DJSjdmGJSNiaO2JnMg4A7loD0JQx2kHGv4UzEq5xtMcj0moLygPWM
|
||||
l9PvVKuvUcsCn3erS+z/eHKTshx7tR3OQXNwiyLkEaSamaz1T7L1omwFFQMo6KbU
|
||||
AoS9eT+UchWYiqvOMBFcl3I6gQ/id6yrATqQPSDLr3LZUcLlpT7KRLOuEJVQBZq8
|
||||
oZIunnIZX9VMJ809kh59v6yrl/E/4qO2E81BtMDxx+60/ruE/bXw/1VFvFjzLmo+
|
||||
BsdBXz3/r+pAFtmzkyf8cvo9oR0eLArgqnAEmP94inX1du+m4R9atke1Q/T2B3+l
|
||||
sK2rf2rv5fZjnGO+y+6VAgMBAAGjUTBPMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
|
||||
BTADAQH/MB0GA1UdDgQWBBQ88H9bZtRNRutzKs/xVyRFTDtJoTAQBgkrBgEEAYI3
|
||||
FQEEAwIBADANBgkqhkiG9w0BAQsFAAOCAQEAVWVridVRQNpID73Pe7h+XYurur/F
|
||||
xhzeHQRrPcUmob91fDQj1Ijhd0Ot6Y3NF51ZUAFrZz0CI87rJmY6/P61YK/LW5RC
|
||||
javAIolbB9bTr5He8l1okFIxIeUXloe44dkL0ZR9IC3so+qi9TJ92iYLYlXTV64X
|
||||
plthAWu4UR8p5zQ3wpO+8aaHtGCRMKw9+ZWRLRa1h2VFIxe4KZ4Yc4Kyr6d1rAuz
|
||||
Mto3LymCgAX7qIDvOwp+Yy+htBbg/8VFyEkty/ZdWtOcyZR7jwSfu0dl2GKK0QtX
|
||||
hiNDqQqaC91Oalm/TiZmEQzygWe6slwzpg3aTTlbMqhlfkF3Ynpg91w2yQ==
|
||||
-----END CERTIFICATE-----
|
7
target/linux/spacemit/base-files/etc/uci-defaults/98-custom-init-env.sh
Executable file
7
target/linux/spacemit/base-files/etc/uci-defaults/98-custom-init-env.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo "custom init env"
|
||||
|
||||
ln -s /lib/libc.so /usr/lib/libc.so
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
cat /etc/ssl/certs/dc.com-CA-Root-Base64.crt >> /etc/ssl/certs/ca-certificates.crt
|
||||
exit 0
|
||||
|
760
target/linux/spacemit/dts/k1-x_MUSE-N1.dts
Normal file
760
target/linux/spacemit/dts/k1-x_MUSE-N1.dts
Normal file
|
@ -0,0 +1,760 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
/* Copyright (c) 2023 Spacemit, Inc */
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "spacemit/k1-x.dtsi"
|
||||
#include "spacemit/k1-x_pinctrl.dtsi"
|
||||
|
||||
|
||||
/ {
|
||||
model = "spacemit k1-x MUSE-N1 board";
|
||||
compatible = "spacemit,MUSE-N1", "spacemit,k1-x";
|
||||
|
||||
cpus: cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
timebase-frequency = <24000000>;
|
||||
|
||||
cpu_0: cpu@0 {
|
||||
cpu-ai = "true";
|
||||
};
|
||||
|
||||
cpu_1: cpu@1 {
|
||||
cpu-ai = "true";
|
||||
};
|
||||
|
||||
cpu_2: cpu@2 {
|
||||
reg = <2>;
|
||||
cpu-ai = "true";
|
||||
};
|
||||
|
||||
cpu_3: cpu@3 {
|
||||
reg = <3>;
|
||||
cpu-ai = "true";
|
||||
};
|
||||
|
||||
cpu-map {
|
||||
cluster0 {
|
||||
core0 {
|
||||
cpu = <&cpu_0>;
|
||||
};
|
||||
|
||||
core1 {
|
||||
cpu = <&cpu_1>;
|
||||
};
|
||||
|
||||
core2 {
|
||||
cpu = <&cpu_2>;
|
||||
};
|
||||
|
||||
core3 {
|
||||
cpu = <&cpu_3>;
|
||||
};
|
||||
};
|
||||
|
||||
cluster1 {
|
||||
core0 {
|
||||
cpu = <&cpu_4>;
|
||||
};
|
||||
|
||||
core1 {
|
||||
cpu = <&cpu_5>;
|
||||
};
|
||||
|
||||
core2 {
|
||||
cpu = <&cpu_6>;
|
||||
};
|
||||
|
||||
core3 {
|
||||
cpu = <&cpu_7>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
|
||||
memory@100000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x1 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
linux,cma {
|
||||
compatible = "shared-dma-pool";
|
||||
/* alloc memory from 0x40000000~0x80000000 */
|
||||
alloc-ranges = <0 0x40000000 0 0x40000000>;
|
||||
/* size of cma buffer is 384MByte */
|
||||
size = <0 0x18000000>;
|
||||
/* start address is 1Mbyte aligned */
|
||||
alignment = <0x0 0x100000>;
|
||||
linux,cma-default;
|
||||
/* besides hardware, dma for ex. buffer can be used by memory management */
|
||||
reusable;
|
||||
};
|
||||
|
||||
/* reserved 384K for dpu, including mmu table(256K) and cmdlist(128K) */
|
||||
dpu_resv: dpu_reserved@2ff40000 {
|
||||
compatible = "shared-dma-pool";
|
||||
reg = <0x0 0x2ff40000 0x0 0x000C0000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon=sbi console=ttyS0,115200n8 debug loglevel=8 swiotlb=65536 rdinit=/init";
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
dc_12v: dc-12v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "dc_12v";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <12000000>;
|
||||
regulator-max-microvolt = <12000000>;
|
||||
};
|
||||
|
||||
vcc4v0_baseboard: vcc4v0-baseboard {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc4v0_baseboard";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <4000000>;
|
||||
regulator-max-microvolt = <4000000>;
|
||||
vin-supply = <&dc_12v>;
|
||||
};
|
||||
|
||||
rf_pwrseq: rf-pwrseq {
|
||||
compatible = "spacemit,rf-pwrseq";
|
||||
//vdd-supply = <&ldo_7>;
|
||||
//vdd_voltage = <3300000>;
|
||||
io-supply = <&dcdc_3>;
|
||||
io_voltage = <1800000>;
|
||||
pwr-gpios = <&gpio 67 0>;
|
||||
status = "okay";
|
||||
|
||||
wlan_pwrseq: wlan-pwrseq {
|
||||
compatible = "spacemit,wlan-pwrseq";
|
||||
regon-gpios = <&gpio 116 0>;
|
||||
hostwake-gpios = <&gpio 66 0>;
|
||||
};
|
||||
|
||||
bt_pwrseq: bt-pwrseq {
|
||||
compatible = "spacemit,bt-pwrseq";
|
||||
reset-gpios = <&gpio 63 0>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led1 {
|
||||
label = "sys-led";
|
||||
gpios = <&gpio 96 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "on";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart0_2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2_0>;
|
||||
spacemit,i2c-fast-mode;
|
||||
status = "okay";
|
||||
|
||||
eeprom@50{
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x50>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
power-domains = <&power K1X_PMU_DUMMY_PWR_DOMAIN>;
|
||||
status = "disabled";
|
||||
|
||||
mac_address0: mac_address0@0 {
|
||||
reg = <0x0 6>;
|
||||
};
|
||||
|
||||
mac_address1: mac_address1@6 {
|
||||
reg = <0x6 6>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c4_2>;
|
||||
|
||||
clock-frequency = <400000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c8 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c8>;
|
||||
status = "okay";
|
||||
|
||||
spm8821@41 {
|
||||
compatible = "spacemit,spm8821";
|
||||
reg = <0x41>;
|
||||
interrupt-parent = <&intc>;
|
||||
interrupts = <64>;
|
||||
status = "okay";
|
||||
|
||||
vcc_sys-supply = <&vcc4v0_baseboard>;
|
||||
dcdc5-supply = <&dcdc_5>;
|
||||
|
||||
regulators {
|
||||
compatible = "pmic,regulator,spm8821";
|
||||
|
||||
/* buck */
|
||||
dcdc_1: DCDC_REG1 {
|
||||
regulator-name = "dcdc1";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3450000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-always-on;
|
||||
|
||||
regulator-state-mem {
|
||||
regulator-off-in-suspend;
|
||||
regulator-suspend-microvolt = <650000>;
|
||||
};
|
||||
};
|
||||
|
||||
dcdc_2: DCDC_REG2 {
|
||||
regulator-name = "dcdc2";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3450000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
dcdc_3: DCDC_REG3 {
|
||||
regulator-name = "dcdc3";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
dcdc_4: DCDC_REG4 {
|
||||
regulator-name = "dcdc4";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
dcdc_5: DCDC_REG5 {
|
||||
regulator-name = "dcdc5";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3450000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
dcdc_6: DCDC_REG6 {
|
||||
regulator-name = "dcdc6";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3450000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* aldo */
|
||||
ldo_1: LDO_REG1 {
|
||||
regulator-name = "ldo1";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
ldo_2: LDO_REG2 {
|
||||
regulator-name = "ldo2";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
ldo_3: LDO_REG3 {
|
||||
regulator-name = "ldo3";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
ldo_4: LDO_REG4 {
|
||||
regulator-name = "ldo4";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
/* dldo */
|
||||
ldo_5: LDO_REG5 {
|
||||
regulator-name = "ldo5";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
ldo_6: LDO_REG6 {
|
||||
regulator-name = "ldo6";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
ldo_7: LDO_REG7 {
|
||||
regulator-name = "ldo7";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
ldo_8: LDO_REG8 {
|
||||
regulator-name = "ldo8";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo_9: LDO_REG9 {
|
||||
regulator-name = "ldo9";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
ldo_10: LDO_REG10 {
|
||||
regulator-name = "ldo10";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo_11: LDO_REG11 {
|
||||
regulator-name = "ldo11";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3400000>;
|
||||
};
|
||||
|
||||
sw_1: SWITCH_REG1 {
|
||||
regulator-name = "switch1";
|
||||
};
|
||||
};
|
||||
|
||||
pmic_pinctrl: pinctrl {
|
||||
compatible = "pmic,pinctrl,spm8821";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
spacemit,npins = <6>;
|
||||
/**
|
||||
* led_pins: led-pins {
|
||||
* pins = "PIN3";
|
||||
* function = "sleep";
|
||||
* bias-disable = <0>;
|
||||
* drive-open-drain = <0x1>;
|
||||
* };
|
||||
*/
|
||||
};
|
||||
|
||||
pwr_key: key {
|
||||
compatible = "pmic,pwrkey,spm8821";
|
||||
};
|
||||
|
||||
ext_rtc: rtc {
|
||||
compatible = "pmic,rtc,spm8821";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
pinctrl-single,gpio-range = <
|
||||
&range GPIO_49 2 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_3V_DS4)
|
||||
&range GPIO_58 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_63 2 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_65 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
|
||||
&range GPIO_66 2 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_75 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
|
||||
&range GPIO_90 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_110 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_115 2 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_118 2 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_125 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
&range GPIO_127 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
|
||||
>;
|
||||
|
||||
pinctrl_gmac0: gmac0_grp {
|
||||
pinctrl-single,pins =<
|
||||
K1X_PADCONF(GPIO_00, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rxdv */
|
||||
K1X_PADCONF(GPIO_01, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rx_d0 */
|
||||
K1X_PADCONF(GPIO_02, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rx_d1 */
|
||||
K1X_PADCONF(GPIO_03, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rx_clk */
|
||||
K1X_PADCONF(GPIO_04, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rx_d2 */
|
||||
K1X_PADCONF(GPIO_05, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rx_d3 */
|
||||
K1X_PADCONF(GPIO_06, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_tx_d0 */
|
||||
K1X_PADCONF(GPIO_07, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_tx_d1 */
|
||||
K1X_PADCONF(GPIO_08, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_tx */
|
||||
K1X_PADCONF(GPIO_09, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_tx_d2 */
|
||||
K1X_PADCONF(GPIO_10, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_tx_d3 */
|
||||
K1X_PADCONF(GPIO_11, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_tx_en */
|
||||
K1X_PADCONF(GPIO_12, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac0_mdc */
|
||||
K1X_PADCONF(GPIO_13, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac0_mdio */
|
||||
K1X_PADCONF(GPIO_14, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_int_n */
|
||||
K1X_PADCONF(GPIO_45, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_clk_ref */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_gmac1: gmac1_grp {
|
||||
pinctrl-single,pins =<
|
||||
K1X_PADCONF(GPIO_29, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_rxdv */
|
||||
K1X_PADCONF(GPIO_30, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_rx_d0 */
|
||||
K1X_PADCONF(GPIO_31, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_rx_d1 */
|
||||
K1X_PADCONF(GPIO_32, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_rx_clk */
|
||||
K1X_PADCONF(GPIO_33, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_rx_d2 */
|
||||
K1X_PADCONF(GPIO_34, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_rx_d3 */
|
||||
K1X_PADCONF(GPIO_35, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_tx_d0 */
|
||||
K1X_PADCONF(GPIO_36, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_tx_d1 */
|
||||
K1X_PADCONF(GPIO_37, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_tx */
|
||||
K1X_PADCONF(GPIO_38, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_tx_d2 */
|
||||
K1X_PADCONF(GPIO_39, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_tx_d3 */
|
||||
K1X_PADCONF(GPIO_40, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_tx_en */
|
||||
K1X_PADCONF(GPIO_41, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_mdc */
|
||||
K1X_PADCONF(GPIO_42, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS0)) /* gmac1_mdio */
|
||||
K1X_PADCONF(GPIO_43, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_int_n */
|
||||
K1X_PADCONF(GPIO_46, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac1_clk_ref */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&gpio{
|
||||
gpio-ranges = <
|
||||
&pinctrl 49 GPIO_49 2
|
||||
&pinctrl 58 GPIO_58 1
|
||||
&pinctrl 63 GPIO_63 5
|
||||
&pinctrl 75 GPIO_75 1
|
||||
&pinctrl 79 GPIO_79 1
|
||||
&pinctrl 90 GPIO_90 1
|
||||
&pinctrl 110 GPIO_110 1
|
||||
&pinctrl 115 GPIO_115 2
|
||||
&pinctrl 118 GPIO_118 2
|
||||
&pinctrl 125 GPIO_125 1
|
||||
&pinctrl 127 GPIO_127 1
|
||||
>;
|
||||
};
|
||||
|
||||
/* SD */
|
||||
&sdhci0 {
|
||||
pinctrl-names = "default","fast";
|
||||
pinctrl-0 = <&pinctrl_mmc1>;
|
||||
pinctrl-1 = <&pinctrl_mmc1_fast>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio 80 0>;
|
||||
cd-inverted;
|
||||
vmmc-supply = <&dcdc_4>;
|
||||
vqmmc-supply = <&ldo_1>;
|
||||
no-mmc;
|
||||
no-sdio;
|
||||
spacemit,sdh-host-caps-disable = <(
|
||||
MMC_CAP_UHS_SDR12 |
|
||||
MMC_CAP_UHS_SDR25
|
||||
)>;
|
||||
spacemit,sdh-quirks = <(
|
||||
SDHCI_QUIRK_BROKEN_CARD_DETECTION |
|
||||
SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
|
||||
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
|
||||
)>;
|
||||
spacemit,sdh-quirks2 = <(
|
||||
SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
|
||||
SDHCI_QUIRK2_BROKEN_PHY_MODULE |
|
||||
SDHCI_QUIRK2_SET_AIB_MMC
|
||||
)>;
|
||||
spacemit,aib_mmc1_io_reg = <0xD401E81C>;
|
||||
spacemit,apbc_asfar_reg = <0xD4015050>;
|
||||
spacemit,apbc_assar_reg = <0xD4015054>;
|
||||
spacemit,rx_dline_reg = <0x0>;
|
||||
spacemit,tx_dline_reg = <0x0>;
|
||||
spacemit,tx_delaycode = <0x7f>;
|
||||
spacemit,rx_tuning_limit = <50>;
|
||||
spacemit,sdh-freq = <204800000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* SDIO */
|
||||
&sdhci1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_mmc2>;
|
||||
bus-width = <4>;
|
||||
non-removable;
|
||||
vqmmc-supply = <&dcdc_3>;
|
||||
no-mmc;
|
||||
no-sd;
|
||||
keep-power-in-suspend;
|
||||
/* bcmdhd use private oob solution rather than dat1/standard wakeup */
|
||||
/delete-property/ enable-sdio-wakeup;
|
||||
spacemit,sdh-host-caps-disable = <(
|
||||
MMC_CAP_UHS_DDR50 |
|
||||
MMC_CAP_NEEDS_POLL
|
||||
)>;
|
||||
spacemit,sdh-quirks = <(
|
||||
SDHCI_QUIRK_BROKEN_CARD_DETECTION |
|
||||
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
|
||||
)>;
|
||||
spacemit,sdh-quirks2 = <(
|
||||
SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
|
||||
SDHCI_QUIRK2_BROKEN_PHY_MODULE
|
||||
)>;
|
||||
spacemit,rx_dline_reg = <0x0>;
|
||||
spacemit,rx_tuning_limit = <50>;
|
||||
spacemit,sdh-freq = <375000000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* eMMC */
|
||||
&sdhci2 {
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
mmc-hs400-1_8v;
|
||||
mmc-hs400-enhanced-strobe;
|
||||
no-sd;
|
||||
no-sdio;
|
||||
spacemit,sdh-quirks = <(
|
||||
SDHCI_QUIRK_BROKEN_CARD_DETECTION |
|
||||
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
|
||||
)>;
|
||||
spacemit,sdh-quirks2 = <(
|
||||
SDHCI_QUIRK2_PRESET_VALUE_BROKEN
|
||||
)>;
|
||||
spacemit,sdh-freq = <375000000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ð0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gmac0>;
|
||||
|
||||
emac,reset-gpio = <&gpio 110 0>;
|
||||
emac,reset-active-low;
|
||||
emac,reset-delays-us = <0 10000 100000>;
|
||||
|
||||
/* store forward mode */
|
||||
tx-threshold = <1518>;
|
||||
rx-threshold = <12>;
|
||||
tx-ring-num = <1024>;
|
||||
rx-ring-num = <1024>;
|
||||
dma-burst-len = <5>;
|
||||
|
||||
ref-clock-from-phy;
|
||||
|
||||
clk-tuning-enable;
|
||||
clk-tuning-by-delayline;
|
||||
tx-phase = <60>;
|
||||
rx-phase = <73>;
|
||||
|
||||
nvmem-cells = <&mac_address0>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
phy-handle = <&rgmii0>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
mdio-bus {
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x0>;
|
||||
rgmii0: phy@0 {
|
||||
compatible = "ethernet-phy-id001c.c916";
|
||||
device_type = "ethernet-phy";
|
||||
reg = <0x1>;
|
||||
phy-mode = "rgmii";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gmac1>;
|
||||
|
||||
emac,reset-gpio = <&gpio 115 0>;
|
||||
emac,reset-active-low;
|
||||
emac,reset-delays-us = <0 10000 100000>;
|
||||
|
||||
/* store forward mode */
|
||||
tx-threshold = <1518>;
|
||||
rx-threshold = <12>;
|
||||
tx-ring-num = <1024>;
|
||||
rx-ring-num = <1024>;
|
||||
dma-burst-len = <5>;
|
||||
|
||||
ref-clock-from-phy;
|
||||
|
||||
clk-tuning-enable;
|
||||
clk-tuning-by-delayline;
|
||||
tx-phase = <90>;
|
||||
rx-phase = <73>;
|
||||
nvmem-cells = <&mac_address1>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
phy-handle = <&rgmii1>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
mdio-bus {
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x0>;
|
||||
rgmii1: phy@1 {
|
||||
compatible = "ethernet-phy-id001c.c916";
|
||||
device_type = "ethernet-phy";
|
||||
reg = <0x1>;
|
||||
phy-mode = "rgmii";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&udc {
|
||||
/*spacemit,udc-mode = <MV_USB_MODE_OTG>;
|
||||
spacemit,extern-attr = <MV_USB_HAS_VBUS_IDPIN_DETECTION>;*/
|
||||
spacemit,udc-mode = <MV_USB_MODE_UDC>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ehci1 {
|
||||
spacemit,reset-on-resume;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&combphy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3hub {
|
||||
vbus-gpios = <&gpio 127 0>; /* gpio_127 for usb1 vbus on */
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbdrd3 {
|
||||
status = "okay";
|
||||
reset-on-resume;
|
||||
dwc3@c0a00000 {
|
||||
dr_mode = "otg";
|
||||
phy_type = "utmi";
|
||||
snps,hsphy_interface = "utmi";
|
||||
snps,dis_enblslpm_quirk;
|
||||
snps,dis_u2_susphy_quirk;
|
||||
snps,dis_u3_susphy_quirk;
|
||||
snps,dis-del-phy-power-chg-quirk;
|
||||
snps,dis-tx-ipgap-linecheck-quirk;
|
||||
usb-role-switch;
|
||||
role-switch-default-mode = "host";
|
||||
};
|
||||
};
|
||||
|
||||
&pcie1_rc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pcie1_3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcie2_rc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pcie2_4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&qspi {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_qspi>;
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <26500000>;
|
||||
m25p,fast-read;
|
||||
broken-flash-reset;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&cpu_0 {
|
||||
clst0-supply = <&dcdc_1>;
|
||||
vin-supply-names = "clst0";
|
||||
};
|
||||
|
||||
&clst0_core_opp_table {
|
||||
opp1600000000 {
|
||||
opp-microvolt = <1050000>;
|
||||
};
|
||||
};
|
||||
|
||||
&clst1_core_opp_table {
|
||||
opp1600000000 {
|
||||
opp-microvolt = <1050000>;
|
||||
};
|
||||
};
|
||||
|
||||
&rcpu {
|
||||
mboxes = <&mailbox 0>, <&mailbox 1>;
|
||||
mbox-names = "vq0", "vq1";
|
||||
memory-region = <&rcpu_mem_0>, <&vdev0vring0>, <&vdev0vring1>, <&vdev0buffer>, <&rsc_table>, <&rcpu_mem_snapshots>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&cls0_trip2 {
|
||||
temperature = <115000>;
|
||||
};
|
||||
|
||||
&cls1_trip2 {
|
||||
temperature = <115000>;
|
||||
};
|
||||
|
||||
&sound_hdmi {
|
||||
status = "disabled";
|
||||
};
|
||||
&sound_codec {
|
||||
status = "disabled";
|
||||
|
||||
};
|
||||
|
||||
&rpwm2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_rpwm2_0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&hdmi_dma {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&hdmi_sspa {
|
||||
status = "disabled";
|
||||
};
|
1080
target/linux/spacemit/dts/k1-x_MUSE-Pi.dts
Normal file
1080
target/linux/spacemit/dts/k1-x_MUSE-Pi.dts
Normal file
File diff suppressed because it is too large
Load diff
1138
target/linux/spacemit/dts/k1-x_deb1.dts
Normal file
1138
target/linux/spacemit/dts/k1-x_deb1.dts
Normal file
File diff suppressed because it is too large
Load diff
6
target/linux/spacemit/image/Config.in
Normal file
6
target/linux/spacemit/image/Config.in
Normal file
|
@ -0,0 +1,6 @@
|
|||
#boot part size defined in partions_*.json file
|
||||
#config SPACEMIT_SD_BOOT_PARTSIZE
|
||||
# int "Boot (SD Card) filesystem partition size (in MB)"
|
||||
# depends on TARGET_spacemit
|
||||
# default 32
|
||||
|
59
target/linux/spacemit/image/Makefile
Normal file
59
target/linux/spacemit/image/Makefile
Normal file
|
@ -0,0 +1,59 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
#
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/image.mk
|
||||
|
||||
#note Config.in together
|
||||
#FAT32_BLOCK_SIZE=1024
|
||||
#FAT32_BLOCKS=$(shell echo $$(($(CONFIG_SPACEMIT_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
|
||||
|
||||
#get bootfs part size from json file, use partition_universal.json as sdcard partition table default
|
||||
PARTITION_FILE=$(PWD)/image/partition_tables/partition_universal.json
|
||||
BOOTFS_SIZE := $(shell jq -r '.partitions[] | select(.name=="bootfs") | .size' $(PARTITION_FILE))
|
||||
BOOTFS_SIZE_KB := $(shell echo "$(BOOTFS_SIZE)" | sed 's/M/*1024/' | bc)
|
||||
|
||||
KERNEL_LOADADDR:=0x1400000
|
||||
define Build/boot-common
|
||||
rm -f $@.boot
|
||||
mkfs.fat -n boot -C $@.boot $(BOOTFS_SIZE_KB)
|
||||
|
||||
#mcopy -i $@.boot $(KDIR_TMP)/$(KERNEL_INITRAMFS_IMAGE) ::$(KERNEL_IMG)
|
||||
mcopy -i $@.boot $(IMAGE_KERNEL) ::$(KERNEL_IMG)
|
||||
mcopy -i $@.boot env_k1-x.txt ::
|
||||
$(foreach dts,$(shell echo $(DEVICE_DTS)),mcopy -i $@.boot $(KDIR)/image-$(dts).dtb ::$(dts).dtb;)
|
||||
|
||||
cp -rf $(STAGING_DIR_IMAGE)/* $(KDIR_TMP)/
|
||||
endef
|
||||
|
||||
define Build/sdcard-img
|
||||
./gen_spacemit_sdcard_img.sh $@ $@.boot $(IMAGE_ROOTFS) \
|
||||
$(PARTITION_FILE) $(CONFIG_TARGET_ROOTFS_PARTSIZE)
|
||||
cp $(KDIR_TMP)/*sdcard.img $(BIN_DIR)
|
||||
|
||||
endef
|
||||
|
||||
define Build/archive-zip
|
||||
rm -f $@
|
||||
|
||||
cp -f $(IMAGE_ROOTFS) $(KDIR_TMP)/rootfs.ext4
|
||||
cp -f $@.boot $(KDIR_TMP)/bootfs.img
|
||||
cp -f partition_tables/* $(KDIR_TMP)/
|
||||
|
||||
./gen_spacemit_archive_zip.sh \
|
||||
$@
|
||||
endef
|
||||
|
||||
define Device/Default
|
||||
PROFILES := Default
|
||||
KERNEL_NAME := Image
|
||||
KERNEL_IMG := Image.itb
|
||||
KERNEL := kernel-bin | fit none
|
||||
IMAGES := sdcard.img
|
||||
IMAGE/sdcard.img := boot-common | sdcard-img
|
||||
endef
|
||||
|
||||
include $(SUBTARGET).mk
|
||||
|
||||
$(eval $(call BuildImage))
|
7
target/linux/spacemit/image/env_k1-x.txt
Normal file
7
target/linux/spacemit/image/env_k1-x.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Common parameter
|
||||
earlycon=sbi
|
||||
console=ttyS0,115200
|
||||
init=/init
|
||||
bootdelay=0
|
||||
loglevel=8
|
||||
|
62
target/linux/spacemit/image/gen_spacemit_archive_zip.sh
Executable file
62
target/linux/spacemit/image/gen_spacemit_archive_zip.sh
Executable file
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
|
||||
|
||||
echo "gen zip file print"
|
||||
#set -ex
|
||||
set -e
|
||||
[ $# -eq 1 ] || {
|
||||
echo "SYNTAX: $0 <file> <partition_table json file> "
|
||||
exit 1
|
||||
}
|
||||
|
||||
#why openWRT do not use genimage? i have no idea
|
||||
#To be compatible with buildroot which use genimage, a conversion is made here.
|
||||
OUTPUT="$1"
|
||||
IMGS_DIR=$(dirname $1)
|
||||
|
||||
#Give a chance to CI
|
||||
if [ -z "$BIANBU_LINUX_ARCHIVE" ]; then
|
||||
TARGET_IMAGE_ZIP=$OUTPUT
|
||||
else
|
||||
TARGET_IMAGE_ZIP="$BIANBU_LINUX_ARCHIVE.zip"
|
||||
fi
|
||||
|
||||
#used by Spacemit's PC-burning-tool called Titan
|
||||
#Titan features
|
||||
# 1. Burning archive's image into storage(nor/flash/emmc/ssd) media on board via USB
|
||||
# 2. Burning archive's image into SD card for booting card to boot device
|
||||
# 3. Produce production cards to upgrade device on factory line
|
||||
# 4. Use archive's image to gen sdcard.img
|
||||
pack_image_zip() {
|
||||
echo "Starting to pack images................................."
|
||||
rm -f ${TARGET_IMAGE_ZIP}
|
||||
|
||||
cd ${IMGS_DIR}
|
||||
zip ${TARGET_IMAGE_ZIP} \
|
||||
fw_dynamic.itb \
|
||||
u-boot.itb \
|
||||
env.bin \
|
||||
bootfs.img \
|
||||
rootfs.ext4 \
|
||||
partition_*.json \
|
||||
fastboot.yaml \
|
||||
genimage.cfg \
|
||||
-r factory
|
||||
|
||||
#Give a chance to CI
|
||||
if [ -n "$BIANBU_LINUX_ARCHIVE_LATEST" ]; then
|
||||
ln -sf ${TARGET_IMAGE_ZIP} $BIANBU_LINUX_ARCHIVE_LATEST
|
||||
fi
|
||||
|
||||
cd - >/dev/null
|
||||
|
||||
echo "Images successfully packed into ${TARGET_IMAGE_ZIP}"
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
#Pack images in zip
|
||||
pack_image_zip
|
||||
|
82
target/linux/spacemit/image/gen_spacemit_sdcard_img.sh
Executable file
82
target/linux/spacemit/image/gen_spacemit_sdcard_img.sh
Executable file
|
@ -0,0 +1,82 @@
|
|||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
|
||||
|
||||
echo "gen sdcard image print"
|
||||
#set -ex
|
||||
set -e
|
||||
[ $# -eq 5 ] || {
|
||||
echo "SYNTAX: $0 <file> <partition_table json file> "
|
||||
exit 1
|
||||
}
|
||||
|
||||
#why openWRT do not use genimage? i have no idea
|
||||
#To be compatible with buildroot which use genimage, a conversion is made here.
|
||||
OUTPUT="$1"
|
||||
IMGS_DIR=$(dirname $1)
|
||||
|
||||
if echo "$1" |grep -q '\.zip$'; then
|
||||
OUTPUT=$(echo "$1" |sed 's/\.zip$//')-sdcard.img
|
||||
echo "new sdcard image name:$OUTPUT"
|
||||
else
|
||||
OUTPUT="$1-sdcard.img"
|
||||
echo "set image name to sdcard.img"
|
||||
fi
|
||||
|
||||
|
||||
#Bootinfo contains only the first 80 bytes of valid data.
|
||||
BOOTINFO=${IMGS_DIR}/$(jq '.partitions[] | select(.name == "bootinfo") | .image' "$4" | sed 's/["]//g')
|
||||
|
||||
FSBL=${IMGS_DIR}/$(jq '.partitions[] | select(.name == "fsbl") | .image' "$4" | sed 's/["]//g')
|
||||
FSBL_SIZE=$(jq '.partitions[] | select(.name == "fsbl") | .size' "$4" | sed 's/["kK]//g')
|
||||
FSBL_OFFSET=$(jq '.partitions[] | select(.name == "fsbl") | .offset' "$4" | sed 's/["kK]//g')
|
||||
|
||||
#if flash env.bin is optional, but env part must be fixed offset at 512k
|
||||
UENV=${IMGS_DIR}/$(jq '.partitions[] | select(.name == "env") | .image' "$4" | sed 's/["]//g')
|
||||
UENV_SIZE=$(jq '.partitions[] | select(.name == "env") | .size' "$4" | sed 's/["kK]//g')
|
||||
UENV_OFFSET=$(jq '.partitions[] | select(.name == "env") | .offset' "$4" | sed 's/["kK]//g')
|
||||
|
||||
OPENSBI=${IMGS_DIR}/$(jq '.partitions[] | select(.name == "opensbi") | .image' "$4" | sed 's/["]//g')
|
||||
OPENSBI_SIZE=$(jq '.partitions[] | select(.name == "opensbi") | .size' "$4" | sed 's/["kK]//g')
|
||||
|
||||
UBOOT=${IMGS_DIR}/$(jq '.partitions[] | select(.name == "uboot") | .image' "$4" | sed 's/["]//g')
|
||||
UBOOT_SIZE=$(jq '.partitions[] | select(.name == "uboot") | .size' "$4" | sed 's/["mM]//g')
|
||||
|
||||
BOOTFS="$2"
|
||||
#${IMGS_DIR}/$(jq '.partitions[] | select(.name == "bootfs") | .image' "$2" | sed 's/["]//g')
|
||||
BOOTFS_SIZE=$(jq '.partitions[] | select(.name == "bootfs") | .size' "$4" | sed 's/["mM]//g')
|
||||
|
||||
ROOTFS="$3"
|
||||
#${IMGS_DIR}/$(jq '.partitions[] | select(.name == "rootfs") | .image' "$2" | sed 's/["]//g')
|
||||
|
||||
ROOTFS_SIZE=$5
|
||||
head=4
|
||||
sect=63
|
||||
|
||||
#unit is kbytes default
|
||||
set $(ptgen -o $OUTPUT -v -g -h $head -s $sect \
|
||||
-N fsbl -p $FSBL_SIZE@$FSBL_OFFSET \
|
||||
-N env -p $UENV_SIZE@$UENV_OFFSET \
|
||||
-N opensbi -p $OPENSBI_SIZE \
|
||||
-N uboot -p ${UBOOT_SIZE}M \
|
||||
-N bootfs -p ${BOOTFS_SIZE}M \
|
||||
-N rootfs -p ${ROOTFS_SIZE}M)
|
||||
|
||||
OPENSBI_OFFSET=$(($5 / 1024))
|
||||
UBOOT_OFFSET=$(($7 / 1024))
|
||||
BOOTFS_OFFSET=$(($9 / 1024))
|
||||
ROOTFS_OFFSET=$((${11} / 1024))
|
||||
|
||||
#Bootinfo contains only the first 80 bytes of valid data.
|
||||
dd bs=80 if="$BOOTINFO" of="$OUTPUT" seek=0 count=1 conv=notrunc
|
||||
dd bs=1024 if="$FSBL" of="$OUTPUT" seek=${FSBL_OFFSET} conv=notrunc
|
||||
dd bs=1024 if="$UENV" of="$OUTPUT" seek=${UENV_OFFSET} conv=notrunc
|
||||
dd bs=1024 if="$OPENSBI" of="$OUTPUT" seek=${OPENSBI_OFFSET} conv=notrunc
|
||||
dd bs=1024 if="$UBOOT" of="$OUTPUT" seek=${UBOOT_OFFSET} conv=notrunc
|
||||
dd bs=1024 if="$BOOTFS" of="$OUTPUT" seek=${BOOTFS_OFFSET} conv=notrunc
|
||||
dd bs=1024 if="$ROOTFS" of="$OUTPUT" seek=${ROOTFS_OFFSET} conv=notrunc
|
||||
|
||||
echo "$OUTPUT successfully generated"
|
||||
|
17
target/linux/spacemit/image/k1-nas.mk
Normal file
17
target/linux/spacemit/image/k1-nas.mk
Normal file
|
@ -0,0 +1,17 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
|
||||
define Device/MUSE-N1
|
||||
DEVICE_VENDOR := Spacemit
|
||||
DEVICE_MODEL := N1 nas
|
||||
DEVICE_DTS_DIR:= ../dts
|
||||
DEVICE_DTS := k1-x_MUSE-N1
|
||||
SOC := KeyStone
|
||||
KERNEL_NAME := Image
|
||||
KERNEL_IMG := Image.itb
|
||||
KERNEL := kernel-bin | fit none
|
||||
IMAGES := pack.zip
|
||||
IMAGE/pack.zip := $(KERNEL_IMG) | boot-common | archive-zip
|
||||
endef
|
||||
TARGET_DEVICES += MUSE-N1
|
18
target/linux/spacemit/image/k1-sbc.mk
Normal file
18
target/linux/spacemit/image/k1-sbc.mk
Normal file
|
@ -0,0 +1,18 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
|
||||
define Device/debX
|
||||
DEVICE_VENDOR := Spacemit
|
||||
DEVICE_MODEL :=k1-x deb board
|
||||
DEVICE_DTS_DIR:= ../dts
|
||||
DEVICE_DTS := k1-x_deb1 k1-x_MUSE-Pi
|
||||
SOC := KeyStone
|
||||
KERNEL_NAME := Image
|
||||
KERNEL_IMG := Image.itb
|
||||
KERNEL := kernel-bin | fit none
|
||||
IMAGES := pack.zip
|
||||
IMAGE/pack.zip := $(KERNEL_IMG) | boot-common | sdcard-img | archive-zip
|
||||
endef
|
||||
TARGET_DEVICES += debX
|
||||
|
52
target/linux/spacemit/image/partition_tables/fastboot.yaml
Normal file
52
target/linux/spacemit/image/partition_tables/fastboot.yaml
Normal file
|
@ -0,0 +1,52 @@
|
|||
version: 1.0 # 配置文件版本
|
||||
support: # 支持的项目代号
|
||||
- 'k1x'
|
||||
- 'k1pro'
|
||||
actions: # 刷机操作的定义
|
||||
|
||||
- getvar:
|
||||
args: 'version-brom'
|
||||
set: 'version'
|
||||
skip_fail: true
|
||||
timeout:
|
||||
seconds: 1
|
||||
|
||||
- stage:
|
||||
file: 'factory/FSBL.bin'
|
||||
skip_when: "not temp.version"
|
||||
timeout:
|
||||
minutes: 2
|
||||
|
||||
- continue:
|
||||
skip_when: "not temp.version"
|
||||
timeout:
|
||||
seconds: 1
|
||||
|
||||
- stage:
|
||||
file: 'u-boot.itb'
|
||||
skip_when: "not temp.version"
|
||||
timeout:
|
||||
minutes: 2
|
||||
retry: 3
|
||||
|
||||
- continue:
|
||||
skip_when: "not temp.version"
|
||||
timeout:
|
||||
seconds: 1
|
||||
|
||||
- getvar:
|
||||
args: 'mtd-size'
|
||||
set_var: 'size0'
|
||||
timeout:
|
||||
seconds: 1
|
||||
|
||||
- getvar:
|
||||
args: 'blk-size'
|
||||
set_var: 'size1'
|
||||
timeout:
|
||||
seconds: 1
|
||||
|
||||
- multi_flash:
|
||||
timeout:
|
||||
minutes: 10
|
||||
relate_partition: ['partition_{size0}.json', 'partition_{size1}.json']
|
67
target/linux/spacemit/image/partition_tables/genimage.cfg
Normal file
67
target/linux/spacemit/image/partition_tables/genimage.cfg
Normal file
|
@ -0,0 +1,67 @@
|
|||
|
||||
# This is a genimage configuration file auto generated by gen_imgcfg.py.
|
||||
# require genimage version 16
|
||||
|
||||
image sdcard.img {
|
||||
hdimage {
|
||||
partition-table-type = gpt
|
||||
}
|
||||
|
||||
partition bootinfo {
|
||||
image = "factory/bootinfo_sd.bin"
|
||||
offset = "0K"
|
||||
size = "512"
|
||||
holes = {"(80;512)"}
|
||||
in-partition-table = "false"
|
||||
}
|
||||
|
||||
partition fsbl {
|
||||
image = "factory/FSBL.bin"
|
||||
offset = "128K"
|
||||
size = "256K"
|
||||
holes = {}
|
||||
in-partition-table = "true"
|
||||
}
|
||||
|
||||
partition env {
|
||||
image = "env.bin"
|
||||
offset = "384K"
|
||||
size = "64K"
|
||||
holes = {}
|
||||
in-partition-table = "true"
|
||||
}
|
||||
|
||||
partition opensbi {
|
||||
image = "fw_dynamic.itb"
|
||||
offset = ""
|
||||
size = "384K"
|
||||
holes = {}
|
||||
in-partition-table = "true"
|
||||
}
|
||||
|
||||
partition uboot {
|
||||
image = "u-boot.itb"
|
||||
offset = ""
|
||||
size = "2M"
|
||||
holes = {}
|
||||
in-partition-table = "true"
|
||||
}
|
||||
|
||||
partition bootfs {
|
||||
image = "bootfs.img"
|
||||
offset = "4M"
|
||||
size = "256M"
|
||||
holes = {}
|
||||
in-partition-table = "true"
|
||||
}
|
||||
|
||||
partition rootfs {
|
||||
image = "rootfs.ext4"
|
||||
offset = "260M"
|
||||
size = ""
|
||||
holes = {}
|
||||
in-partition-table = "true"
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"format": "mtd",
|
||||
"partitions": [
|
||||
{
|
||||
"name": "bootinfo",
|
||||
"comment": "private partition, should not overrided it",
|
||||
"offset": "0",
|
||||
"size": "128K",
|
||||
"image": "factory/bootinfo_spinor.bin"
|
||||
},
|
||||
{
|
||||
"name": "fsbl",
|
||||
"offset": "128K",
|
||||
"size": "256K",
|
||||
"image": "factory/FSBL.bin"
|
||||
},
|
||||
{
|
||||
"name": "env",
|
||||
"offset": "384K",
|
||||
"size": "64K"
|
||||
},
|
||||
{
|
||||
"name": "opensbi",
|
||||
"offset": "448K",
|
||||
"size": "192K",
|
||||
"image": "fw_dynamic.itb"
|
||||
},
|
||||
{
|
||||
"name": "uboot",
|
||||
"offset": "640K",
|
||||
"size": "-",
|
||||
"image": "u-boot.itb"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"format": "gpt",
|
||||
"partitions": [
|
||||
{
|
||||
"name": "bootinfo",
|
||||
"offset": "0",
|
||||
"size": "80B",
|
||||
"image": "factory/bootinfo_sd.bin"
|
||||
},
|
||||
{
|
||||
"name": "fsbl",
|
||||
"offset": "128K",
|
||||
"size": "256K",
|
||||
"image": "factory/FSBL.bin"
|
||||
},
|
||||
{
|
||||
"name": "env",
|
||||
"offset": "384K",
|
||||
"size": "64K"
|
||||
},
|
||||
{
|
||||
"name": "opensbi",
|
||||
"offset": "1M",
|
||||
"size": "1M",
|
||||
"image": "fw_dynamic.itb"
|
||||
},
|
||||
{
|
||||
"name": "uboot",
|
||||
"offset": "2M",
|
||||
"size": "2M",
|
||||
"image": "u-boot.itb"
|
||||
},
|
||||
{
|
||||
"name": "bootfs",
|
||||
"type": "FAT32",
|
||||
"offset": "4M",
|
||||
"size": "-",
|
||||
"image": ["factory/bootinfo_emmc.bin",
|
||||
"factory/bootinfo_spinand.bin",
|
||||
"factory/bootinfo_spinor.bin",
|
||||
"factory/FSBL.bin",
|
||||
"fw_dynamic.itb",
|
||||
"u-boot.itb",
|
||||
"bootfs.img",
|
||||
"rootfs.ext4",
|
||||
"env.bin",
|
||||
"/partition_.+.json$/"]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"format": "gpt",
|
||||
"partitions": [
|
||||
{
|
||||
"name": "bootinfo",
|
||||
"hidden": true,
|
||||
"offset": "0K",
|
||||
"size": "512",
|
||||
"image": "factory/bootinfo_sd.bin",
|
||||
"holes": "{\"(80;512)\"}"
|
||||
},
|
||||
{
|
||||
"name": "fsbl",
|
||||
"hidden": false,
|
||||
"offset": "128K",
|
||||
"size": "256K",
|
||||
"image": "factory/FSBL.bin"
|
||||
},
|
||||
{
|
||||
"name": "env",
|
||||
"offset":"384K",
|
||||
"size": "64K",
|
||||
"image": "env.bin"
|
||||
},
|
||||
{
|
||||
"name": "opensbi",
|
||||
"size": "384K",
|
||||
"image": "fw_dynamic.itb"
|
||||
},
|
||||
{
|
||||
"name": "uboot",
|
||||
"size": "2M",
|
||||
"image": "u-boot.itb"
|
||||
},
|
||||
{
|
||||
"name": "bootfs",
|
||||
"offset": "4M",
|
||||
"size": "256M",
|
||||
"image": "bootfs.img",
|
||||
"compress": "gzip-5"
|
||||
},
|
||||
{
|
||||
"name": "rootfs",
|
||||
"offset": "260M",
|
||||
"size": "-",
|
||||
"image": "rootfs.ext4",
|
||||
"compress": "gzip-5"
|
||||
}
|
||||
]
|
||||
}
|
18
target/linux/spacemit/k1-nas/base-files/etc/board.d/01_leds
Normal file
18
target/linux/spacemit/k1-nas/base-files/etc/board.d/01_leds
Normal file
|
@ -0,0 +1,18 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2022 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
|
||||
board_config_update
|
||||
|
||||
case "$(board_name)" in
|
||||
spacemit,k1-x)
|
||||
ucidef_set_led_netdev "wan" "WAN" "green:d3" "eth0"
|
||||
;;
|
||||
esac
|
||||
|
||||
board_config_flush
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,19 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2022 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
|
||||
board_config_update
|
||||
|
||||
case "$(board_name)" in
|
||||
spacemit,MUSE-N1 )
|
||||
ucidef_set_interface_lan 'eth0 eth1 wlan0'
|
||||
ucidef_set_interface_wan 'eth2'
|
||||
;;
|
||||
esac
|
||||
|
||||
board_config_flush
|
||||
|
||||
exit 0
|
14
target/linux/spacemit/k1-nas/base-files/etc/hostapd.conf
Normal file
14
target/linux/spacemit/k1-nas/base-files/etc/hostapd.conf
Normal file
|
@ -0,0 +1,14 @@
|
|||
interface=wlan0
|
||||
driver=nl80211
|
||||
ctrl_interface=/var/run/hostapd
|
||||
ssid=openWRT-AP
|
||||
wpa_passphrase=12345678
|
||||
wpa=2
|
||||
wpa_key_mgmt=WPA-PSK
|
||||
rsn_pairwise=CCMP TKIP
|
||||
wpa_pairwise=TKIP CCMP
|
||||
channel=6
|
||||
ieee80211n=1
|
||||
hw_mode=g
|
||||
bridge=br-lan
|
||||
ignore_broadcast_ssid=0
|
6
target/linux/spacemit/k1-nas/base-files/etc/hosts
Normal file
6
target/linux/spacemit/k1-nas/base-files/etc/hosts
Normal file
|
@ -0,0 +1,6 @@
|
|||
127.0.0.1 localhost
|
||||
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
ff02::1 ip6-allnodes
|
||||
ff02::2 ip6-allrouters
|
||||
159.27.188.198 archive.spacemit.com
|
13
target/linux/spacemit/k1-nas/base-files/etc/init.d/custom_wifi_ap
Executable file
13
target/linux/spacemit/k1-nas/base-files/etc/init.d/custom_wifi_ap
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
#must after boot
|
||||
START=99
|
||||
start(){
|
||||
hostapd -B /etc/hostapd.conf
|
||||
}
|
||||
|
||||
stop(){
|
||||
echo "hostapd needs to be stopped manually"
|
||||
}
|
||||
restart(){
|
||||
echo "hostapd needs to be restart manually"
|
||||
}
|
4
target/linux/spacemit/k1-nas/base-files/etc/inittab
Normal file
4
target/linux/spacemit/k1-nas/base-files/etc/inittab
Normal file
|
@ -0,0 +1,4 @@
|
|||
::sysinit:/etc/init.d/rcS S boot
|
||||
::shutdown:/etc/init.d/rcS K shutdown
|
||||
::askconsole:/usr/libexec/login.sh
|
||||
ttyS0::askfirst:/usr/libexec/login.sh
|
|
@ -0,0 +1,19 @@
|
|||
# Copyright (C) 2012-2015 OpenWrt.org
|
||||
|
||||
move_config() {
|
||||
local partdev
|
||||
|
||||
. /lib/upgrade/common.sh
|
||||
|
||||
if export_bootdevice && export_partdevice partdev 3; then
|
||||
if mount -t vfat -o rw,noatime "/dev/$partdev" /mnt; then
|
||||
if [ -f "/mnt/$BACKUP_FILE" ]; then
|
||||
mv -f "/mnt/$BACKUP_FILE" /
|
||||
fi
|
||||
umount /mnt
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
boot_hook_add preinit_mount_root move_config
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
platform_check_image() {
|
||||
local diskdev partdev diff
|
||||
|
||||
export_bootdevice && export_partdevice diskdev 0 || {
|
||||
echo "Unable to determine upgrade device"
|
||||
return 1
|
||||
}
|
||||
|
||||
get_partitions "/dev/$diskdev" bootdisk
|
||||
|
||||
#extract the boot sector from the image
|
||||
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
|
||||
|
||||
get_partitions /tmp/image.bs image
|
||||
|
||||
#compare tables
|
||||
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
|
||||
|
||||
rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
|
||||
|
||||
if [ -n "$diff" ]; then
|
||||
echo "Partition layout has changed. Full image will be written."
|
||||
ask_bool 0 "Abort" && exit 1
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
platform_copy_config() {
|
||||
local partdev
|
||||
|
||||
if export_partdevice partdev 3; then
|
||||
mount -t vfat -o rw,noatime "/dev/$partdev" /mnt
|
||||
cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
|
||||
umount /mnt
|
||||
fi
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local diskdev partdev diff
|
||||
|
||||
export_bootdevice && export_partdevice diskdev 0 || {
|
||||
echo "Unable to determine upgrade device"
|
||||
return 1
|
||||
}
|
||||
|
||||
sync
|
||||
|
||||
if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
|
||||
get_partitions "/dev/$diskdev" bootdisk
|
||||
|
||||
#extract the boot sector from the image
|
||||
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
|
||||
|
||||
get_partitions /tmp/image.bs image
|
||||
|
||||
#compare tables
|
||||
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
|
||||
else
|
||||
diff=1
|
||||
fi
|
||||
|
||||
if [ -n "$diff" ]; then
|
||||
get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
|
||||
|
||||
# Separate removal and addtion is necessary; otherwise, partition 1
|
||||
# will be missing if it overlaps with the old partition 2
|
||||
partx -d - "/dev/$diskdev"
|
||||
partx -a - "/dev/$diskdev"
|
||||
|
||||
return 0
|
||||
fi
|
||||
|
||||
#iterate over each partition from the image and write it to the boot disk
|
||||
while read part start size; do
|
||||
if export_partdevice partdev $part; then
|
||||
echo "Writing image to /dev/$partdev..."
|
||||
get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
|
||||
else
|
||||
echo "Unable to find partition $part device, skipped."
|
||||
fi
|
||||
done < /tmp/partmap.image
|
||||
|
||||
#copy partition uuid
|
||||
echo "Writing new UUID to /dev/$diskdev..."
|
||||
get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
|
||||
}
|
117
target/linux/spacemit/k1-nas/base-files/usr/bin/uas-gadget2-bot.sh
Executable file
117
target/linux/spacemit/k1-nas/base-files/usr/bin/uas-gadget2-bot.sh
Executable file
|
@ -0,0 +1,117 @@
|
|||
#!/bin/sh
|
||||
# configfs for bot mass-storage usb gadget
|
||||
# should enable in Kconfig: target core, target core > fileio, f_msc
|
||||
name=$(basename $0)
|
||||
VENDOR_ID="0x361C"
|
||||
PRODUC_ID="0x002f"
|
||||
SERNUM_STR="20211102"
|
||||
MANUAF_STR="Spacemit"
|
||||
PRODUC_STR="K1 Mass Storage(BOT)"
|
||||
# SCSI naa
|
||||
CONFIGFS=/sys/kernel/config
|
||||
GADGET_PATH=$CONFIGFS/usb_gadget/msc
|
||||
GFUNC_PATH=$GADGET_PATH/functions
|
||||
GCONFIG=$GADGET_PATH/configs/c.1
|
||||
usage()
|
||||
{
|
||||
echo "$name Usage: "
|
||||
echo ""
|
||||
echo -e "\texample: $name start /dev/mmcblk1p1"
|
||||
echo -e "\texample: $name stop"
|
||||
echo ""
|
||||
}
|
||||
########################### Gadget ####################################msc#######
|
||||
gadget_info()
|
||||
{
|
||||
echo "$name: $1"
|
||||
}
|
||||
gadget_debug()
|
||||
{
|
||||
[ $DEBUG ] && echo "$name: $1"
|
||||
}
|
||||
die()
|
||||
{
|
||||
gadget_info "$1"
|
||||
exit 1
|
||||
}
|
||||
g_remove()
|
||||
{
|
||||
[ -h $1 ] && rm -f $1
|
||||
[ -d $1 ] && rmdir $1
|
||||
[ -e $1 ] && rm -f $1
|
||||
}
|
||||
enable_udc()
|
||||
{
|
||||
echo c0900100.udc > $GADGET_PATH/UDC
|
||||
}
|
||||
stop()
|
||||
{
|
||||
[ -e $GADGET_PATH/UDC ] || die "gadget not configured, no need to clean"
|
||||
gadget_info "Echo none to udc"
|
||||
[ -e $GADGET_PATH/UDC ] || die "gadget not configured yet"
|
||||
[ `cat $GADGET_PATH/UDC` ] && echo "" > $GADGET_PATH/UDC
|
||||
gadget_debug "clean msc"
|
||||
gadget_debug "remove msc from usb config"
|
||||
g_remove $GCONFIG/mass_storage.usb0
|
||||
# Remove strings:
|
||||
gadget_info "remove strings of c.1."
|
||||
g_remove $GCONFIG/strings/0x409
|
||||
# Remove config:
|
||||
gadget_info "remove configs c.1."
|
||||
g_remove $GCONFIG
|
||||
g_remove $GFUNC_PATH/mass_storage.usb0
|
||||
# Remove string in gadget
|
||||
gadget_info "remove strings of $GADGET_PATH."
|
||||
g_remove $GADGET_PATH/strings/0x409
|
||||
# Remove gadget
|
||||
gadget_info "remove $GADGET_PATH."
|
||||
g_remove $GADGET_PATH
|
||||
}
|
||||
check()
|
||||
{
|
||||
DEVICE=$1
|
||||
[ -n "$DEVICE" ] || die "No device specificed"
|
||||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}"
|
||||
}
|
||||
start()
|
||||
{
|
||||
DEVICE=$1
|
||||
gadget_info "config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
|
||||
[ -e $GADGET_PATH ] && die "ERROR: gadget already configured, should run stop first"
|
||||
mkdir $GADGET_PATH
|
||||
echo $VENDOR_ID > $GADGET_PATH/idVendor
|
||||
echo $PRODUC_ID > $GADGET_PATH/idProduct
|
||||
mkdir $GADGET_PATH/strings/0x409
|
||||
echo $SERNUM_STR > $GADGET_PATH/strings/0x409/serialnumber
|
||||
echo $MANUAF_STR > $GADGET_PATH/strings/0x409/manufacturer
|
||||
echo $PRODUC_STR > $GADGET_PATH/strings/0x409/product
|
||||
mkdir $GCONFIG
|
||||
echo 0xc0 > $GCONFIG/bmAttributes
|
||||
echo 500 > $GCONFIG/MaxPower
|
||||
mkdir $GCONFIG/strings/0x409
|
||||
gadget_debug "add a msc function instance"
|
||||
MSC_DIR=$GFUNC_PATH/mass_storage.usb0
|
||||
mkdir -p $MSC_DIR
|
||||
echo $DEVICE > $MSC_DIR/lun.0/file
|
||||
echo 1 > $MSC_DIR/lun.0/removable
|
||||
echo 0 > $MSC_DIR/lun.0/nofua
|
||||
gadget_debug "add msc to usb config"
|
||||
ln -s $MSC_DIR $GCONFIG/mass_storage.usb0
|
||||
enable_udc
|
||||
}
|
||||
############################ MAIN #############################################
|
||||
case "$1" in
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
start)
|
||||
check $2
|
||||
start $2
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit $?
|
||||
|
176
target/linux/spacemit/k1-nas/base-files/usr/bin/uas-gadget2.sh
Executable file
176
target/linux/spacemit/k1-nas/base-files/usr/bin/uas-gadget2.sh
Executable file
|
@ -0,0 +1,176 @@
|
|||
#!/bin/sh
|
||||
# configfs for uas mass-storage usb gadget
|
||||
# should enable in Kconfig: target core, target core > fileio, f_tcm
|
||||
name=$(basename $0)
|
||||
VENDOR_ID="0x361C"
|
||||
PRODUC_ID="0x001f"
|
||||
SERNUM_STR="20211102"
|
||||
MANUAF_STR="Spacemit"
|
||||
PRODUC_STR="K1 Mass Storage(UASP)"
|
||||
# SCSI naa
|
||||
NAA="naa.6001405c3214b06a"
|
||||
CONFIGFS=/sys/kernel/config
|
||||
CORE_DIR=$CONFIGFS/target/core
|
||||
USB_GDIR=$CONFIGFS/target/usb_gadget
|
||||
GADGET_PATH=$CONFIGFS/usb_gadget/tcm
|
||||
die()
|
||||
{
|
||||
echo $1
|
||||
exit 1
|
||||
}
|
||||
usage()
|
||||
{
|
||||
echo "$name Usage: "
|
||||
echo ""
|
||||
echo "$name start [device]: start tcm usb_gadget"
|
||||
echo -e "\t\tdevice: block dev to use iblock, file to use fileio, \`rd\` to use rd_mcp"
|
||||
echo -e "\t\tstop: stop tcm usb_gadget"
|
||||
echo -e "\texample: $name /dev/mmcblk1p1"
|
||||
echo ""
|
||||
}
|
||||
########################### Gadget ####################################tcm#######
|
||||
enable_udc()
|
||||
{
|
||||
# Ensure fu->tpg = tpg_instances[i].tpg won't get NULL
|
||||
ln -s $GADGET_PATH/functions/tcm.0 $GADGET_PATH/configs/c.1/
|
||||
# If only one usb controller:
|
||||
echo c0900100.udc > $GADGET_PATH/UDC
|
||||
}
|
||||
config_gadget()
|
||||
{
|
||||
echo "gadget-setup: config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||
mkdir $GADGET_PATH
|
||||
echo $VENDOR_ID > $GADGET_PATH/idVendor
|
||||
echo $PRODUC_ID > $GADGET_PATH/idProduct
|
||||
mkdir $GADGET_PATH/strings/0x409
|
||||
echo $SERNUM_STR > $GADGET_PATH/strings/0x409/serialnumber
|
||||
echo $MANUAF_STR > $GADGET_PATH/strings/0x409/manufacturer
|
||||
echo $PRODUC_STR > $GADGET_PATH/strings/0x409/product
|
||||
mkdir $GADGET_PATH/configs/c.1
|
||||
echo 0xc0 > $GADGET_PATH/configs/c.1/bmAttributes
|
||||
echo 2 > $GADGET_PATH/configs/c.1/MaxPower
|
||||
mkdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
mkdir -p $GADGET_PATH/functions/tcm.0
|
||||
}
|
||||
clean_gadget()
|
||||
{
|
||||
rmdir $GADGET_PATH/functions/tcm.0
|
||||
# Remove strings:
|
||||
rmdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
rmdir $GADGET_PATH/strings/0x409
|
||||
# Remove config:
|
||||
rmdir $GADGET_PATH/configs/c.1
|
||||
rmdir $GADGET_PATH
|
||||
}
|
||||
disable_udc()
|
||||
{
|
||||
echo > $GADGET_PATH/UDC
|
||||
rm -f $GADGET_PATH/configs/c.1/tcm.0
|
||||
}
|
||||
############################### TCM related ##################################
|
||||
|
||||
config_target()
|
||||
{
|
||||
DEVICE=$1
|
||||
# Create a backstore
|
||||
if [ -z "$DEVICE" ]; then
|
||||
# RD_MCP backend is only for DEBUG usage
|
||||
echo "$name: no device specificed, select rd_mcp as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
# 128MB pure ramdisk
|
||||
echo rd_pages=32768 > $BACKSTORE_DIR/control
|
||||
elif [ -b $DEVICE ]; then
|
||||
echo "$name: block device, select iblock as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
echo "udev_path=${DEVICE}" > $BACKSTORE_DIR/control
|
||||
else
|
||||
echo "$name: other path, select fileio as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
DEVICE_SIZE=$(du -b $DEVICE | cut -f1)
|
||||
echo "fd_dev_name=${DEVICE},fd_dev_size=${DEVICE_SIZE}" > $BACKSTORE_DIR/control
|
||||
# echo 1 > $BACKSTORE_DIR/attrib/emulate_write_cache
|
||||
fi
|
||||
[ -n "$DEVICE" ] && umount $DEVICE
|
||||
echo 1 > $BACKSTORE_DIR/enable
|
||||
echo "$name: NAA of target: $NAA"
|
||||
# Create an NAA target and a target portal group (TPG)
|
||||
mkdir -p $USB_GDIR/$NAA/tpgt_1/
|
||||
echo "$name tpgt_1 has lun_0"
|
||||
# Create a LUN
|
||||
mkdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
# Nexus initiator on target port 1 to $NAA
|
||||
echo $NAA > $USB_GDIR/$NAA/tpgt_1/nexus
|
||||
# Allow write access for non authenticated initiators
|
||||
# echo 0 > $USB_GDIR/$NAA/tpgt_1/attrib/demo_mode_write_protect
|
||||
ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
#ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
# Enable the target portal group, with 1 lun
|
||||
echo 1 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
}
|
||||
clean_target()
|
||||
{
|
||||
[ -d "$USB_GDIR/$NAA/tpgt_1/enable" ] && echo 0 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/
|
||||
rmdir $USB_GDIR/$NAA/
|
||||
rmdir $USB_GDIR
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
rmdir $BACKSTORE_DIR
|
||||
}
|
||||
stop()
|
||||
{
|
||||
disable_udc
|
||||
clean_target
|
||||
clean_gadget
|
||||
}
|
||||
check()
|
||||
{
|
||||
DEVICE=$1
|
||||
[ -n "$DEVICE" ] || die "No device specificed"
|
||||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}"
|
||||
}
|
||||
start()
|
||||
{
|
||||
# Load the target modules and mount the config file system
|
||||
# Uncomment these if modules not built-in:
|
||||
# lsmod | grep -q configfs || modprobe configfs
|
||||
# lsmod | grep -q target_core_mod || modprobe target_core_mod
|
||||
DEVICE=$1
|
||||
mount | grep configfs
|
||||
[ $? -eq 0 ] || mount -t configfs none $CONFIGFS
|
||||
mkdir -p $USB_GDIR
|
||||
config_gadget
|
||||
# Config target after gadget, or tpgt cannot be mkdired
|
||||
config_target $DEVICE
|
||||
enable_udc
|
||||
}
|
||||
############################ MAIN #############################################
|
||||
case "$1" in
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
start)
|
||||
case "$2" in
|
||||
rd|ramdisk|rd_mcp)
|
||||
start
|
||||
;;
|
||||
*)
|
||||
check $2
|
||||
start $2
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit $?
|
176
target/linux/spacemit/k1-nas/base-files/usr/bin/uas-gadget3.sh
Executable file
176
target/linux/spacemit/k1-nas/base-files/usr/bin/uas-gadget3.sh
Executable file
|
@ -0,0 +1,176 @@
|
|||
#!/bin/sh
|
||||
# configfs for uas mass-storage usb gadget
|
||||
# should enable in Kconfig: target core, target core > fileio, f_tcm
|
||||
name=$(basename $0)
|
||||
VENDOR_ID="0x361C"
|
||||
PRODUC_ID="0x001f"
|
||||
SERNUM_STR="20211102"
|
||||
MANUAF_STR="Spacemit"
|
||||
PRODUC_STR="K1 Mass Storage(UASP)"
|
||||
# SCSI naa
|
||||
NAA="naa.6001405c3214b06a"
|
||||
CONFIGFS=/sys/kernel/config
|
||||
CORE_DIR=$CONFIGFS/target/core
|
||||
USB_GDIR=$CONFIGFS/target/usb_gadget
|
||||
GADGET_PATH=$CONFIGFS/usb_gadget/tcm
|
||||
die()
|
||||
{
|
||||
echo $1
|
||||
exit 1
|
||||
}
|
||||
usage()
|
||||
{
|
||||
echo "$name Usage: "
|
||||
echo ""
|
||||
echo "$name start [device]: start tcm usb_gadget"
|
||||
echo -e "\t\tdevice: block dev to use iblock, file to use fileio, \`rd\` to use rd_mcp"
|
||||
echo -e "\t\tstop: stop tcm usb_gadget"
|
||||
echo -e "\texample: $name /dev/mmcblk1p1"
|
||||
echo ""
|
||||
}
|
||||
########################### Gadget ####################################tcm#######
|
||||
enable_udc()
|
||||
{
|
||||
# Ensure fu->tpg = tpg_instances[i].tpg won't get NULL
|
||||
ln -s $GADGET_PATH/functions/tcm.0 $GADGET_PATH/configs/c.1/
|
||||
# If only one usb controller:
|
||||
echo c0a00000.dwc3 > $GADGET_PATH/UDC
|
||||
}
|
||||
config_gadget()
|
||||
{
|
||||
echo "gadget-setup: config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||
mkdir $GADGET_PATH
|
||||
echo $VENDOR_ID > $GADGET_PATH/idVendor
|
||||
echo $PRODUC_ID > $GADGET_PATH/idProduct
|
||||
mkdir $GADGET_PATH/strings/0x409
|
||||
echo $SERNUM_STR > $GADGET_PATH/strings/0x409/serialnumber
|
||||
echo $MANUAF_STR > $GADGET_PATH/strings/0x409/manufacturer
|
||||
echo $PRODUC_STR > $GADGET_PATH/strings/0x409/product
|
||||
mkdir $GADGET_PATH/configs/c.1
|
||||
echo 0xc0 > $GADGET_PATH/configs/c.1/bmAttributes
|
||||
echo 2 > $GADGET_PATH/configs/c.1/MaxPower
|
||||
mkdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
mkdir -p $GADGET_PATH/functions/tcm.0
|
||||
}
|
||||
clean_gadget()
|
||||
{
|
||||
rmdir $GADGET_PATH/functions/tcm.0
|
||||
# Remove strings:
|
||||
rmdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
rmdir $GADGET_PATH/strings/0x409
|
||||
# Remove config:
|
||||
rmdir $GADGET_PATH/configs/c.1
|
||||
rmdir $GADGET_PATH
|
||||
}
|
||||
disable_udc()
|
||||
{
|
||||
echo > $GADGET_PATH/UDC
|
||||
rm -f $GADGET_PATH/configs/c.1/tcm.0
|
||||
}
|
||||
############################### TCM related ##################################
|
||||
|
||||
config_target()
|
||||
{
|
||||
DEVICE=$1
|
||||
# Create a backstore
|
||||
if [ -z "$DEVICE" ]; then
|
||||
# RD_MCP backend is only for DEBUG usage
|
||||
echo "$name: no device specificed, select rd_mcp as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
# 128MB pure ramdisk
|
||||
echo rd_pages=32768 > $BACKSTORE_DIR/control
|
||||
elif [ -b $DEVICE ]; then
|
||||
echo "$name: block device, select iblock as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
echo "udev_path=${DEVICE}" > $BACKSTORE_DIR/control
|
||||
else
|
||||
echo "$name: other path, select fileio as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
DEVICE_SIZE=$(du -b $DEVICE | cut -f1)
|
||||
echo "fd_dev_name=${DEVICE},fd_dev_size=${DEVICE_SIZE}" > $BACKSTORE_DIR/control
|
||||
# echo 1 > $BACKSTORE_DIR/attrib/emulate_write_cache
|
||||
fi
|
||||
[ -n "$DEVICE" ] && umount $DEVICE
|
||||
echo 1 > $BACKSTORE_DIR/enable
|
||||
echo "$name: NAA of target: $NAA"
|
||||
# Create an NAA target and a target portal group (TPG)
|
||||
mkdir -p $USB_GDIR/$NAA/tpgt_1/
|
||||
echo "$name tpgt_1 has lun_0"
|
||||
# Create a LUN
|
||||
mkdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
# Nexus initiator on target port 1 to $NAA
|
||||
echo $NAA > $USB_GDIR/$NAA/tpgt_1/nexus
|
||||
# Allow write access for non authenticated initiators
|
||||
# echo 0 > $USB_GDIR/$NAA/tpgt_1/attrib/demo_mode_write_protect
|
||||
ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
#ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
# Enable the target portal group, with 1 lun
|
||||
echo 1 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
}
|
||||
clean_target()
|
||||
{
|
||||
[ -d "$USB_GDIR/$NAA/tpgt_1/enable" ] && echo 0 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/
|
||||
rmdir $USB_GDIR/$NAA/
|
||||
rmdir $USB_GDIR
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
rmdir $BACKSTORE_DIR
|
||||
}
|
||||
stop()
|
||||
{
|
||||
disable_udc
|
||||
clean_target
|
||||
clean_gadget
|
||||
}
|
||||
check()
|
||||
{
|
||||
DEVICE=$1
|
||||
[ -n "$DEVICE" ] || die "No device specificed"
|
||||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}"
|
||||
}
|
||||
start()
|
||||
{
|
||||
# Load the target modules and mount the config file system
|
||||
# Uncomment these if modules not built-in:
|
||||
# lsmod | grep -q configfs || modprobe configfs
|
||||
# lsmod | grep -q target_core_mod || modprobe target_core_mod
|
||||
DEVICE=$1
|
||||
mount | grep configfs
|
||||
[ $? -eq 0 ] || mount -t configfs none $CONFIGFS
|
||||
mkdir -p $USB_GDIR
|
||||
config_gadget
|
||||
# Config target after gadget, or tpgt cannot be mkdired
|
||||
config_target $DEVICE
|
||||
enable_udc
|
||||
}
|
||||
############################ MAIN #############################################
|
||||
case "$1" in
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
start)
|
||||
case "$2" in
|
||||
rd|ramdisk|rd_mcp)
|
||||
start
|
||||
;;
|
||||
*)
|
||||
check $2
|
||||
start $2
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit $?
|
44
target/linux/spacemit/k1-nas/base-files/usr/bin/uas_switch
Executable file
44
target/linux/spacemit/k1-nas/base-files/usr/bin/uas_switch
Executable file
|
@ -0,0 +1,44 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
#must after boot
|
||||
START=11
|
||||
start(){
|
||||
echo 79 > /sys/class/gpio/export
|
||||
echo out > /sys/class/gpio/gpio79/direction
|
||||
echo 1 > /sys/class/gpio/gpio79/value
|
||||
|
||||
uas-gadget3.sh start /dev/nvme0n1p1
|
||||
sleep 2
|
||||
state=$(cat /sys/class/udc/c0a00000.dwc3/state)
|
||||
echo "u3 state $state"
|
||||
|
||||
[ $state = "configured" ] && {
|
||||
echo "u3 mass storage connected" > /dev/ttyS0
|
||||
exit 0
|
||||
}
|
||||
uas-gadget3.sh stop
|
||||
|
||||
uas-gadget2-bot.sh start /dev/nvme0n1p1
|
||||
sleep 2
|
||||
state=$(cat /sys/class/udc/c0900100.udc/state)
|
||||
[ $state = "configured" ] && {
|
||||
echo "u2 mass storage connected" > /dev/ttyS0
|
||||
exit 0
|
||||
}
|
||||
uas-gadget2-bot.sh stop
|
||||
sleep 1
|
||||
echo 0 > /sys/class/gpio/gpio79/value
|
||||
echo "host" > /sys/kernel/debug/usb/c0a00000.dwc3/mode
|
||||
echo "try u3 and u2 mass storage fails, falling to netbox"
|
||||
sleep 3
|
||||
/etc/init.d/network restart
|
||||
uci set firewall.@zone[1].input='ACCEPT'
|
||||
/etc/init.d/firewall reload
|
||||
/etc/init.d/fstab boot
|
||||
}
|
||||
|
||||
stop(){
|
||||
echo "mass storage is stop"
|
||||
}
|
||||
restart(){
|
||||
echo "mass storage is restart"
|
||||
}
|
2372
target/linux/spacemit/k1-nas/config-6.1
Normal file
2372
target/linux/spacemit/k1-nas/config-6.1
Normal file
File diff suppressed because it is too large
Load diff
12
target/linux/spacemit/k1-nas/target.mk
Normal file
12
target/linux/spacemit/k1-nas/target.mk
Normal file
|
@ -0,0 +1,12 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
ARCH:=riscv64
|
||||
BOARDNAME:=Spacemit K1 NAS
|
||||
CPU_TYPE:=riscv64
|
||||
KERNELNAME:=Image dtbs
|
||||
DEVICE_TYPE:=nas
|
||||
|
18
target/linux/spacemit/k1-sbc/base-files/etc/board.d/01_leds
Normal file
18
target/linux/spacemit/k1-sbc/base-files/etc/board.d/01_leds
Normal file
|
@ -0,0 +1,18 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2022 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
|
||||
board_config_update
|
||||
|
||||
case "$(board_name)" in
|
||||
spacemit,k1-x)
|
||||
ucidef_set_led_netdev "wan" "WAN" "green:d3" "eth0"
|
||||
;;
|
||||
esac
|
||||
|
||||
board_config_flush
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,20 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2022 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
|
||||
board_config_update
|
||||
|
||||
case "$(board_name)" in
|
||||
spacemit,MUSE-Pi |\
|
||||
spacemit,deb1)
|
||||
ucidef_set_interface_lan 'eth0 wlan0'
|
||||
[ -d /sys/class/net/eth1 ] && ucidef_set_interface_wan eth1
|
||||
;;
|
||||
esac
|
||||
|
||||
board_config_flush
|
||||
|
||||
exit 0
|
14
target/linux/spacemit/k1-sbc/base-files/etc/hostapd.conf
Normal file
14
target/linux/spacemit/k1-sbc/base-files/etc/hostapd.conf
Normal file
|
@ -0,0 +1,14 @@
|
|||
interface=wlan0
|
||||
driver=nl80211
|
||||
ctrl_interface=/var/run/hostapd
|
||||
ssid=openWRT-AP
|
||||
wpa_passphrase=12345678
|
||||
wpa=2
|
||||
wpa_key_mgmt=WPA-PSK
|
||||
rsn_pairwise=CCMP TKIP
|
||||
wpa_pairwise=TKIP CCMP
|
||||
channel=6
|
||||
ieee80211n=1
|
||||
hw_mode=g
|
||||
bridge=br-lan
|
||||
ignore_broadcast_ssid=0
|
6
target/linux/spacemit/k1-sbc/base-files/etc/hosts
Normal file
6
target/linux/spacemit/k1-sbc/base-files/etc/hosts
Normal file
|
@ -0,0 +1,6 @@
|
|||
127.0.0.1 localhost
|
||||
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
ff02::1 ip6-allnodes
|
||||
ff02::2 ip6-allrouters
|
||||
159.27.188.198 archive.spacemit.com
|
13
target/linux/spacemit/k1-sbc/base-files/etc/init.d/custom_wifi_ap
Executable file
13
target/linux/spacemit/k1-sbc/base-files/etc/init.d/custom_wifi_ap
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
#must after boot
|
||||
START=99
|
||||
start(){
|
||||
hostapd -B /etc/hostapd.conf
|
||||
}
|
||||
|
||||
stop(){
|
||||
echo "hostapd needs to be stopped manually"
|
||||
}
|
||||
restart(){
|
||||
echo "hostapd needs to be restart manually"
|
||||
}
|
4
target/linux/spacemit/k1-sbc/base-files/etc/inittab
Normal file
4
target/linux/spacemit/k1-sbc/base-files/etc/inittab
Normal file
|
@ -0,0 +1,4 @@
|
|||
::sysinit:/etc/init.d/rcS S boot
|
||||
::shutdown:/etc/init.d/rcS K shutdown
|
||||
::askconsole:/usr/libexec/login.sh
|
||||
ttyS0::askfirst:/usr/libexec/login.sh
|
|
@ -0,0 +1,19 @@
|
|||
# Copyright (C) 2012-2015 OpenWrt.org
|
||||
|
||||
move_config() {
|
||||
local partdev
|
||||
|
||||
. /lib/upgrade/common.sh
|
||||
|
||||
if export_bootdevice && export_partdevice partdev 3; then
|
||||
if mount -t vfat -o rw,noatime "/dev/$partdev" /mnt; then
|
||||
if [ -f "/mnt/$BACKUP_FILE" ]; then
|
||||
mv -f "/mnt/$BACKUP_FILE" /
|
||||
fi
|
||||
umount /mnt
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
boot_hook_add preinit_mount_root move_config
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
platform_check_image() {
|
||||
local diskdev partdev diff
|
||||
|
||||
export_bootdevice && export_partdevice diskdev 0 || {
|
||||
echo "Unable to determine upgrade device"
|
||||
return 1
|
||||
}
|
||||
|
||||
get_partitions "/dev/$diskdev" bootdisk
|
||||
|
||||
#extract the boot sector from the image
|
||||
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
|
||||
|
||||
get_partitions /tmp/image.bs image
|
||||
|
||||
#compare tables
|
||||
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
|
||||
|
||||
rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
|
||||
|
||||
if [ -n "$diff" ]; then
|
||||
echo "Partition layout has changed. Full image will be written."
|
||||
ask_bool 0 "Abort" && exit 1
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
platform_copy_config() {
|
||||
local partdev
|
||||
|
||||
if export_partdevice partdev 3; then
|
||||
mount -t vfat -o rw,noatime "/dev/$partdev" /mnt
|
||||
cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
|
||||
umount /mnt
|
||||
fi
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local diskdev partdev diff
|
||||
|
||||
export_bootdevice && export_partdevice diskdev 0 || {
|
||||
echo "Unable to determine upgrade device"
|
||||
return 1
|
||||
}
|
||||
|
||||
sync
|
||||
|
||||
if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
|
||||
get_partitions "/dev/$diskdev" bootdisk
|
||||
|
||||
#extract the boot sector from the image
|
||||
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
|
||||
|
||||
get_partitions /tmp/image.bs image
|
||||
|
||||
#compare tables
|
||||
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
|
||||
else
|
||||
diff=1
|
||||
fi
|
||||
|
||||
if [ -n "$diff" ]; then
|
||||
get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
|
||||
|
||||
# Separate removal and addtion is necessary; otherwise, partition 1
|
||||
# will be missing if it overlaps with the old partition 2
|
||||
partx -d - "/dev/$diskdev"
|
||||
partx -a - "/dev/$diskdev"
|
||||
|
||||
return 0
|
||||
fi
|
||||
|
||||
#iterate over each partition from the image and write it to the boot disk
|
||||
while read part start size; do
|
||||
if export_partdevice partdev $part; then
|
||||
echo "Writing image to /dev/$partdev..."
|
||||
get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
|
||||
else
|
||||
echo "Unable to find partition $part device, skipped."
|
||||
fi
|
||||
done < /tmp/partmap.image
|
||||
|
||||
#copy partition uuid
|
||||
echo "Writing new UUID to /dev/$diskdev..."
|
||||
get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
|
||||
}
|
117
target/linux/spacemit/k1-sbc/base-files/usr/bin/uas-gadget2-bot.sh
Executable file
117
target/linux/spacemit/k1-sbc/base-files/usr/bin/uas-gadget2-bot.sh
Executable file
|
@ -0,0 +1,117 @@
|
|||
#!/bin/sh
|
||||
# configfs for bot mass-storage usb gadget
|
||||
# should enable in Kconfig: target core, target core > fileio, f_msc
|
||||
name=$(basename $0)
|
||||
VENDOR_ID="0x361C"
|
||||
PRODUC_ID="0x002f"
|
||||
SERNUM_STR="20211102"
|
||||
MANUAF_STR="Spacemit"
|
||||
PRODUC_STR="K1 Mass Storage(BOT)"
|
||||
# SCSI naa
|
||||
CONFIGFS=/sys/kernel/config
|
||||
GADGET_PATH=$CONFIGFS/usb_gadget/msc
|
||||
GFUNC_PATH=$GADGET_PATH/functions
|
||||
GCONFIG=$GADGET_PATH/configs/c.1
|
||||
usage()
|
||||
{
|
||||
echo "$name Usage: "
|
||||
echo ""
|
||||
echo -e "\texample: $name start /dev/mmcblk1p1"
|
||||
echo -e "\texample: $name stop"
|
||||
echo ""
|
||||
}
|
||||
########################### Gadget ####################################msc#######
|
||||
gadget_info()
|
||||
{
|
||||
echo "$name: $1"
|
||||
}
|
||||
gadget_debug()
|
||||
{
|
||||
[ $DEBUG ] && echo "$name: $1"
|
||||
}
|
||||
die()
|
||||
{
|
||||
gadget_info "$1"
|
||||
exit 1
|
||||
}
|
||||
g_remove()
|
||||
{
|
||||
[ -h $1 ] && rm -f $1
|
||||
[ -d $1 ] && rmdir $1
|
||||
[ -e $1 ] && rm -f $1
|
||||
}
|
||||
enable_udc()
|
||||
{
|
||||
echo c0900100.udc > $GADGET_PATH/UDC
|
||||
}
|
||||
stop()
|
||||
{
|
||||
[ -e $GADGET_PATH/UDC ] || die "gadget not configured, no need to clean"
|
||||
gadget_info "Echo none to udc"
|
||||
[ -e $GADGET_PATH/UDC ] || die "gadget not configured yet"
|
||||
[ `cat $GADGET_PATH/UDC` ] && echo "" > $GADGET_PATH/UDC
|
||||
gadget_debug "clean msc"
|
||||
gadget_debug "remove msc from usb config"
|
||||
g_remove $GCONFIG/mass_storage.usb0
|
||||
# Remove strings:
|
||||
gadget_info "remove strings of c.1."
|
||||
g_remove $GCONFIG/strings/0x409
|
||||
# Remove config:
|
||||
gadget_info "remove configs c.1."
|
||||
g_remove $GCONFIG
|
||||
g_remove $GFUNC_PATH/mass_storage.usb0
|
||||
# Remove string in gadget
|
||||
gadget_info "remove strings of $GADGET_PATH."
|
||||
g_remove $GADGET_PATH/strings/0x409
|
||||
# Remove gadget
|
||||
gadget_info "remove $GADGET_PATH."
|
||||
g_remove $GADGET_PATH
|
||||
}
|
||||
check()
|
||||
{
|
||||
DEVICE=$1
|
||||
[ -n "$DEVICE" ] || die "No device specificed"
|
||||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}"
|
||||
}
|
||||
start()
|
||||
{
|
||||
DEVICE=$1
|
||||
gadget_info "config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
|
||||
[ -e $GADGET_PATH ] && die "ERROR: gadget already configured, should run stop first"
|
||||
mkdir $GADGET_PATH
|
||||
echo $VENDOR_ID > $GADGET_PATH/idVendor
|
||||
echo $PRODUC_ID > $GADGET_PATH/idProduct
|
||||
mkdir $GADGET_PATH/strings/0x409
|
||||
echo $SERNUM_STR > $GADGET_PATH/strings/0x409/serialnumber
|
||||
echo $MANUAF_STR > $GADGET_PATH/strings/0x409/manufacturer
|
||||
echo $PRODUC_STR > $GADGET_PATH/strings/0x409/product
|
||||
mkdir $GCONFIG
|
||||
echo 0xc0 > $GCONFIG/bmAttributes
|
||||
echo 500 > $GCONFIG/MaxPower
|
||||
mkdir $GCONFIG/strings/0x409
|
||||
gadget_debug "add a msc function instance"
|
||||
MSC_DIR=$GFUNC_PATH/mass_storage.usb0
|
||||
mkdir -p $MSC_DIR
|
||||
echo $DEVICE > $MSC_DIR/lun.0/file
|
||||
echo 1 > $MSC_DIR/lun.0/removable
|
||||
echo 0 > $MSC_DIR/lun.0/nofua
|
||||
gadget_debug "add msc to usb config"
|
||||
ln -s $MSC_DIR $GCONFIG/mass_storage.usb0
|
||||
enable_udc
|
||||
}
|
||||
############################ MAIN #############################################
|
||||
case "$1" in
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
start)
|
||||
check $2
|
||||
start $2
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit $?
|
||||
|
176
target/linux/spacemit/k1-sbc/base-files/usr/bin/uas-gadget2.sh
Executable file
176
target/linux/spacemit/k1-sbc/base-files/usr/bin/uas-gadget2.sh
Executable file
|
@ -0,0 +1,176 @@
|
|||
#!/bin/sh
|
||||
# configfs for uas mass-storage usb gadget
|
||||
# should enable in Kconfig: target core, target core > fileio, f_tcm
|
||||
name=$(basename $0)
|
||||
VENDOR_ID="0x361C"
|
||||
PRODUC_ID="0x001f"
|
||||
SERNUM_STR="20211102"
|
||||
MANUAF_STR="Spacemit"
|
||||
PRODUC_STR="K1 Mass Storage(UASP)"
|
||||
# SCSI naa
|
||||
NAA="naa.6001405c3214b06a"
|
||||
CONFIGFS=/sys/kernel/config
|
||||
CORE_DIR=$CONFIGFS/target/core
|
||||
USB_GDIR=$CONFIGFS/target/usb_gadget
|
||||
GADGET_PATH=$CONFIGFS/usb_gadget/tcm
|
||||
die()
|
||||
{
|
||||
echo $1
|
||||
exit 1
|
||||
}
|
||||
usage()
|
||||
{
|
||||
echo "$name Usage: "
|
||||
echo ""
|
||||
echo "$name start [device]: start tcm usb_gadget"
|
||||
echo -e "\t\tdevice: block dev to use iblock, file to use fileio, \`rd\` to use rd_mcp"
|
||||
echo -e "\t\tstop: stop tcm usb_gadget"
|
||||
echo -e "\texample: $name /dev/mmcblk1p1"
|
||||
echo ""
|
||||
}
|
||||
########################### Gadget ####################################tcm#######
|
||||
enable_udc()
|
||||
{
|
||||
# Ensure fu->tpg = tpg_instances[i].tpg won't get NULL
|
||||
ln -s $GADGET_PATH/functions/tcm.0 $GADGET_PATH/configs/c.1/
|
||||
# If only one usb controller:
|
||||
echo c0900100.udc > $GADGET_PATH/UDC
|
||||
}
|
||||
config_gadget()
|
||||
{
|
||||
echo "gadget-setup: config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||
mkdir $GADGET_PATH
|
||||
echo $VENDOR_ID > $GADGET_PATH/idVendor
|
||||
echo $PRODUC_ID > $GADGET_PATH/idProduct
|
||||
mkdir $GADGET_PATH/strings/0x409
|
||||
echo $SERNUM_STR > $GADGET_PATH/strings/0x409/serialnumber
|
||||
echo $MANUAF_STR > $GADGET_PATH/strings/0x409/manufacturer
|
||||
echo $PRODUC_STR > $GADGET_PATH/strings/0x409/product
|
||||
mkdir $GADGET_PATH/configs/c.1
|
||||
echo 0xc0 > $GADGET_PATH/configs/c.1/bmAttributes
|
||||
echo 2 > $GADGET_PATH/configs/c.1/MaxPower
|
||||
mkdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
mkdir -p $GADGET_PATH/functions/tcm.0
|
||||
}
|
||||
clean_gadget()
|
||||
{
|
||||
rmdir $GADGET_PATH/functions/tcm.0
|
||||
# Remove strings:
|
||||
rmdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
rmdir $GADGET_PATH/strings/0x409
|
||||
# Remove config:
|
||||
rmdir $GADGET_PATH/configs/c.1
|
||||
rmdir $GADGET_PATH
|
||||
}
|
||||
disable_udc()
|
||||
{
|
||||
echo > $GADGET_PATH/UDC
|
||||
rm -f $GADGET_PATH/configs/c.1/tcm.0
|
||||
}
|
||||
############################### TCM related ##################################
|
||||
|
||||
config_target()
|
||||
{
|
||||
DEVICE=$1
|
||||
# Create a backstore
|
||||
if [ -z "$DEVICE" ]; then
|
||||
# RD_MCP backend is only for DEBUG usage
|
||||
echo "$name: no device specificed, select rd_mcp as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
# 128MB pure ramdisk
|
||||
echo rd_pages=32768 > $BACKSTORE_DIR/control
|
||||
elif [ -b $DEVICE ]; then
|
||||
echo "$name: block device, select iblock as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
echo "udev_path=${DEVICE}" > $BACKSTORE_DIR/control
|
||||
else
|
||||
echo "$name: other path, select fileio as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
DEVICE_SIZE=$(du -b $DEVICE | cut -f1)
|
||||
echo "fd_dev_name=${DEVICE},fd_dev_size=${DEVICE_SIZE}" > $BACKSTORE_DIR/control
|
||||
# echo 1 > $BACKSTORE_DIR/attrib/emulate_write_cache
|
||||
fi
|
||||
[ -n "$DEVICE" ] && umount $DEVICE
|
||||
echo 1 > $BACKSTORE_DIR/enable
|
||||
echo "$name: NAA of target: $NAA"
|
||||
# Create an NAA target and a target portal group (TPG)
|
||||
mkdir -p $USB_GDIR/$NAA/tpgt_1/
|
||||
echo "$name tpgt_1 has lun_0"
|
||||
# Create a LUN
|
||||
mkdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
# Nexus initiator on target port 1 to $NAA
|
||||
echo $NAA > $USB_GDIR/$NAA/tpgt_1/nexus
|
||||
# Allow write access for non authenticated initiators
|
||||
# echo 0 > $USB_GDIR/$NAA/tpgt_1/attrib/demo_mode_write_protect
|
||||
ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
#ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
# Enable the target portal group, with 1 lun
|
||||
echo 1 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
}
|
||||
clean_target()
|
||||
{
|
||||
[ -d "$USB_GDIR/$NAA/tpgt_1/enable" ] && echo 0 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/
|
||||
rmdir $USB_GDIR/$NAA/
|
||||
rmdir $USB_GDIR
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
rmdir $BACKSTORE_DIR
|
||||
}
|
||||
stop()
|
||||
{
|
||||
disable_udc
|
||||
clean_target
|
||||
clean_gadget
|
||||
}
|
||||
check()
|
||||
{
|
||||
DEVICE=$1
|
||||
[ -n "$DEVICE" ] || die "No device specificed"
|
||||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}"
|
||||
}
|
||||
start()
|
||||
{
|
||||
# Load the target modules and mount the config file system
|
||||
# Uncomment these if modules not built-in:
|
||||
# lsmod | grep -q configfs || modprobe configfs
|
||||
# lsmod | grep -q target_core_mod || modprobe target_core_mod
|
||||
DEVICE=$1
|
||||
mount | grep configfs
|
||||
[ $? -eq 0 ] || mount -t configfs none $CONFIGFS
|
||||
mkdir -p $USB_GDIR
|
||||
config_gadget
|
||||
# Config target after gadget, or tpgt cannot be mkdired
|
||||
config_target $DEVICE
|
||||
enable_udc
|
||||
}
|
||||
############################ MAIN #############################################
|
||||
case "$1" in
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
start)
|
||||
case "$2" in
|
||||
rd|ramdisk|rd_mcp)
|
||||
start
|
||||
;;
|
||||
*)
|
||||
check $2
|
||||
start $2
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit $?
|
176
target/linux/spacemit/k1-sbc/base-files/usr/bin/uas-gadget3.sh
Executable file
176
target/linux/spacemit/k1-sbc/base-files/usr/bin/uas-gadget3.sh
Executable file
|
@ -0,0 +1,176 @@
|
|||
#!/bin/sh
|
||||
# configfs for uas mass-storage usb gadget
|
||||
# should enable in Kconfig: target core, target core > fileio, f_tcm
|
||||
name=$(basename $0)
|
||||
VENDOR_ID="0x361C"
|
||||
PRODUC_ID="0x001f"
|
||||
SERNUM_STR="20211102"
|
||||
MANUAF_STR="Spacemit"
|
||||
PRODUC_STR="K1 Mass Storage(UASP)"
|
||||
# SCSI naa
|
||||
NAA="naa.6001405c3214b06a"
|
||||
CONFIGFS=/sys/kernel/config
|
||||
CORE_DIR=$CONFIGFS/target/core
|
||||
USB_GDIR=$CONFIGFS/target/usb_gadget
|
||||
GADGET_PATH=$CONFIGFS/usb_gadget/tcm
|
||||
die()
|
||||
{
|
||||
echo $1
|
||||
exit 1
|
||||
}
|
||||
usage()
|
||||
{
|
||||
echo "$name Usage: "
|
||||
echo ""
|
||||
echo "$name start [device]: start tcm usb_gadget"
|
||||
echo -e "\t\tdevice: block dev to use iblock, file to use fileio, \`rd\` to use rd_mcp"
|
||||
echo -e "\t\tstop: stop tcm usb_gadget"
|
||||
echo -e "\texample: $name /dev/mmcblk1p1"
|
||||
echo ""
|
||||
}
|
||||
########################### Gadget ####################################tcm#######
|
||||
enable_udc()
|
||||
{
|
||||
# Ensure fu->tpg = tpg_instances[i].tpg won't get NULL
|
||||
ln -s $GADGET_PATH/functions/tcm.0 $GADGET_PATH/configs/c.1/
|
||||
# If only one usb controller:
|
||||
echo c0a00000.dwc3 > $GADGET_PATH/UDC
|
||||
}
|
||||
config_gadget()
|
||||
{
|
||||
echo "gadget-setup: config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||
mkdir $GADGET_PATH
|
||||
echo $VENDOR_ID > $GADGET_PATH/idVendor
|
||||
echo $PRODUC_ID > $GADGET_PATH/idProduct
|
||||
mkdir $GADGET_PATH/strings/0x409
|
||||
echo $SERNUM_STR > $GADGET_PATH/strings/0x409/serialnumber
|
||||
echo $MANUAF_STR > $GADGET_PATH/strings/0x409/manufacturer
|
||||
echo $PRODUC_STR > $GADGET_PATH/strings/0x409/product
|
||||
mkdir $GADGET_PATH/configs/c.1
|
||||
echo 0xc0 > $GADGET_PATH/configs/c.1/bmAttributes
|
||||
echo 2 > $GADGET_PATH/configs/c.1/MaxPower
|
||||
mkdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
mkdir -p $GADGET_PATH/functions/tcm.0
|
||||
}
|
||||
clean_gadget()
|
||||
{
|
||||
rmdir $GADGET_PATH/functions/tcm.0
|
||||
# Remove strings:
|
||||
rmdir $GADGET_PATH/configs/c.1/strings/0x409
|
||||
rmdir $GADGET_PATH/strings/0x409
|
||||
# Remove config:
|
||||
rmdir $GADGET_PATH/configs/c.1
|
||||
rmdir $GADGET_PATH
|
||||
}
|
||||
disable_udc()
|
||||
{
|
||||
echo > $GADGET_PATH/UDC
|
||||
rm -f $GADGET_PATH/configs/c.1/tcm.0
|
||||
}
|
||||
############################### TCM related ##################################
|
||||
|
||||
config_target()
|
||||
{
|
||||
DEVICE=$1
|
||||
# Create a backstore
|
||||
if [ -z "$DEVICE" ]; then
|
||||
# RD_MCP backend is only for DEBUG usage
|
||||
echo "$name: no device specificed, select rd_mcp as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
# 128MB pure ramdisk
|
||||
echo rd_pages=32768 > $BACKSTORE_DIR/control
|
||||
elif [ -b $DEVICE ]; then
|
||||
echo "$name: block device, select iblock as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
echo "udev_path=${DEVICE}" > $BACKSTORE_DIR/control
|
||||
else
|
||||
echo "$name: other path, select fileio as backstore"
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
mkdir -p $BACKSTORE_DIR
|
||||
DEVICE_SIZE=$(du -b $DEVICE | cut -f1)
|
||||
echo "fd_dev_name=${DEVICE},fd_dev_size=${DEVICE_SIZE}" > $BACKSTORE_DIR/control
|
||||
# echo 1 > $BACKSTORE_DIR/attrib/emulate_write_cache
|
||||
fi
|
||||
[ -n "$DEVICE" ] && umount $DEVICE
|
||||
echo 1 > $BACKSTORE_DIR/enable
|
||||
echo "$name: NAA of target: $NAA"
|
||||
# Create an NAA target and a target portal group (TPG)
|
||||
mkdir -p $USB_GDIR/$NAA/tpgt_1/
|
||||
echo "$name tpgt_1 has lun_0"
|
||||
# Create a LUN
|
||||
mkdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
# Nexus initiator on target port 1 to $NAA
|
||||
echo $NAA > $USB_GDIR/$NAA/tpgt_1/nexus
|
||||
# Allow write access for non authenticated initiators
|
||||
# echo 0 > $USB_GDIR/$NAA/tpgt_1/attrib/demo_mode_write_protect
|
||||
ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
#ln -s $BACKSTORE_DIR $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
# Enable the target portal group, with 1 lun
|
||||
echo 1 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
}
|
||||
clean_target()
|
||||
{
|
||||
[ -d "$USB_GDIR/$NAA/tpgt_1/enable" ] && echo 0 > $USB_GDIR/$NAA/tpgt_1/enable
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/data
|
||||
rm -f $USB_GDIR/$NAA/tpgt_1/lun/lun_0/virtual_scsi_port
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/lun/lun_0
|
||||
rmdir $USB_GDIR/$NAA/tpgt_1/
|
||||
rmdir $USB_GDIR/$NAA/
|
||||
rmdir $USB_GDIR
|
||||
BACKSTORE_DIR=$CORE_DIR/iblock_0/iblock
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/fileio_0/fileio
|
||||
rmdir $BACKSTORE_DIR
|
||||
BACKSTORE_DIR=$CORE_DIR/rd_mcp_0/ramdisk
|
||||
rmdir $BACKSTORE_DIR
|
||||
}
|
||||
stop()
|
||||
{
|
||||
disable_udc
|
||||
clean_target
|
||||
clean_gadget
|
||||
}
|
||||
check()
|
||||
{
|
||||
DEVICE=$1
|
||||
[ -n "$DEVICE" ] || die "No device specificed"
|
||||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}"
|
||||
}
|
||||
start()
|
||||
{
|
||||
# Load the target modules and mount the config file system
|
||||
# Uncomment these if modules not built-in:
|
||||
# lsmod | grep -q configfs || modprobe configfs
|
||||
# lsmod | grep -q target_core_mod || modprobe target_core_mod
|
||||
DEVICE=$1
|
||||
mount | grep configfs
|
||||
[ $? -eq 0 ] || mount -t configfs none $CONFIGFS
|
||||
mkdir -p $USB_GDIR
|
||||
config_gadget
|
||||
# Config target after gadget, or tpgt cannot be mkdired
|
||||
config_target $DEVICE
|
||||
enable_udc
|
||||
}
|
||||
############################ MAIN #############################################
|
||||
case "$1" in
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
start)
|
||||
case "$2" in
|
||||
rd|ramdisk|rd_mcp)
|
||||
start
|
||||
;;
|
||||
*)
|
||||
check $2
|
||||
start $2
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit $?
|
2440
target/linux/spacemit/k1-sbc/config-6.1
Normal file
2440
target/linux/spacemit/k1-sbc/config-6.1
Normal file
File diff suppressed because it is too large
Load diff
12
target/linux/spacemit/k1-sbc/target.mk
Normal file
12
target/linux/spacemit/k1-sbc/target.mk
Normal file
|
@ -0,0 +1,12 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2024 Spacemit Ltd.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
ARCH:=riscv64
|
||||
BOARDNAME:=Spacemit K1 SBC
|
||||
CPU_TYPE:=riscv64
|
||||
KERNELNAME:=Image dtbs
|
||||
DEVICE_TYPE:=router
|
||||
|
16
target/linux/spacemit/modules.mk
Normal file
16
target/linux/spacemit/modules.mk
Normal file
|
@ -0,0 +1,16 @@
|
|||
define KernelPackage/rtl8852bs
|
||||
TITLE:=rtl8852bs sdio wifi driver
|
||||
KCONFIG:=CONFIG_RTL8852BS
|
||||
SUBMENU:=Wireless Drivers
|
||||
DEPENDS+=
|
||||
FILES:=$(LINUX_DIR)/drivers/net/wireless/realtek/rtl8852bs/8852bs.ko
|
||||
AUTOLOAD:=$(call AutoLoad,99,8852bs)
|
||||
endef
|
||||
|
||||
define KernelPackage/rtl8852bs/description
|
||||
Kernel modules for rtl8852bs sdio wifi
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,rtl8852bs))
|
||||
|
||||
|
12
target/linux/spacemit/profiles/00-default.mk
Normal file
12
target/linux/spacemit/profiles/00-default.mk
Normal file
|
@ -0,0 +1,12 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
define Profile/Default
|
||||
NAME:=Default Profile
|
||||
PRIORITY:=1
|
||||
endef
|
||||
|
||||
define Profile/Default/Description
|
||||
Default package set compatible with most boards.
|
||||
endef
|
||||
|
||||
$(eval $(call Profile,Default))
|
Loading…
Add table
Add a link
Reference in a new issue