From patchwork Sat Mar 27 05:38:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Lipnitskiy X-Patchwork-Id: 12167991 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8CE9EC433C1 for ; Sat, 27 Mar 2021 05:40:49 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1EF3861A05 for ; Sat, 27 Mar 2021 05:40:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1EF3861A05 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=sTVNI9EMJjJan5BcREv+sKrLGb3K7+vwYB8e//adgwo=; b=G60YzqRsge9AZVB0Q0qJAkvyBK mRPDwwM6pX5xSZn+EKiXWA3wuWLQIIcZ2S7Osh7M0ilXPLZurq+sHPVzTYNd66Y8jXOkXMRZxfzPT jsUO9K1dhTNsPJnVuJHm18Yef6zvEwtSGkaCHlEZyqFC2dbRFxwfseY3XwNQGhxlwaQ0QmG1sdpqb yWrS/4mtvA1+7Qah/+SoJxgYuDEz96nzTZr41Y7gSzE+P2xWq3JDe/edaiS4PPSI0fPSpEqYiq1QX hEJQlRxZwoyYIEYHYepLANS2xL2kjfGvP0IBsy4HETv3LsZTG/wX+5mkGQ4eLg1OsbUcoCFza9/sF V7h8M7sw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lQ1ey-004kqf-Cl; Sat, 27 Mar 2021 05:38:56 +0000 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lQ1eu-004kpw-3s; Sat, 27 Mar 2021 05:38:53 +0000 Received: by mail-pg1-x534.google.com with SMTP id 33so110171pgy.4; Fri, 26 Mar 2021 22:38:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=6elHr9wS3U+eOcpmBW2sX0scmKlp2BHQ2gfORMO1D9I=; b=Hx9qKJF2vlXl+JLiMrwH8TEugZ/+bawo8E1VhTfuOIAnl2SgJu9bmDvCTpBpLjjMF3 iK7AVxvwn6djDc9oU9WA2OaxfvIIoiFFhNW07Ayeh7mwvywHkO57XYZebmYoc8rEfNDr nNNjQZiBXxYjEIUfXNpyRHegljFo+WKl1FTk1xYo3yJ2CYCUFvfSwTkaXrYU4P70Inku gX1iqlMficNvLuNr5sQFtXQcUJF9M7XXhkP0UOzNJ4Gy4894imHXMsbxc/YqU7C2pe1I XHJoOPy8wQoeWrvuU/aMaD/O2E838PoCiGYJB1IeO2w2NCj7klZsirsrQYiylAb4dLw0 QCFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=6elHr9wS3U+eOcpmBW2sX0scmKlp2BHQ2gfORMO1D9I=; b=p+vV7JScCkvFVyhVxe2ssHqRMgppuauktnQSpCVradH6aeCL1ce4Sx9jiIFwVcEJei dyCJczx0LP2x+nBrLZRgTybsk7cY6jbfrJqp90Ya8Wm0l2HosVcc60znW/mhmmVw3vF+ 4OGYNkOLduYvB1mZcB2t/T3+R5xQW5ePfEyo/HXGyeKUsHV8PebQqhqTT5TljYoD36rl sVY8e1W5Pky0tkDWDf3WD7dbJbkKlyXQJbcxwIxxOWwv8LPJdevgsHYxyLC6qmDd0M9h F9ZrTgjexKfjxWyHj6rd00s6w6DSEusB0ZJ36DGT4kNA/vIcHObTJn3t1SH5X0RD6DJF qcMw== X-Gm-Message-State: AOAM533oni2+wfdw3dIrmsoR3B5lAXh/01vb7U3l/vAa9wu5MZLA8JQr W9pnYhDkGGfxN9N10vypxpw= X-Google-Smtp-Source: ABdhPJzU5qXpd/hIC+jISW+cbPtDA42XgPMp+ggAA33zGl/07esw8SwP/gORLOkJCLZI8jzpfaYASw== X-Received: by 2002:a63:4c4:: with SMTP id 187mr15291676pge.187.1616823529541; Fri, 26 Mar 2021 22:38:49 -0700 (PDT) Received: from z640-arch.lan ([2602:61:7344:f100::678]) by smtp.gmail.com with ESMTPSA id k128sm10701933pfd.137.2021.03.26.22.38.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Mar 2021 22:38:48 -0700 (PDT) From: Ilya Lipnitskiy To: John Crispin , Thomas Bogendoerfer , Matthias Brugger , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Cc: Ilya Lipnitskiy Subject: [PATCH 1/2] MIPS: ralink: annotate prom_soc_init() with __init Date: Fri, 26 Mar 2021 22:38:39 -0700 Message-Id: <20210327053840.471155-1-ilya.lipnitskiy@gmail.com> X-Mailer: git-send-email 2.31.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210327_053852_266155_B95DCD6C X-CRM114-Status: GOOD ( 10.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org prom_soc_init is only called from prom_init in arch/mips/ralink/prom.c, which is already annotated with __init, so annotate prom_soc_init with __init too. Signed-off-by: Ilya Lipnitskiy --- arch/mips/ralink/common.h | 2 +- arch/mips/ralink/mt7620.c | 2 +- arch/mips/ralink/mt7621.c | 2 +- arch/mips/ralink/rt288x.c | 2 +- arch/mips/ralink/rt305x.c | 2 +- arch/mips/ralink/rt3883.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/mips/ralink/common.h b/arch/mips/ralink/common.h index 4bc65b7a3241..49ae370d023d 100644 --- a/arch/mips/ralink/common.h +++ b/arch/mips/ralink/common.h @@ -27,7 +27,7 @@ extern void ralink_clk_add(const char *dev, unsigned long rate); extern void ralink_rst_init(void); -extern void prom_soc_init(struct ralink_soc_info *soc_info); +extern void __init prom_soc_init(struct ralink_soc_info *soc_info); __iomem void *plat_of_remap_node(const char *node); diff --git a/arch/mips/ralink/mt7620.c b/arch/mips/ralink/mt7620.c index fcf010038054..53a5969e61af 100644 --- a/arch/mips/ralink/mt7620.c +++ b/arch/mips/ralink/mt7620.c @@ -639,7 +639,7 @@ mt7628_dram_init(struct ralink_soc_info *soc_info) } } -void prom_soc_init(struct ralink_soc_info *soc_info) +void __init prom_soc_init(struct ralink_soc_info *soc_info) { void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7620_SYSC_BASE); unsigned char *name = NULL; diff --git a/arch/mips/ralink/mt7621.c b/arch/mips/ralink/mt7621.c index ca0ac607b0f3..ec87ce561049 100644 --- a/arch/mips/ralink/mt7621.c +++ b/arch/mips/ralink/mt7621.c @@ -146,7 +146,7 @@ static void soc_dev_init(struct ralink_soc_info *soc_info, u32 rev) } } -void prom_soc_init(struct ralink_soc_info *soc_info) +void __init prom_soc_init(struct ralink_soc_info *soc_info) { void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7621_SYSC_BASE); unsigned char *name = NULL; diff --git a/arch/mips/ralink/rt288x.c b/arch/mips/ralink/rt288x.c index 3f096897858c..34083c70ec68 100644 --- a/arch/mips/ralink/rt288x.c +++ b/arch/mips/ralink/rt288x.c @@ -77,7 +77,7 @@ void __init ralink_of_remap(void) panic("Failed to remap core resources"); } -void prom_soc_init(struct ralink_soc_info *soc_info) +void __init prom_soc_init(struct ralink_soc_info *soc_info) { void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT2880_SYSC_BASE); const char *name; diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c index 496f966c05f9..c5b63c142705 100644 --- a/arch/mips/ralink/rt305x.c +++ b/arch/mips/ralink/rt305x.c @@ -214,7 +214,7 @@ void __init ralink_of_remap(void) panic("Failed to remap core resources"); } -void prom_soc_init(struct ralink_soc_info *soc_info) +void __init prom_soc_init(struct ralink_soc_info *soc_info) { void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT305X_SYSC_BASE); unsigned char *name; diff --git a/arch/mips/ralink/rt3883.c b/arch/mips/ralink/rt3883.c index 8f3fe3106708..ff91f3531ad0 100644 --- a/arch/mips/ralink/rt3883.c +++ b/arch/mips/ralink/rt3883.c @@ -113,7 +113,7 @@ void __init ralink_of_remap(void) panic("Failed to remap core resources"); } -void prom_soc_init(struct ralink_soc_info *soc_info) +void __init prom_soc_init(struct ralink_soc_info *soc_info) { void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT3883_SYSC_BASE); const char *name; From patchwork Sat Mar 27 05:38:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Lipnitskiy X-Patchwork-Id: 12167989 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B0C1C433C1 for ; Sat, 27 Mar 2021 05:40:44 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 89EDB61984 for ; Sat, 27 Mar 2021 05:40:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 89EDB61984 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=xtN3OAqMXT69dnBvK3+iLHmLG4iaqoV1UTlVS/rIY1A=; b=GJ+RWa5ma5MuN3EvwCD1hVyKr JUtHqlUqZDle0OD9PmXh6Op9ia3Yk7fYXIeybSJz+VHnEcen6fQY49sdPIKflfJVrPEfF0INlberW 0NQrJL7mxmpf/v7dT6RZdJ6Hu68jELvA5Safdoh9h62Ciuqgc5rVYsk/pBFg6StDRZbZmjLlBl2MR Q2Tl9eqSJ6ziV+H5mbUSFzQXSYa3r7EaMYM2HBgO0/KBJAm44bL+X8hPFawO0pHr1J5SYeawG6wkU wIdN1mhuph+I/yK9dnDQB0c0NN1d7GbruOS6qQdob+28ferDHisc/MtLU9q3vuZHlfbX7doKuznlU ce9AwD7Og==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lQ1f6-004kr9-Jt; Sat, 27 Mar 2021 05:39:04 +0000 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lQ1eu-004kpy-Ig; Sat, 27 Mar 2021 05:38:54 +0000 Received: by mail-pg1-x52f.google.com with SMTP id f10so5970134pgl.9; Fri, 26 Mar 2021 22:38:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7eFOafYjPPlgKHm64EqWVR9F6JqxMMQWqfco8Ml51KU=; b=XZsSzFrl+9EzBODupHKVToet7afFuME8+yiHlvROhkK9LE0J9I3RWpj1D02PpTBXmb ywPyDTRt2ExrH0D8MR5CeuBTYDRiWVPstaekmjHEh7TOZKc30rgiMalT/6xkKRZT2dpb Dvy/FKFEbOODNZLoq44Dw+kPkD0DNHaCe1N21h4MPGlfzyQLrA9SmrmADCe1Z84+T0L0 3nykS5hA1P4TcgIbb17fD7fuoFvHMSqIOSq5AulvQsPwFUiGei3e3gw64NsrCtgah6Q0 4/KYx7KTzRP48w+ekwtZMhPHhxT2phh2WA7qX2DZ+OTjV1GOiSg7bg6GiZQta/n4l+7D 3WVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7eFOafYjPPlgKHm64EqWVR9F6JqxMMQWqfco8Ml51KU=; b=YzhZLZPMRPg/O70fKWhcCU3CoLkLdlvbLDcsAIURox/3Y3gWVcekTynfJyl0Hiiu6Q Y4hS880KONXe6ywd3fORh7Qqw8UY26mLgULED/o99N2WMw0KCSEK4xcheomk/oMAHblI UhmtOS4GMUIgIRxoqcqCsxkBfxdnlznFr8HlOoXik1nPF7BBdvu+z0klt4B3clFWrZf9 0e27VJxDkQkb+Gdass+ryOJHbwf8qD7CWiU9oljU3A1xMOsM5z/xzxGBZIloO+1DUWAY MNTvtJn6yGnyH5pTgLqd6bcj1EMI31PCOhmvkkBvRf41IwZ7N8fyAHiP3ADTz/avcLQt Yy9Q== X-Gm-Message-State: AOAM531jKmRejBSNGWkULD7T3GvizZCKFnDeYOGIsF08nq67FeWyG0MP Ql+FUbX6cPaVP3doymG16Ut1qnyhkqCPYGyK X-Google-Smtp-Source: ABdhPJx7BH3r7NpJZLrlLv3I2yX/8zTcwfdqEZUbxkarK1Zw2ziY5Y9tvKmqdYi/BLd9oskQ5XB58w== X-Received: by 2002:a62:1713:0:b029:1f1:56e2:8ec6 with SMTP id 19-20020a6217130000b02901f156e28ec6mr15527140pfx.56.1616823531150; Fri, 26 Mar 2021 22:38:51 -0700 (PDT) Received: from z640-arch.lan ([2602:61:7344:f100::678]) by smtp.gmail.com with ESMTPSA id k128sm10701933pfd.137.2021.03.26.22.38.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Mar 2021 22:38:50 -0700 (PDT) From: Ilya Lipnitskiy To: John Crispin , Thomas Bogendoerfer , Matthias Brugger , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Cc: Chuanhong Guo , Ilya Lipnitskiy Subject: [PATCH 2/2] MIPS: ralink: mt7621: add memory detection support Date: Fri, 26 Mar 2021 22:38:40 -0700 Message-Id: <20210327053840.471155-2-ilya.lipnitskiy@gmail.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210327053840.471155-1-ilya.lipnitskiy@gmail.com> References: <20210327053840.471155-1-ilya.lipnitskiy@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210327_053852_759798_3FDADDF9 X-CRM114-Status: GOOD ( 18.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Chuanhong Guo mt7621 has the following memory map: 0x0-0x1c000000: lower 448m memory 0x1c000000-0x2000000: peripheral registers 0x20000000-0x2400000: higher 64m memory detect_memory_region in arch/mips/kernel/setup.c only adds the first memory region and isn't suitable for 512m memory detection because it may accidentally read the memory area for peripheral registers. This commit adds memory detection capability for mt7621: 1. Add the highmem area when 512m is detected. 2. Guard memcmp from accessing peripheral registers: This only happens when a user decided to change kernel load address to 256m or higher address. Since this is a quite unusual case, we just skip 512m testing and return 256m as memory size. Signed-off-by: Chuanhong Guo [Minor commit message reword, make mt7621_memory_detect static] Signed-off-by: Ilya Lipnitskiy --- arch/mips/include/asm/mach-ralink/mt7621.h | 7 +++--- arch/mips/ralink/common.h | 1 + arch/mips/ralink/mt7621.c | 29 +++++++++++++++++++--- arch/mips/ralink/of.c | 2 ++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/arch/mips/include/asm/mach-ralink/mt7621.h b/arch/mips/include/asm/mach-ralink/mt7621.h index e1af1ba50bd8..6bbf082dd149 100644 --- a/arch/mips/include/asm/mach-ralink/mt7621.h +++ b/arch/mips/include/asm/mach-ralink/mt7621.h @@ -24,9 +24,10 @@ #define CHIP_REV_VER_SHIFT 8 #define CHIP_REV_ECO_MASK 0xf -#define MT7621_DRAM_BASE 0x0 -#define MT7621_DDR2_SIZE_MIN 32 -#define MT7621_DDR2_SIZE_MAX 256 +#define MT7621_LOWMEM_BASE 0x0 +#define MT7621_LOWMEM_MAX_SIZE 0x1C000000 +#define MT7621_HIGHMEM_BASE 0x20000000 +#define MT7621_HIGHMEM_SIZE 0x4000000 #define MT7621_CHIP_NAME0 0x3637544D #define MT7621_CHIP_NAME1 0x20203132 diff --git a/arch/mips/ralink/common.h b/arch/mips/ralink/common.h index 49ae370d023d..87fc16751281 100644 --- a/arch/mips/ralink/common.h +++ b/arch/mips/ralink/common.h @@ -17,6 +17,7 @@ struct ralink_soc_info { unsigned long mem_size; unsigned long mem_size_min; unsigned long mem_size_max; + void (*mem_detect)(void); }; extern struct ralink_soc_info soc_info; diff --git a/arch/mips/ralink/mt7621.c b/arch/mips/ralink/mt7621.c index ec87ce561049..6b3db98894cb 100644 --- a/arch/mips/ralink/mt7621.c +++ b/arch/mips/ralink/mt7621.c @@ -9,7 +9,9 @@ #include #include #include +#include +#include #include #include #include @@ -49,6 +51,8 @@ #define MT7621_GPIO_MODE_SDHCI_SHIFT 18 #define MT7621_GPIO_MODE_SDHCI_GPIO 1 +static void *detect_magic __initdata = detect_memory_region; + static struct rt2880_pmx_func uart1_grp[] = { FUNC("uart1", 0, 1, 2) }; static struct rt2880_pmx_func i2c_grp[] = { FUNC("i2c", 0, 3, 2) }; static struct rt2880_pmx_func uart3_grp[] = { @@ -110,6 +114,26 @@ phys_addr_t mips_cpc_default_phys_base(void) panic("Cannot detect cpc address"); } +static void __init mt7621_memory_detect(void) +{ + void *dm = &detect_magic; + phys_addr_t size; + + for (size = 32 * SZ_1M; size < 256 * SZ_1M; size <<= 1) { + if (!__builtin_memcmp(dm, dm + size, sizeof(detect_magic))) + break; + } + + if ((size == 256 * SZ_1M) && + (CPHYSADDR(dm + size) < MT7621_LOWMEM_MAX_SIZE) && + __builtin_memcmp(dm, dm + size, sizeof(detect_magic))) { + memblock_add(MT7621_LOWMEM_BASE, MT7621_LOWMEM_MAX_SIZE); + memblock_add(MT7621_HIGHMEM_BASE, MT7621_HIGHMEM_SIZE); + } else { + memblock_add(MT7621_LOWMEM_BASE, size); + } +} + void __init ralink_of_remap(void) { rt_sysc_membase = plat_of_remap_node("mtk,mt7621-sysc"); @@ -194,10 +218,7 @@ void __init prom_soc_init(struct ralink_soc_info *soc_info) (rev >> CHIP_REV_VER_SHIFT) & CHIP_REV_VER_MASK, (rev & CHIP_REV_ECO_MASK)); - soc_info->mem_size_min = MT7621_DDR2_SIZE_MIN; - soc_info->mem_size_max = MT7621_DDR2_SIZE_MAX; - soc_info->mem_base = MT7621_DRAM_BASE; - + soc_info->mem_detect = mt7621_memory_detect; rt2880_pinmux_data = mt7621_pinmux_data; soc_dev_init(soc_info, rev); diff --git a/arch/mips/ralink/of.c b/arch/mips/ralink/of.c index 8286c3521476..0c5de07da097 100644 --- a/arch/mips/ralink/of.c +++ b/arch/mips/ralink/of.c @@ -78,6 +78,8 @@ void __init plat_mem_setup(void) of_scan_flat_dt(early_init_dt_find_memory, NULL); if (memory_dtb) of_scan_flat_dt(early_init_dt_scan_memory, NULL); + else if (soc_info.mem_detect) + soc_info.mem_detect(); else if (soc_info.mem_size) memblock_add(soc_info.mem_base, soc_info.mem_size * SZ_1M); else