arch/arm/mach-mv78xx0/common.c
Source file repositories/reference/linux-study-clean/arch/arm/mach-mv78xx0/common.c
File Facts
- System
- Linux kernel
- Corpus path
arch/arm/mach-mv78xx0/common.c- Extension
.c- Size
- 11530 bytes
- Lines
- 445
- Domain
- Architecture Layer
- Bucket
- arch/arm
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/init.hlinux/io.hlinux/platform_device.hlinux/serial_8250.hlinux/ata_platform.hlinux/clk-provider.hlinux/ethtool.hasm/hardware/cache-feroceon-l2.hasm/mach/map.hasm/mach/time.hlinux/platform_data/usb-ehci-orion.hlinux/platform_data/mtd-orion_nand.hplat/time.hplat/common.hplat/addr-map.hmv78xx0.hbridge-regs.hcommon.h
Detected Declarations
function mv78xx0_core_indexfunction get_hclkfunction get_pclk_l2clkfunction get_tclkfunction mv78xx0_map_iofunction clk_initfunction mv78xx0_ehci0_initfunction mv78xx0_ehci1_initfunction mv78xx0_ehci2_initfunction mv78xx0_ge00_initfunction mv78xx0_ge01_initfunction mv78xx0_ge10_initfunction mv78xx0_ge11_initfunction mv78xx0_i2c_initfunction mv78xx0_sata_initfunction mv78xx0_uart0_initfunction mv78xx0_uart1_initfunction mv78xx0_uart2_initfunction mv78xx0_uart3_initfunction mv78xx0_init_earlyfunction mv78xx0_timer_initfunction mv78xx0_xor_initfunction Acceleratorfunction mv78xx0_idfunction is_l2_writethroughfunction mv78xx0_initfunction mv78xx0_restart
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* arch/arm/mach-mv78xx0/common.c
*
* Core functions for Marvell MV78xx0 SoCs
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/platform_device.h>
#include <linux/serial_8250.h>
#include <linux/ata_platform.h>
#include <linux/clk-provider.h>
#include <linux/ethtool.h>
#include <asm/hardware/cache-feroceon-l2.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <linux/platform_data/usb-ehci-orion.h>
#include <linux/platform_data/mtd-orion_nand.h>
#include <plat/time.h>
#include <plat/common.h>
#include <plat/addr-map.h>
#include "mv78xx0.h"
#include "bridge-regs.h"
#include "common.h"
static int get_tclk(void);
/*****************************************************************************
* Common bits
****************************************************************************/
int mv78xx0_core_index(void)
{
u32 extra;
/*
* Read Extra Features register.
*/
__asm__("mrc p15, 1, %0, c15, c1, 0" : "=r" (extra));
return !!(extra & 0x00004000);
}
static int get_hclk(void)
{
int hclk;
/*
* HCLK tick rate is configured by DEV_D[7:5] pins.
*/
switch ((readl(SAMPLE_AT_RESET_LOW) >> 5) & 7) {
case 0:
hclk = 166666667;
break;
case 1:
hclk = 200000000;
break;
case 2:
hclk = 266666667;
break;
case 3:
hclk = 333333333;
break;
case 4:
hclk = 400000000;
break;
default:
panic("unknown HCLK PLL setting: %.8x\n",
readl(SAMPLE_AT_RESET_LOW));
}
return hclk;
}
static void get_pclk_l2clk(int hclk, int core_index, int *pclk, int *l2clk)
{
u32 cfg;
/*
* Core #0 PCLK/L2CLK is configured by bits [13:8], core #1
* PCLK/L2CLK by bits [19:14].
*/
if (core_index == 0) {
cfg = (readl(SAMPLE_AT_RESET_LOW) >> 8) & 0x3f;
} else {
cfg = (readl(SAMPLE_AT_RESET_LOW) >> 14) & 0x3f;
}
/*
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/init.h`, `linux/io.h`, `linux/platform_device.h`, `linux/serial_8250.h`, `linux/ata_platform.h`, `linux/clk-provider.h`, `linux/ethtool.h`.
- Detected declarations: `function mv78xx0_core_index`, `function get_hclk`, `function get_pclk_l2clk`, `function get_tclk`, `function mv78xx0_map_io`, `function clk_init`, `function mv78xx0_ehci0_init`, `function mv78xx0_ehci1_init`, `function mv78xx0_ehci2_init`, `function mv78xx0_ge00_init`.
- Atlas domain: Architecture Layer / arch/arm.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.