Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  irq-gic-realview.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * Special GIC quirks for the ARM RealView
 * Copyright (C) 2015 Linus Walleij
 */

#include <linux/of.h>
#include <linux/regmap.h>
#include <linux/mfd/syscon.h>
#include <linux/bitops.h>
#include <linux/irqchip.h>
#include <linux/irqchip/arm-gic.h>

#define REALVIEW_SYS_LOCK_OFFSET 0x20
#define REALVIEW_SYS_PLD_CTRL1  0x74
#define REALVIEW_EB_REVB_SYS_PLD_CTRL1 0xD8
#define VERSATILE_LOCK_VAL  0xA05F
#define PLD_INTMODE_MASK  BIT(22)|BIT(23)|BIT(24)
#define PLD_INTMODE_LEGACY  0x0
#define PLD_INTMODE_NEW_DCC  BIT(22)
#define PLD_INTMODE_NEW_NO_DCC  BIT(23)
#define PLD_INTMODE_FIQ_ENABLE  BIT(24)

/* For some reason RealView EB Rev B moved this register */
static const struct of_device_id syscon_pldset_of_match[] = {
 {
  .compatible = "arm,realview-eb11mp-revb-syscon",
  .data = (void *)REALVIEW_EB_REVB_SYS_PLD_CTRL1,
 },
 {
  .compatible = "arm,realview-eb11mp-revc-syscon",
  .data = (void *)REALVIEW_SYS_PLD_CTRL1,
 },
 {
  .compatible = "arm,realview-eb-syscon",
  .data = (void *)REALVIEW_SYS_PLD_CTRL1,
 },
 {
  .compatible = "arm,realview-pb11mp-syscon",
  .data = (void *)REALVIEW_SYS_PLD_CTRL1,
 },
 {},
};

static int __init
realview_gic_of_init(struct device_node *node, struct device_node *parent)
{
 struct regmap *map;
 struct device_node *np;
 const struct of_device_id *gic_id;
 u32 pld1_ctrl;

 np = of_find_matching_node_and_match(NULL, syscon_pldset_of_match,
          &gic_id);
 if (!np)
  return -ENODEV;
 pld1_ctrl = (u32)gic_id->data;

 /* The PB11MPCore GIC needs to be configured in the syscon */
 map = syscon_node_to_regmap(np);
 of_node_put(np);
 if (!IS_ERR(map)) {
  /* new irq mode with no DCC */
  regmap_write(map, REALVIEW_SYS_LOCK_OFFSET,
        VERSATILE_LOCK_VAL);
  regmap_update_bits(map, pld1_ctrl,
       PLD_INTMODE_NEW_NO_DCC,
       PLD_INTMODE_MASK);
  regmap_write(map, REALVIEW_SYS_LOCK_OFFSET, 0x0000);
  pr_info("RealView GIC: set up interrupt controller to NEW mode, no DCC\n");
 } else {
  pr_err("RealView GIC setup: could not find syscon\n");
  return -ENODEV;
 }
 return gic_of_init(node, parent);
}
IRQCHIP_DECLARE(armtc11mp_gic, "arm,tc11mp-gic", realview_gic_of_init);
IRQCHIP_DECLARE(armeb11mp_gic, "arm,eb11mp-gic", realview_gic_of_init);

Messung V0.5
C=97 H=92 G=94

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge