cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/mach-zynq/common.c

/*
 * This file contains common code that is intended to be used across
 * boards so that it's not replicated.
 *
 *  Copyright (C) 2011 Xilinx
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/cpumask.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/clk/zynq.h>
#include <linux/clocksource.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/of_platform.h>
#include <linux/of.h>
#include <linux/memblock.h>
#include <linux/irqchip.h>
#include <linux/irqchip/arm-gic.h>
#include <linux/slab.h>
#include <linux/sys_soc.h>

#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/mach-types.h>
#include <asm/page.h>
#include <asm/pgtable.h>
#include <asm/smp_scu.h>
#include <asm/system_info.h>
#include <asm/hardware/cache-l2x0.h>

#include "common.h"


#define ZYNQ_DEVCFG_MCTRL		0x80

#define ZYNQ_DEVCFG_PS_VERSION_SHIFT	28

#define ZYNQ_DEVCFG_PS_VERSION_MASK	0xF


void __iomem *zynq_scu_base;

/**
 * zynq_memory_init - Initialize special memory
 *
 * We need to stop things allocating the low memory as DMA can't work in
 * the 1st 512K of memory.
 */

static void __init zynq_memory_init(void) { if (!__pa(PAGE_OFFSET)) memblock_reserve(__pa(PAGE_OFFSET), 0x80000); }

Contributors

PersonTokensPropCommitsCommitProp
Michal Simek2696.30%150.00%
Kyle Roeschley13.70%150.00%
Total27100.00%2100.00%

static struct platform_device zynq_cpuidle_device = { .name = "cpuidle-zynq", }; /** * zynq_get_revision - Get Zynq silicon revision * * Return: Silicon version or -1 otherwise */
static int __init zynq_get_revision(void) { struct device_node *np; void __iomem *zynq_devcfg_base; u32 revision; np = of_find_compatible_node(NULL, NULL, "xlnx,zynq-devcfg-1.0"); if (!np) { pr_err("%s: no devcfg node found\n", __func__); return -1; } zynq_devcfg_base = of_iomap(np, 0); if (!zynq_devcfg_base) { pr_err("%s: Unable to map I/O memory\n", __func__); return -1; } revision = readl(zynq_devcfg_base + ZYNQ_DEVCFG_MCTRL); revision >>= ZYNQ_DEVCFG_PS_VERSION_SHIFT; revision &= ZYNQ_DEVCFG_PS_VERSION_MASK; iounmap(zynq_devcfg_base); return revision; }

Contributors

PersonTokensPropCommitsCommitProp
Michal Simek103100.00%1100.00%
Total103100.00%1100.00%


static void __init zynq_init_late(void) { zynq_core_pm_init(); zynq_pm_late_init(); }

Contributors

PersonTokensPropCommitsCommitProp
Sören Brinkmann15100.00%2100.00%
Total15100.00%2100.00%

/** * zynq_init_machine - System specific initialization, intended to be * called from board specific initialization. */
static void __init zynq_init_machine(void) { struct soc_device_attribute *soc_dev_attr; struct soc_device *soc_dev; struct device *parent = NULL; soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); if (!soc_dev_attr) goto out; system_rev = zynq_get_revision(); soc_dev_attr->family = kasprintf(GFP_KERNEL, "Xilinx Zynq"); soc_dev_attr->revision = kasprintf(GFP_KERNEL, "0x%x", system_rev); soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "0x%x", zynq_slcr_get_device_id()); soc_dev = soc_device_register(soc_dev_attr); if (IS_ERR(soc_dev)) { kfree(soc_dev_attr->family); kfree(soc_dev_attr->revision); kfree(soc_dev_attr->soc_id); kfree(soc_dev_attr); goto out; } parent = soc_device_to_device(soc_dev); out: /* * Finished with the static registrations now; fill in the missing * devices */ of_platform_default_populate(NULL, NULL, parent); platform_device_register(&zynq_cpuidle_device); }

Contributors

PersonTokensPropCommitsCommitProp
Michal Simek13785.62%225.00%
John Linn138.12%112.50%
Daniel Lezcano63.75%112.50%
Sören Brinkmann21.25%225.00%
Arnd Bergmann10.62%112.50%
Kefeng Wang10.62%112.50%
Total160100.00%8100.00%


static void __init zynq_timer_init(void) { zynq_clock_init(); of_clk_init(NULL); clocksource_probe(); }

Contributors

PersonTokensPropCommitsCommitProp
Julia Cartwright1155.00%228.57%
Michal Simek735.00%342.86%
Steffen Trumtrar15.00%114.29%
Marc Zyngier15.00%114.29%
Total20100.00%7100.00%

static struct map_desc zynq_cortex_a9_scu_map __initdata = { .length = SZ_256, .type = MT_DEVICE, };
static void __init zynq_scu_map_io(void) { unsigned long base; base = scu_a9_get_base(); zynq_cortex_a9_scu_map.pfn = __phys_to_pfn(base); /* Expected address is in vmalloc area that's why simple assign here */ zynq_cortex_a9_scu_map.virtual = base; iotable_init(&zynq_cortex_a9_scu_map, 1); zynq_scu_base = (void __iomem *)base; BUG_ON(!zynq_scu_base); }

Contributors

PersonTokensPropCommitsCommitProp
Michal Simek4171.93%125.00%
John Linn1119.30%125.00%
Julia Cartwright47.02%125.00%
Arnd Bergmann11.75%125.00%
Total57100.00%4100.00%

/** * zynq_map_io - Create memory mappings needed for early I/O. */
static void __init zynq_map_io(void) { debug_ll_io_init(); zynq_scu_map_io(); }

Contributors

PersonTokensPropCommitsCommitProp
Michal Simek1493.33%266.67%
John Linn16.67%133.33%
Total15100.00%3100.00%


static void __init zynq_irq_init(void) { zynq_early_slcr_init(); irqchip_init(); }

Contributors

PersonTokensPropCommitsCommitProp
Sören Brinkmann1280.00%150.00%
Julia Cartwright320.00%150.00%
Total15100.00%2100.00%

static const char * const zynq_dt_match[] = { "xlnx,zynq-7000", NULL }; DT_MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") /* 64KB way size, 8-way associativity, parity disabled */ .l2c_aux_val = 0x00400000, .l2c_aux_mask = 0xffbfffff, .smp = smp_ops(zynq_smp_ops), .map_io = zynq_map_io, .init_irq = zynq_irq_init, .init_machine = zynq_init_machine, .init_late = zynq_init_late, .init_time = zynq_timer_init, .dt_compat = zynq_dt_match, .reserve = zynq_memory_init, MACHINE_END

Overall Contributors

PersonTokensPropCommitsCommitProp
Michal Simek40765.65%929.03%
John Linn609.68%13.23%
Sören Brinkmann457.26%516.13%
Arnd Bergmann447.10%26.45%
Julia Cartwright304.84%619.35%
Daniel Lezcano182.90%13.23%
Russell King91.45%13.23%
Thomas Betker20.32%13.23%
Steffen Trumtrar10.16%13.23%
Kefeng Wang10.16%13.23%
Kyle Roeschley10.16%13.23%
Stephen Warren10.16%13.23%
Marc Zyngier10.16%13.23%
Total620100.00%31100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.