All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gregory CLEMENT <gregory.clement@bootlin.com>
To: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: "Paul Burton" <paulburton@kernel.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	linux-mips@vger.kernel.org,
	"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
	"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>,
	"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
	"Théo Lebrun" <theo.lebrun@bootlin.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 06/22] MIPS: Refactor mips_cps_core_entry implementation
Date: Tue, 05 Dec 2023 17:34:45 +0100	[thread overview]
Message-ID: <87lea8ehga.fsf@BL-laptop> (raw)
In-Reply-To: <20231201111512.803120-7-gregory.clement@bootlin.com>

Hello Jiaxun,

> From: Jiaxun Yang <jiaxun.yang@flygoat.com>
>
> Now the exception vector for CPS systems are allocated on-fly
> with memblock as well.
>
> It will try to allocate from KSEG1 first, and then try to allocate
> in low 4G if possible.
>
> The main reset vector is now generated by uasm, to avoid tons
> of patches to the code. Other vectors are copied to the location
> later.
>
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> ---
[...]


> diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c
[...]

> +static int __init setup_cps_vecs(void)
> +{
> +	extern void excep_tlbfill(void);
> +	extern void excep_xtlbfill(void);
> +	extern void excep_cache(void);
> +	extern void excep_genex(void);
> +	extern void excep_intex(void);
> +	extern void excep_ejtag(void);
> +	phys_addr_t cps_vec_pa;
> +	void *cps_vec;
> +
> +	/* Try to allocate in KSEG1 first */
> +	cps_vec_pa = memblock_phys_alloc_range(BEV_VEC_SIZE, BEV_VEC_ALIGN,
> +						0x0, KSEGX_SIZE - 1);
> +
> +	if (cps_vec_pa)
> +		core_entry_reg = CKSEG1ADDR(cps_vec_pa) &
> +					CM_GCR_Cx_RESET_BASE_BEVEXCBASE;
> +
> +	if (!cps_vec_pa && mips_cm_is64) {
> +		cps_vec_pa = memblock_phys_alloc_range(BEV_VEC_SIZE, BEV_VEC_ALIGN,
> +							0x0, SZ_4G - 1);
> +		if (cps_vec_pa)
> +			core_entry_reg = (cps_vec_pa & CM_GCR_Cx_RESET_BASE_BEVEXCBASE) |
> +					CM_GCR_Cx_RESET_BASE_MODE;
> +	}
> +
> +	if (!cps_vec_pa)
> +		return -ENOMEM;
> +
> +	/* We want to ensure cache is clean before writing uncached mem */
> +	blast_dcache_range(TO_CAC(cps_vec_pa), TO_CAC(cps_vec_pa) + BEV_VEC_SIZE);
> +	bc_wback_inv(TO_CAC(cps_vec_pa), BEV_VEC_SIZE);
> +	__sync();
> +
> +	cps_vec = (void *)TO_UNCAC(cps_vec_pa);

Following your remark about the configuration for generic mips32[1]. I made
some changes and tried to build with the following command:
make 32r6el_defconfig; make

I got the follower error:
arch/mips/kernel/smp-cps.c: In function ‘setup_cps_vecs’:
arch/mips/kernel/smp-cps.c:162:19: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]

The issue comes from the TO_UNCAC macro that use the TO_PHYS_MASK macro
which is 64 bits, so it turn the size of TO_UNCAC() to 8 bytes while the
size of a pointer is 4 bytes.

Actually it show that TO_UNCAC was created to be only used for 64 bits,
and it was only your patch "MIPS: spaces: Define a couple of handy
macros" that made possible to use in 32 bit case.

Did you mange to build a kernel in 32 bits configuration ?
Maybe you had a local patch that made it possible.

I propose the following fix to squash into the patch "MIPS: spaces:
Define a couple of handy macros" , what do you think of it?

diff --git a/arch/mips/include/asm/mach-generic/spaces.h b/arch/mips/include/asm/mach-generic/spaces.h
index 05db19521e817..4884199d8b8c4 100644
--- a/arch/mips/include/asm/mach-generic/spaces.h
+++ b/arch/mips/include/asm/mach-generic/spaces.h
@@ -49,6 +49,9 @@
 #define HIGHMEM_START          _AC(0x20000000, UL)
 #endif
 
+#define TO_UNCAC(x)            CKSEG1ADDR(x)
+#define TO_CAC(x)              CKSEG0ADDR(x)
+
 #endif /* CONFIG_32BIT */
 
 #ifdef CONFIG_64BIT
