Message ID | 20220310195229.109477-1-nick.hawkins@hpe.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ARM: Introduce HPE GXP Architecture | expand |
Hi, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on tip/timers/core] [also build test WARNING on soc/for-next robh/for-next linus/master v5.17-rc7 next-20220310] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/nick-hawkins-hpe-com/arch-arm-mach-hpe-Introduce-the-HPE-GXP-architecture/20220311-035513 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 58dedf0a4782ce42b4d31f1f62e5ad80a1b73d72 config: arm-defconfig (https://download.01.org/0day-ci/archive/20220311/202203111516.oSsKrRqX-lkp@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 276ca87382b8f16a65bddac700202924228982f6) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/0day-ci/linux/commit/9fbfc32473a65e025764e0a1456c421b4706fe8e git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review nick-hawkins-hpe-com/arch-arm-mach-hpe-Introduce-the-HPE-GXP-architecture/20220311-035513 git checkout 9fbfc32473a65e025764e0a1456c421b4706fe8e # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> arch/arm/mach-hpe/gxp.c:26:13: warning: no previous prototype for function 'gxp_map_io' [-Wmissing-prototypes] void __init gxp_map_io(void) ^ arch/arm/mach-hpe/gxp.c:26:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void __init gxp_map_io(void) ^ static 1 warning generated. vim +/gxp_map_io +26 arch/arm/mach-hpe/gxp.c 25 > 26 void __init gxp_map_io(void) 27 { 28 iotable_init(gxp_io_desc, ARRAY_SIZE(gxp_io_desc)); 29 } 30 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
On Thu, Mar 10, 2022 at 8:52 PM <nick.hawkins@hpe.com> wrote: > > From: Nick Hawkins <nick.hawkins@hpe.com> > > The GXP is the HPE BMC SoC that is used in the majority > of HPE Generation 10 servers. Traditionally the asic will > last multiple generations of server before being replaced. > In gxp.c we reset the EHCI controller early to boot the asic. > > Info about SoC: > > HPE GXP is the name of the HPE Soc. This SoC is used to implement > many BMC features at HPE. It supports ARMv7 architecture based on > the Cortex A9 core. It is capable of using an AXI bus to which > a memory controller is attached. It has multiple SPI interfaces > to connect boot flash and BIOS flash. It uses a 10/100/1000 MAC > for network connectivity. It has multiple i2c engines to drive > connectivity with a host infrastructure. The initial patches > enable the watchdog and timer enabling the host to be able to > boot. > > Signed-off-by: Nick Hawkins <nick.hawkins@hpe.com> Please add me to Cc for the entire series when resending. > +config ARCH_HPE_GXP > + bool "HPE GXP SoC" > + select ARM_VIC > + select PINCTRL > + select IRQ_DOMAIN > + select GENERIC_IRQ_CHIP > + select MULTI_IRQ_HANDLER > + select SPARSE_IRQ > + select CLKSRC_MMIO > + depends on ARCH_MULTI_V7 By convention, the 'depends on' usually comes first here. Please drop the 'select' statements for things that are already selected by ARCH_MULTIPLATFORM or ARCH_MULTI_V7. > + > +#define IOP_REGS_PHYS_BASE 0xc0000000 > +#define IOP_REGS_VIRT_BASE 0xf0000000 > +#define IOP_REGS_SIZE (240*SZ_1M) > +#define RESET_CMD 0x00080002 > + > +static struct map_desc gxp_io_desc[] __initdata = { > + { > + .virtual = (unsigned long)IOP_REGS_VIRT_BASE, > + .pfn = __phys_to_pfn(IOP_REGS_PHYS_BASE), > + .length = IOP_REGS_SIZE, > + .type = MT_DEVICE, > + }, > +}; It looks like this is only used for the pxf_restart() function below. In this case, you should get rid of the static mapping entirely and use an ioremap() in the gxp_dt_init() function instead, ideally getting the address from an appropriate device node rather than hardcoding it here. If there are other drivers using the static mapping, either explain here why this is required, or try to change them to dynamic mappings as well. > +static void __init gxp_dt_init(void) > +{ > + void __iomem *gxp_init_regs; > + struct device_node *np; > + > + np = of_find_compatible_node(NULL, NULL, "hpe,gxp-cpu-init"); > + gxp_init_regs = of_iomap(np, 0); > + > + /*it is necessary for our SOC to reset ECHI through this*/ > + /* register due to a hardware limitation*/ > + __raw_writel(RESET_CMD, > + (gxp_init_regs)); My feeling is still that this should be done in the platform specific EHCI driver front-end. I think I commented on this before but don't remember getting an explanation why you can't have it there. > +static void gxp_restart(enum reboot_mode mode, const char *cmd) > +{ > + __raw_writel(1, (void __iomem *) IOP_REGS_VIRT_BASE); > +} With both of these, you should use writel() instead of __raw_write(). Using the __raw accessors breaks big-endian kernels (which you probably don't need, but shouldn't break for no reason anyway), and lacks serialization and atomicity of the access. A better place for the restart logic may be a separate driver in drivers/power/reset/, at least if this otherwise ends up being the only platform specific code you need. Arnd
Hi, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on tip/timers/core] [also build test WARNING on soc/for-next robh/for-next linus/master v5.17-rc7 next-20220310] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/nick-hawkins-hpe-com/arch-arm-mach-hpe-Introduce-the-HPE-GXP-architecture/20220311-035513 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 58dedf0a4782ce42b4d31f1f62e5ad80a1b73d72 config: arm-defconfig (https://download.01.org/0day-ci/archive/20220311/202203112000.DIc9zr62-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.2.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/9fbfc32473a65e025764e0a1456c421b4706fe8e git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review nick-hawkins-hpe-com/arch-arm-mach-hpe-Introduce-the-HPE-GXP-architecture/20220311-035513 git checkout 9fbfc32473a65e025764e0a1456c421b4706fe8e # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> arch/arm/mach-hpe/gxp.c:26:13: warning: no previous prototype for 'gxp_map_io' [-Wmissing-prototypes] 26 | void __init gxp_map_io(void) | ^~~~~~~~~~ vim +/gxp_map_io +26 arch/arm/mach-hpe/gxp.c 25 > 26 void __init gxp_map_io(void) 27 { 28 iotable_init(gxp_io_desc, ARRAY_SIZE(gxp_io_desc)); 29 } 30 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi, Thank you for the patch! Yet something to improve: [auto build test ERROR on tip/timers/core] [also build test ERROR on soc/for-next robh/for-next linus/master v5.17-rc7 next-20220310] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/nick-hawkins-hpe-com/arch-arm-mach-hpe-Introduce-the-HPE-GXP-architecture/20220311-035513 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 58dedf0a4782ce42b4d31f1f62e5ad80a1b73d72 config: arm-randconfig-c002-20220312 (https://download.01.org/0day-ci/archive/20220312/202203122119.szjgiy49-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.2.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/9fbfc32473a65e025764e0a1456c421b4706fe8e git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review nick-hawkins-hpe-com/arch-arm-mach-hpe-Introduce-the-HPE-GXP-architecture/20220311-035513 git checkout 9fbfc32473a65e025764e0a1456c421b4706fe8e # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All error/warnings (new ones prefixed by >>): >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] drivers/memstick/host/r592.c:47:13: warning: no previous prototype for 'memstick_debug_get_tpc_name' [-Wmissing-prototypes] 47 | const char *memstick_debug_get_tpc_name(int tpc) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] init/main.c:768:20: warning: no previous prototype for 'arch_post_acpi_subsys_init' [-Wmissing-prototypes] 768 | void __init __weak arch_post_acpi_subsys_init(void) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~~ init/main.c:780:20: warning: no previous prototype for 'mem_encrypt_init' [-Wmissing-prototypes] 780 | void __init __weak mem_encrypt_init(void) { } | ^~~~~~~~~~~~~~~~ init/main.c:782:20: warning: no previous prototype for 'poking_init' [-Wmissing-prototypes] 782 | void __init __weak poking_init(void) { } | ^~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] init/calibrate.c:261:37: warning: no previous prototype for 'calibrate_delay_is_known' [-Wmissing-prototypes] 261 | unsigned long __attribute__((weak)) calibrate_delay_is_known(void) | ^~~~~~~~~~~~~~~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/ptrace.c:854:16: warning: no previous prototype for 'syscall_trace_enter' [-Wmissing-prototypes] 854 | asmlinkage int syscall_trace_enter(struct pt_regs *regs) | ^~~~~~~~~~~~~~~~~~~ arch/arm/kernel/ptrace.c:882:17: warning: no previous prototype for 'syscall_trace_exit' [-Wmissing-prototypes] 882 | asmlinkage void syscall_trace_exit(struct pt_regs *regs) | ^~~~~~~~~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/reboot.c:78:6: warning: no previous prototype for 'soft_restart' [-Wmissing-prototypes] 78 | void soft_restart(unsigned long addr) | ^~~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/signal.c:186:16: warning: no previous prototype for 'sys_sigreturn' [-Wmissing-prototypes] 186 | asmlinkage int sys_sigreturn(struct pt_regs *regs) | ^~~~~~~~~~~~~ arch/arm/kernel/signal.c:216:16: warning: no previous prototype for 'sys_rt_sigreturn' [-Wmissing-prototypes] 216 | asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) | ^~~~~~~~~~~~~~~~ arch/arm/kernel/signal.c:601:1: warning: no previous prototype for 'do_work_pending' [-Wmissing-prototypes] 601 | do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) | ^~~~~~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/sys_arm.c:32:17: warning: no previous prototype for 'sys_arm_fadvise64_64' [-Wmissing-prototypes] 32 | asmlinkage long sys_arm_fadvise64_64(int fd, int advice, | ^~~~~~~~~~~~~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/time.c:88:13: warning: no previous prototype for 'time_init' [-Wmissing-prototypes] 88 | void __init time_init(void) | ^~~~~~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/traps.c:84:6: warning: no previous prototype for 'dump_backtrace_stm' [-Wmissing-prototypes] 84 | void dump_backtrace_stm(u32 *stack, u32 instruction, const char *loglvl) | ^~~~~~~~~~~~~~~~~~ arch/arm/kernel/traps.c:433:17: warning: no previous prototype for 'do_undefinstr' [-Wmissing-prototypes] 433 | asmlinkage void do_undefinstr(struct pt_regs *regs) | ^~~~~~~~~~~~~ arch/arm/kernel/traps.c:498:39: warning: no previous prototype for 'handle_fiq_as_nmi' [-Wmissing-prototypes] 498 | asmlinkage void __exception_irq_entry handle_fiq_as_nmi(struct pt_regs *regs) | ^~~~~~~~~~~~~~~~~ arch/arm/kernel/traps.c:517:17: warning: no previous prototype for 'bad_mode' [-Wmissing-prototypes] 517 | asmlinkage void bad_mode(struct pt_regs *regs, int reason) | ^~~~~~~~ arch/arm/kernel/traps.c:590:16: warning: no previous prototype for 'arm_syscall' [-Wmissing-prototypes] 590 | asmlinkage int arm_syscall(int no, struct pt_regs *regs) | ^~~~~~~~~~~ arch/arm/kernel/traps.c:716:1: warning: no previous prototype for 'baddataabort' [-Wmissing-prototypes] 716 | baddataabort(int code, unsigned long instr, struct pt_regs *regs) | ^~~~~~~~~~~~ arch/arm/kernel/traps.c:756:17: warning: no previous prototype for '__div0' [-Wmissing-prototypes] 756 | asmlinkage void __div0(void) | ^~~~~~ arch/arm/kernel/traps.c:763:6: warning: no previous prototype for 'abort' [-Wmissing-prototypes] 763 | void abort(void) | ^~~~~ -- >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] arch/arm/kernel/suspend.c:75:6: warning: no previous prototype for '__cpu_suspend_save' [-Wmissing-prototypes] 75 | void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr) | ^~~~~~~~~~~~~~~~~~ .. --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
On Sat, Mar 12, 2022 at 2:27 PM kernel test robot <lkp@intel.com> wrote: > > All error/warnings (new ones prefixed by >>): > > >> cc1: warning: arch/arm/mach-hpe/include: No such file or directory [-Wmissing-include-dirs] You need to make CONFIG_ARCH_HPE depend on CONFIG_ARCH_MULTI_V7, otherwise it becomes possible to select this for non-multiplatform configs that expect an include directory below the platform. Arnd
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4c97cb40eebb..6998b5b5f59e 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -618,6 +618,8 @@ source "arch/arm/mach-highbank/Kconfig" source "arch/arm/mach-hisi/Kconfig" +source "arch/arm/mach-hpe/Kconfig" + source "arch/arm/mach-imx/Kconfig" source "arch/arm/mach-integrator/Kconfig" diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 77172d555c7e..1cc0523d0a0a 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -178,6 +178,7 @@ machine-$(CONFIG_ARCH_FOOTBRIDGE) += footbridge machine-$(CONFIG_ARCH_GEMINI) += gemini machine-$(CONFIG_ARCH_HIGHBANK) += highbank machine-$(CONFIG_ARCH_HISI) += hisi +machine-$(CONFIG_ARCH_HPE) += hpe machine-$(CONFIG_ARCH_INTEGRATOR) += integrator machine-$(CONFIG_ARCH_IOP32X) += iop32x machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx diff --git a/arch/arm/mach-hpe/Kconfig b/arch/arm/mach-hpe/Kconfig new file mode 100644 index 000000000000..9b27f97c6536 --- /dev/null +++ b/arch/arm/mach-hpe/Kconfig @@ -0,0 +1,20 @@ +menuconfig ARCH_HPE + bool "HPE SoC support" + help + This enables support for HPE ARM based SoC chips +if ARCH_HPE + +config ARCH_HPE_GXP + bool "HPE GXP SoC" + select ARM_VIC + select PINCTRL + select IRQ_DOMAIN + select GENERIC_IRQ_CHIP + select MULTI_IRQ_HANDLER + select SPARSE_IRQ + select CLKSRC_MMIO + depends on ARCH_MULTI_V7 + help + Support for GXP SoCs + +endif diff --git a/arch/arm/mach-hpe/Makefile b/arch/arm/mach-hpe/Makefile new file mode 100644 index 000000000000..8b0a91234df4 --- /dev/null +++ b/arch/arm/mach-hpe/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_ARCH_HPE_GXP) += gxp.o diff --git a/arch/arm/mach-hpe/gxp.c b/arch/arm/mach-hpe/gxp.c new file mode 100644 index 000000000000..44f6d719a346 --- /dev/null +++ b/arch/arm/mach-hpe/gxp.c @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (C) 2022 Hewlett-Packard Enterprise Development Company, L.P.*/ + + +#include <linux/init.h> +#include <linux/of_address.h> +#include <linux/of.h> +#include <linux/of_platform.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> + +#define IOP_REGS_PHYS_BASE 0xc0000000 +#define IOP_REGS_VIRT_BASE 0xf0000000 +#define IOP_REGS_SIZE (240*SZ_1M) +#define RESET_CMD 0x00080002 + +static struct map_desc gxp_io_desc[] __initdata = { + { + .virtual = (unsigned long)IOP_REGS_VIRT_BASE, + .pfn = __phys_to_pfn(IOP_REGS_PHYS_BASE), + .length = IOP_REGS_SIZE, + .type = MT_DEVICE, + }, +}; + +void __init gxp_map_io(void) +{ + iotable_init(gxp_io_desc, ARRAY_SIZE(gxp_io_desc)); +} + +static void __init gxp_dt_init(void) +{ + void __iomem *gxp_init_regs; + struct device_node *np; + + np = of_find_compatible_node(NULL, NULL, "hpe,gxp-cpu-init"); + gxp_init_regs = of_iomap(np, 0); + + /*it is necessary for our SOC to reset ECHI through this*/ + /* register due to a hardware limitation*/ + __raw_writel(RESET_CMD, + (gxp_init_regs)); + +} + +static void gxp_restart(enum reboot_mode mode, const char *cmd) +{ + __raw_writel(1, (void __iomem *) IOP_REGS_VIRT_BASE); +} + +static const char * const gxp_board_dt_compat[] = { + "hpe,gxp", + NULL, +}; + +DT_MACHINE_START(GXP_DT, "HPE GXP") + .init_machine = gxp_dt_init, + .map_io = gxp_map_io, + .restart = gxp_restart, + .dt_compat = gxp_board_dt_compat, +MACHINE_END