mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 07:55:03 +07:00
This pull request contains SoC changes for Broadcom ARM-based SoCs:
- Chris prepares support for the BCM23550 by removing reset code in the BCM21664 machine code since a proper drivers/power/reset driver is provided and shared, he then adds a machine entry point for BCM23550 and updates the SMP code to bring-up the secondary cores on BCM23550 - Ben fixes a warning in the Kona L2 SMC code by adding the missing include file -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJXY1beAAoJEIfQlpxEBwcEFKYQAN0/ba6mCFmr8DLthDJkqeMt yrVeVRB1H6HYnt2cqaG/tbEeZZ+d+S4PhyRbHtAQ4cjgUq0qw8HNc/paN68K4pj0 JuY/52T2mL9WY9f96VBOAnmyRGC2YjTO3xC902BHOVBqQnYzHZm/ki9nxePo8F98 JTAsZuTR+NthfWuwFAAhI6xRws8d9jLXsirPPld6iuRo48/3UoxnHIzz+dQJghIy EVqXf3ckL09LYZqvY6dagcWQxR0RC80Z2hHska4uRirfmPjFKXYM6NvftKu3YaKz cRC0bE6t4WR7YX3LCLYWMers7rnElhfqpgvwJVvYnnwDTpc7469CF9ql2IJSM+Dj 8DDX9pHWwNZTaHglmigIW8inaOS3ChtOb+V5nZxAsaSh5h9W99JTbpnFjqgvBZ0x uHHwsiv6xWDDujeD5lF6+VcVekk1WGoJ8ALaa4MBxdasljw9SyRpb3q8PWXAcbk2 WMPBhED6OdfRuQ/Gf2466LcM1LBkd0nL5mYUZtN/py5B2xtvHgmee2H9AZQQlHhb DhmXpjG4gV5ySInJs30HrK1Z6iELa+hI3gouhsqCCo4Tj+EK7/yGRncUZ02tHjEk Tnmf3tepkX1paukYriVwLwRtuf3KkJJH5U+P4wRR/vREewbIy9iqaQFTg2IZUJr9 Mh4vZRnzjw0Qgjy0M4Dj =zoLK -----END PGP SIGNATURE----- Merge tag 'arm-soc/for-4.8/soc' of http://github.com/Broadcom/stblinux into next/soc This pull request contains SoC changes for Broadcom ARM-based SoCs: - Chris prepares support for the BCM23550 by removing reset code in the BCM21664 machine code since a proper drivers/power/reset driver is provided and shared, he then adds a machine entry point for BCM23550 and updates the SMP code to bring-up the secondary cores on BCM23550 - Ben fixes a warning in the Kona L2 SMC code by adding the missing include file * tag 'arm-soc/for-4.8/soc' of http://github.com/Broadcom/stblinux: ARM: bcm: fix missing include of kona_l2_cache.h ARM: BCM23550 SMP support ARM: Add support for Broadcom BCM23550 SoC ARM: bcm21664: Remove reset code Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
8739a229b6
@ -111,9 +111,17 @@ config ARCH_BCM_21664
|
|||||||
Enable support for the BCM21664 family, which includes
|
Enable support for the BCM21664 family, which includes
|
||||||
BCM21663 and BCM21664 variants.
|
BCM21663 and BCM21664 variants.
|
||||||
|
|
||||||
|
config ARCH_BCM_23550
|
||||||
|
bool "Broadcom BCM23550 SoC"
|
||||||
|
depends on ARCH_MULTI_V7
|
||||||
|
select ARCH_BCM_MOBILE
|
||||||
|
select HAVE_SMP
|
||||||
|
help
|
||||||
|
Enable support for the BCM23550.
|
||||||
|
|
||||||
config ARCH_BCM_MOBILE_L2_CACHE
|
config ARCH_BCM_MOBILE_L2_CACHE
|
||||||
bool "Broadcom mobile SoC level 2 cache support"
|
bool "Broadcom mobile SoC level 2 cache support"
|
||||||
depends on ARCH_BCM_MOBILE
|
depends on ARCH_BCM_281XX || ARCH_BCM_21664
|
||||||
default y
|
default y
|
||||||
select CACHE_L2X0
|
select CACHE_L2X0
|
||||||
select ARCH_BCM_MOBILE_SMC
|
select ARCH_BCM_MOBILE_SMC
|
||||||
@ -128,7 +136,7 @@ config ARCH_BCM_MOBILE_SMP
|
|||||||
select HAVE_ARM_SCU
|
select HAVE_ARM_SCU
|
||||||
select ARM_ERRATA_764369
|
select ARM_ERRATA_764369
|
||||||
help
|
help
|
||||||
SMP support for the BCM281XX and BCM21664 SoC families.
|
SMP support for the BCM281XX, BCM21664 and BCM23550 SoC families.
|
||||||
Provided as an option so SMP support for SoCs of this type
|
Provided as an option so SMP support for SoCs of this type
|
||||||
can be disabled for an SMP-enabled kernel.
|
can be disabled for an SMP-enabled kernel.
|
||||||
|
|
||||||
|
@ -26,7 +26,10 @@ obj-$(CONFIG_ARCH_BCM_281XX) += board_bcm281xx.o
|
|||||||
# BCM21664
|
# BCM21664
|
||||||
obj-$(CONFIG_ARCH_BCM_21664) += board_bcm21664.o
|
obj-$(CONFIG_ARCH_BCM_21664) += board_bcm21664.o
|
||||||
|
|
||||||
# BCM281XX and BCM21664 SMP support
|
# BCM23550
|
||||||
|
obj-$(CONFIG_ARCH_BCM_23550) += board_bcm23550.o
|
||||||
|
|
||||||
|
# BCM281XX, BCM21664 and BCM23550 SMP support
|
||||||
obj-$(CONFIG_ARCH_BCM_MOBILE_SMP) += platsmp.o
|
obj-$(CONFIG_ARCH_BCM_MOBILE_SMP) += platsmp.o
|
||||||
|
|
||||||
# BCM281XX and BCM21664 L2 cache control
|
# BCM281XX and BCM21664 L2 cache control
|
||||||
|
@ -11,53 +11,12 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/of_address.h>
|
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/io.h>
|
|
||||||
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
|
||||||
#include "kona_l2_cache.h"
|
#include "kona_l2_cache.h"
|
||||||
|
|
||||||
#define RSTMGR_DT_STRING "brcm,bcm21664-resetmgr"
|
|
||||||
|
|
||||||
#define RSTMGR_REG_WR_ACCESS_OFFSET 0
|
|
||||||
#define RSTMGR_REG_CHIP_SOFT_RST_OFFSET 4
|
|
||||||
|
|
||||||
#define RSTMGR_WR_PASSWORD 0xa5a5
|
|
||||||
#define RSTMGR_WR_PASSWORD_SHIFT 8
|
|
||||||
#define RSTMGR_WR_ACCESS_ENABLE 1
|
|
||||||
|
|
||||||
static void bcm21664_restart(enum reboot_mode mode, const char *cmd)
|
|
||||||
{
|
|
||||||
void __iomem *base;
|
|
||||||
struct device_node *resetmgr;
|
|
||||||
|
|
||||||
resetmgr = of_find_compatible_node(NULL, NULL, RSTMGR_DT_STRING);
|
|
||||||
if (!resetmgr) {
|
|
||||||
pr_emerg("Couldn't find " RSTMGR_DT_STRING "\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
base = of_iomap(resetmgr, 0);
|
|
||||||
if (!base) {
|
|
||||||
pr_emerg("Couldn't map " RSTMGR_DT_STRING "\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A soft reset is triggered by writing a 0 to bit 0 of the soft reset
|
|
||||||
* register. To write to that register we must first write the password
|
|
||||||
* and the enable bit in the write access enable register.
|
|
||||||
*/
|
|
||||||
writel((RSTMGR_WR_PASSWORD << RSTMGR_WR_PASSWORD_SHIFT) |
|
|
||||||
RSTMGR_WR_ACCESS_ENABLE,
|
|
||||||
base + RSTMGR_REG_WR_ACCESS_OFFSET);
|
|
||||||
writel(0, base + RSTMGR_REG_CHIP_SOFT_RST_OFFSET);
|
|
||||||
|
|
||||||
/* Wait for reset */
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init bcm21664_init(void)
|
static void __init bcm21664_init(void)
|
||||||
{
|
{
|
||||||
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
|
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
|
||||||
@ -71,6 +30,5 @@ static const char * const bcm21664_dt_compat[] = {
|
|||||||
|
|
||||||
DT_MACHINE_START(BCM21664_DT, "BCM21664 Broadcom Application Processor")
|
DT_MACHINE_START(BCM21664_DT, "BCM21664 Broadcom Application Processor")
|
||||||
.init_machine = bcm21664_init,
|
.init_machine = bcm21664_init,
|
||||||
.restart = bcm21664_restart,
|
|
||||||
.dt_compat = bcm21664_dt_compat,
|
.dt_compat = bcm21664_dt_compat,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
25
arch/arm/mach-bcm/board_bcm23550.c
Normal file
25
arch/arm/mach-bcm/board_bcm23550.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Broadcom
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation version 2.
|
||||||
|
*
|
||||||
|
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
|
||||||
|
* kind, whether express or implied; without even the implied warranty
|
||||||
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
|
||||||
|
static const char * const bcm23550_dt_compat[] = {
|
||||||
|
"brcm,bcm23550",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
DT_MACHINE_START(BCM23550_DT, "BCM23550 Broadcom Application Processor")
|
||||||
|
.dt_compat = bcm23550_dt_compat,
|
||||||
|
MACHINE_END
|
@ -17,6 +17,7 @@
|
|||||||
#include <asm/hardware/cache-l2x0.h>
|
#include <asm/hardware/cache-l2x0.h>
|
||||||
|
|
||||||
#include "bcm_kona_smc.h"
|
#include "bcm_kona_smc.h"
|
||||||
|
#include "kona_l2_cache.h"
|
||||||
|
|
||||||
void __init kona_l2_cache_init(void)
|
void __init kona_l2_cache_init(void)
|
||||||
{
|
{
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_address.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
|
||||||
@ -255,6 +256,57 @@ static int kona_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
|||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Cluster Dormant Control command to bring CPU into a running state */
|
||||||
|
#define CDC_CMD 6
|
||||||
|
#define CDC_CMD_OFFSET 0
|
||||||
|
#define CDC_CMD_REG(cpu) (CDC_CMD_OFFSET + 4*(cpu))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BCM23550 has a Cluster Dormant Control block that keeps the core in
|
||||||
|
* idle state. A command needs to be sent to the block to bring the CPU
|
||||||
|
* into running state.
|
||||||
|
*/
|
||||||
|
static int bcm23550_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
|
{
|
||||||
|
void __iomem *cdc_base;
|
||||||
|
struct device_node *dn;
|
||||||
|
char *name;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Make sure a CDC node exists before booting the
|
||||||
|
* secondary core.
|
||||||
|
*/
|
||||||
|
name = "brcm,bcm23550-cdc";
|
||||||
|
dn = of_find_compatible_node(NULL, NULL, name);
|
||||||
|
if (!dn) {
|
||||||
|
pr_err("unable to find cdc node\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
cdc_base = of_iomap(dn, 0);
|
||||||
|
of_node_put(dn);
|
||||||
|
|
||||||
|
if (!cdc_base) {
|
||||||
|
pr_err("unable to remap cdc base register\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Boot the secondary core */
|
||||||
|
ret = kona_boot_secondary(cpu, idle);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
/* Bring this CPU to RUN state so that nIRQ nFIQ
|
||||||
|
* signals are unblocked.
|
||||||
|
*/
|
||||||
|
writel_relaxed(CDC_CMD, cdc_base + CDC_CMD_REG(cpu));
|
||||||
|
|
||||||
|
out:
|
||||||
|
iounmap(cdc_base);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int nsp_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
static int nsp_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -283,6 +335,12 @@ static const struct smp_operations bcm_smp_ops __initconst = {
|
|||||||
CPU_METHOD_OF_DECLARE(bcm_smp_bcm281xx, "brcm,bcm11351-cpu-method",
|
CPU_METHOD_OF_DECLARE(bcm_smp_bcm281xx, "brcm,bcm11351-cpu-method",
|
||||||
&bcm_smp_ops);
|
&bcm_smp_ops);
|
||||||
|
|
||||||
|
static const struct smp_operations bcm23550_smp_ops __initconst = {
|
||||||
|
.smp_boot_secondary = bcm23550_boot_secondary,
|
||||||
|
};
|
||||||
|
CPU_METHOD_OF_DECLARE(bcm_smp_bcm23550, "brcm,bcm23550",
|
||||||
|
&bcm23550_smp_ops);
|
||||||
|
|
||||||
static const struct smp_operations nsp_smp_ops __initconst = {
|
static const struct smp_operations nsp_smp_ops __initconst = {
|
||||||
.smp_prepare_cpus = bcm_smp_prepare_cpus,
|
.smp_prepare_cpus = bcm_smp_prepare_cpus,
|
||||||
.smp_boot_secondary = nsp_boot_secondary,
|
.smp_boot_secondary = nsp_boot_secondary,
|
||||||
|
Loading…
Reference in New Issue
Block a user