[U-Boot] [RFC 04/22] thunderx: add thunderx register definitions and misc functions
Alexander Graf
agraf at csgraf.de
Sun Feb 24 16:42:30 UTC 2019
On 22.02.19 19:03, Tim Harvey wrote:
> Add Cavium Thunderx common registers, structures, and helper functions
>
> Signed-off-by: Tim Harvey <tharvey at gateworks.com>
> ---
> arch/arm/include/asm/arch-thunderx/thunderx.h | 300 ++++++++++++++++++
> arch/arm/mach-thunderx/Makefile | 2 +-
> arch/arm/mach-thunderx/misc.c | 33 ++
> 3 files changed, 334 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/include/asm/arch-thunderx/thunderx.h
> create mode 100644 arch/arm/mach-thunderx/misc.c
>
> diff --git a/arch/arm/include/asm/arch-thunderx/thunderx.h b/arch/arm/include/asm/arch-thunderx/thunderx.h
> new file mode 100644
> index 0000000000..58f36c6cdc
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-thunderx/thunderx.h
> @@ -0,0 +1,300 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2018, Cavium Inc.
> + */
> +#ifndef __THUNDERX_H__
> +#define __THUNDERX_H__
> +
> +/* Registers */
> +#define CAVM_RST_BOOT 0x87e006001600ll
> +#define CAVM_MIO_FUS_DAT2 0x87e003001410ll
> +#define CAVM_XCVX_RESET 0x87e0db000000ll
> +
> +/*
> + * Flag bits in top byte. The top byte of MIDR_EL1 is defined
> + * as ox43, the Cavium implementer code. In this number, bits
> + * 7,5,4 are defiend as zero. We use these bits to signal
> + * that revision numbers should be ignored. It isn't ideal
> + * that these are in the middle of an already defined field,
> + * but this keeps the model numbers as 32 bits
> + */
> +#define __OM_IGNORE_REVISION 0x80000000
> +#define __OM_IGNORE_MINOR_REVISION 0x20000000
> +#define __OM_IGNORE_MODEL 0x10000000
> +
> +#define CAVIUM_CN88XX_PASS1_0 0x430f0a10
> +#define CAVIUM_CN88XX_PASS1_1 0x430f0a11
> +#define CAVIUM_CN88XX_PASS2_0 0x431f0a10
> +#define CAVIUM_CN88XX_PASS2_1 0x431f0a11
> +#define CAVIUM_CN88XX_PASS2_2 0x431f0a12
> +#define CAVIUM_CN88XX (CAVIUM_CN88XX_PASS1_0 | __OM_IGNORE_REVISION)
> +#define CAVIUM_CN88XX_PASS1_X (CAVIUM_CN88XX_PASS1_0 | __OM_IGNORE_MINOR_REVISION)
> +#define CAVIUM_CN88XX_PASS2_X (CAVIUM_CN88XX_PASS2_0 | __OM_IGNORE_MINOR_REVISION)
> +
> +#define CAVIUM_CN83XX_PASS1_0 0x430f0a30
> +#define CAVIUM_CN83XX (CAVIUM_CN83XX_PASS1_0 | __OM_IGNORE_REVISION)
> +#define CAVIUM_CN83XX_PASS1_X (CAVIUM_CN83XX_PASS1_0 | __OM_IGNORE_MINOR_REVISION)
> +
> +#define CAVIUM_CN81XX_PASS1_0 0x430f0a20
> +#define CAVIUM_CN81XX (CAVIUM_CN81XX_PASS1_0 | __OM_IGNORE_REVISION)
> +#define CAVIUM_CN81XX_PASS1_X (CAVIUM_CN81XX_PASS1_0 | __OM_IGNORE_MINOR_REVISION)
> +
> +#define CAVIUM_CN98XX_PASS1_0 0x430f0b10
> +#define CAVIUM_CN98XX (CAVIUM_CN98XX_PASS1_0 | __OM_IGNORE_REVISION)
> +#define CAVIUM_CN98XX_PASS1_X (CAVIUM_CN98XX_PASS1_0 | __OM_IGNORE_MINOR_REVISION)
> +
> +/* These match entire families of chips */
> +#define CAVIUM_CN8XXX (CAVIUM_CN88XX_PASS1_0 | __OM_IGNORE_MODEL)
> +#define CAVIUM_CN9XXX (CAVIUM_CN98XX_PASS1_0 | __OM_IGNORE_MODEL)
> +
> +static inline uint64_t cavium_get_model(void)
> +{
> + uint64_t result;
> +
> + __asm ("mrs %[rd],MIDR_EL1" : [rd] "=r" (result));
> +
> + return result;
> +}
> +
> +/**
> + * Return non-zero if the chip matched the passed model.
> + *
> + * @param arg_model One of the CAVIUM_* constants for chip models and passes
> + * @return Non-zero if match
> + */
> +static inline int CAVIUM_IS_MODEL(uint32_t arg_model)
Usually upper case function names are reserved for #define'd ones. Could
this be lower case?
Alex
More information about the U-Boot
mailing list