mirror of
https://github.com/andreili/SBC_builder.git
synced 2025-08-23 11:04:04 +02:00
Add support to build merged kernel
This commit is contained in:
parent
e6071dd03e
commit
78b618e671
10570
cfg/btt_pi2/kernel_v6.14-rc7
Normal file
10570
cfg/btt_pi2/kernel_v6.14-rc7
Normal file
File diff suppressed because it is too large
Load Diff
2098
cfg/btt_pi2/uboot
Normal file
2098
cfg/btt_pi2/uboot
Normal file
File diff suppressed because it is too large
Load Diff
@ -51,7 +51,7 @@
|
||||
"version": "v6.14-rc7",
|
||||
"version_type": "tag",
|
||||
"patch_dir": "kernel/sunxi-6.14",
|
||||
"target": [ "Image", "modules", "dtbs", "modules_install" ],
|
||||
"target": [ "clean", "Image", "modules", "dtbs", "modules_install" ],
|
||||
"artifacts":
|
||||
[
|
||||
{
|
||||
@ -61,12 +61,12 @@
|
||||
{
|
||||
"file": "arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1*.dtb",
|
||||
"store_type": "boot",
|
||||
"subdir": "dts/allwiner"
|
||||
"subdir": "dtb/allwiner"
|
||||
},
|
||||
{
|
||||
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
||||
"store_type": "boot",
|
||||
"subdir": "dts/allwiner/overlay"
|
||||
"subdir": "dtb/allwiner/overlay"
|
||||
}
|
||||
],
|
||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods"
|
||||
@ -85,14 +85,6 @@
|
||||
"subdir": "modules"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"parent": "buildroot",
|
||||
"version": "@",
|
||||
"version_type": "head",
|
||||
"patch_dir": "buildroot/sunxi",
|
||||
"target": [],
|
||||
"artifacts": []
|
||||
}
|
||||
],
|
||||
"install":
|
||||
|
91
config/board/btt_pi2.json
Normal file
91
config/board/btt_pi2.json
Normal file
@ -0,0 +1,91 @@
|
||||
{
|
||||
"build":
|
||||
[
|
||||
"rkbin", "uboot", "kernel"
|
||||
],
|
||||
"variables":
|
||||
[
|
||||
"CROSS_C:aarch64-linux-gnu-",
|
||||
"TPL_BIN:rk3566_ddr_1056MHz_v1.23.bin",
|
||||
"BL31_BIN:rk3568_bl31_v1.44.elf",
|
||||
"ARCH:aarch64"
|
||||
],
|
||||
"targets":
|
||||
[
|
||||
{
|
||||
"parent": "rkbin",
|
||||
"version": "@",
|
||||
"version_type": "head",
|
||||
"target": [ "bl31" ],
|
||||
"no_build": 1,
|
||||
"artifacts":
|
||||
[
|
||||
{
|
||||
"file": "bin/rk35/%{TPL_BIN}%",
|
||||
"store_type": "temp"
|
||||
},
|
||||
{
|
||||
"file": "bin/rk35/%{BL31_BIN}%",
|
||||
"store_type": "temp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"parent": "uboot",
|
||||
"version": "@",
|
||||
"version_type": "head",
|
||||
"patch_dir": "uboot/btt",
|
||||
"artifacts":
|
||||
[
|
||||
{
|
||||
"file": "idbloader.img",
|
||||
"store_type": "dd",
|
||||
"img_offset": 64
|
||||
},
|
||||
{
|
||||
"file": "u-boot.itb",
|
||||
"store_type": "dd",
|
||||
"img_offset": 16368
|
||||
}
|
||||
],
|
||||
"target": [ "" ],
|
||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCHV=%{ARCH}% ROCKCHIP_TPL=%{out_dir}%/%{TPL_BIN}% BL31=%{out_dir}%/%{BL31_BIN}%"
|
||||
},
|
||||
{
|
||||
"parent": "kernel",
|
||||
"version": "v6.14-rc7",
|
||||
"version_type": "tag",
|
||||
"patch_dir": [ "kernel/sunxi-6.14", "kernel/rockchip64-6.14" ],
|
||||
"target": [ "clean", "Image", "modules", "dtbs", "modules_install" ],
|
||||
"artifacts":
|
||||
[
|
||||
{
|
||||
"file": "arch/arm64/boot/Image",
|
||||
"store_type": "boot"
|
||||
},
|
||||
{
|
||||
"file": "arch/arm64/boot/dts/rockchip/rk3566-bigtreetech-*.dtb",
|
||||
"store_type": "boot",
|
||||
"subdir": "dtb/rockchip"
|
||||
}
|
||||
],
|
||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods"
|
||||
}
|
||||
],
|
||||
"install":
|
||||
{
|
||||
"target": "image",
|
||||
"block_size": "512b",
|
||||
"partitions":
|
||||
[
|
||||
{
|
||||
"name": "boot",
|
||||
"size": "2g"
|
||||
},
|
||||
{
|
||||
"name": "rw",
|
||||
"size": "2g"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -52,7 +52,7 @@
|
||||
"version": "v6.14-rc7",
|
||||
"version_type": "tag",
|
||||
"patch_dir": "kernel/sunxi-6.14",
|
||||
"target": [ "Image", "modules", "dtbs", "modules_install" ],
|
||||
"target": [ "clean", "Image", "modules", "dtbs", "modules_install" ],
|
||||
"artifacts":
|
||||
[
|
||||
{
|
||||
@ -62,23 +62,15 @@
|
||||
{
|
||||
"file": "arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1*.dtb",
|
||||
"store_type": "boot",
|
||||
"subdir": "dts/allwiner"
|
||||
"subdir": "dtb/allwiner"
|
||||
},
|
||||
{
|
||||
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
||||
"store_type": "boot",
|
||||
"subdir": "dts/allwiner/overlay"
|
||||
"subdir": "dtb/allwiner/overlay"
|
||||
}
|
||||
],
|
||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods"
|
||||
},
|
||||
{
|
||||
"parent": "buildroot",
|
||||
"version": "@",
|
||||
"version_type": "head",
|
||||
"patch_dir": "buildroot/sunxi",
|
||||
"target": [],
|
||||
"artifacts": []
|
||||
}
|
||||
],
|
||||
"install":
|
||||
|
@ -3,7 +3,8 @@
|
||||
"atf":
|
||||
{
|
||||
"url": "https://github.com/ARM-software/arm-trusted-firmware.git",
|
||||
"config": false
|
||||
"config": false,
|
||||
"is_shared": false
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -11,7 +12,8 @@
|
||||
{
|
||||
"url": "https://github.com/u-boot/u-boot.git",
|
||||
"config": true,
|
||||
"config_target": "menuconfig"
|
||||
"config_target": "menuconfig",
|
||||
"is_shared": false
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -19,15 +21,8 @@
|
||||
{
|
||||
"url": "https://github.com/torvalds/linux.git",
|
||||
"config": true,
|
||||
"config_target": "menuconfig"
|
||||
}
|
||||
},
|
||||
{
|
||||
"buildroot":
|
||||
{
|
||||
"url": "https://github.com/buildroot/buildroot.git",
|
||||
"config": true,
|
||||
"config_target": "menuconfig"
|
||||
"config_target": "menuconfig",
|
||||
"is_shared": true
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -35,14 +30,24 @@
|
||||
{
|
||||
"url": "https://git.busybox.net/busybox",
|
||||
"config": true,
|
||||
"config_target": "menuconfig"
|
||||
"config_target": "menuconfig",
|
||||
"is_shared": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"rtl8189ES_linux":
|
||||
{
|
||||
"url": "https://github.com/jwrdegoede/rtl8189ES_linux.git",
|
||||
"config": false
|
||||
"config": false,
|
||||
"is_shared": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"rkbin":
|
||||
{
|
||||
"url": "https://github.com/rockchip-linux/rkbin",
|
||||
"config": false,
|
||||
"is_shared": false
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,417 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Johansen <strit@manjaro.org>
|
||||
Date: Tue, 2 Jun 2020 20:20:29 +0200
|
||||
Subject: add-dp-alt-mode-to-PBP
|
||||
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts | 5 +
|
||||
drivers/phy/rockchip/phy-rockchip-typec.c | 17 ++
|
||||
drivers/usb/typec/altmodes/displayport.c | 52 +++-
|
||||
drivers/usb/typec/tcpm/tcpm.c | 138 +++++++++-
|
||||
4 files changed, 209 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
@@ -421,6 +421,7 @@ edp_out_panel: endpoint@0 {
|
||||
|
||||
&emmc_phy {
|
||||
status = "okay";
|
||||
+ extcon = <&fusb0>;
|
||||
};
|
||||
|
||||
&gpu {
|
||||
@@ -705,6 +706,9 @@ connector {
|
||||
<PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM)>;
|
||||
try-power-role = "sink";
|
||||
|
||||
+ extcon-cables = <1 2 5 6 9 10 12 44>;
|
||||
+ typec-altmodes = <0xff01 1 0x001c0000 1>;
|
||||
+
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@@ -970,6 +974,7 @@ spiflash: flash@0 {
|
||||
};
|
||||
|
||||
&tcphy0 {
|
||||
+ extcon = <&fusb0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c b/drivers/phy/rockchip/phy-rockchip-typec.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-typec.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-typec.c
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/extcon.h>
|
||||
+#include <linux/extcon-provider.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/kernel.h>
|
||||
@@ -1156,6 +1157,22 @@ static int rockchip_typec_phy_probe(struct platform_device *pdev)
|
||||
dev_err(dev, "Invalid or missing extcon\n");
|
||||
return PTR_ERR(tcphy->extcon);
|
||||
}
|
||||
+ } else {
|
||||
+ extcon_set_property_capability(tcphy->extcon, EXTCON_USB,
|
||||
+ EXTCON_PROP_USB_SS);
|
||||
+ extcon_set_property_capability(tcphy->extcon, EXTCON_USB_HOST,
|
||||
+ EXTCON_PROP_USB_SS);
|
||||
+ extcon_set_property_capability(tcphy->extcon, EXTCON_DISP_DP,
|
||||
+ EXTCON_PROP_USB_SS);
|
||||
+ extcon_set_property_capability(tcphy->extcon, EXTCON_USB,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||
+ extcon_set_property_capability(tcphy->extcon, EXTCON_USB_HOST,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||
+ extcon_set_property_capability(tcphy->extcon, EXTCON_DISP_DP,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||
+ extcon_sync(tcphy->extcon, EXTCON_USB);
|
||||
+ extcon_sync(tcphy->extcon, EXTCON_USB_HOST);
|
||||
+ extcon_sync(tcphy->extcon, EXTCON_DISP_DP);
|
||||
}
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/altmodes/displayport.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/usb/typec/altmodes/displayport.c
|
||||
+++ b/drivers/usb/typec/altmodes/displayport.c
|
||||
@@ -9,6 +9,8 @@
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
+#include <linux/extcon.h>
|
||||
+#include <linux/extcon-provider.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/property.h>
|
||||
@@ -74,6 +76,8 @@ struct dp_altmode {
|
||||
struct typec_altmode *plug_prime;
|
||||
};
|
||||
|
||||
+void dp_altmode_update_extcon(struct dp_altmode *dp, bool disconnect);
|
||||
+
|
||||
static int dp_altmode_notify(struct dp_altmode *dp)
|
||||
{
|
||||
unsigned long conf;
|
||||
@@ -82,7 +86,9 @@ static int dp_altmode_notify(struct dp_altmode *dp)
|
||||
if (dp->data.conf) {
|
||||
state = get_count_order(DP_CONF_GET_PIN_ASSIGN(dp->data.conf));
|
||||
conf = TYPEC_MODAL_STATE(state);
|
||||
+ dp_altmode_update_extcon(dp, false);
|
||||
} else {
|
||||
+ dp_altmode_update_extcon(dp, true);
|
||||
conf = TYPEC_STATE_USB;
|
||||
}
|
||||
|
||||
@@ -182,6 +188,40 @@ static int dp_altmode_status_update(struct dp_altmode *dp)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+void dp_altmode_update_extcon(struct dp_altmode *dp, bool disconnect) {
|
||||
+ const struct device *dev = &dp->port->dev;
|
||||
+ struct extcon_dev* edev = NULL;
|
||||
+
|
||||
+ while (dev) {
|
||||
+ edev = extcon_find_edev_by_node(dev->of_node);
|
||||
+ if(!IS_ERR(edev)) {
|
||||
+ break;
|
||||
+ }
|
||||
+ dev = dev->parent;
|
||||
+ }
|
||||
+
|
||||
+ if (IS_ERR_OR_NULL(edev)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (disconnect || !dp->data.conf) {
|
||||
+ extcon_set_state_sync(edev, EXTCON_DISP_DP, false);
|
||||
+ } else {
|
||||
+ union extcon_property_value extcon_true = { .intval = true };
|
||||
+ extcon_set_state(edev, EXTCON_DISP_DP, true);
|
||||
+ if (DP_CONF_GET_PIN_ASSIGN(dp->data.conf) & DP_PIN_ASSIGN_MULTI_FUNC_MASK) {
|
||||
+ extcon_set_state_sync(edev, EXTCON_USB_HOST, true);
|
||||
+ extcon_set_property(edev, EXTCON_DISP_DP, EXTCON_PROP_USB_SS,
|
||||
+ extcon_true);
|
||||
+ } else {
|
||||
+ extcon_set_state_sync(edev, EXTCON_USB_HOST, false);
|
||||
+ }
|
||||
+ extcon_sync(edev, EXTCON_DISP_DP);
|
||||
+ extcon_set_state_sync(edev, EXTCON_USB, false);
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
+
|
||||
static int dp_altmode_configured(struct dp_altmode *dp)
|
||||
{
|
||||
sysfs_notify(&dp->alt->dev.kobj, "displayport", "configuration");
|
||||
@@ -298,6 +338,8 @@ static void dp_altmode_work(struct work_struct *work)
|
||||
case DP_STATE_EXIT:
|
||||
if (typec_altmode_exit(dp->alt))
|
||||
dev_err(&dp->alt->dev, "Exit Mode Failed!\n");
|
||||
+ else
|
||||
+ dp_altmode_update_extcon(dp, true);
|
||||
break;
|
||||
case DP_STATE_EXIT_PRIME:
|
||||
if (typec_cable_altmode_exit(dp->plug_prime, TYPEC_PLUG_SOP_P))
|
||||
@@ -733,8 +775,14 @@ int dp_altmode_probe(struct typec_altmode *alt)
|
||||
if (!(DP_CAP_PIN_ASSIGN_DFP_D(port->vdo) &
|
||||
DP_CAP_PIN_ASSIGN_UFP_D(alt->vdo)) &&
|
||||
!(DP_CAP_PIN_ASSIGN_UFP_D(port->vdo) &
|
||||
- DP_CAP_PIN_ASSIGN_DFP_D(alt->vdo)))
|
||||
- return -ENODEV;
|
||||
+ DP_CAP_PIN_ASSIGN_DFP_D(alt->vdo))) {
|
||||
+ dev_err(&alt->dev, "No compatible pin configuration found:"\
|
||||
+ "%04lx -> %04lx, %04lx <- %04lx",
|
||||
+ DP_CAP_PIN_ASSIGN_DFP_D(port->vdo), DP_CAP_PIN_ASSIGN_UFP_D(alt->vdo),
|
||||
+ DP_CAP_PIN_ASSIGN_UFP_D(port->vdo), DP_CAP_PIN_ASSIGN_DFP_D(alt->vdo));
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
|
||||
dp = devm_kzalloc(&alt->dev, sizeof(*dp), GFP_KERNEL);
|
||||
if (!dp)
|
||||
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/usb/typec/tcpm/tcpm.c
|
||||
+++ b/drivers/usb/typec/tcpm/tcpm.c
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <linux/completion.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/device.h>
|
||||
+#include <linux/extcon-provider.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/kernel.h>
|
||||
@@ -575,6 +576,11 @@ struct tcpm_port {
|
||||
unsigned int message_id_prime;
|
||||
unsigned int rx_msgid_prime;
|
||||
|
||||
+#ifdef CONFIG_EXTCON
|
||||
+ struct extcon_dev *extcon;
|
||||
+ unsigned int *extcon_cables;
|
||||
+#endif
|
||||
+
|
||||
/* Timer deadline values configured at runtime */
|
||||
struct pd_timings timings;
|
||||
|
||||
@@ -968,6 +974,35 @@ static void tcpm_ams_finish(struct tcpm_port *port)
|
||||
port->ams = NONE_AMS;
|
||||
}
|
||||
|
||||
+static void tcpm_update_extcon_data(struct tcpm_port *port, bool attached) {
|
||||
+#ifdef CONFIG_EXTCON
|
||||
+ unsigned int *capability = port->extcon_cables;
|
||||
+ if (port->data_role == TYPEC_HOST) {
|
||||
+ extcon_set_state(port->extcon, EXTCON_USB, false);
|
||||
+ extcon_set_state(port->extcon, EXTCON_USB_HOST, attached);
|
||||
+ } else {
|
||||
+ extcon_set_state(port->extcon, EXTCON_USB, true);
|
||||
+ extcon_set_state(port->extcon, EXTCON_USB_HOST, attached);
|
||||
+ }
|
||||
+ while (*capability != EXTCON_NONE) {
|
||||
+ if (attached) {
|
||||
+ union extcon_property_value val;
|
||||
+ val.intval = (port->polarity == TYPEC_POLARITY_CC2);
|
||||
+ extcon_set_property(port->extcon, *capability,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY, val);
|
||||
+ } else {
|
||||
+ extcon_set_state(port->extcon, *capability, false);
|
||||
+ }
|
||||
+ extcon_sync(port->extcon, *capability);
|
||||
+ capability++;
|
||||
+ }
|
||||
+ tcpm_log(port, "Extcon update (%s): %s, %s",
|
||||
+ attached ? "attached" : "detached",
|
||||
+ port->data_role == TYPEC_HOST ? "host" : "device",
|
||||
+ port->polarity == TYPEC_POLARITY_CC1 ? "normal" : "flipped");
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
static int tcpm_pd_transmit(struct tcpm_port *port,
|
||||
enum tcpm_transmit_type tx_sop_type,
|
||||
const struct pd_message *msg)
|
||||
@@ -1207,6 +1242,8 @@ static int tcpm_set_roles(struct tcpm_port *port, bool attached,
|
||||
typec_set_data_role(port->typec_port, data);
|
||||
typec_set_pwr_role(port->typec_port, role);
|
||||
|
||||
+ tcpm_update_extcon_data(port, attached);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1780,7 +1817,7 @@ static void svdm_consume_modes(struct tcpm_port *port, const u32 *p, int cnt,
|
||||
paltmode->mode = i;
|
||||
paltmode->vdo = p[i];
|
||||
|
||||
- tcpm_log(port, " Alternate mode %d: SVID 0x%04x, VDO %d: 0x%08x",
|
||||
+ tcpm_log(port, "Alternate mode %d: SVID 0x%04x, VDO %d: 0x%08x",
|
||||
pmdata->altmodes, paltmode->svid,
|
||||
paltmode->mode, paltmode->vdo);
|
||||
|
||||
@@ -1804,6 +1841,8 @@ static void tcpm_register_partner_altmodes(struct tcpm_port *port)
|
||||
tcpm_log(port, "Failed to register partner SVID 0x%04x",
|
||||
modep->altmode_desc[i].svid);
|
||||
altmode = NULL;
|
||||
+ } else {
|
||||
+ tcpm_log(port, "Registered altmode 0x%04x", modep->altmode_desc[i].svid);
|
||||
}
|
||||
port->partner_altmode[i] = altmode;
|
||||
}
|
||||
@@ -2180,11 +2219,13 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev,
|
||||
modep->svid_index++;
|
||||
if (modep->svid_index < modep->nsvids) {
|
||||
u16 svid = modep->svids[modep->svid_index];
|
||||
+ tcpm_log(port, "More modes available, sending discover");
|
||||
*response_tx_sop_type = TCPC_TX_SOP;
|
||||
response[0] = VDO(svid, 1, svdm_version,
|
||||
CMD_DISCOVER_MODES);
|
||||
rlen = 1;
|
||||
} else if (tcpm_cable_vdm_supported(port)) {
|
||||
+ tcpm_log(port, "Got all patner modes, registering");
|
||||
*response_tx_sop_type = TCPC_TX_SOP_PRIME;
|
||||
response[0] = VDO(USB_SID_PD, 1,
|
||||
typec_get_cable_svdm_version(typec),
|
||||
@@ -4413,6 +4454,7 @@ static void tcpm_typec_disconnect(struct tcpm_port *port)
|
||||
port->cable = NULL;
|
||||
if (port->connected) {
|
||||
if (port->partner) {
|
||||
+ tcpm_update_extcon_data(port, false);
|
||||
typec_partner_set_usb_power_delivery(port->partner, NULL);
|
||||
typec_unregister_partner(port->partner);
|
||||
port->partner = NULL;
|
||||
@@ -4507,6 +4549,8 @@ static void tcpm_detach(struct tcpm_port *port)
|
||||
}
|
||||
|
||||
tcpm_reset_port(port);
|
||||
+
|
||||
+ tcpm_update_extcon_data(port, false);
|
||||
}
|
||||
|
||||
static void tcpm_src_detach(struct tcpm_port *port)
|
||||
@@ -7164,6 +7208,64 @@ static void tcpm_fw_get_timings(struct tcpm_port *port, struct fwnode_handle *fw
|
||||
port->timings.snk_bc12_cmpletion_time = val;
|
||||
}
|
||||
|
||||
+unsigned int default_supported_cables[] = {
|
||||
+ EXTCON_NONE
|
||||
+};
|
||||
+
|
||||
+static int tcpm_fw_get_caps_late(struct tcpm_port *port,
|
||||
+ struct fwnode_handle *fwnode)
|
||||
+{
|
||||
+ int ret, i;
|
||||
+ ret = fwnode_property_count_u32(fwnode, "typec-altmodes");
|
||||
+ if (ret > 0) {
|
||||
+ u32 *props;
|
||||
+ if (ret % 4) {
|
||||
+ dev_err(port->dev, "Length of typec altmode array must be divisible by 4");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ props = devm_kzalloc(port->dev, sizeof(u32) * ret, GFP_KERNEL);
|
||||
+ if (!props) {
|
||||
+ dev_err(port->dev, "Failed to allocate memory for altmode properties");
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ if(fwnode_property_read_u32_array(fwnode, "typec-altmodes", props, ret) < 0) {
|
||||
+ dev_err(port->dev, "Failed to read altmodes from port");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ i = 0;
|
||||
+ while (ret > 0 && i < ARRAY_SIZE(port->port_altmode)) {
|
||||
+ struct typec_altmode *alt;
|
||||
+ struct typec_altmode_desc alt_desc = {
|
||||
+ .svid = props[i * 4],
|
||||
+ .mode = props[i * 4 + 1],
|
||||
+ .vdo = props[i * 4 + 2],
|
||||
+ .roles = props[i * 4 + 3],
|
||||
+ };
|
||||
+
|
||||
+
|
||||
+ tcpm_log(port, "Adding altmode SVID: 0x%04x, mode: %d, vdo: %u, role: %d",
|
||||
+ alt_desc.svid, alt_desc.mode, alt_desc.vdo, alt_desc.roles);
|
||||
+ alt = typec_port_register_altmode(port->typec_port,
|
||||
+ &alt_desc);
|
||||
+ if (IS_ERR(alt)) {
|
||||
+ tcpm_log(port,
|
||||
+ "%s: failed to register port alternate mode 0x%x",
|
||||
+ dev_name(port->dev), alt_desc.svid);
|
||||
+ break;
|
||||
+ }
|
||||
+ typec_altmode_set_drvdata(alt, port);
|
||||
+ alt->ops = &tcpm_altmode_ops;
|
||||
+ port->port_altmode[i] = alt;
|
||||
+ i++;
|
||||
+ ret -= 4;
|
||||
+ }
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int tcpm_fw_get_caps(struct tcpm_port *port, struct fwnode_handle *fwnode)
|
||||
{
|
||||
struct fwnode_handle *capabilities, *child, *caps = NULL;
|
||||
@@ -7177,6 +7279,23 @@ static int tcpm_fw_get_caps(struct tcpm_port *port, struct fwnode_handle *fwnode
|
||||
if (!fwnode)
|
||||
return -EINVAL;
|
||||
|
||||
+#ifdef CONFIG_EXTCON
|
||||
+ ret = fwnode_property_count_u32(fwnode, "extcon-cables");
|
||||
+ if (ret > 0) {
|
||||
+ port->extcon_cables = devm_kzalloc(port->dev, sizeof(u32) * ret, GFP_KERNEL);
|
||||
+ if (!port->extcon_cables) {
|
||||
+ dev_err(port->dev, "Failed to allocate memory for extcon cable types. "\
|
||||
+ "Using default tyes");
|
||||
+ goto extcon_default;
|
||||
+ }
|
||||
+ fwnode_property_read_u32_array(fwnode, "extcon-cables", port->extcon_cables, ret);
|
||||
+ } else {
|
||||
+extcon_default:
|
||||
+ dev_info(port->dev, "No cable types defined, using default cables");
|
||||
+ port->extcon_cables = default_supported_cables;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* This fwnode has a "compatible" property, but is never populated as a
|
||||
* struct device. Instead we simply parse it to read the properties.
|
||||
@@ -7748,6 +7867,17 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
|
||||
tcpm_fw_get_pd_revision(port, tcpc->fwnode);
|
||||
|
||||
port->try_role = port->typec_caps.prefer_role;
|
||||
+#ifdef CONFIG_EXTCON
|
||||
+ port->extcon = devm_extcon_dev_allocate(dev, port->extcon_cables);
|
||||
+ if (IS_ERR(port->extcon)) {
|
||||
+ dev_err(dev, "Failed to allocate extcon device: %ld", PTR_ERR(port->extcon));
|
||||
+ goto out_destroy_wq;
|
||||
+ }
|
||||
+ if((err = devm_extcon_dev_register(dev, port->extcon))) {
|
||||
+ dev_err(dev, "Failed to register extcon device: %d", err);
|
||||
+ goto out_destroy_wq;
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
port->typec_caps.revision = 0x0120; /* Type-C spec release 1.2 */
|
||||
|
||||
@@ -7797,6 +7927,12 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
|
||||
&tcpm_cable_ops);
|
||||
port->registered = true;
|
||||
|
||||
+ err = tcpm_fw_get_caps_late(port, tcpc->fwnode);
|
||||
+ if (err < 0) {
|
||||
+ dev_err(dev, "Failed to get altmodes from fwnode");
|
||||
+ goto out_destroy_wq;
|
||||
+ }
|
||||
+
|
||||
mutex_lock(&port->lock);
|
||||
tcpm_init(port);
|
||||
mutex_unlock(&port->lock);
|
||||
--
|
||||
Armbian
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: John Doe <john.doe@somewhere.on.planet>
|
||||
Date: Wed, 14 Aug 2024 16:33:07 +0000
|
||||
Subject: rockchip64: edge: 6.10.5 drv:spi:spidev remove warnings
|
||||
|
||||
Signed-off-by: John Doe <john.doe@somewhere.on.planet>
|
||||
---
|
||||
drivers/spi/spidev.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/spi/spidev.c
|
||||
+++ b/drivers/spi/spidev.c
|
||||
@@ -703,6 +703,7 @@ static const struct class spidev_class = {
|
||||
* spidev_dt_ids array below. Both arrays are kept in the same ordering.
|
||||
*/
|
||||
static const struct spi_device_id spidev_spi_ids[] = {
|
||||
+ { .name = "spi-dev" },
|
||||
{ .name = /* cisco */ "spi-petra" },
|
||||
{ .name = /* dh */ "dhcom-board" },
|
||||
{ .name = /* elgin */ "jg10309-01" },
|
||||
@@ -734,6 +735,7 @@ static int spidev_of_check(struct device *dev)
|
||||
}
|
||||
|
||||
static const struct of_device_id spidev_dt_ids[] = {
|
||||
+ { .compatible = "armbian,spi-dev", .data = &spidev_of_check },
|
||||
{ .compatible = "cisco,spi-petra", .data = &spidev_of_check },
|
||||
{ .compatible = "dh,dhcom-board", .data = &spidev_of_check },
|
||||
{ .compatible = "elgin,jg10309-01", .data = &spidev_of_check },
|
||||
--
|
||||
Armbian
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Wed, 2 Oct 2024 19:30:34 +0300
|
||||
Subject: compile .scr and install overlays in right path
|
||||
|
||||
---
|
||||
scripts/Makefile.dtbinst | 13 +++++++++-
|
||||
scripts/Makefile.dtbs | 8 +++++-
|
||||
2 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbinst
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/scripts/Makefile.dtbinst
|
||||
+++ b/scripts/Makefile.dtbinst
|
||||
@@ -33,7 +33,18 @@ endef
|
||||
|
||||
$(foreach d, $(sort $(dir $(dtbs))), $(eval $(call gen_install_rules,$(d))))
|
||||
|
||||
-dtbs := $(notdir $(dtbs))
|
||||
+# Very convoluted way to flatten all the device tree
|
||||
+# directories, but keep the "/overlay/" directory
|
||||
+
|
||||
+# topmost directory (ie: from rockchip/overlay/rk322x-emmc.dtbo extracts rockchip)
|
||||
+topmost_dir = $(firstword $(subst /, ,$(dtbs)))
|
||||
+# collect dtbs entries which starts with "$topmost_dir/overlay/", then remove "$topmost_dir"
|
||||
+dtbs_overlays = $(subst $(topmost_dir)/,,$(filter $(topmost_dir)/overlay/%, $(dtbs)))
|
||||
+# collect the non-overlay dtbs
|
||||
+dtbs_regular = $(filter-out $(topmost_dir)/overlay/%, $(dtbs))
|
||||
+# compose the dtbs variable flattening all the non-overlays entries
|
||||
+# and appending the overlays entries
|
||||
+dtbs := $(notdir $(dtbs_regular)) $(dtbs_overlays)
|
||||
|
||||
endif # CONFIG_ARCH_WANT_FLAT_DTB_INSTALL
|
||||
|
||||
diff --git a/scripts/Makefile.dtbs b/scripts/Makefile.dtbs
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/scripts/Makefile.dtbs
|
||||
+++ b/scripts/Makefile.dtbs
|
||||
@@ -122,17 +122,23 @@ dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
|
||||
quiet_cmd_dtc = DTC $(quiet_dtb_check_tag) $@
|
||||
cmd_dtc = \
|
||||
$(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
|
||||
- $(DTC) -o $@ -b 0 $(addprefix -i,$(dir $<) $(DTC_INCLUDE)) \
|
||||
+ $(DTC) -@ -o $@ -b 0 $(addprefix -i,$(dir $<) $(DTC_INCLUDE)) \
|
||||
$(DTC_FLAGS) -d $(depfile).dtc.tmp $(dtc-tmp) ; \
|
||||
cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) \
|
||||
$(cmd_dtb_check)
|
||||
|
||||
+quiet_cmd_scr = MKIMAGE $@
|
||||
+cmd_scr = mkimage -C none -A $(ARCH) -T script -d $< $@
|
||||
+
|
||||
$(obj)/%.dtb: $(obj)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE
|
||||
$(call if_changed_dep,dtc)
|
||||
|
||||
$(obj)/%.dtbo: $(src)/%.dtso $(DTC) FORCE
|
||||
$(call if_changed_dep,dtc)
|
||||
|
||||
+$(obj)/%.scr: $(src)/%.scr-cmd FORCE
|
||||
+ $(call if_changed,scr)
|
||||
+
|
||||
# targets
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
Armbian
|
||||
|
@ -1,419 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
|
||||
Date: Wed, 3 Dec 2014 13:23:28 +0200
|
||||
Subject: OF: DT-Overlay configfs interface
|
||||
|
||||
This is a port of Pantelis Antoniou's v3 port that makes use of the
|
||||
new upstreamed configfs support for binary attributes.
|
||||
|
||||
Original commit message:
|
||||
|
||||
Add a runtime interface to using configfs for generic device tree overlay
|
||||
usage. With it its possible to use device tree overlays without having
|
||||
to use a per-platform overlay manager.
|
||||
|
||||
Please see Documentation/devicetree/configfs-overlays.txt for more info.
|
||||
|
||||
Changes since v2:
|
||||
- Removed ifdef CONFIG_OF_OVERLAY (since for now it's required)
|
||||
- Created a documentation entry
|
||||
- Slight rewording in Kconfig
|
||||
|
||||
Changes since v1:
|
||||
- of_resolve() -> of_resolve_phandles().
|
||||
|
||||
Originally-signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
DT configfs: Fix build errors on other platforms
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
DT configfs: fix build error
|
||||
|
||||
There is an error when compiling rpi-4.6.y branch:
|
||||
CC drivers/of/configfs.o
|
||||
drivers/of/configfs.c:291:21: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
|
||||
.default_groups = of_cfs_def_groups,
|
||||
^
|
||||
drivers/of/configfs.c:291:21: note: (near initialization for 'of_cfs_subsys.su_group.default_groups.next')
|
||||
|
||||
The .default_groups is linked list since commit
|
||||
1ae1602de028acaa42a0f6ff18d19756f8e825c6.
|
||||
This commit uses configfs_add_default_group to fix this problem.
|
||||
|
||||
Signed-off-by: Slawomir Stepien <sst@poczta.fm>
|
||||
|
||||
configfs: New of_overlay API
|
||||
|
||||
of: configfs: Use of_overlay_fdt_apply API call
|
||||
|
||||
The published API to the dynamic overlay application mechanism now
|
||||
takes a Flattened Device Tree blob as input so that it can manage the
|
||||
lifetime of the unflattened tree. Conveniently, the new API call -
|
||||
of_overlay_fdt_apply - is virtually a drop-in replacement for
|
||||
create_overlay, which can now be deleted.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
Documentation/devicetree/configfs-overlays.txt | 31 ++
|
||||
drivers/of/Kconfig | 11 +
|
||||
drivers/of/Makefile | 1 +
|
||||
drivers/of/configfs.c | 277 ++++++++++
|
||||
4 files changed, 320 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/configfs-overlays.txt b/Documentation/devicetree/configfs-overlays.txt
|
||||
new file mode 100644
|
||||
index 000000000000..111111111111
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/configfs-overlays.txt
|
||||
@@ -0,0 +1,31 @@
|
||||
+Howto use the configfs overlay interface.
|
||||
+
|
||||
+A device-tree configfs entry is created in /config/device-tree/overlays
|
||||
+and and it is manipulated using standard file system I/O.
|
||||
+Note that this is a debug level interface, for use by developers and
|
||||
+not necessarily something accessed by normal users due to the
|
||||
+security implications of having direct access to the kernel's device tree.
|
||||
+
|
||||
+* To create an overlay you mkdir the directory:
|
||||
+
|
||||
+ # mkdir /config/device-tree/overlays/foo
|
||||
+
|
||||
+* Either you echo the overlay firmware file to the path property file.
|
||||
+
|
||||
+ # echo foo.dtbo >/config/device-tree/overlays/foo/path
|
||||
+
|
||||
+* Or you cat the contents of the overlay to the dtbo file
|
||||
+
|
||||
+ # cat foo.dtbo >/config/device-tree/overlays/foo/dtbo
|
||||
+
|
||||
+The overlay file will be applied, and devices will be created/destroyed
|
||||
+as required.
|
||||
+
|
||||
+To remove it simply rmdir the directory.
|
||||
+
|
||||
+ # rmdir /config/device-tree/overlays/foo
|
||||
+
|
||||
+The rationalle of the dual interface (firmware & direct copy) is that each is
|
||||
+better suited to different use patterns. The firmware interface is what's
|
||||
+intended to be used by hardware managers in the kernel, while the copy interface
|
||||
+make sense for developers (since it avoids problems with namespaces).
|
||||
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/of/Kconfig
|
||||
+++ b/drivers/of/Kconfig
|
||||
@@ -126,4 +126,15 @@ config OF_OVERLAY_KUNIT_TEST
|
||||
config OF_NUMA
|
||||
bool
|
||||
|
||||
+config OF_DMA_DEFAULT_COHERENT
|
||||
+ # arches should select this if DMA is coherent by default for OF devices
|
||||
+ bool
|
||||
+
|
||||
+config OF_CONFIGFS
|
||||
+ bool "Device Tree Overlay ConfigFS interface"
|
||||
+ select CONFIGFS_FS
|
||||
+ select OF_OVERLAY
|
||||
+ help
|
||||
+ Enable a simple user-space driven DT overlay interface.
|
||||
+
|
||||
endif # OF
|
||||
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/of/Makefile
|
||||
+++ b/drivers/of/Makefile
|
||||
@@ -1,6 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y = base.o cpu.o device.o module.o platform.o property.o
|
||||
obj-$(CONFIG_OF_KOBJ) += kobj.o
|
||||
+obj-$(CONFIG_OF_CONFIGFS) += configfs.o
|
||||
obj-$(CONFIG_OF_DYNAMIC) += dynamic.o
|
||||
obj-$(CONFIG_OF_FLATTREE) += fdt.o empty_root.dtb.o
|
||||
obj-$(CONFIG_OF_EARLY_FLATTREE) += fdt_address.o
|
||||
diff --git a/drivers/of/configfs.c b/drivers/of/configfs.c
|
||||
new file mode 100644
|
||||
index 000000000000..111111111111
|
||||
--- /dev/null
|
||||
+++ b/drivers/of/configfs.c
|
||||
@@ -0,0 +1,277 @@
|
||||
+/*
|
||||
+ * Configfs entries for device-tree
|
||||
+ *
|
||||
+ * Copyright (C) 2013 - Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License
|
||||
+ * as published by the Free Software Foundation; either version
|
||||
+ * 2 of the License, or (at your option) any later version.
|
||||
+ */
|
||||
+#include <linux/ctype.h>
|
||||
+#include <linux/cpu.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/of_fdt.h>
|
||||
+#include <linux/spinlock.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/proc_fs.h>
|
||||
+#include <linux/configfs.h>
|
||||
+#include <linux/types.h>
|
||||
+#include <linux/stat.h>
|
||||
+#include <linux/limits.h>
|
||||
+#include <linux/file.h>
|
||||
+#include <linux/vmalloc.h>
|
||||
+#include <linux/firmware.h>
|
||||
+#include <linux/sizes.h>
|
||||
+
|
||||
+#include "of_private.h"
|
||||
+
|
||||
+struct cfs_overlay_item {
|
||||
+ struct config_item item;
|
||||
+
|
||||
+ char path[PATH_MAX];
|
||||
+
|
||||
+ const struct firmware *fw;
|
||||
+ struct device_node *overlay;
|
||||
+ int ov_id;
|
||||
+
|
||||
+ void *dtbo;
|
||||
+ int dtbo_size;
|
||||
+};
|
||||
+
|
||||
+static inline struct cfs_overlay_item *to_cfs_overlay_item(
|
||||
+ struct config_item *item)
|
||||
+{
|
||||
+ return item ? container_of(item, struct cfs_overlay_item, item) : NULL;
|
||||
+}
|
||||
+
|
||||
+static ssize_t cfs_overlay_item_path_show(struct config_item *item,
|
||||
+ char *page)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+ return sprintf(page, "%s\n", overlay->path);
|
||||
+}
|
||||
+
|
||||
+static ssize_t cfs_overlay_item_path_store(struct config_item *item,
|
||||
+ const char *page, size_t count)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+ const char *p = page;
|
||||
+ char *s;
|
||||
+ int err;
|
||||
+
|
||||
+ /* if it's set do not allow changes */
|
||||
+ if (overlay->path[0] != '\0' || overlay->dtbo_size > 0)
|
||||
+ return -EPERM;
|
||||
+
|
||||
+ /* copy to path buffer (and make sure it's always zero terminated */
|
||||
+ count = snprintf(overlay->path, sizeof(overlay->path) - 1, "%s", p);
|
||||
+ overlay->path[sizeof(overlay->path) - 1] = '\0';
|
||||
+
|
||||
+ /* strip trailing newlines */
|
||||
+ s = overlay->path + strlen(overlay->path);
|
||||
+ while (s > overlay->path && *--s == '\n')
|
||||
+ *s = '\0';
|
||||
+
|
||||
+ pr_debug("%s: path is '%s'\n", __func__, overlay->path);
|
||||
+
|
||||
+ err = request_firmware(&overlay->fw, overlay->path, NULL);
|
||||
+ if (err != 0)
|
||||
+ goto out_err;
|
||||
+
|
||||
+ err = of_overlay_fdt_apply((void *)overlay->fw->data,
|
||||
+ (u32)overlay->fw->size, &overlay->ov_id, NULL);
|
||||
+ if (err != 0)
|
||||
+ goto out_err;
|
||||
+
|
||||
+ return count;
|
||||
+
|
||||
+out_err:
|
||||
+
|
||||
+ release_firmware(overlay->fw);
|
||||
+ overlay->fw = NULL;
|
||||
+
|
||||
+ overlay->path[0] = '\0';
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static ssize_t cfs_overlay_item_status_show(struct config_item *item,
|
||||
+ char *page)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+
|
||||
+ return sprintf(page, "%s\n",
|
||||
+ overlay->ov_id > 0 ? "applied" : "unapplied");
|
||||
+}
|
||||
+
|
||||
+CONFIGFS_ATTR(cfs_overlay_item_, path);
|
||||
+CONFIGFS_ATTR_RO(cfs_overlay_item_, status);
|
||||
+
|
||||
+static struct configfs_attribute *cfs_overlay_attrs[] = {
|
||||
+ &cfs_overlay_item_attr_path,
|
||||
+ &cfs_overlay_item_attr_status,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+ssize_t cfs_overlay_item_dtbo_read(struct config_item *item,
|
||||
+ void *buf, size_t max_count)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+
|
||||
+ pr_debug("%s: buf=%p max_count=%zu\n", __func__,
|
||||
+ buf, max_count);
|
||||
+
|
||||
+ if (overlay->dtbo == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* copy if buffer provided */
|
||||
+ if (buf != NULL) {
|
||||
+ /* the buffer must be large enough */
|
||||
+ if (overlay->dtbo_size > max_count)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
+ memcpy(buf, overlay->dtbo, overlay->dtbo_size);
|
||||
+ }
|
||||
+
|
||||
+ return overlay->dtbo_size;
|
||||
+}
|
||||
+
|
||||
+ssize_t cfs_overlay_item_dtbo_write(struct config_item *item,
|
||||
+ const void *buf, size_t count)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+ int err;
|
||||
+
|
||||
+ /* if it's set do not allow changes */
|
||||
+ if (overlay->path[0] != '\0' || overlay->dtbo_size > 0)
|
||||
+ return -EPERM;
|
||||
+
|
||||
+ /* copy the contents */
|
||||
+ overlay->dtbo = kmemdup(buf, count, GFP_KERNEL);
|
||||
+ if (overlay->dtbo == NULL)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ overlay->dtbo_size = count;
|
||||
+
|
||||
+ err = of_overlay_fdt_apply(overlay->dtbo, overlay->dtbo_size,
|
||||
+ &overlay->ov_id, NULL);
|
||||
+ if (err != 0)
|
||||
+ goto out_err;
|
||||
+
|
||||
+ return count;
|
||||
+
|
||||
+out_err:
|
||||
+ kfree(overlay->dtbo);
|
||||
+ overlay->dtbo = NULL;
|
||||
+ overlay->dtbo_size = 0;
|
||||
+ overlay->ov_id = 0;
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+CONFIGFS_BIN_ATTR(cfs_overlay_item_, dtbo, NULL, SZ_1M);
|
||||
+
|
||||
+static struct configfs_bin_attribute *cfs_overlay_bin_attrs[] = {
|
||||
+ &cfs_overlay_item_attr_dtbo,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static void cfs_overlay_release(struct config_item *item)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+
|
||||
+ if (overlay->ov_id > 0)
|
||||
+ of_overlay_remove(&overlay->ov_id);
|
||||
+ if (overlay->fw)
|
||||
+ release_firmware(overlay->fw);
|
||||
+ /* kfree with NULL is safe */
|
||||
+ kfree(overlay->dtbo);
|
||||
+ kfree(overlay);
|
||||
+}
|
||||
+
|
||||
+static struct configfs_item_operations cfs_overlay_item_ops = {
|
||||
+ .release = cfs_overlay_release,
|
||||
+};
|
||||
+
|
||||
+static struct config_item_type cfs_overlay_type = {
|
||||
+ .ct_item_ops = &cfs_overlay_item_ops,
|
||||
+ .ct_attrs = cfs_overlay_attrs,
|
||||
+ .ct_bin_attrs = cfs_overlay_bin_attrs,
|
||||
+ .ct_owner = THIS_MODULE,
|
||||
+};
|
||||
+
|
||||
+static struct config_item *cfs_overlay_group_make_item(
|
||||
+ struct config_group *group, const char *name)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay;
|
||||
+
|
||||
+ overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
|
||||
+ if (!overlay)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ config_item_init_type_name(&overlay->item, name, &cfs_overlay_type);
|
||||
+ return &overlay->item;
|
||||
+}
|
||||
+
|
||||
+static void cfs_overlay_group_drop_item(struct config_group *group,
|
||||
+ struct config_item *item)
|
||||
+{
|
||||
+ struct cfs_overlay_item *overlay = to_cfs_overlay_item(item);
|
||||
+
|
||||
+ config_item_put(&overlay->item);
|
||||
+}
|
||||
+
|
||||
+static struct configfs_group_operations overlays_ops = {
|
||||
+ .make_item = cfs_overlay_group_make_item,
|
||||
+ .drop_item = cfs_overlay_group_drop_item,
|
||||
+};
|
||||
+
|
||||
+static struct config_item_type overlays_type = {
|
||||
+ .ct_group_ops = &overlays_ops,
|
||||
+ .ct_owner = THIS_MODULE,
|
||||
+};
|
||||
+
|
||||
+static struct configfs_group_operations of_cfs_ops = {
|
||||
+ /* empty - we don't allow anything to be created */
|
||||
+};
|
||||
+
|
||||
+static struct config_item_type of_cfs_type = {
|
||||
+ .ct_group_ops = &of_cfs_ops,
|
||||
+ .ct_owner = THIS_MODULE,
|
||||
+};
|
||||
+
|
||||
+struct config_group of_cfs_overlay_group;
|
||||
+
|
||||
+static struct configfs_subsystem of_cfs_subsys = {
|
||||
+ .su_group = {
|
||||
+ .cg_item = {
|
||||
+ .ci_namebuf = "device-tree",
|
||||
+ .ci_type = &of_cfs_type,
|
||||
+ },
|
||||
+ },
|
||||
+ .su_mutex = __MUTEX_INITIALIZER(of_cfs_subsys.su_mutex),
|
||||
+};
|
||||
+
|
||||
+static int __init of_cfs_init(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ pr_info("%s\n", __func__);
|
||||
+
|
||||
+ config_group_init(&of_cfs_subsys.su_group);
|
||||
+ config_group_init_type_name(&of_cfs_overlay_group, "overlays",
|
||||
+ &overlays_type);
|
||||
+ configfs_add_default_group(&of_cfs_overlay_group,
|
||||
+ &of_cfs_subsys.su_group);
|
||||
+
|
||||
+ ret = configfs_register_subsystem(&of_cfs_subsys);
|
||||
+ if (ret != 0) {
|
||||
+ pr_err("%s: failed to register subsys\n", __func__);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ pr_info("%s: OK\n", __func__);
|
||||
+out:
|
||||
+ return ret;
|
||||
+}
|
||||
+late_initcall(of_cfs_init);
|
||||
--
|
||||
Armbian
|
||||
|
@ -1,79 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: David Bauer <mail@david-bauer.net>
|
||||
Date: Sun, 26 Jul 2020 02:38:31 +0200
|
||||
Subject: net: usb: r8152: add LED configuration from OF
|
||||
|
||||
This adds the ability to configure the LED configuration register using
|
||||
OF. This way, the correct value for board specific LED configuration can
|
||||
be determined.
|
||||
|
||||
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
---
|
||||
drivers/net/usb/r8152.c | 23 ++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/net/usb/r8152.c
|
||||
+++ b/drivers/net/usb/r8152.c
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/usb.h>
|
||||
+#include <linux/of.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/uaccess.h>
|
||||
@@ -7046,6 +7047,22 @@ static void rtl_tally_reset(struct r8152 *tp)
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
|
||||
}
|
||||
|
||||
+static int r8152_led_configuration(struct r8152 *tp)
|
||||
+{
|
||||
+ u32 led_data;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = of_property_read_u32(tp->udev->dev.of_node, "realtek,led-data",
|
||||
+ &led_data);
|
||||
+
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_LEDSEL, led_data);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void r8152b_init(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
@@ -7087,6 +7104,8 @@ static void r8152b_init(struct r8152 *tp)
|
||||
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
|
||||
ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
|
||||
ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
|
||||
+
|
||||
+ r8152_led_configuration(tp);
|
||||
}
|
||||
|
||||
static void r8153_init(struct r8152 *tp)
|
||||
@@ -7227,6 +7246,8 @@ static void r8153_init(struct r8152 *tp)
|
||||
tp->coalesce = COALESCE_SLOW;
|
||||
break;
|
||||
}
|
||||
+
|
||||
+ r8152_led_configuration(tp);
|
||||
}
|
||||
|
||||
static void r8153b_init(struct r8152 *tp)
|
||||
@@ -7309,6 +7330,8 @@ static void r8153b_init(struct r8152 *tp)
|
||||
rtl_tally_reset(tp);
|
||||
|
||||
tp->coalesce = 15000; /* 15 us */
|
||||
+
|
||||
+ r8152_led_configuration(tp);
|
||||
}
|
||||
|
||||
static void r8153c_init(struct r8152 *tp)
|
||||
--
|
||||
Armbian
|
||||
|
325
patch/uboot/btt/btt_pi2_support.patch
Normal file
325
patch/uboot/btt/btt_pi2_support.patch
Normal file
@ -0,0 +1,325 @@
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/arch/arm/dts/rk3566-btt-pi2.dts uboot_btt_pi2/arch/arm/dts/rk3566-btt-pi2.dts
|
||||
--- uboot_btt_pi2_or/arch/arm/dts/rk3566-btt-pi2.dts 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/arch/arm/dts/rk3566-btt-pi2.dts 2024-12-25 14:33:13.750360443 +0100
|
||||
@@ -0,0 +1,3 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+
|
||||
+#include <arm64/rockchip/rk3566-btt-pi2.dts>
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/arch/arm/dts/rk3566-btt-pi2.dtsi uboot_btt_pi2/arch/arm/dts/rk3566-btt-pi2.dtsi
|
||||
--- uboot_btt_pi2_or/arch/arm/dts/rk3566-btt-pi2.dtsi 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/arch/arm/dts/rk3566-btt-pi2.dtsi 2024-12-25 14:33:00.070527818 +0100
|
||||
@@ -0,0 +1,14 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+
|
||||
+#include "rk356x-u-boot.dtsi"
|
||||
+
|
||||
+&gpio4 {
|
||||
+ bootph-pre-ram;
|
||||
+};
|
||||
+
|
||||
+&sfc {
|
||||
+ flash@0 {
|
||||
+ bootph-pre-ram;
|
||||
+ bootph-some-ram;
|
||||
+ };
|
||||
+};
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/arch/arm/mach-rockchip/rk3568/Kconfig uboot_btt_pi2/arch/arm/mach-rockchip/rk3568/Kconfig
|
||||
--- uboot_btt_pi2_or/arch/arm/mach-rockchip/rk3568/Kconfig 2025-06-27 23:33:08.241020412 +0200
|
||||
+++ uboot_btt_pi2/arch/arm/mach-rockchip/rk3568/Kconfig 2025-06-27 23:43:47.734346143 +0200
|
||||
@@ -59,6 +59,9 @@
|
||||
help
|
||||
Xunlong Orange Pi 3B single board computer with a RK3566 SoC.
|
||||
|
||||
+config TARGET_BTT_PI2_RK3566
|
||||
+ bool "BigTreeTech Pi2 RK3566"
|
||||
+
|
||||
endchoice
|
||||
|
||||
config ROCKCHIP_BOOT_MODE_REG
|
||||
@@ -82,6 +85,7 @@
|
||||
source "board/qnap/ts433/Kconfig"
|
||||
source "board/radxa/zero3-rk3566/Kconfig"
|
||||
source "board/xunlong/orangepi-3b-rk3566/Kconfig"
|
||||
+source "board/btt/btt_pi2/Kconfig"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "rk3568_common"
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/board/btt/btt_pi2/Kconfig uboot_btt_pi2/board/btt/btt_pi2/Kconfig
|
||||
--- uboot_btt_pi2_or/board/btt/btt_pi2/Kconfig 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/board/btt/btt_pi2/Kconfig 2024-12-25 14:25:26.079527781 +0100
|
||||
@@ -0,0 +1,12 @@
|
||||
+if TARGET_BTT_PI2_RK3566
|
||||
+
|
||||
+config SYS_BOARD
|
||||
+ default "btt-pi2-rk3566"
|
||||
+
|
||||
+config SYS_VENDOR
|
||||
+ default "BTT"
|
||||
+
|
||||
+config SYS_CONFIG_NAME
|
||||
+ default "evb_rk3568"
|
||||
+
|
||||
+endif
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/board/btt/btt_pi2/Makefile uboot_btt_pi2/board/btt/btt_pi2/Makefile
|
||||
--- uboot_btt_pi2_or/board/btt/btt_pi2/Makefile 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/board/btt/btt_pi2/Makefile 2024-12-25 13:51:22.905431308 +0100
|
||||
@@ -0,0 +1,3 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0+
|
||||
+
|
||||
+obj-y += btt_pi2.o
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/board/btt/btt_pi2/btt_pi2.c uboot_btt_pi2/board/btt/btt_pi2/btt_pi2.c
|
||||
--- uboot_btt_pi2_or/board/btt/btt_pi2/btt_pi2.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/board/btt/btt_pi2/btt_pi2.c 2024-12-25 13:54:26.633161139 +0100
|
||||
@@ -0,0 +1,76 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+
|
||||
+#include <env.h>
|
||||
+#include <asm/gpio.h>
|
||||
+
|
||||
+struct board_model {
|
||||
+ int value;
|
||||
+ const char *fdtfile;
|
||||
+ const char *config;
|
||||
+};
|
||||
+
|
||||
+static const struct board_model board_models[] = {
|
||||
+ { 0, "btt/rk3566-btt-pi2-v1.0.1.dtb", "rk3566-btt-pi2-v1.0.1.dtb" },
|
||||
+};
|
||||
+
|
||||
+static int get_board_value(void)
|
||||
+{
|
||||
+ struct gpio_desc desc;
|
||||
+ int ret;
|
||||
+
|
||||
+ /*
|
||||
+ * GPIO4_C4 (E20):
|
||||
+ * v1.1.1: x (internal pull-down)
|
||||
+ * v2.1: PHY_RESET (external pull-up)
|
||||
+ */
|
||||
+ ret = dm_gpio_lookup_name("E20", &desc);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = dm_gpio_request(&desc, "phy_reset");
|
||||
+ if (ret && ret != -EBUSY)
|
||||
+ return ret;
|
||||
+
|
||||
+ dm_gpio_set_dir_flags(&desc, GPIOD_IS_IN);
|
||||
+ ret = dm_gpio_get_value(&desc);
|
||||
+ dm_gpio_free(desc.dev, &desc);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct board_model *get_board_model(void)
|
||||
+{
|
||||
+ int i, val;
|
||||
+
|
||||
+ val = get_board_value();
|
||||
+ if (val < 0)
|
||||
+ return NULL;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(board_models); i++) {
|
||||
+ if (val == board_models[i].value)
|
||||
+ return &board_models[i];
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+int rk_board_late_init(void)
|
||||
+{
|
||||
+ const struct board_model *model = get_board_model();
|
||||
+
|
||||
+ if (model)
|
||||
+ env_set("fdtfile", model->fdtfile);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int board_fit_config_name_match(const char *name)
|
||||
+{
|
||||
+ const struct board_model *model = get_board_model();
|
||||
+
|
||||
+ if (model && (!strcmp(name, model->fdtfile) ||
|
||||
+ !strcmp(name, model->config)))
|
||||
+ return 0;
|
||||
+
|
||||
+ return -EINVAL;
|
||||
+}
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/configs/btt-pi2_defconfig uboot_btt_pi2/configs/btt-pi2_defconfig
|
||||
--- uboot_btt_pi2_or/configs/btt-pi2_defconfig 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/configs/btt-pi2_defconfig 2024-12-25 15:26:35.465317423 +0100
|
||||
@@ -0,0 +1,98 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_SKIP_LOWLEVEL_INIT=y
|
||||
+CONFIG_COUNTER_FREQUENCY=24000000
|
||||
+CONFIG_ARCH_ROCKCHIP=y
|
||||
+CONFIG_SPL_GPIO=y
|
||||
+CONFIG_SF_DEFAULT_SPEED=24000000
|
||||
+CONFIG_SF_DEFAULT_MODE=0x2000
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="rk3568-generic"
|
||||
+CONFIG_ROCKCHIP_RK3568=y
|
||||
+CONFIG_ROCKCHIP_SPI_IMAGE=y
|
||||
+CONFIG_SPL_SERIAL=y
|
||||
+CONFIG_TARGET_BTT_PI2_RK3566=y
|
||||
+CONFIG_SYS_LOAD_ADDR=0xc00800
|
||||
+CONFIG_SF_DEFAULT_BUS=4
|
||||
+CONFIG_DEBUG_UART_BASE=0xFE660000
|
||||
+CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
+CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
||||
+CONFIG_SPL_SPI=y
|
||||
+CONFIG_PCI=y
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+CONFIG_AHCI=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_FIT_VERBOSE=y
|
||||
+CONFIG_SPL_FIT_SIGNATURE=y
|
||||
+CONFIG_SPL_LOAD_FIT=y
|
||||
+CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3566-btt-pi2.dtb"
|
||||
+# CONFIG_DISPLAY_CPUINFO is not set
|
||||
+CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
+CONFIG_SPL_MAX_SIZE=0x40000
|
||||
+CONFIG_SPL_PAD_TO=0x7f8000
|
||||
+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
+CONFIG_SPL_SPI_LOAD=y
|
||||
+CONFIG_SYS_SPI_U_BOOT_OFFS=0x60000
|
||||
+CONFIG_SPL_ATF=y
|
||||
+CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_GPT=y
|
||||
+CONFIG_CMD_I2C=y
|
||||
+CONFIG_CMD_MMC=y
|
||||
+CONFIG_CMD_PCI=y
|
||||
+CONFIG_CMD_POWEROFF=y
|
||||
+CONFIG_CMD_USB=y
|
||||
+# CONFIG_CMD_SETEXPR is not set
|
||||
+CONFIG_CMD_PMIC=y
|
||||
+CONFIG_CMD_REGULATOR=y
|
||||
+# CONFIG_SPL_DOS_PARTITION is not set
|
||||
+CONFIG_SPL_OF_CONTROL=y
|
||||
+CONFIG_OF_LIVE=y
|
||||
+# CONFIG_OF_UPSTREAM is not set
|
||||
+CONFIG_OF_LIST="rk3568-generic"
|
||||
+CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
+CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||
+CONFIG_SPL_REGMAP=y
|
||||
+CONFIG_SPL_SYSCON=y
|
||||
+CONFIG_SCSI_AHCI=y
|
||||
+CONFIG_AHCI_PCI=y
|
||||
+CONFIG_SPL_CLK=y
|
||||
+CONFIG_ROCKCHIP_GPIO=y
|
||||
+CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
+CONFIG_LED=y
|
||||
+CONFIG_LED_GPIO=y
|
||||
+CONFIG_MISC=y
|
||||
+CONFIG_SUPPORT_EMMC_RPMB=y
|
||||
+CONFIG_MMC_DW=y
|
||||
+CONFIG_MMC_DW_ROCKCHIP=y
|
||||
+CONFIG_MMC_SDHCI=y
|
||||
+CONFIG_MMC_SDHCI_SDMA=y
|
||||
+CONFIG_MMC_SDHCI_ROCKCHIP=y
|
||||
+CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
||||
+CONFIG_SPI_FLASH_WINBOND=y
|
||||
+CONFIG_SPI_FLASH_XMC=y
|
||||
+CONFIG_PHY_MOTORCOMM=y
|
||||
+CONFIG_DWC_ETH_QOS=y
|
||||
+CONFIG_DWC_ETH_QOS_ROCKCHIP=y
|
||||
+CONFIG_NVME_PCI=y
|
||||
+CONFIG_PCIE_DW_ROCKCHIP=y
|
||||
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
+CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
|
||||
+CONFIG_SPL_PINCTRL=y
|
||||
+CONFIG_DM_PMIC=y
|
||||
+CONFIG_DM_PMIC_FAN53555=y
|
||||
+CONFIG_PMIC_RK8XX=y
|
||||
+CONFIG_REGULATOR_RK8XX=y
|
||||
+CONFIG_SPL_RAM=y
|
||||
+CONFIG_SCSI=y
|
||||
+CONFIG_BAUDRATE=1500000
|
||||
+CONFIG_DEBUG_UART_SHIFT=2
|
||||
+CONFIG_SYS_NS16550_MEM32=y
|
||||
+CONFIG_ROCKCHIP_SFC=y
|
||||
+CONFIG_SYSRESET=y
|
||||
+CONFIG_USB=y
|
||||
+CONFIG_USB_XHCI_HCD=y
|
||||
+CONFIG_USB_EHCI_HCD=y
|
||||
+CONFIG_USB_EHCI_GENERIC=y
|
||||
+CONFIG_USB_DWC3=y
|
||||
+CONFIG_USB_DWC3_GENERIC=y
|
||||
+CONFIG_ERRNO_STR=y
|
||||
diff '--color=auto' -Naur uboot_btt_pi2_or/dts/upstream/src/arm64/rockchip/rk3566-btt-pi2.dts uboot_btt_pi2/dts/upstream/src/arm64/rockchip/rk3566-btt-pi2.dts
|
||||
--- uboot_btt_pi2_or/dts/upstream/src/arm64/rockchip/rk3566-btt-pi2.dts 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ uboot_btt_pi2/dts/upstream/src/arm64/rockchip/rk3566-btt-pi2.dts 2024-12-25 14:03:08.870311329 +0100
|
||||
@@ -0,0 +1,70 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "rk3566-btt-pi2.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "BigTreeTech Pi2 RK3566";
|
||||
+ compatible = "btt,pi2", "rockchip,rk3566";
|
||||
+
|
||||
+ vccio_phy1: regulator-1v8-vccio-phy {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vccio_phy1";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pmu_io_domains {
|
||||
+ vccio5-supply = <&vccio_phy1>;
|
||||
+};
|
||||
+
|
||||
+&gmac1 {
|
||||
+ phy-handle = <&rgmii_phy1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mdio1 {
|
||||
+ rgmii_phy1: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <1>;
|
||||
+ reset-assert-us = <20000>;
|
||||
+ reset-deassert-us = <50000>;
|
||||
+ reset-gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&sdmmc1 {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ brcmf: wifi@1 {
|
||||
+ compatible = "brcm,bcm43456-fmac", "brcm,bcm4329-fmac";
|
||||
+ reg = <1>;
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <RK_PD6 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupt-names = "host-wake";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&wifi_wake_host_h>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&uart1 {
|
||||
+ bluetooth {
|
||||
+ compatible = "brcm,bcm4345c5";
|
||||
+ clocks = <&rk809 1>;
|
||||
+ clock-names = "lpo";
|
||||
+ interrupt-parent = <&gpio2>;
|
||||
+ interrupts = <RK_PC0 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupt-names = "host-wakeup";
|
||||
+ device-wakeup-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||
+ shutdown-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&bt_reg_on_h &bt_wake_host_h &host_wake_bt_h>;
|
||||
+ vbat-supply = <&vcc_3v3>;
|
||||
+ vddio-supply = <&vcc_1v8>;
|
||||
+ };
|
||||
+};
|
@ -31,7 +31,7 @@ class Board:
|
||||
for dep_name in target.dep_names:
|
||||
dep = self.__find_target(dep_name)
|
||||
if (dep == 0):
|
||||
Logger.error("Unable to find package!")
|
||||
Logger.error(f"Unable to find package '{dep_name}'!")
|
||||
target.depends.append(dep)
|
||||
|
||||
def __find_meta(self, targets_meta, name):
|
||||
|
@ -25,7 +25,7 @@ OS_DIR_DEF="./root/"
|
||||
mount --bind /sys ${DDIR}/sys
|
||||
mount --bind /proc ${DDIR}/proc
|
||||
mount --bind /var/db/repos ${DDIR}/var/db/repos
|
||||
mount --bind /mnt/work/SBC/universal/build/btt_cb1/kernel_btt_cb1 ${DDIR}/usr/src/linux-6.14-rc7
|
||||
mount --bind /mnt/work/SBC/universal/build/common/kernel ${DDIR}/usr/src/linux-6.14-rc7
|
||||
mount -t tmpfs tmpfs ${DDIR}/var/tmp/
|
||||
if [ -z "$2" ]
|
||||
then
|
||||
|
@ -85,12 +85,19 @@ class Sources:
|
||||
self.bare_dir = f"{ROOT_DIR}/bare_git/{name}"
|
||||
self.bare_done_marker = f"{self.bare_dir}/.git_done_marker"
|
||||
|
||||
def init_source_path(self, board_name):
|
||||
self.board_name = board_name
|
||||
self.worktree = f"{self.name}_{board_name}"
|
||||
self.worktree_dir = f"{self.bare_dir}/.git/worktrees/{self.worktree}"
|
||||
self.work_dir = f"{ROOT_DIR}/build/{board_name}/{self.worktree}"
|
||||
self.work_done_marker = f"{self.work_dir}/.git_done_marker"
|
||||
def init_source_path(self, board_name, is_shared):
|
||||
if (is_shared):
|
||||
self.board_name = ""
|
||||
self.worktree = f"{self.name}"
|
||||
self.worktree_dir = f"{self.bare_dir}/.git/worktrees/{self.worktree}"
|
||||
self.work_dir = f"{ROOT_DIR}/build/common/{self.worktree}"
|
||||
self.work_done_marker = f"{self.work_dir}/.git_done_marker"
|
||||
else:
|
||||
self.board_name = board_name
|
||||
self.worktree = f"{self.name}_{board_name}"
|
||||
self.worktree_dir = f"{self.bare_dir}/.git/worktrees/{self.worktree}"
|
||||
self.work_dir = f"{ROOT_DIR}/build/{board_name}/{self.worktree}"
|
||||
self.work_done_marker = f"{self.work_dir}/.git_done_marker"
|
||||
|
||||
def set_git_params(self, version, _type):
|
||||
self.version = version
|
||||
@ -196,23 +203,28 @@ class Sources:
|
||||
|
||||
def do_patch(self, board_name, dir):
|
||||
Logger.build(f"Patch...")
|
||||
dirs = [
|
||||
f"{ROOT_DIR}/patch/{dir}/..",
|
||||
f"{ROOT_DIR}/patch/{dir}",
|
||||
f"{ROOT_DIR}/patch/{dir}/board_{board_name}"
|
||||
]
|
||||
for dir_p in dirs:
|
||||
conf_fn = f"{dir_p}/series.conf"
|
||||
conf_f = Path(conf_fn)
|
||||
if (conf_f.is_file()):
|
||||
with open(conf_fn, 'r') as f:
|
||||
for line in f:
|
||||
if (len(line)>10) and (line[0] != "#") and (line[0] != "-"):
|
||||
file_n = line.strip()
|
||||
self.__patch_apply(f"{dir_p}/{file_n}", self.work_dir)
|
||||
f.close()
|
||||
for patch_file in Path(dir_p).glob('*.patch'):
|
||||
self.__patch_apply(patch_file, self.work_dir)
|
||||
if (hasattr(dir, '__len__') and (not isinstance(dir, str))):
|
||||
dirs_arr = dir
|
||||
else:
|
||||
dirs_arr = [dir]
|
||||
for ddir in dirs_arr:
|
||||
dirs = [
|
||||
f"{ROOT_DIR}/patch/{ddir}/..",
|
||||
f"{ROOT_DIR}/patch/{ddir}",
|
||||
f"{ROOT_DIR}/patch/{ddir}/board_{board_name}"
|
||||
]
|
||||
for dir_p in dirs:
|
||||
conf_fn = f"{dir_p}/series.conf"
|
||||
conf_f = Path(conf_fn)
|
||||
if (conf_f.is_file()):
|
||||
with open(conf_fn, 'r') as f:
|
||||
for line in f:
|
||||
if (len(line)>10) and (line[0] != "#") and (line[0] != "-"):
|
||||
file_n = line.strip()
|
||||
self.__patch_apply(f"{dir_p}/{file_n}", self.work_dir)
|
||||
f.close()
|
||||
for patch_file in sorted(Path(dir_p).glob('*.patch')):
|
||||
self.__patch_apply(patch_file, self.work_dir)
|
||||
|
||||
def configure(self, opts):
|
||||
opts.insert(0, "./configure")
|
||||
|
@ -15,6 +15,7 @@ class Target:
|
||||
self.config_target = meta_js[key]["config_target"]
|
||||
else:
|
||||
self.config_target = ""
|
||||
self.is_shared = meta_js[key]["is_shared"]
|
||||
|
||||
def load_meta(meta_fn):
|
||||
with open(meta_fn) as json_data:
|
||||
@ -28,7 +29,7 @@ class Target:
|
||||
|
||||
def load_detail(self, board_name, detail_js, parse_variables):
|
||||
self.board_name = board_name
|
||||
self.sources.init_source_path(board_name)
|
||||
self.sources.init_source_path(board_name, self.is_shared)
|
||||
self.sources.set_git_params(detail_js["version"], detail_js["version_type"])
|
||||
self.target = detail_js["target"]
|
||||
self.version = detail_js["version"]
|
||||
@ -51,6 +52,10 @@ class Target:
|
||||
self.defconfig = detail_js["config_def"]
|
||||
else:
|
||||
self.defconfig = ""
|
||||
if ("no_build" in detail_js):
|
||||
self.no_build = True
|
||||
else:
|
||||
self.no_build = False
|
||||
_artifacts = detail_js["artifacts"]
|
||||
self.artifacts = []
|
||||
for art in _artifacts:
|
||||
@ -64,16 +69,21 @@ class Target:
|
||||
|
||||
def build(self, sub_target, out_dir):
|
||||
self.source_sync()
|
||||
opts = self.makeopts.split(" ")
|
||||
config = ""
|
||||
if (sub_target == "") or (not self.have_config):
|
||||
opts += self.target
|
||||
else:
|
||||
if (sub_target == "config"):
|
||||
opts.append(self.defconfig)
|
||||
opts.append(self.config_target)
|
||||
if (not self.no_build):
|
||||
opts = self.makeopts.split(" ")
|
||||
config = ""
|
||||
targets = [""]
|
||||
if (sub_target == "") or (not self.have_config):
|
||||
targets = self.target
|
||||
else:
|
||||
Logger.error("Invalid sub-target!")
|
||||
self.sources.compile(opts, self.config_name)
|
||||
if (sub_target == "config"):
|
||||
opts.append(self.defconfig)
|
||||
opts.append(self.config_target)
|
||||
else:
|
||||
Logger.error("Invalid sub-target!")
|
||||
for target in targets:
|
||||
opts_tmp = opts.copy()
|
||||
opts_tmp.append(target)
|
||||
self.sources.compile(opts_tmp, self.config_name)
|
||||
if (sub_target != "config"):
|
||||
self.sources.copy_artifacts(self.artifacts, out_dir)
|
||||
|
Loading…
x
Reference in New Issue
Block a user