From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jon Medhurst (Tixy) Date: Mon, 26 Sep 2016 13:30:00 +0100 Subject: [U-Boot] [PATCH v2] vexpress: disable cci ace slave ports when booting in non-sec/hyp mode In-Reply-To: <1474648719-2910-1-git-send-email-sudeep.holla@arm.com> References: <1474643401-13624-1-git-send-email-sudeep.holla@arm.com> <1474648719-2910-1-git-send-email-sudeep.holla@arm.com> Message-ID: <1474893000.2898.18.camel@linaro.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Fri, 2016-09-23 at 17:38 +0100, Sudeep Holla wrote: > Commit f225d39d3093 ("vexpress: Check TC2 firmware support before defaulting > to nonsec booting") added support to check if the firmware on TC2 is > configured appropriately before booting in nonsec/hyp mode. > > However when booting in non-secure/hyp mode, CCI control must be done in > secure firmware and can't be done in non-secure/hyp mode. In order to > ensure that, this patch disables the cci slave port inteface so that it > is not accessed at all. > > Cc: Jon Medhurst > Acked-by: Marc Zyngier > Signed-off-by: Sudeep Holla > --- Acked-by: Jon Medhurst Tested-by: Jon Medhurst > board/armltd/vexpress/vexpress_tc2.c | 52 ++++++++++++++++++++++++++++++++++++ > configs/vexpress_ca15_tc2_defconfig | 1 + > 2 files changed, 53 insertions(+) > > Hi, > > This change is needed to avoid the kernel panic while attempting to access > CCI ports when booting in non-sec/HYP mode. The kernel patches to fix > this are available @[1] > > Regards, > Sudeep > > v1->v2: > - Fix compilation with !CONFIG_ARMV7_NONSEC(Thanks to Tixy) > > [1] http://www.spinics.net/lists/arm-kernel/msg533715.html > > diff --git a/board/armltd/vexpress/vexpress_tc2.c b/board/armltd/vexpress/vexpress_tc2.c > index ebb41a8833ab..c7adf950f579 100644 > --- a/board/armltd/vexpress/vexpress_tc2.c > +++ b/board/armltd/vexpress/vexpress_tc2.c > @@ -7,7 +7,11 @@ > * SPDX-License-Identifier: GPL-2.0+ > */ > > +#include > #include > +#include > +#include > +#include > > #define SCC_BASE 0x7fff0000 > > @@ -31,3 +35,51 @@ bool armv7_boot_nonsec_default(void) > return (readl((u32 *)(SCC_BASE + 0x700)) & ((1 << 12) | (1 << 13))) == 0; > #endif > } > + > +#ifdef CONFIG_OF_BOARD_SETUP > +int ft_board_setup(void *fdt, bd_t *bd) > +{ > + int offset, tmp, len; > + const struct fdt_property *prop; > + const char *cci_compatible = "arm,cci-400-ctrl-if"; > + > +#ifdef CONFIG_ARMV7_NONSEC > + if (!armv7_boot_nonsec()) > + return 0; > +#else > + return 0; > +#endif > + /* Booting in nonsec mode, disable CCI access */ > + offset = fdt_path_offset(fdt, "/cpus"); > + if (offset < 0) { > + printf("couldn't find /cpus\n"); > + return offset; > + } > + > + /* delete cci-control-port in each cpu node */ > + for (tmp = fdt_first_subnode(fdt, offset); tmp >= 0; > + tmp = fdt_next_subnode(fdt, tmp)) > + fdt_delprop(fdt, tmp, "cci-control-port"); > + > + /* disable all ace cci slave ports */ > + offset = fdt_node_offset_by_prop_value(fdt, offset, "compatible", > + cci_compatible, 20); > + while (offset > 0) { > + prop = fdt_get_property(fdt, offset, "interface-type", > + &len); > + if (!prop) > + continue; > + if (len < 4) > + continue; > + if (strcmp(prop->data, "ace")) > + continue; > + > + fdt_setprop_string(fdt, offset, "status", "disabled"); > + > + offset = fdt_node_offset_by_prop_value(fdt, offset, "compatible", > + cci_compatible, 20); > + } > + > + return 0; > +} > +#endif /* CONFIG_OF_BOARD_SETUP */ > diff --git a/configs/vexpress_ca15_tc2_defconfig b/configs/vexpress_ca15_tc2_defconfig > index 2f141dda06c6..5154803b7c65 100644 > --- a/configs/vexpress_ca15_tc2_defconfig > +++ b/configs/vexpress_ca15_tc2_defconfig > @@ -1,5 +1,6 @@ > CONFIG_ARM=y > CONFIG_TARGET_VEXPRESS_CA15_TC2=y > +CONFIG_OF_BOARD_SETUP=y > CONFIG_HUSH_PARSER=y > # CONFIG_CMD_CONSOLE is not set > # CONFIG_CMD_BOOTD is not set > -- > 2.7.4 >