From b74c4497b48a01b82db5df3abd2a8091e80f6bb2 Mon Sep 17 00:00:00 2001 From: nanako <469449812@qq.com> Date: Sat, 1 Mar 2025 12:11:07 +0800 Subject: [PATCH] nanako --- build_openwrt.sh | 517 +++++++++++++++ .../boot/dts/rockchip/rk3568-photonicat.dts | 613 ++++++++++++++++++ target/linux/rockchip/image/armv8.mk | 10 + 3 files changed, 1140 insertions(+) create mode 100755 build_openwrt.sh create mode 100644 target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3568-photonicat.dts diff --git a/build_openwrt.sh b/build_openwrt.sh new file mode 100755 index 00000000000..dfa00cc3437 --- /dev/null +++ b/build_openwrt.sh @@ -0,0 +1,517 @@ +#!/usr/bin/env bash + +#==================================================== +# OpenWrt 构建管理脚本 +# 功能:提供交互式菜单,可选择执行特定操作 +# 更新:2024-02-26 +#==================================================== + +#---------------基础配置---------------# +# 日志目录设置 +LOGS_ROOT="openwrt_logs" +SESSION_DIR="${LOGS_ROOT}/$(date +%Y%m%d_%H%M%S)" +LOG_FILE="${SESSION_DIR}/build.log" + +#---------------清理配置---------------# +# 需要移除的目录列表 +declare -a REMOVE_DIRS=( +) + +# 需要移除的包列表 +declare -a REMOVE_PACKAGES=( + "feeds/luci/applications/luci-app-mosdns" + "feeds/packages/net/alist" + "feeds/packages/net/adguardhome" + "feeds/packages/net/smartdns" +) + +#---------------自定义包配置---------------# +# 定义自定义包配置,格式:[包名]=[目标目录]=[仓库URL]=[分支]=[是否使用--depth 1] +declare -A CUSTOM_PACKAGES=( + ["golang"]="feeds/packages/lang/golang=https://github.com/kenzok8/golang=main=true" + ["partexp"]="package/luci-app-partexp=https://github.com/sirpdboy/luci-app-partexp=main=false" + ["openclash"]="package/openclash=https://github.com/vernesong/OpenClash=dev=true" + ["zerotier"]="package/luci-app-zerotier=https://github.com/mmc1987/luci-app-zerotier.git=main=false" + ["5gsupport"]="package/openwrt-app-actions=https://github.com/Siriling/openwrt-app-actions.git=main=true" + ["kucat"]="package/luci-theme-kucat=https://github.com/sirpdboy/luci-theme-kucat.git=main=false" + ["mt76"]="package/firmware/mt76=https://github.com/openwrt/mt76.git=master=false" +) + +#---------------日志系统---------------# +# 保存原始的标准输出和错误输出 +exec {STDOUT_ORIG}>&1 +exec {STDERR_ORIG}>&2 + +# 初始化日志系统 +init_logger() { + # 创建日志目录结构 + mkdir -p "$SESSION_DIR" || { + echo "无法创建日志目录: $SESSION_DIR" + exit 1 + } + + # 设置全局变量标记是否记录日志 + LOGGING_ENABLED=true + + echo "日志保存在: $LOG_FILE" + + if [ "$LOGGING_ENABLED" = true ]; then + # 标准输出重定向 + exec > >(while read -r line; do + printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" | tee -a "$LOG_FILE" + done) + + # 标准错误重定向 + exec 2> >(while read -r line; do + printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" | tee -a "$LOG_FILE" + done >&2) + fi +} + +# 创建新的编译日志文件 +create_build_log() { + local build_type=$1 + local timestamp=$(date +%Y%m%d_%H%M%S) + BUILD_LOG_FILE="${SESSION_DIR}/${build_type}_${timestamp}.log" + echo "创建新的编译日志: $BUILD_LOG_FILE" + return 0 +} + +# 禁用日志输出 +disable_logging() { + LOGGING_ENABLED=false + exec >&$STDOUT_ORIG + exec 2>&$STDERR_ORIG +} + +# 启用日志输出 +enable_logging() { + LOGGING_ENABLED=true + # 标准输出重定向 + exec > >(while read -r line; do + printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" | tee -a "$LOG_FILE" + done) + + # 标准错误重定向 + exec 2> >(while read -r line; do + printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" | tee -a "$LOG_FILE" + done >&2) +} + +# 设置终端颜色 +setup_colors() { + if [[ -t 2 ]]; then + RED='\033[0;31m' + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + BLUE='\033[0;34m' + NC='\033[0m' + else + RED='' GREEN='' YELLOW='' BLUE='' NC='' + fi +} + +# 记录日志函数 - 使用此函数来明确日志级别 +log() { + local level=$1 + local message=$2 + local timestamp=$(date "+%Y-%m-%d %H:%M:%S") + local color="" level_str="" + + case $level in + "INFO") color="$GREEN"; level_str="INFO" ;; + "WARN") color="$YELLOW"; level_str="WARN" ;; + "ERROR") color="$RED"; level_str="ERROR" ;; + "DEBUG") color="$BLUE"; level_str="DEBUG" ;; + esac + + printf "[%s] ${color}[%s]${NC}: %s\n" "$timestamp" "$level_str" "$message" +} + +#---------------自定义包管理函数---------------# +# 更新单个自定义包 +update_single_package() { + local pkg_name=$1 + local config=$2 + + # 解析配置 + local target_dir=$(echo "$config" | cut -d= -f1) + local repo_url=$(echo "$config" | cut -d= -f2) + local branch=$(echo "$config" | cut -d= -f3) + local use_depth=$(echo "$config" | cut -d= -f4) + + log "INFO" "更新 $pkg_name..." + + # 检查目标目录 + if [ -d "$target_dir" ]; then + log "INFO" "移除现有 $target_dir 目录" + rm -rf "$target_dir" || { + log "ERROR" "无法删除 $target_dir 目录" + return 1 + } + fi + + # 准备克隆命令 + local clone_cmd="git clone --progress" + + # 添加分支参数 (如果指定) + if [ -n "$branch" ] && [ "$branch" != "master" ]; then + clone_cmd="$clone_cmd -b $branch" + fi + + # 添加 depth 参数 (如果需要) + if [ "$use_depth" = "true" ]; then + clone_cmd="$clone_cmd --depth 1" + fi + + # 完成克隆命令 + clone_cmd="$clone_cmd $repo_url $target_dir" + + # 执行克隆 + log "INFO" "执行: $clone_cmd" + eval "$clone_cmd" || { + log "ERROR" "克隆 $pkg_name 失败" + return 1 + } + + log "INFO" "$pkg_name 更新完成" + return 0 +} + +# 更新自定义包的主函数 +update_custom_package() { + local failed_packages=() + local success_count=0 + local total_packages=${#CUSTOM_PACKAGES[@]} + + log "INFO" "开始更新 $total_packages 个自定义包..." + + for pkg_name in "${!CUSTOM_PACKAGES[@]}"; do + update_single_package "$pkg_name" "${CUSTOM_PACKAGES[$pkg_name]}" || { + failed_packages+=("$pkg_name") + continue + } + ((success_count++)) + done + + # 显示更新结果 + if [ ${#failed_packages[@]} -eq 0 ]; then + log "INFO" "所有自定义包更新成功 ($success_count/$total_packages)" + return 0 + else + log "WARN" "部分包更新失败 (成功: $success_count/$total_packages)" + log "ERROR" "更新失败的包: ${failed_packages[*]}" + return 1 + fi +} + +# 更新特定自定义包 +update_specific_package() { + local pkg_name=$1 + + if [ -z "$pkg_name" ]; then + log "ERROR" "未指定包名" + return 1 + fi + + if [ -z "${CUSTOM_PACKAGES[$pkg_name]}" ]; then + log "ERROR" "未找到包配置:$pkg_name" + log "INFO" "可用的包: ${!CUSTOM_PACKAGES[*]}" + return 1 + fi + + update_single_package "$pkg_name" "${CUSTOM_PACKAGES[$pkg_name]}" +} + +#---------------基础功能函数---------------# +# 清理工作区 +clean_workspace() { + log "INFO" "开始清理工作区..." + + log "INFO" "执行./scripts/feeds clean..." + ./scripts/feeds clean || log "WARN" "feeds clean 失败" + + log "INFO" "执行rm -rf ./tmp ./staging_dir ./build_dir ./bin ./dl..." + rm -rf ./tmp ./staging_dir ./build_dir ./bin ./dl || log "WARN" "删除临时目录失败" + + log "INFO" "工作区清理完成" +} + +# 清理编译临时文件 +clean_build_temp() { + log "INFO" "开始清理编译临时文件..." + + log "INFO" "删除临时编译目录和缓存..." + rm -rf ./tmp ./staging_dir ./build_dir || log "WARN" "删除临时编译目录失败" + + log "INFO" "编译临时文件清理完成" +} + +# 更新源码 +update_source() { + log "INFO" "开始更新源码..." + git pull || { log "ERROR" "源码更新失败"; return 1; } + log "INFO" "源码更新完成" +} + +# 更新feeds +update_feeds() { + log "INFO" "开始更新feeds..." + ./scripts/feeds update -a && ./scripts/feeds install -a || { + log "ERROR" "Feeds更新失败" + return 1 + } + log "INFO" "Feeds更新完成" + return 0 +} + +# 编译固件 +build_firmware() { + # 创建新的编译日志 + create_build_log "firmware" + local current_log="$BUILD_LOG_FILE" + + log "INFO" "开始编译固件..." + log "INFO" "编译详细日志位置: $current_log" + + # 下载依赖 + log "INFO" "下载依赖包..." + make download -j$(nproc) V=s 2>&1 | tee -a "$current_log" || { + log "ERROR" "依赖下载失败" + return 1 + } + + # 使用多线程编译 + local cpu_cores=$(nproc) + log "INFO" "使用 $cpu_cores 线程开始编译..." + + if make -j$cpu_cores V=s 2>&1 | tee -a "$current_log"; then + log "INFO" "多线程编译成功完成" + return 0 + else + log "WARN" "多线程编译失败,清理临时文件后切换为单线程编译..." + + # 清理编译临时文件 + clean_build_temp + + # 创建一个新日志用于单线程编译 + create_build_log "firmware_singlethread" + current_log="$BUILD_LOG_FILE" + log "INFO" "单线程编译详细日志位置: $current_log" + + # 重新下载依赖 + log "INFO" "重新下载依赖包..." + make download -j1 V=s 2>&1 | tee -a "$current_log" || { + log "ERROR" "单线程依赖下载也失败" + return 1 + } + + if make -j1 V=s 2>&1 | tee -a "$current_log"; then + log "INFO" "单线程编译成功完成" + return 0 + else + log "ERROR" "编译失败,即使在单线程模式下" + return 1 + fi + fi +} + +# 清理旧包 +clean_packages() { + log "INFO" "开始清理旧包..." + local removed_count=0 + local failed_count=0 + + # 清理目录 + for dir in "${REMOVE_DIRS[@]}"; do + if [ -d "$dir" ]; then + rm -rf "$dir" && { + log "INFO" "已删除: $dir" + ((removed_count++)) + } || { + log "ERROR" "删除失败: $dir" + ((failed_count++)) + } + fi + done + + # 清理包 + for pkg in "${REMOVE_PACKAGES[@]}"; do + if [ -d "$pkg" ]; then + rm -rf "$pkg" && { + log "INFO" "已移除: $pkg" + ((removed_count++)) + } || { + log "ERROR" "删除失败: $pkg" + ((failed_count++)) + } + fi + done + + if [ $failed_count -eq 0 ]; then + log "INFO" "包清理完成,共移除 $removed_count 个包/目录" + return 0 + else + log "WARN" "包清理部分完成,成功: $removed_count, 失败: $failed_count" + return 1 + fi +} + +# 更新所有组件 +update_all_components() { + log "INFO" "开始更新所有组件..." + local failed=false + + # 更新源码 + log "INFO" "执行源码更新..." + update_source || failed=true + + # 清理旧包 + log "INFO" "执行清理旧包..." + clean_packages || log "WARN" "清理旧包部分失败,继续执行..." + + # 更新自定义包 + log "INFO" "执行自定义包更新..." + update_custom_package || failed=true + + # 更新feeds + log "INFO" "执行feeds更新..." + update_feeds || failed=true + + if [ "$failed" = true ]; then + log "WARN" "部分组件更新失败,请查看日志了解详情" + return 1 + else + log "INFO" "所有组件更新完成" + return 0 + fi +} + +# 菜单配置 +menuconfig() { + log "INFO" "开始菜单配置..." + disable_logging + make menuconfig + enable_logging + log "INFO" "菜单配置完成" +} + +#---------------组合功能函数---------------# +# 完整构建流程 +full_build() { + log "INFO" "启动完整构建流程..." + + clean_workspace || log "WARN" "工作区清理部分失败,继续执行..." + update_source || { log "ERROR" "源码更新失败,终止构建"; return 1; } + clean_packages || log "WARN" "清理旧包部分失败,继续执行..." + update_custom_package || { log "ERROR" "自定义包更新失败,终止构建"; return 1; } + update_feeds || { log "ERROR" "feeds更新失败,终止构建"; return 1; } + + log "INFO" "进入菜单配置..." + menuconfig + + log "INFO" "开始编译固件..." + build_firmware || { + log "ERROR" "固件编译失败" + return 1 + } + + log "INFO" "完整构建流程完成" + return 0 +} + +#---------------菜单函数---------------# +print_menu() { + echo -e "\n${BLUE}OpenWrt 构建管理菜单${NC}" + echo -e "${YELLOW}================================${NC}" + echo -e "${GREEN}1.${NC} 完整构建流程" + echo -e "${GREEN}2.${NC} 清理工作区" + echo -e "${GREEN}3.${NC} 更新所有组件" + echo -e "${GREEN}4.${NC} 清理旧包" + echo -e "${GREEN}5.${NC} 编译固件" + echo -e "${GREEN}6.${NC} 调整配置(menuconfig)" + echo -e "${GREEN}7.${NC} 更新自定义包" + echo -e "${GREEN}8.${NC} 更新特定自定义包" + echo -e "${GREEN}9.${NC} 更新源码" + echo -e "${GREEN}10.${NC} 更新feeds" + echo -e "${GREEN}0.${NC} 退出" + echo -e "${YELLOW}================================${NC}" + echo -ne "请选择操作 [0-10]: " +} + +# 显示可用的自定义包 +print_package_menu() { + echo -e "\n${BLUE}可用的自定义包${NC}" + echo -e "${YELLOW}================================${NC}" + + local i=1 + for pkg_name in "${!CUSTOM_PACKAGES[@]}"; do + echo -e "${GREEN}$i.${NC} $pkg_name" + ((i++)) + done + + echo -e "${YELLOW}================================${NC}" + echo -ne "请选择要更新的包 [1-$((i-1))]: " +} + +# 选择特定自定义包更新 +select_specific_package() { + local pkg_names=("${!CUSTOM_PACKAGES[@]}") + print_package_menu + + read -r choice + + # 验证选择 + if [[ ! "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 1 ] || [ "$choice" -gt ${#pkg_names[@]} ]; then + log "ERROR" "无效选择: $choice" + return 1 + fi + + local selected_pkg=${pkg_names[$((choice-1))]} + log "INFO" "选择更新包: $selected_pkg" + + update_specific_package "$selected_pkg" +} + +#---------------主函数---------------# +main() { + # 初始化日志目录和日志系统 + init_logger + setup_colors + + log "INFO" "OpenWrt 构建管理脚本启动 - 会话日志目录: $SESSION_DIR" + + while true; do + print_menu + read -r choice + + case $choice in + 1) full_build ;; + 2) clean_workspace ;; + 3) update_all_components ;; + 4) clean_packages ;; + 5) build_firmware ;; + 6) menuconfig ;; + 7) update_custom_package ;; + 8) select_specific_package ;; + 9) update_source ;; + 10) update_feeds ;; + 0) + log "INFO" "退出脚本" + exit 0 + ;; + *) + log "WARN" "无效选择: $choice,请重试" + ;; + esac + + # 操作完成后暂停 + if [[ $choice != 0 ]]; then + echo -e "\n${YELLOW}操作完成,按回车键继续...${NC}" + read -r + fi + done +} + +# 执行主函数 +main "$@" diff --git a/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3568-photonicat.dts b/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3568-photonicat.dts new file mode 100644 index 00000000000..45086f7ab2a --- /dev/null +++ b/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3568-photonicat.dts @@ -0,0 +1,613 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; +#include +#include +#include +#include +#include "rk3568.dtsi" + +/ { + model = "Ariaboard Photonicat"; + compatible = "ariaboard,photonicat", "rockchip,rk3568"; + + aliases { + ethernet0 = &gmac0; + ethernet1 = &gmac1; + mmc0 = &sdhci; + mmc1 = &sdmmc0; + mmc2 = &sdmmc1; + }; + + chosen: chosen { + stdout-path = "serial2:1500000n8"; + }; + + gpio-poweroff { + compatible = "gpio-poweroff"; + gpios = <&gpio1 RK_PB2 GPIO_ACTIVE_LOW>; + timeout-ms = <3000>; + }; + + hdmi-con { + compatible = "hdmi-connector"; + type = "a"; + + port { + hdmi_con_in: endpoint { + remote-endpoint = <&hdmi_out_con>; + }; + }; + }; + + modem-rfkill { + compatible = "rfkill-gpio"; + label = "modem-rfkill"; + radio-type = "wwan"; + reset-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_LOW>; + shutdown-gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_HIGH>; + }; + + sdio_pwrseq: sdio-pwrseq { + compatible = "mmc-pwrseq-simple"; + clocks = <&pmucru CLK_RTC_32K>; + clock-names = "ext_clock"; + pinctrl-names = "default"; + pinctrl-0 = <&wifi_enable_h &clk32k_out1>; + reset-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_LOW>; + }; + + vccin_5v: regulator-vccin-5v { + compatible = "regulator-fixed"; + regulator-name = "vccin_5v"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + }; + + vcc_sysin: regulator-vcc-sysin { + compatible = "regulator-fixed"; + regulator-name = "vcc_sysin"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&vccin_5v>; + }; + + vcc_syson: regulator-vcc-syson { + compatible = "regulator-fixed"; + regulator-name = "vcc_syson"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&vcc_sysin>; + }; + + vcc3v3_sys: regulator-vcc3v3-sys { + compatible = "regulator-fixed"; + regulator-name = "vcc3v3_sys"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc_syson>; + }; + + vcc_1v8: regulator-vcc-1v8 { + compatible = "regulator-fixed"; + regulator-name = "vcc_1v8"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vcc3v3_sys>; + }; + + vcc_3v3: regulator-vcc-3v3 { + compatible = "regulator-fixed"; + regulator-name = "vcc_3v3"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc3v3_sys>; + }; + + vcc3v3_ngff: regulator-vcc3v3-ngff { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>; + regulator-name = "vcc3v3_ngff"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vccin_5v>; + }; + + /* pi6c pcie clock generator */ + vcc3v3_pi6c: regulator-vcc3v3-pi6c { + compatible = "regulator-fixed"; + enable-active-high; + gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&pcie_enable_h>; + regulator-name = "vcc3v3_pi6c"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc_syson>; + }; + + /* actually fed by vcc_syson, dependent on pi6c clock generator */ + vcc3v3_pcie: regulator-vcc3v3-pcie { + compatible = "regulator-fixed"; + regulator-name = "vcc3v3_pcie"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc3v3_pi6c>; + }; + + vcc3v3_sd: regulator-vcc3v3-sd { + compatible = "regulator-fixed"; + gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; + pinctrl-names = "default"; + pinctrl-0 = <&vcc_sd_h>; + regulator-boot-on; + regulator-name = "vcc3v3_sd"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc_3v3>; + }; + + /* actually fed by vccin_5v, dependent on vcc5v0_usb_otg */ + vcc5v0_boost: regulator-vcc5v0-boost { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&vcc5v0_boost_en>; + regulator-name = "vcc5v0_boost"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&vcc5v0_usb_otg>; + }; + + vcc5v0_usb_otg: regulator-vcc5v0-usb-otg { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&vcc5v0_usb_otg_en>; + regulator-name = "vcc5v0_usb_otg"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&vccin_5v>; + }; + + vcca_1v8: regulator-vcca-1v8 { + compatible = "regulator-fixed"; + regulator-name = "vcca_1v8"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vcc3v3_sys>; + }; + + vdda_0v9: regulator-vdda-0v9 { + compatible = "regulator-fixed"; + regulator-name = "vdda_0v9"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <900000>; + vin-supply = <&vcc3v3_sys>; + }; + + vdd_gpu: regulator-vdd-gpu { + compatible = "pwm-regulator"; + pwms = <&pwm2 0 5000 1>; + regulator-name = "vdd_gpu"; + regulator-always-on; + regulator-boot-on; + regulator-init-microvolt = <900000>; + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <1350000>; + regulator-ramp-delay = <6001>; + regulator-settling-time-up-us = <250>; + pwm-supply = <&vcc_syson>; + }; + + vdd_logic: regulator-vdd-logic { + compatible = "pwm-regulator"; + pwms = <&pwm1 0 5000 1>; + regulator-name = "vdd_logic"; + regulator-always-on; + regulator-boot-on; + regulator-init-microvolt = <900000>; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <1350000>; + regulator-ramp-delay = <6001>; + regulator-settling-time-up-us = <250>; + pwm-supply = <&vcc_syson>; + }; +}; + +&combphy0 { + status = "okay"; +}; + +&combphy1 { + status = "okay"; +}; + +&combphy2 { + status = "okay"; +}; + +&cpu0 { + cpu-supply = <&vdd_cpu>; +}; + +&cpu1 { + cpu-supply = <&vdd_cpu>; +}; + +&cpu2 { + cpu-supply = <&vdd_cpu>; +}; + +&cpu3 { + cpu-supply = <&vdd_cpu>; +}; + +&gmac0 { + assigned-clocks = <&cru SCLK_GMAC0_RX_TX>; + assigned-clock-parents = <&gmac0_xpcsclk>; + power-domains = <&power RK3568_PD_PIPE>; + phys = <&combphy2 PHY_TYPE_SGMII>; + phy-handle = <&sgmii_phy>; + phy-mode = "sgmii"; + phy-supply = <&vcc_3v3>; + pinctrl-names = "default"; + pinctrl-0 = <&gmac0_miim>; + rockchip,xpcs = <&xpcs>; + snps,reset-gpio = <&gpio3 RK_PC6 GPIO_ACTIVE_LOW>; + snps,reset-active-low; + snps,reset-delays-us = <0 15000 50000>; + tx_delay = <0xff>; + rx_delay = <0xff>; + status = "okay"; +}; + +&gmac1 { + assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>; + assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>; + assigned-clock-rates = <0>, <125000000>; + clock_in_out = "output"; + phy-handle = <&rgmii_phy>; + phy-mode = "rgmii"; + phy-supply = <&vcc_3v3>; + pinctrl-names = "default"; + pinctrl-0 = <&gmac1m1_miim + &gmac1m1_tx_bus2 + &gmac1m1_rx_bus2 + &gmac1m1_rgmii_clk + &gmac1m1_rgmii_bus>; + snps,reset-gpio = <&gpio4 RK_PC0 GPIO_ACTIVE_LOW>; + snps,reset-active-low; + snps,reset-delays-us = <0 15000 50000>; + tx_delay = <0x30>; + rx_delay = <0x10>; + status = "okay"; +}; + +&gpu { + mali-supply = <&vdd_gpu>; + status = "okay"; +}; + +&hdmi { + avdd-0v9-supply = <&vdda_0v9>; + avdd-1v8-supply = <&vcca_1v8>; + status = "okay"; +}; + +&hdmi_in { + hdmi_in_vp0: endpoint { + remote-endpoint = <&vp0_out_hdmi>; + }; +}; + +&hdmi_out { + hdmi_out_con: endpoint { + remote-endpoint = <&hdmi_con_in>; + }; +}; + +&hdmi_sound { + status = "okay"; +}; + +&i2c0 { + status = "okay"; + + vdd_cpu: regulator@1c { + compatible = "tcs,tcs4525"; + reg = <0x1c>; + fcs,suspend-voltage-selector = <1>; + regulator-name = "vdd_cpu"; + regulator-always-on; + regulator-boot-on; + regulator-init-microvolt = <900000>; + regulator-min-microvolt = <712500>; + regulator-max-microvolt = <1390000>; + regulator-ramp-delay = <2300>; + vin-supply = <&vcc_syson>; + + regulator-state-mem { + regulator-off-in-suspend; + }; + }; +}; + +&i2c2 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c2m1_xfer>; + status = "okay"; +}; + +&i2s0_8ch { + status = "okay"; +}; + +&mdio0 { + sgmii_phy: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + motorcomm,led-data = <0xe004 0x0000 0x2600 0x0070 0x000a>; + }; +}; + +&mdio1 { + rgmii_phy: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + motorcomm,led-data = <0xe004 0x0000 0x2600 0x0070 0x000a>; + }; +}; + +&pcie30phy { + phy-supply = <&vcc3v3_pi6c>; + status = "okay"; +}; + +&pcie3x2 { + reset-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>; + vpcie3v3-supply = <&vcc3v3_pcie>; + status = "okay"; +}; + +&pinctrl { + bt { + bt_enable_h: bt-enable-h { + rockchip,pins = <2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + pcie { + pcie_enable_h: pcie-enable-h { + rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + sdio-pwrseq { + wifi_enable_h: wifi-enable-h { + rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + usb { + vcc5v0_boost_en: vcc5v0-boost-en { + rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; + }; + + vcc5v0_usb_otg_en: vcc5v0-usb-otg-en { + rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + vcc-sd { + vcc_sd_h: vcc-sd-h { + rockchip,pins = <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; +}; + +&pmu_io_domains { + pmuio1-supply = <&vcc_3v3>; + pmuio2-supply = <&vcc_3v3>; + vccio1-supply = <&vcc_3v3>; + vccio3-supply = <&vcc_3v3>; + vccio4-supply = <&vcc_1v8>; + vccio5-supply = <&vcc_3v3>; + vccio6-supply = <&vcc_3v3>; + vccio7-supply = <&vcc_3v3>; + status = "okay"; +}; + +&pwm1 { + status = "okay"; +}; + +&pwm2 { + status = "okay"; +}; + +&saradc { + vref-supply = <&vcca_1v8>; + status = "okay"; +}; + +&sdhci { + bus-width = <8>; + max-frequency = <200000000>; + non-removable; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>; + vmmc-supply = <&vcc_3v3>; + vqmmc-supply = <&vcc_1v8>; + status = "okay"; +}; + +&sdmmc0 { + bus-width = <4>; + cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; + disable-wp; + no-1-8-v; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd>; + vmmc-supply = <&vcc3v3_sd>; + vqmmc-supply = <&vcc_3v3>; + status = "okay"; +}; + +&sdmmc1 { + bus-width = <4>; + cap-sd-highspeed; + cap-sdio-irq; + keep-power-in-suspend; + mmc-pwrseq = <&sdio_pwrseq>; + non-removable; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc1_bus4 &sdmmc1_clk &sdmmc1_cmd>; + sd-uhs-sdr25; + sd-uhs-sdr50; + sd-uhs-sdr104; + vmmc-supply = <&vcc3v3_sys>; + vqmmc-supply = <&vcc_1v8>; + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + wifi@1 { + reg = <1>; + interrupt-parent = <&gpio2>; + interrupts = ; + interrupt-names = "host-wake"; + }; +}; + +&tsadc { + rockchip,hw-tshut-mode = <1>; + rockchip,hw-tshut-polarity = <0>; + status = "okay"; +}; + +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&uart1m0_xfer &uart1m0_ctsn &uart1m0_rtsn>; + status = "okay"; + uart-has-rtscts; + + bluetooth { + compatible = "qcom,qca9377-bt"; + enable-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>; + clocks = <&pmucru CLK_RTC_32K>; + clock-names = "lpo"; + pinctrl-names = "default"; + pinctrl-0 = <&bt_enable_h>; + vddio-supply = <&vcc_1v8>; + }; +}; + +&uart2 { + status = "okay"; +}; + +&uart3 { + status = "okay"; +}; + +&uart4 { + status = "okay"; +}; + +&usb_host0_ehci { + status = "okay"; +}; + +&usb_host0_ohci { + status = "okay"; +}; + +&usb_host0_xhci { + dr_mode = "host"; + extcon = <&usb2phy0>; + status = "okay"; +}; + +&usb_host1_ehci { + status = "okay"; +}; + +&usb_host1_ohci { + status = "okay"; +}; + +&usb_host1_xhci { + status = "okay"; +}; + +&usb2phy0 { + status = "okay"; +}; + +&usb2phy0_host { + phy-supply = <&vcc3v3_ngff>; + status = "okay"; +}; + +&usb2phy0_otg { + phy-supply = <&vcc5v0_boost>; + status = "okay"; +}; + +&usb2phy1 { + status = "okay"; +}; + +&usb2phy1_otg { + phy-supply = <&vcc5v0_usb_otg>; + status = "okay"; +}; + +&vop { + assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>; + assigned-clock-parents = <&pmucru PLL_HPLL>, <&cru PLL_VPLL>; + status = "okay"; +}; + +&vop_mmu { + status = "okay"; +}; + +&vp0 { + vp0_out_hdmi: endpoint@ROCKCHIP_VOP2_EP_HDMI0 { + reg = ; + remote-endpoint = <&hdmi_in_vp0>; + }; +}; + +&xin32k { + pinctrl-names = "default"; + pinctrl-0 = <&clk32k_out1>; +}; + +&xpcs { + status = "okay"; +}; diff --git a/target/linux/rockchip/image/armv8.mk b/target/linux/rockchip/image/armv8.mk index 1c81005f8ea..67536e22d8c 100644 --- a/target/linux/rockchip/image/armv8.mk +++ b/target/linux/rockchip/image/armv8.mk @@ -16,6 +16,16 @@ define Device/armsom_sige7 endef TARGET_DEVICES += armsom_sige7 +define Device/ariaboard_photonicat + DEVICE_VENDOR := Ariaboard + DEVICE_MODEL := Photonicat + SOC := rk3568 + BOOT_FLOW := pine64-img + DEVICE_PACKAGES := kmod-ath10k-sdio ath10k-firmware-qca9377-sdio wpad-openssl \ + kmod-usb-net-cdc-mbim kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi +endef +TARGET_DEVICES += ariaboard_photonicat + define Device/firefly_roc-rk3328-cc DEVICE_VENDOR := Firefly DEVICE_MODEL := ROC-RK3328-CC