cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

early.c (1453B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/kernel.h>
      3#include <linux/pci.h>
      4#include <asm/pci-direct.h>
      5#include <asm/io.h>
      6#include <asm/pci_x86.h>
      7
      8/* Direct PCI access. This is used for PCI accesses in early boot before
      9   the PCI subsystem works. */
     10
     11u32 read_pci_config(u8 bus, u8 slot, u8 func, u8 offset)
     12{
     13	u32 v;
     14	outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
     15	v = inl(0xcfc);
     16	return v;
     17}
     18
     19u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset)
     20{
     21	u8 v;
     22	outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
     23	v = inb(0xcfc + (offset&3));
     24	return v;
     25}
     26
     27u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset)
     28{
     29	u16 v;
     30	outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
     31	v = inw(0xcfc + (offset&2));
     32	return v;
     33}
     34
     35void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset,
     36				    u32 val)
     37{
     38	outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
     39	outl(val, 0xcfc);
     40}
     41
     42void write_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset, u8 val)
     43{
     44	outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
     45	outb(val, 0xcfc + (offset&3));
     46}
     47
     48void write_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset, u16 val)
     49{
     50	outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);
     51	outw(val, 0xcfc + (offset&2));
     52}
     53
     54int early_pci_allowed(void)
     55{
     56	return (pci_probe & (PCI_PROBE_CONF1|PCI_PROBE_NOEARLY)) ==
     57			PCI_PROBE_CONF1;
     58}
     59