linux/arch/arm/mach-artpec/board-artpec6.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * ARTPEC-6 device support.
   4 */
   5
   6#include <linux/amba/bus.h>
   7#include <linux/clocksource.h>
   8#include <linux/dma-mapping.h>
   9#include <linux/io.h>
  10#include <linux/irqchip.h>
  11#include <linux/irqchip/arm-gic.h>
  12#include <linux/mfd/syscon.h>
  13#include <linux/of.h>
  14#include <linux/of_address.h>
  15#include <linux/clk-provider.h>
  16#include <linux/regmap.h>
  17#include <linux/smp.h>
  18#include <asm/smp_scu.h>
  19#include <asm/mach/arch.h>
  20#include <asm/mach/map.h>
  21#include <asm/psci.h>
  22#include <linux/arm-smccc.h>
  23
  24
  25#define ARTPEC6_DMACFG_REGNUM 0x10
  26#define ARTPEC6_DMACFG_UARTS_BURST 0xff
  27
  28#define SECURE_OP_L2C_WRITEREG 0xb4000001
  29
  30static void __init artpec6_init_machine(void)
  31{
  32        struct regmap *regmap;
  33
  34        regmap = syscon_regmap_lookup_by_compatible("axis,artpec6-syscon");
  35
  36        if (!IS_ERR(regmap)) {
  37                /* Use PL011 DMA Burst Request signal instead of DMA
  38                 *  Single Request
  39                 */
  40                regmap_write(regmap, ARTPEC6_DMACFG_REGNUM,
  41                             ARTPEC6_DMACFG_UARTS_BURST);
  42        };
  43}
  44
  45static void artpec6_l2c310_write_sec(unsigned long val, unsigned reg)
  46{
  47        struct arm_smccc_res res;
  48
  49        arm_smccc_smc(SECURE_OP_L2C_WRITEREG, reg, val, 0,
  50                      0, 0, 0, 0, &res);
  51
  52        WARN_ON(res.a0);
  53}
  54
  55static const char * const artpec6_dt_match[] = {
  56        "axis,artpec6",
  57        NULL
  58};
  59
  60DT_MACHINE_START(ARTPEC6, "Axis ARTPEC-6 Platform")
  61        .l2c_aux_val    = 0x0C000000,
  62        .l2c_aux_mask   = 0xF3FFFFFF,
  63        .l2c_write_sec  = artpec6_l2c310_write_sec,
  64        .init_machine   = artpec6_init_machine,
  65        .dt_compat      = artpec6_dt_match,
  66MACHINE_END
  67