From patchwork Tue Oct 11 10:03:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= X-Patchwork-Id: 614167 Delivered-To: patch@linaro.org Received: by 2002:a17:522:c983:b0:460:3032:e3c4 with SMTP id kr3csp2517963pvb; Tue, 11 Oct 2022 03:04:36 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4bOM8oaivaRzL3HITaokqX/l8K1WOYwq097cxXj4SZ0hqrIQZW8zqreu/Gcq2DBPMZga4A X-Received: by 2002:a05:6870:430d:b0:136:7f6a:9429 with SMTP id w13-20020a056870430d00b001367f6a9429mr6222299oah.271.1665482676740; Tue, 11 Oct 2022 03:04:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665482676; cv=none; d=google.com; s=arc-20160816; b=WFMK2PI74C5UAgFhRmncUPckBHn/Sd/cVZzGHkb12apeiYRzVgp3rvNXQzT8d0GeN3 Nac/v+RiMOtUHa0rMAER8+JRx2KUjwSxNzl7KMG6eCGkTZUmOJDAkWTYdCX50h5qXGee n+EHRgmiBaf4O7QkPvufjGniHc6cjAa9SXDFdrpRTwUciuL3QKywp2G02lkg2bDQ5ox/ M3M3xIyzvpG4xFzydu0YgRi0rqrU8tp2/76qT1DpZ45hjFRJBL0yWAsu3U5YmSSJSLoM b1vWxpFd3OIfmIN2spVsExFQT0i6ZjJv2e36uyK55NRu2czimwbFJmaFWD0KO1ee+qF1 wapg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:sender:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mime-version:message-id:date:subject:cc:to:from:dkim-signature :dkim-signature; bh=+pmw9Z5mcSk3FTExD2JR2WtSUsls1SbCV+EVeSn7AbE=; b=Rnr3/z25Cn0wxWHyNGPag9w3G/0GkCi+YRaJ8VCWnYE94XvHMJvlKolwxglduf9j3e hl+czUQpi6VL6chGRUjVK1cgpLpt0X2lkChYJH/0P+yiqb71yn/xeD+5SKd0K4j7YebQ evag2nmTLEO7nSDrKRIt+sWjRIJQ4z5i5yrIWahxSv+tBE2fjvX+7ZBINxHU6SKxyjou 7bXxkXHNVhv6LMxsrXW5yJVZn4rGL4/KgB0CWCxCEHEK5GL2ndIhHkrurvGGnd0I8RuI uQHeoJLHKr1QFxugYieHIJa7LgfrpxGbj2Iqb/ttjaZ9JHvKnHBXAIQYWLTsl/nRZer4 z/GA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20210309 header.b=NlQWkT42; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=aO0GB03L; spf=pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 2607:7c80:54:3::133 as permitted sender) smtp.mailfrom="linux-mtd-bounces+patch=linaro.org@lists.infradead.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2607:7c80:54:3::133]) by mx.google.com with ESMTPS id r11-20020a056871088b00b00132480d3b9asi13234812oaq.291.2022.10.11.03.04.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Oct 2022 03:04:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 2607:7c80:54:3::133 as permitted sender) client-ip=2607:7c80:54:3::133; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20210309 header.b=NlQWkT42; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=aO0GB03L; spf=pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 2607:7c80:54:3::133 as permitted sender) smtp.mailfrom="linux-mtd-bounces+patch=linaro.org@lists.infradead.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=+pmw9Z5mcSk3FTExD2JR2WtSUsls1SbCV+EVeSn7AbE=; b=NlQWkT42Ye/+uk f/TjwgMqJP0MlUCg1A9Aztl8rJFxBiNJ7ZzFC8mUKh2Og9jCiPI8pkFTmHxmvr856w/TVXEwQQfzi 5+xPX1S7YRqw4J8CAW/iPd24gOrM7jfHrmx5yUNle6LeUTk5AyzDkx22eBmP1TqDtp39HergV2Mi0 v6M5paEfl49V4LqRIvtWY6gGsXaUPp4E5hJhRpVMoIWQ6brrSugAiY/lSPPVFmmWF/dy+MBYMvGBF ok51rxorhjKTTjmpKpzmzubOq7ZCgQrB8g+bowTzalY3Uje2Ral/++GI1FgluCXznlGsPJTdBi+f+ CvHbbLsKu2sPUvA+RNQQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oiC79-003wAa-AM; Tue, 11 Oct 2022 10:03:55 +0000 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oiC74-003w93-Bw; Tue, 11 Oct 2022 10:03:52 +0000 Received: by mail-ed1-x535.google.com with SMTP id v12so1086924edc.6; Tue, 11 Oct 2022 03:03:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=lBTq8juooIuTyFEgcmEOyFqiiRaMLuXlIjzIJ8KmLsg=; b=aO0GB03LHXSuLYJGS55fnpkD2vkTt9JCLtPGOIoCVfhsLwESgpJ8TF392ivbhl1UN+ ThHtE59bPTEM1CF8WTIjdMG/59+hWeoFpJlftp40fpQhKZc84ix5kiWAWLNY3UyXOKsW CHwh2C6PlDWk3xTLRQd+A0WIUwxiiVMoh4Ojg9qNMkxfYbBxdvWyFNNKYE6JtB+SGQKf 35091AOyYmVzYX2i3F/OIlYt30uLedwCbEKgZSHHVefZC7GF0WQ8omDb1YnqfUICED4y IHXfqnjhf+Dnbikgl2la4mqKdpiV/1yCpz5RVqiw707zZIIbk3swbMJEbSo9sVGHI+Vv pTng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=lBTq8juooIuTyFEgcmEOyFqiiRaMLuXlIjzIJ8KmLsg=; b=nhvRB+grCkTxBKzrDyOlwHBm/Hu4dZGLKXS2uDQ+FCZS1wVx0kIevmAoPR/5XypQtI 339ITVD2jE17aRsDrO1tKaMnBnUOEwzL+vfMXNzgEZ+oO8Z9hbZsy3ZZdGRxxI5IBw1U 4Nf+GA6tOO+O2/MSA4BgHVpaJ5wUl5FnGK3Y/mbi4zrG6iMiZYxMIud2fNfi1Y2NQuln MiXat9eR+1tMgQZhrz3f3SQW0zn3XK7NScBhCfEqbltjmcULB7QSmHznoHj7xnbRsBkW qql4Xlj3vHz06py61RvQgB+tHJuEQhlE9enXFUrke9g99CL/j2pk0j7mfH9a+L4v/7rF mbBQ== X-Gm-Message-State: ACrzQf1GDsBpJWceQiSXXOVoYvI0RSSfWsi7TQSbbPUGZ0NI5qoAipd4 rnHna0pQfb5ogUmSTcnCrPY= X-Received: by 2002:a05:6402:2146:b0:458:15d7:b99a with SMTP id bq6-20020a056402214600b0045815d7b99amr22290831edb.24.1665482626964; Tue, 11 Oct 2022 03:03:46 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id o8-20020a170906768800b00780ab5a9116sm4597749ejm.211.2022.10.11.03.03.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Oct 2022 03:03:46 -0700 (PDT) From: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski Cc: linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, Florian Fainelli , Hauke Mehrtens , bcm-kernel-feedback-list@broadcom.com, John Crispin , =?utf-8?b?QXLEsW7DpyDDnE5BTA==?= , Sergio Paracuellos , linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= Subject: [PATCH 1/2] dt-bindings: mtd: partitions: add TP-Link SafeLoader layout Date: Tue, 11 Oct 2022 12:03:32 +0200 Message-Id: <20221011100333.32536-1-zajec5@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221011_030350_433179_922A6CF3 X-CRM114-Status: GOOD ( 14.46 ) X-Spam-Score: 0.1 (/) X-Spam-Report: =?utf-8?q?Spam_detection_software=2C_running_on_the_system_?= =?utf-8?q?=22bombadil=2Einfradead=2Eorg=22=2C?= =?utf-8?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_original?= =?utf-8?q?_message_has_been_attached_to_this_so_you_can_view_it_or_label?= =?utf-8?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?utf-8?q?_the_administrator_of_that_system_for_details=2E?= =?utf-8?q?_?= =?utf-8?q?_Content_preview=3A__From=3A_Rafa=C3=85=C2=82_Mi=C3=85=C2=82ecki_M?= =?utf-8?q?ost_TP-Link_home_routers_use_the_same?= =?utf-8?q?_partitioning_system_based_on_a_custom_ASCII_table=2E_It_doesn=27t?= =?utf-8?q?_seem_to_have?= =?utf-8?q?_any_official_name=2E_GPL_sources_contain_tool_named_simply_=22mak?= =?utf-8?q?e=5Fflash=22_and?= =?utf-8?q?_Makefile_target_=22FlashMaker=22=2E_?= =?utf-8?q?_?= =?utf-8?q?_Content_analysis_details=3A___=280=2E1_points=2C_5=2E0_required?= =?utf-8?q?=29?= =?utf-8?q?_?= =?utf-8?q?_pts_rule_name______________description?= =?utf-8?q?_----_----------------------_-------------------------------------?= =?utf-8?q?-------------?= =?utf-8?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_at_https?= =?utf-8?q?=3A//www=2Ednswl=2Eorg/=2C?= =?utf-8?q?_no_trust?= =?utf-8?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDo1MzUgbGlzdGVkIGluXQ==?= =?utf-8?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?utf-8?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_record?= =?utf-8?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publish_an_?= =?utf-8?q?SPF_Record?= =?utf-8?q?_0=2E0_FREEMAIL=5FFROM__________Sender_email_is_commonly_abused_en?= =?utf-8?q?duser_mail?= =?utf-8?q?_provider?= =?utf-8?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?utf-8?q?_0=2E2_FREEMAIL=5FENVFROM=5FEND=5FDIGIT_Envelope-from_freemail_use?= =?utf-8?q?rname_ends?= =?utf-8?q?_in_digit?= =?utf-8?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?utf-8?q?_-0=2E1_DKIM=5FVALID=5FAU__________Message_has_a_valid_DKIM_or_DK_?= =?utf-8?q?signature_from?= =?utf-8?q?_author=27s_domain?= =?utf-8?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_valid_DK?= =?utf-8?q?IM_or_DK_signature?= =?utf-8?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_signature?= =?utf-8?q?=2C_not_necessarily?= =?utf-8?q?_valid?= =?utf-8?q?_-0=2E1_DKIM=5FVALID=5FEF__________Message_has_a_valid_DKIM_or_DK_?= =?utf-8?q?signature_from?= =?utf-8?q?_envelope-from_domain?= X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+patch=linaro.org@lists.infradead.org From: Rafał Miłecki Most TP-Link home routers use the same partitioning system based on a custom ASCII table. It doesn't seem to have any official name. GPL sources contain tool named simply "make_flash" and Makefile target "FlashMaker". This partitions table format was first found in devices with a custom SafeLoader bootloader so it was called SafeLoader by a community. Later it was ported to other bootloaders but it seems the same sticked. Add binding for describing flashes with SafeLoader partitions table. It allows operating systems to parse it properly and register proper flash layout. Signed-off-by: Rafał Miłecki --- .../tplink,safeloader-partitions.yaml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Documentation/devicetree/bindings/mtd/partitions/tplink,safeloader-partitions.yaml diff --git a/Documentation/devicetree/bindings/mtd/partitions/tplink,safeloader-partitions.yaml b/Documentation/devicetree/bindings/mtd/partitions/tplink,safeloader-partitions.yaml new file mode 100644 index 000000000000..e38aaea5aa11 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/partitions/tplink,safeloader-partitions.yaml @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mtd/partitions/tplink,safeloader-partitions.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TP-Link SafeLoader partitions + +description: | + TP-Link home routers store various data on flash (e.g. bootloader, + flash layout, firmware, product info, configuration, calibration + data). That requires flash partitioning. + + Flash space layout of TP-Link devices is stored on flash itself using + a custom ASCII-based format. That format was first found in TP-Link + devices with a custom SafeLoader bootloader. Later it was adapted to + CFE and U-Boot bootloaders. + + This binding describes partitioning method and defines offset of ASCII + based partitions table. That offset is picked at manufacturing process + and doesn't change. + +maintainers: + - Rafał Miłecki + +properties: + compatible: + const: tplink,safeloader-partitions + + partitions-table-offset: + description: Flash offset of partitions table + $ref: "/schemas/types.yaml#/definitions/uint32" + +required: + - partitions-table-offset + +additionalProperties: false + +examples: + - | + partitions { + compatible = "tplink,safeloader-partitions"; + partitions-table-offset = <0x100000>; + }; From patchwork Tue Oct 11 10:03:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= X-Patchwork-Id: 614168 Delivered-To: patch@linaro.org Received: by 2002:a17:522:c983:b0:460:3032:e3c4 with SMTP id kr3csp2518155pvb; Tue, 11 Oct 2022 03:04:52 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5y6J2RYMKtRIfhX9V8HoEp0vE3O1uUYBbN75JjRwiK4lFf3JQRTbgMSq57Stu2z/BtKf/C X-Received: by 2002:a05:6e02:190a:b0:2fc:5333:c879 with SMTP id w10-20020a056e02190a00b002fc5333c879mr3775607ilu.183.1665482692353; Tue, 11 Oct 2022 03:04:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665482692; cv=none; d=google.com; s=arc-20160816; b=KNFKBUVUI1qHiNU0g00rmuWWPso5JS6djWkD8/q6+tybtwuXmxxXP8pQp9BCyAYIgh EZx1jIQO0qlSyKZsR0zl78WAdwUXNjm6GQy+9sGqD2kQPkWGaEtornE7PEgkkFCAsBqp Gv0FldY4jDegXhiL5VHPCaxa89dX8fcvuWDRRVg6lIa/GFChW2I+9dy69p1XialLijg4 ogtDvMXC1ysfLEdUmW8pY3Scf48poaE/euyJhPVlzvQiZAqzKu+5PwtWVeSKq92dSdgO +PKy3rqf4FbS+d6IKYX/ZvqZAz9Ij+5ycsksigth7+6WQYg90MVaXOPcyqCJnl8B6c6b 8TAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:sender:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:dkim-signature; bh=IezlZkEHDOwk6v47UkJGgqlvRSF8RZXIFH89O61YvDc=; b=k6gf7Uvbg/7ioF3i7X4wqM1gnzDvaXBa/qMNxxDW1LxMfHkfbFondWa099I/va7zT7 NwxCntmK79dZvBmwCUFwO8mOuiqHzY6w8j8xUdqc3+dQ1lfjTffnWyXhS2g9qXiZuenI SF7oZ8nCw4WLBPS0H29gG6b97CYypVMMDH/NyhofNuLes3ZXUy/WIi+k+dVy4Homg1G4 Jmx015xb5gLCFdUm+tEoguqECV2+kumC7mZ9wjwRJONm2TXqQsFQ0FqlNL3KroJHI8lp iYFQQmpVg66Uw/tmK8Tzprdjb2dlqX2kMYcdCeSFg81hucxRMi9TEnbdDr+2ZHa6raqc 5JhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20210309 header.b=42qMN+PN; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=dit3LHF+; spf=pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 2607:7c80:54:3::133 as permitted sender) smtp.mailfrom="linux-mtd-bounces+patch=linaro.org@lists.infradead.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2607:7c80:54:3::133]) by mx.google.com with ESMTPS id j5-20020a0566022cc500b006a21e80cdb0si16018098iow.95.2022.10.11.03.04.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Oct 2022 03:04:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 2607:7c80:54:3::133 as permitted sender) client-ip=2607:7c80:54:3::133; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20210309 header.b=42qMN+PN; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=dit3LHF+; spf=pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 2607:7c80:54:3::133 as permitted sender) smtp.mailfrom="linux-mtd-bounces+patch=linaro.org@lists.infradead.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IezlZkEHDOwk6v47UkJGgqlvRSF8RZXIFH89O61YvDc=; b=42qMN+PN6gNM8U nftX/N2zDAHL+NWpcd69DSGg4StvzPFbBcrpTJud8zy31xfT5k3CkjtjGMm2163BlQ3XQmtZnmjGX jjyrHCx7D4NWhKUuTkODAKK1hHfcFM2Qqgw+AqLgN5ClS2r/ukNxPMiL6V6kBcEaeJuTeavOlIWSj Vv6peJuTIj5cxQtF+X06rLzoISAiOSGaIgM1+5vkjGBYt4uE1m+vWF3oyrrcOCnTPELbGgxqeRgo5 Uv5eBp6Ey+6Y1NJk+PwCI9QjO7D7X5M1DZynvfaff98C7x+AyRdvPcSrlDA4kfnAV7QRRAQlrKLj6 XQDquTDnuW2dKXFNXfEA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oiC7K-003wDl-0R; Tue, 11 Oct 2022 10:04:06 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oiC76-003w9R-ES; Tue, 11 Oct 2022 10:03:54 +0000 Received: by mail-ej1-x62d.google.com with SMTP id d26so23137615eje.10; Tue, 11 Oct 2022 03:03:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6r9TR6k7ZFnpYRrQ79w4enoBrUyIdRGewHutjKTPK0c=; b=dit3LHF+DkfIOR2jPB98pCnX5hBg2tdQYKlOSSnzZwUddl2fl8cHYDeZJpUO9A4Aw/ Af1C5cwxE5Q7nDLsh8IxLaXYaKJsMiSJGko8AJIB7p2FCiz6Y5Ye/uuADYF+EAGaljkZ 4sHPGDDV6V9B5carYU3TAuQTxOgUDlgYqmscEIax3d7+v0Fr9gFsdTdmCPtX0l0nrNR3 zamYQt+nYWT1XzLaSHw5OFuD/LqFwbunGbhVl+vUC5/UJrqSdNtXlTR6Qng6cHsnEF5Y JKEM2E36Tl2Rf+I0Ev7tvP53V3Dkbm4npeiVyV5qj9gTVNmmT2X4lAosMLgoyHSzWkKN gMtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6r9TR6k7ZFnpYRrQ79w4enoBrUyIdRGewHutjKTPK0c=; b=k8B1q4BaWQ5smL0zVLdKubpp0RxlUrswintGVX3h6BWCIAZanOPRuLmBay1j9rrU3S FhgeRGMWmy2urqgk4KjOqbOrxUszLHpwmQ0g+BHITJGdD4YLdMEr17QYCZIUPcsLqBZc 8sa7Nw8UElrdRYQ2lPn0Dc421xQ+73yCgSzsmvXVBwMdi0lkogr0xMh9LV4Unzap3Oz+ cxygQpjJbt49w8aPCCgkypes7UwVtXuUTqoJNQF3g+Tx+2kED4vpWUrSDFNGa097+zH0 UxcQZhDhTD2jkrJvG5w8az7BG+f7B8VcY+Gnhyb77hiBo21/CZxX4g95WGu8A9j8wY5E B7fg== X-Gm-Message-State: ACrzQf23Pm2bwmLytu+3RjtJSpF1K6ZsXhxGlz+AL3xeseB7vb+H2IdM 9e0QtQNHT9yH3MoaOhdWxuI= X-Received: by 2002:a17:907:1c1a:b0:78d:426c:2828 with SMTP id nc26-20020a1709071c1a00b0078d426c2828mr18691133ejc.331.1665482629474; Tue, 11 Oct 2022 03:03:49 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id o8-20020a170906768800b00780ab5a9116sm4597749ejm.211.2022.10.11.03.03.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Oct 2022 03:03:49 -0700 (PDT) From: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski Cc: linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, Florian Fainelli , Hauke Mehrtens , bcm-kernel-feedback-list@broadcom.com, John Crispin , =?utf-8?b?QXLEsW7DpyDDnE5BTA==?= , Sergio Paracuellos , linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= Subject: [PATCH 2/2] mtd: parsers: add TP-Link SafeLoader partitions table parser Date: Tue, 11 Oct 2022 12:03:33 +0200 Message-Id: <20221011100333.32536-2-zajec5@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221011100333.32536-1-zajec5@gmail.com> References: <20221011100333.32536-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221011_030352_516427_FDC3EA01 X-CRM114-Status: GOOD ( 22.40 ) X-Spam-Score: 0.1 (/) X-Spam-Report: =?utf-8?q?Spam_detection_software=2C_running_on_the_system_?= =?utf-8?q?=22bombadil=2Einfradead=2Eorg=22=2C?= =?utf-8?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_original?= =?utf-8?q?_message_has_been_attached_to_this_so_you_can_view_it_or_label?= =?utf-8?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?utf-8?q?_the_administrator_of_that_system_for_details=2E?= =?utf-8?q?_?= =?utf-8?q?_Content_preview=3A__From=3A_Rafa=C3=85=C2=82_Mi=C3=85=C2=82ecki_T?= =?utf-8?q?his_parser_deals_with_most_TP-Link?= =?utf-8?q?_home_routers=2E_It_reads_info_about_partitions_and_registers_them?= =?utf-8?q?_in_the_MTD?= =?utf-8?q?_subsystem=2E_Signed-off-by=3A_Rafa=C3=85=C2=82_Mi=C3=85=C2=82ecki?= =?utf-8?q?_---_drivers/mtd/parsers/Kconfig?= =?utf-8?q?_=7C_15_+++_drivers/mtd/parsers/Makefile_=7C_1_+_drivers/mtd/parse?= =?utf-8?q?rs/tplink=5Fsafeloader=2Ec?= =?utf-8?q?_=7C_150_++++++++++++++++++++++++_3_files_changed=2C_166_=5B=2E=2E?= =?utf-8?q?=2E=5D_?= =?utf-8?q?_?= =?utf-8?q?_Content_analysis_details=3A___=280=2E1_points=2C_5=2E0_required?= =?utf-8?q?=29?= =?utf-8?q?_?= =?utf-8?q?_pts_rule_name______________description?= =?utf-8?q?_----_----------------------_-------------------------------------?= =?utf-8?q?-------------?= =?utf-8?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_at_https?= =?utf-8?q?=3A//www=2Ednswl=2Eorg/=2C?= =?utf-8?q?_no_trust?= =?utf-8?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDo2MmQgbGlzdGVkIGluXQ==?= =?utf-8?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?utf-8?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_record?= =?utf-8?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publish_an_?= =?utf-8?q?SPF_Record?= =?utf-8?q?_0=2E0_FREEMAIL=5FFROM__________Sender_email_is_commonly_abused_en?= =?utf-8?q?duser_mail?= =?utf-8?q?_provider?= =?utf-8?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?utf-8?q?_0=2E2_FREEMAIL=5FENVFROM=5FEND=5FDIGIT_Envelope-from_freemail_use?= =?utf-8?q?rname_ends?= =?utf-8?q?_in_digit?= =?utf-8?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?utf-8?q?_-0=2E1_DKIM=5FVALID=5FAU__________Message_has_a_valid_DKIM_or_DK_?= =?utf-8?q?signature_from?= =?utf-8?q?_author=27s_domain?= =?utf-8?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_valid_DK?= =?utf-8?q?IM_or_DK_signature?= =?utf-8?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_signature?= =?utf-8?q?=2C_not_necessarily?= =?utf-8?q?_valid?= =?utf-8?q?_-0=2E1_DKIM=5FVALID=5FEF__________Message_has_a_valid_DKIM_or_DK_?= =?utf-8?q?signature_from?= =?utf-8?q?_envelope-from_domain?= X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+patch=linaro.org@lists.infradead.org From: Rafał Miłecki This parser deals with most TP-Link home routers. It reads info about partitions and registers them in the MTD subsystem. Signed-off-by: Rafał Miłecki --- drivers/mtd/parsers/Kconfig | 15 +++ drivers/mtd/parsers/Makefile | 1 + drivers/mtd/parsers/tplink_safeloader.c | 150 ++++++++++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 drivers/mtd/parsers/tplink_safeloader.c diff --git a/drivers/mtd/parsers/Kconfig b/drivers/mtd/parsers/Kconfig index aaa06050c9bc..c258ba2a3a6f 100644 --- a/drivers/mtd/parsers/Kconfig +++ b/drivers/mtd/parsers/Kconfig @@ -123,6 +123,21 @@ config MTD_AFS_PARTS for your particular device. It won't happen automatically. The 'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example. +config MTD_PARSER_TPLINK_SAFELOADER + tristate "TP-Link Safeloader partitions parser" + depends on MTD && (ARCH_BCM_5301X || ATH79 || SOC_MT7620 || SOC_MT7621 || COMPILE_TEST) + help + TP-Link home routers use flash partitions to store various data. Info + about flash space layout is stored in a partitions table using a + custom ASCII-based format. + + That format was first found in devices with SafeLoader bootloader and + was named after it. Later it was adapted to CFE and U-Boot + bootloaders. + + This driver reads partitions table, parses it and creates MTD + partitions. + config MTD_PARSER_TRX tristate "Parser for TRX format partitions" depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || RALINK || COMPILE_TEST) diff --git a/drivers/mtd/parsers/Makefile b/drivers/mtd/parsers/Makefile index 23fa4de4016f..0e70b621a1d8 100644 --- a/drivers/mtd/parsers/Makefile +++ b/drivers/mtd/parsers/Makefile @@ -10,6 +10,7 @@ ofpart-$(CONFIG_MTD_OF_PARTS_BCM4908) += ofpart_bcm4908.o ofpart-$(CONFIG_MTD_OF_PARTS_LINKSYS_NS)+= ofpart_linksys_ns.o obj-$(CONFIG_MTD_PARSER_IMAGETAG) += parser_imagetag.o obj-$(CONFIG_MTD_AFS_PARTS) += afs.o +obj-$(CONFIG_MTD_PARSER_TPLINK_SAFELOADER) += tplink_safeloader.o obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o obj-$(CONFIG_MTD_SERCOMM_PARTS) += scpart.o obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o diff --git a/drivers/mtd/parsers/tplink_safeloader.c b/drivers/mtd/parsers/tplink_safeloader.c new file mode 100644 index 000000000000..7317d1faabbb --- /dev/null +++ b/drivers/mtd/parsers/tplink_safeloader.c @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright © 2022 Rafał Miłecki + */ + +#include +#include +#include +#include +#include +#include + +#define TPLINK_SAFELOADER_DATA_OFFSET 4 +#define TPLINK_SAFELOADER_MAX_PARTS 32 + +struct safeloader_cmn_header { + __be32 size; + uint32_t unused; +} __packed; + +static void *mtd_parser_tplink_safeloader_read_table(struct mtd_info *mtd) +{ + struct safeloader_cmn_header hdr; + struct device_node *np; + size_t bytes_read; + size_t offset; + size_t size; + char *buf; + int err; + + np = mtd_get_of_node(mtd); + if (mtd_is_partition(mtd)) + of_node_get(np); + else + np = of_get_child_by_name(np, "partitions"); + + if (of_property_read_u32(np, "partitions-table-offset", &offset)) { + pr_err("Failed to get partitions table offset\n"); + goto err_put; + } + + err = mtd_read(mtd, offset, sizeof(hdr), &bytes_read, (uint8_t *)&hdr); + if (err && !mtd_is_bitflip(err)) { + pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset); + goto err_put; + } + + size = be32_to_cpu(hdr.size); + + buf = kmalloc(size + 1, GFP_KERNEL); + if (!buf) + goto err_put; + + err = mtd_read(mtd, offset + sizeof(hdr), size, &bytes_read, buf); + if (err && !mtd_is_bitflip(err)) { + pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset + sizeof(hdr)); + goto err_kfree; + } + + buf[size - 1] = '\0'; + + of_node_put(np); + + return buf; + +err_kfree: + kfree(buf); +err_put: + of_node_put(np); + return NULL; +} + +static int mtd_parser_tplink_safeloader_parse(struct mtd_info *mtd, + const struct mtd_partition **pparts, + struct mtd_part_parser_data *data) +{ + struct mtd_partition *parts; + char name[65]; + size_t offset; + size_t bytes; + char *buf; + int idx; + int err; + + parts = kcalloc(TPLINK_SAFELOADER_MAX_PARTS, sizeof(*parts), GFP_KERNEL); + if (!parts) { + err = -ENOMEM; + goto err_out; + } + + buf = mtd_parser_tplink_safeloader_read_table(mtd); + if (!buf) { + err = -ENOENT; + goto err_out; + } + + for (idx = 0, offset = TPLINK_SAFELOADER_DATA_OFFSET; + idx < TPLINK_SAFELOADER_MAX_PARTS && + sscanf(buf + offset, "partition %64s base 0x%llx size 0x%llx%n\n", + name, &parts[idx].offset, &parts[idx].size, &bytes) == 3; + idx++, offset += bytes + 1) { + parts[idx].name = kstrdup(name, GFP_KERNEL); + if (!parts[idx].name) { + err = -ENOMEM; + goto err_free; + } + } + + if (idx == TPLINK_SAFELOADER_MAX_PARTS) + pr_warn("Reached maximum number of partitions!\n"); + + kfree(buf); + + *pparts = parts; + + return idx; + +err_free: + for (idx -= 1; idx >= 0; idx--) + kfree(parts[idx].name); +err_out: + return err; +}; + +static void mtd_parser_tplink_safeloader_cleanup(const struct mtd_partition *pparts, + int nr_parts) +{ + int i; + + for (i = 0; i < nr_parts; i++) + kfree(pparts[i].name); + + kfree(pparts); +} + +static const struct of_device_id mtd_parser_tplink_safeloader_of_match_table[] = { + { .compatible = "tplink,safeloader-partitions" }, + {}, +}; +MODULE_DEVICE_TABLE(of, mtd_parser_tplink_safeloader_of_match_table); + +static struct mtd_part_parser mtd_parser_tplink_safeloader = { + .parse_fn = mtd_parser_tplink_safeloader_parse, + .cleanup = mtd_parser_tplink_safeloader_cleanup, + .name = "tplink-safeloader", + .of_match_table = mtd_parser_tplink_safeloader_of_match_table, +}; +module_mtd_part_parser(mtd_parser_tplink_safeloader); + +MODULE_LICENSE("GPL");