cpu_group=readl(base+GIC_DIST_IGROUP+i); printk("reg[%d],cpu_group:0x%x\n",i/4,cpu_group);//default for group0 } /* 设置中断路由:GIC_DIST_TARGET * *前32个中断怎么路由是GIC芯片固定的,因此先读GIC_DIST_TARGET前面的值 * 然后全部填充到 SPI的中断号 */ cpumask=gic_get_cpumask(gic...
{/* 计算中断@d->hwirq 的 ICDIPTRn 寄存器地址 */void__iomem *reg =gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3);/* ICDIPTRn 是 32-bit 寄存器,包含4个中断的设置,要计算中断@d->hwirq 配置域的位偏移 */unsignedintcpu, shift = (gic_irq(d) %4) *8; u32 val, mas...
GICD_ITARGETSRn用来控制中断号的目标CPU,每八位描述一个中断号,前32个中断号(GICD_ITARGETSR0-7)是只读的,只有SPI可以配置到哪个CPU GIC初始化 gic的结构体如下 struct gic_chip_data { u64 raw_dist_base; u64 raw_cpu_base; struct irq_domain *domain; struct irq_chip *chip; u32 gic_irqs; }...
一个是全局中断的控制(GIC_DIST_CTRL)。一旦关闭了全局的中断,那么任何的中断源产生的中断事件都不会被传递到CPU interface。另外一个级别是对针对各个中断源进行控制(GIC_DIST_ENABLE_CLEAR),关闭某一个中断源会导致该中断事件不会分发到CPU interface,但不影响其他中断源产生中断事件的分发。控制将当前优先级最高...
一个是全局中断的控制(GIC_DIST_CTRL)。一旦关闭了全局的中断,那么任何的中断源产生的中断事件都不会被传递到CPU interface。另外一个级别是对针对各个中断源进行控制(GIC_DIST_ENABLE_CLEAR),关闭某一个中断源会导致该中断事件不会分发到CPU interface,但不影响其他中断源产生中断事件的分发。控制将当前优先级最高...
分发器对中断的控制分成两个级别,一个是全局中断的控制(GIC_DIST_CTRL),一旦禁能了全局的中断,那么任何的中断源产生的中断事件都不会被传递到CPU接口;另外一个级别是对针对各个中断源进行控制(GIC_DIST_ENABLE_CLEAR),禁能某一个中断源会导致该中断事件不会分发到CPU接口,但不影响其他中断源产生中断事件的分发...
TargetListFilter 0b00,表示向位于 CPUTargetList 位图中的 CPU Interface集合发送 SGI 0b01,表示向所有 CPU Interface发送一个 SGI 中断 0b10,表示向自己发送一个 SGI 0b11,reserved CPUTargetList,一个 CPU 位图,某一位为 1 表示要向该 CPU Interface 发送一个 SGI(TargetListFilter=0b00 的情况下) ...
writel_relaxed(cpumask,base+GIC_DIST_TARGET+i*4/4); //默认中断配置 gic_dist_config(base,gic_irqs,NULL); //开启全局的中断传递 writel_relaxed(GICD_ENABLE,base+GIC_DIST_CTRL); } void__initgic_dist_config(void__iomem*base,intgic_irqs, ...
void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3); unsigned int shift = (gic_irq(d) % 4) * 8; unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask); u32 val, mask, bit; if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids) ...
SGI: SGIs are generated by writing to the Software Generated Interrupt Register, GICD_SGIR. Each CPU interface can generate a maximum of 16 SGIs, ID0-ID15, for each target processor. SGI为软件可以触发的中断,统一编号为0~15,用于各个core之间的通信。