@@ -78,12 +81,12 @@
 #define HIGHMEM_START          (_AC(1, UL) << _AC(59, UL))
 #endif
 
+#define TO_UNCAC(x)            (UNCAC_BASE | ((x) & TO_PHYS_MASK))
+#define TO_CAC(x)              (CAC_BASE   | ((x) & TO_PHYS_MASK))
 #define TO_PHYS(x)             (             ((x) & TO_PHYS_MASK))
 
 #endif /* CONFIG_64BIT */
 
-#define TO_CAC(x)              (CAC_BASE   | ((x) & TO_PHYS_MASK))
-#define TO_UNCAC(x)            (UNCAC_BASE | ((x) & TO_PHYS_MASK))
 
 /*
  * This handles the memory map.


[1]:https://lore.kernel.org/linux-mips/4eb150cf-3fb7-41c8-accc-06b13e46f086@app.fastmail.com/

-- 
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com

  reply	other threads:[~2023-12-05 16:34 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-01 11:14 [PATCH v3 00/22] Add support for the Mobileye EyeQ5 SoC Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 01/22] MIPS: compressed: Use correct instruction for 64 bit code Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 02/22] MIPS: Export higher/highest relocation functions in uasm Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 03/22] MIPS: spaces: Define a couple of handy macros Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 04/22] MIPS: genex: Fix except_vec_vi for kernel in XKPHYS Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 05/22] MIPS: Fix set_uncached_handler for ebase " Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 06/22] MIPS: Refactor mips_cps_core_entry implementation Gregory CLEMENT
2023-12-05 16:34   ` Gregory CLEMENT [this message]
2023-12-01 11:14 ` [PATCH v3 07/22] MIPS: Fix cache issue with mips_cps_core_entry Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 08/22] MIPS: Allow kernel base to be set from Kconfig for all platforms Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 09/22] MIPS: traps: Handle CPU with non standard vint offset Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 10/22] MIPS: Avoid unnecessary reservation of exception space Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 11/22] MIPS: traps: Enhance memblock ebase allocation process Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 12/22] MIPS: Get rid of CONFIG_NO_EXCEPT_FILL Gregory CLEMENT
2023-12-06  0:40   ` kernel test robot
2023-12-01 11:14 ` [PATCH v3 13/22] MIPS: traps: Give more explanations if ebase doesn't belong to KSEG0 Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 14/22] dt-bindings: Add vendor prefix for Mobileye Vision Technologies Ltd Gregory CLEMENT
2023-12-01 11:14 ` [PATCH v3 15/22] dt-bindings: mips: cpus: Sort the entries Gregory CLEMENT
2023-12-01 12:03   ` Krzysztof Kozlowski
2023-12-01 12:31   ` Serge Semin
2023-12-01 11:14 ` [PATCH v3 16/22] dt-bindings: mips: cpu: Add I-Class I6500 Multiprocessor Core Gregory CLEMENT
2023-12-01 12:03   ` Krzysztof Kozlowski
2023-12-01 11:15 ` [PATCH v3 17/22] dt-bindings: mips: Add bindings for Mobileye SoCs Gregory CLEMENT
2023-12-01 11:15 ` [PATCH v3 18/22] dt-bindings: mfd: syscon: Document EyeQ5 OLB Gregory CLEMENT
2023-12-01 11:15 ` [PATCH v3 19/22] MIPS: mobileye: Add EyeQ5 dtsi Gregory CLEMENT
2023-12-01 11:15 ` [PATCH v3 20/22] MIPS: mobileye: Add EPM5 device tree Gregory CLEMENT
2023-12-01 11:15 ` [PATCH v3 21/22] MIPS: generic: Add support for Mobileye EyeQ5 Gregory CLEMENT
2023-12-01 11:47   ` Jiaxun Yang
2023-12-01 11:15 ` [PATCH v3 22/22] MAINTAINERS: Add entry for Mobileye MIPS SoCs Gregory CLEMENT

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lea8ehga.fsf@BL-laptop \
    --to=gregory.clement@bootlin.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=devicetree@vger.kernel.org \
    --cc=jiaxun.yang@flygoat.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=paulburton@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=tawfik.bayouk@mobileye.com \
    --cc=theo.lebrun@bootlin.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=tsbogend@alpha.franken.de \
    --cc=vladimir.kondratiev@mobileye.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.