From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A398933F367 for ; Sat, 4 Jul 2026 07:19:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783149590; cv=none; b=dYqPvf+I65gFXuOVvIlzUB5NmRm7F+GY9kseNaGx3ONefiVhYK04Zp7YHnxRy93GKwcBoYZckEl8yI3yTrOuo4eZn2yJ1jxOqIzMGwYcJiMidxgkqIn4+uPp06+DKzXJ69etb5i15DSBQtcBCp6uhjgRAe1QEkECFyqYV7CLxsI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783149590; c=relaxed/simple; bh=XOFQ1VSoz8ClvZu74QVU2nepCuDy3Xaw/nKxBxUJkXc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kZfVlk714m4DtrbU9EiNV3VA0L9s47ioftz8G5FhpPpAMQSRfkAgD47h36em2at4HQQ+lm7K+moNjJDa5drXV53enRSdyrmx7oTYSwGauVOEvueZ0T1SUOGSG2ecyKBJFBnx0nfnKtdpwSs99y0856rv/n25PlkDglBS/aUQMR0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GblpFYg7; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GblpFYg7" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-381ed661712so701143a91.2 for ; Sat, 04 Jul 2026 00:19:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783149583; x=1783754383; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=qFAcIP7DOWAyvuQhvWswn0mxvtkPsgySjMfSxKhSxwk=; b=GblpFYg7B7kYjSv353DPAYTWeLpRWxgUNq2x8Xnzxn8JyA27+PnFUJj1+UJ4dUoXDA SPINK3k1FG42fo1hx+a/ZO5mYgPJ+oOfUeGrGZdouHrAgriEZ2zhdVeNJdE0bsf8c6pa xPqj7aWJdADhxNKZJ/33lEAZ6IwVH9Yn2w0H0Q9sr3ibAB8bhzDjPVeLT+UAUS8VP2wp Cyx1Hu8qQnEDaFhZ0vC1yBlcxzuFjhvElJN/a8rntWfy0HivwW5f+m0Vs8jRKjsx2Miq sL6cW+vZ6KSAAv0Mq0Sz4vAwUJZZOsT9cOv7pBGRJ5D+W0yI0Fs6zxaGr1ab97Q22tZ/ zeOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783149583; x=1783754383; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qFAcIP7DOWAyvuQhvWswn0mxvtkPsgySjMfSxKhSxwk=; b=c3wv9s+aHwhFISNzLCRg8MHAMyfqTdQbaNWf3Sp7EFQjphuNkowzicSWt9Q4g7PN6W H6vyxWVXUwiOh5AC9suHApqsxt7lDECxxEE9GXZIapYpMDKbfdGXaQ9JUhzZVNS13AUr HPCyrN3noQQSSR+g4lK3/bUCpF+97UHDj9YmIEFRPHHeOkhGUzHUAhMTjMK8kvja4DaX ChqY0ich+76pxeskboKSiOf8mx+t+8Butn++h7GctIV15rRnY35EClpoixdokPbPP3lO AGF6XZ+fYCDlERI8K3epj6VxaXp1dpA9StRoT2/eus1kHXzZreUYsXkwuIT4aRS8T1J3 XdgQ== X-Forwarded-Encrypted: i=1; AHgh+Ro8jzX1VJUXvwRBGocB4khPKoLvjP/0tKKEcbl8AzD2Dq80NxqqnTApNcYnVplt98Q3zXx3M6wd93f+vUI=@vger.kernel.org X-Gm-Message-State: AOJu0YzFxXpxdmOKEJ/QVhHIeFl5Uinyc35jgPXwdq23Jk1seeIuAheS /DsER8DkrdhdXglE4ogYadOV4UANifjVwAOlM71ZiYK6NdFqHHpvGVNh X-Gm-Gg: AfdE7cnPT000m8XL3vdhTZatwXrS+UO0ZPX8UmX013S/6qVPx3i894e+Kc/+Gtb3HeI NlsKdNLRLV8yJg5tmfQX0v8Y0+9Kvm3wSsNkuf8Qdq2AKH9nyNJvVKfuABnkfvoLmAzHWfM9qR0 u5R8QELxUoMwYaxEY259gDc/GMgpOSByNFu/YKf+bPNvwOqvX0its3Gr09MUyVFtqA8BUzupPtx xbOZ4lv2vNjeWHLsk9l8qFI6wab/ig61tRTulQbkwwGyTMD9z//GQZRzImyTYy+mvYxInEy6Nod HDWpfe5reoGeaqRjjJZpGl0LG5YEUIyijcijlbOA8LYc8cYzm5KJXKSEMXs/wujYpQfiv6j8QkP FGFuHl4Wv0TmUJeupwJvFwzrehjMyy/slhfmq+B8N9VmOAFOD/WKKpX7HPJ5ftp67rrun9bx7QD OScF1Uf5y8wZOGfm/odXk8/eahPnpJ0mZMQEdmBMBq54sW6mfU77fcz5w= X-Received: by 2002:a17:90b:4c4c:b0:37f:9ce1:7366 with SMTP id 98e67ed59e1d1-3829f4f0e14mr2919837a91.28.1783149582517; Sat, 04 Jul 2026 00:19:42 -0700 (PDT) Received: from kernel-dev.multipass ([49.36.101.14]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30f3c8b19c7sm9420435eec.4.2026.07.04.00.19.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 00:19:41 -0700 (PDT) From: adi25charis@gmail.com To: vireshk@kernel.org, johan@kernel.org, elder@kernel.org, gregkh@linuxfoundation.org Cc: greybus-dev@lists.linaro.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Aditya Chari S Subject: [PATCH] staging: greybus: bootrom: power off module on timeout Date: Sat, 4 Jul 2026 12:49:26 +0530 Message-ID: <20260704071926.6606-1-adi25charis@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Aditya Chari S Previously, when a firmware size request, get firmware request, or ready-to-boot request from a module timed out, the driver would log an error and free any firmware buffer, but left the module powered on in a potentially inconsistent state. Fix this by ejecting the module's interface via the SVC when a timeout occurs, forcing it to be power-cycled and re-detected rather than left in limbo. Signed-off-by: Aditya Chari S --- drivers/staging/greybus/bootrom.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/staging/greybus/bootrom.c b/drivers/staging/greybus/bootrom.c index 83921d90c..b564d2255 100644 --- a/drivers/staging/greybus/bootrom.c +++ b/drivers/staging/greybus/bootrom.c @@ -54,8 +54,12 @@ static void gb_bootrom_timedout(struct work_struct *work) struct delayed_work *dwork = to_delayed_work(work); struct gb_bootrom *bootrom = container_of(dwork, struct gb_bootrom, dwork); - struct device *dev = &bootrom->connection->bundle->dev; + struct gb_connection *connection = bootrom->connection; + struct device *dev = &connection->bundle->dev; + struct gb_interface *intf = connection->bundle->intf; + struct gb_svc *svc = connection->hd->svc; const char *reason; + int ret; switch (bootrom->next_request) { case NEXT_REQ_FIRMWARE_SIZE: @@ -82,7 +86,11 @@ static void gb_bootrom_timedout(struct work_struct *work) free_firmware(bootrom); mutex_unlock(&bootrom->mutex); - /* TODO: Power-off Module ? */ + /* Power-off Module */ + ret = gb_svc_intf_eject(svc, intf->interface_id); + if (ret) + dev_err(dev, "failed to eject interface %u (%d)\n", + intf->interface_id, ret); } static void gb_bootrom_set_timeout(struct gb_bootrom *bootrom, -- 2.53.0