From patchwork Wed Jun 13 06:56:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 928700 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="rLFgKVlJ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 415Hbw5dSDz9s19 for ; Wed, 13 Jun 2018 16:56:43 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 0F188C21DFD; Wed, 13 Jun 2018 06:56:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id AF3F5C21CB1; Wed, 13 Jun 2018 06:56:35 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C0324C21CB1; Wed, 13 Jun 2018 06:56:33 +0000 (UTC) Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by lists.denx.de (Postfix) with ESMTPS id 6ABC5C21C6A for ; Wed, 13 Jun 2018 06:56:33 +0000 (UTC) Received: by mail-wm0-f68.google.com with SMTP id r125-v6so3120156wmg.2 for ; Tue, 12 Jun 2018 23:56:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=ZweXM4sCaHuvyauCOohUdTCSRQ5pTcl+mqIUq/qHCgw=; b=rLFgKVlJ/qVIzrVo0cC6+v1w057EjTSzQTTSj0NWAj5bMBB2/oRIm2daohetcuK2G8 bmGUMQldWvI1rxGqoNmC33Y9I/CkCh6zqjzTZNh2jN7Ds7+okKmIVJWgY4tUePc0F3W7 MY3AWINKKS74g4W2afc1oCyV3I4eDGyafRWvKorst+UNpXZ0yepzMDma6GG6faw+BSQu scrdc8IuJ072I/k0E9BbY3jwH8uRC75tUKu8krs9AqvkBX7fYBUVk28sozJeUdHCYL5Q PB80ObMQlEv+BaOj0L/lEDT0/M9igH8pEj/JX8IBHI0CCudG/6H18n0IXyUla4mh4Mjc YHmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=ZweXM4sCaHuvyauCOohUdTCSRQ5pTcl+mqIUq/qHCgw=; b=f428uPdLlkPDdIuN7rXZO8CwA48d/5O+OeyNADOW1S3YqjFDIvQU2kDiXZrF5F2O3Y uR18RH+4PE2Z6QwXDhdDazN4RaUnVQYxMGE80hes69dOxoRYo7McXXF+TxncoeMb6WJ6 zAfM7ywpf6MwlYMbkcUn4Tqwa061rkGIPV18Jo5ywXRcIav9xheC7bUGEgQXj/YXKLMJ PsI423qP5j0Q8YYGSv65lGBKe59cH4ADNOqRbw+cLZzRWEjU/N7X6t+6rrVDeRotueFW Fh+Zmqvf01ZAzLSFA+0A0CNyACoFHE/Ys5RE3GfAzaByYxxUC8uHeBVKsr2FA/Gbn/0/ uyKw== X-Gm-Message-State: APt69E0lygXgDu7ktW5Jspfi2BsXRn92aOxxRTmUM/hxA6orPZ6d/aVk GiVH0evvDsscnQXufXE/4WpV2sX4 X-Google-Smtp-Source: ADUXVKLLgh71A3/n36nZzhxUCqpBU1oUwc57iJFaTBXErTw1p+3fuwhnEjQSkCURKjvNfVDjpq5C9w== X-Received: by 2002:a1c:3710:: with SMTP id e16-v6mr2666904wma.58.1528872992772; Tue, 12 Jun 2018 23:56:32 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id v2-v6sm2443625wrm.84.2018.06.12.23.56.31 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 12 Jun 2018 23:56:32 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de Date: Wed, 13 Jun 2018 08:56:31 +0200 Message-Id: <17a79c409220543ddae1d6947e60b9f036cbf836.1528872988.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 Cc: Alison Wang , Fabio Estevam Subject: [U-Boot] [PATCH] common: Fix cpu nr type which is always unsigned type X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" cpu_cmd() is reading cpu number via simple_strtoul() which is always unsigned type. Platform code implementations are not expecting that nr can be negative and there is not checking in the code for that too. This patch is using u32 type for cpu number to make sure that platform code get proper value range. Signed-off-by: Michal Simek --- arch/arm/cpu/armv8/fsl-layerscape/mp.c | 8 ++++---- arch/arm/cpu/armv8/zynqmp/mp.c | 8 ++++---- arch/arm/mach-imx/mx6/mp.c | 8 ++++---- arch/powerpc/cpu/mpc85xx/mp.c | 10 +++++----- arch/powerpc/cpu/mpc86xx/mp.c | 8 ++++---- include/common.h | 8 ++++---- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/mp.c b/arch/arm/cpu/armv8/fsl-layerscape/mp.c index dd89d0a83f89..7627fd13e7d8 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/mp.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/mp.c @@ -191,14 +191,14 @@ int is_core_online(u64 cpu_id) return table[SPIN_TABLE_ELEM_STATUS_IDX] == 1; } -int cpu_reset(int nr) +int cpu_reset(u32 nr) { puts("Feature is not implemented.\n"); return 0; } -int cpu_disable(int nr) +int cpu_disable(u32 nr) { puts("Feature is not implemented.\n"); @@ -231,7 +231,7 @@ static int core_to_pos(int nr) return i; } -int cpu_status(int nr) +int cpu_status(u32 nr) { u64 *table; int pos; @@ -257,7 +257,7 @@ int cpu_status(int nr) return 0; } -int cpu_release(int nr, int argc, char * const argv[]) +int cpu_release(u32 nr, int argc, char * const argv[]) { u64 boot_addr; u64 *table = (u64 *)get_spin_tbl_addr(); diff --git a/arch/arm/cpu/armv8/zynqmp/mp.c b/arch/arm/cpu/armv8/zynqmp/mp.c index 7e270a7dc232..2a71870ae7bc 100644 --- a/arch/arm/cpu/armv8/zynqmp/mp.c +++ b/arch/arm/cpu/armv8/zynqmp/mp.c @@ -45,7 +45,7 @@ int is_core_valid(unsigned int core) return 0; } -int cpu_reset(int nr) +int cpu_reset(u32 nr) { puts("Feature is not implemented.\n"); return 0; @@ -131,7 +131,7 @@ static void enable_clock_r5(void) udelay(0x500); } -int cpu_disable(int nr) +int cpu_disable(u32 nr) { if (nr >= ZYNQMP_CORE_APU0 && nr <= ZYNQMP_CORE_APU3) { u32 val = readl(&crfapb_base->rst_fpd_apu); @@ -144,7 +144,7 @@ int cpu_disable(int nr) return 0; } -int cpu_status(int nr) +int cpu_status(u32 nr) { if (nr >= ZYNQMP_CORE_APU0 && nr <= ZYNQMP_CORE_APU3) { u32 addr_low = readl(((u8 *)&apu_base->rvbar_addr0_l) + nr * 8); @@ -220,7 +220,7 @@ void initialize_tcm(bool mode) } } -int cpu_release(int nr, int argc, char * const argv[]) +int cpu_release(u32 nr, int argc, char * const argv[]) { if (nr >= ZYNQMP_CORE_APU0 && nr <= ZYNQMP_CORE_APU3) { u64 boot_addr = simple_strtoull(argv[0], NULL, 16); diff --git a/arch/arm/mach-imx/mx6/mp.c b/arch/arm/mach-imx/mx6/mp.c index c3806dca3ad0..eda168d86711 100644 --- a/arch/arm/mach-imx/mx6/mp.c +++ b/arch/arm/mach-imx/mx6/mp.c @@ -29,20 +29,20 @@ static uint32_t cpu_ctrl_mask[MAX_CPUS] = { SRC_SCR_CORE_3_ENABLE_MASK }; -int cpu_reset(int nr) +int cpu_reset(u32 nr) { /* Software reset of the CPU N */ src->scr |= cpu_reset_mask[nr]; return 0; } -int cpu_status(int nr) +int cpu_status(u32 nr) { printf("core %d => %d\n", nr, !!(src->scr & cpu_ctrl_mask[nr])); return 0; } -int cpu_release(int nr, int argc, char *const argv[]) +int cpu_release(u32 nr, int argc, char *const argv[]) { uint32_t boot_addr; @@ -78,7 +78,7 @@ int is_core_valid(unsigned int core) return 1; } -int cpu_disable(int nr) +int cpu_disable(u32 nr) { /* Disable the CPU N */ src->scr &= ~cpu_ctrl_mask[nr]; diff --git a/arch/powerpc/cpu/mpc85xx/mp.c b/arch/powerpc/cpu/mpc85xx/mp.c index 42501ca3cec5..b0aa72ed6e02 100644 --- a/arch/powerpc/cpu/mpc85xx/mp.c +++ b/arch/powerpc/cpu/mpc85xx/mp.c @@ -42,7 +42,7 @@ int hold_cores_in_reset(int verbose) return 0; } -int cpu_reset(int nr) +int cpu_reset(u32 nr) { volatile ccsr_pic_t *pic = (void *)(CONFIG_SYS_MPC8xxx_PIC_ADDR); out_be32(&pic->pir, 1 << nr); @@ -53,7 +53,7 @@ int cpu_reset(int nr) return 0; } -int cpu_status(int nr) +int cpu_status(u32 nr) { u32 *table, id = get_my_id(); @@ -79,7 +79,7 @@ int cpu_status(int nr) } #ifdef CONFIG_FSL_CORENET -int cpu_disable(int nr) +int cpu_disable(u32 nr) { volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); @@ -95,7 +95,7 @@ int is_core_disabled(int nr) { return (coredisrl & (1 << nr)); } #else -int cpu_disable(int nr) +int cpu_disable(u32 nr) { volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); @@ -137,7 +137,7 @@ static u8 boot_entry_map[4] = { BOOT_ENTRY_R3_LOWER, }; -int cpu_release(int nr, int argc, char * const argv[]) +int cpu_release(u32 nr, int argc, char * const argv[]) { u32 i, val, *table = (u32 *)&__spin_table + nr * NUM_BOOT_ENTRY; u64 boot_addr; diff --git a/arch/powerpc/cpu/mpc86xx/mp.c b/arch/powerpc/cpu/mpc86xx/mp.c index 97bd160df8a5..ce300eac5b0e 100644 --- a/arch/powerpc/cpu/mpc86xx/mp.c +++ b/arch/powerpc/cpu/mpc86xx/mp.c @@ -13,7 +13,7 @@ DECLARE_GLOBAL_DATA_PTR; -int cpu_reset(int nr) +int cpu_reset(u32 nr) { /* dummy function so common/cmd_mp.c will build * should be implemented in the future, when cpu_release() @@ -23,13 +23,13 @@ int cpu_reset(int nr) return 1; } -int cpu_status(int nr) +int cpu_status(u32 nr) { /* dummy function so common/cmd_mp.c will build */ return 0; } -int cpu_disable(int nr) +int cpu_disable(u32 nr) { volatile immap_t *immap = (immap_t *) CONFIG_SYS_CCSRBAR; volatile ccsr_gur_t *gur = &immap->im_gur; @@ -66,7 +66,7 @@ int is_core_disabled(int nr) { return 0; } -int cpu_release(int nr, int argc, char * const argv[]) +int cpu_release(u32 nr, int argc, char * const argv[]) { /* dummy function so common/cmd_mp.c will build * should be implemented in the future */ diff --git a/include/common.h b/include/common.h index 60c79137e212..940161f1758b 100644 --- a/include/common.h +++ b/include/common.h @@ -536,10 +536,10 @@ void show_activity(int arg); /* Multicore arch functions */ #ifdef CONFIG_MP -int cpu_status(int nr); -int cpu_reset(int nr); -int cpu_disable(int nr); -int cpu_release(int nr, int argc, char * const argv[]); +int cpu_status(u32 nr); +int cpu_reset(u32 nr); +int cpu_disable(u32 nr); +int cpu_release(u32 nr, int argc, char * const argv[]); #endif #else /* __ASSEMBLY__ */