mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branch 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull EFI updates from Ingo Molnar:
"The main changes in this cycle were:
- Transparently fall back to other poweroff method(s) if EFI poweroff
fails (and returns)
- Use separate PE/COFF section headers for the RX and RW parts of the
ARM stub loader so that the firmware can use strict mapping
permissions
- Add support for requesting the firmware to wipe RAM at warm reboot
- Increase the size of the random seed obtained from UEFI so CRNG
fast init can complete earlier
- Update the EFI framebuffer address if it points to a BAR that gets
moved by the PCI resource allocation code
- Enable "reset attack mitigation" of TPM environments: this is
enabled if the kernel is configured with
CONFIG_RESET_ATTACK_MITIGATION=y.
- Clang related fixes
- Misc cleanups, constification, refactoring, etc"
* 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
efi/bgrt: Use efi_mem_type()
efi: Move efi_mem_type() to common code
efi/reboot: Make function pointer orig_pm_power_off static
efi/random: Increase size of firmware supplied randomness
efi/libstub: Enable reset attack mitigation
firmware/efi/esrt: Constify attribute_group structures
firmware/efi: Constify attribute_group structures
firmware/dcdbas: Constify attribute_group structures
arm/efi: Split zImage code and data into separate PE/COFF sections
arm/efi: Replace open coded constants with symbolic ones
arm/efi: Remove pointless dummy .reloc section
arm/efi: Remove forbidden values from the PE/COFF header
drivers/fbdev/efifb: Allow BAR to be moved instead of claiming it
efi/reboot: Fall back to original power-off method if EFI_RESET_SHUTDOWN returns
efi/arm/arm64: Add missing assignment of efi.config_table
efi/libstub/arm64: Set -fpie when building the EFI stub
efi/libstub/arm64: Force 'hidden' visibility for section markers
efi/libstub/arm64: Use hidden attribute for struct screen_info reference
efi/arm: Don't mark ACPI reclaim memory as MEMBLOCK_NOMAP
This commit is contained in:
commit
f92e3da18b
19 changed files with 280 additions and 157 deletions
|
|
@ -149,6 +149,10 @@ ATTRIBUTE_GROUPS(efifb);
|
|||
|
||||
static bool pci_dev_disabled; /* FB base matches BAR of a disabled device */
|
||||
|
||||
static struct pci_dev *efifb_pci_dev; /* dev with BAR covering the efifb */
|
||||
static struct resource *bar_resource;
|
||||
static u64 bar_offset;
|
||||
|
||||
static int efifb_probe(struct platform_device *dev)
|
||||
{
|
||||
struct fb_info *info;
|
||||
|
|
@ -203,6 +207,13 @@ static int efifb_probe(struct platform_device *dev)
|
|||
efifb_fix.smem_start |= ext_lfb_base;
|
||||
}
|
||||
|
||||
if (bar_resource &&
|
||||
bar_resource->start + bar_offset != efifb_fix.smem_start) {
|
||||
dev_info(&efifb_pci_dev->dev,
|
||||
"BAR has moved, updating efifb address\n");
|
||||
efifb_fix.smem_start = bar_resource->start + bar_offset;
|
||||
}
|
||||
|
||||
efifb_defined.bits_per_pixel = screen_info.lfb_depth;
|
||||
efifb_defined.xres = screen_info.lfb_width;
|
||||
efifb_defined.yres = screen_info.lfb_height;
|
||||
|
|
@ -370,15 +381,13 @@ static struct platform_driver efifb_driver = {
|
|||
|
||||
builtin_platform_driver(efifb_driver);
|
||||
|
||||
#if defined(CONFIG_PCI) && !defined(CONFIG_X86)
|
||||
#if defined(CONFIG_PCI)
|
||||
|
||||
static bool pci_bar_found; /* did we find a BAR matching the efifb base? */
|
||||
|
||||
static void claim_efifb_bar(struct pci_dev *dev, int idx)
|
||||
static void record_efifb_bar_resource(struct pci_dev *dev, int idx, u64 offset)
|
||||
{
|
||||
u16 word;
|
||||
|
||||
pci_bar_found = true;
|
||||
efifb_pci_dev = dev;
|
||||
|
||||
pci_read_config_word(dev, PCI_COMMAND, &word);
|
||||
if (!(word & PCI_COMMAND_MEMORY)) {
|
||||
|
|
@ -389,12 +398,8 @@ static void claim_efifb_bar(struct pci_dev *dev, int idx)
|
|||
return;
|
||||
}
|
||||
|
||||
if (pci_claim_resource(dev, idx)) {
|
||||
pci_dev_disabled = true;
|
||||
dev_err(&dev->dev,
|
||||
"BAR %d: failed to claim resource for efifb!\n", idx);
|
||||
return;
|
||||
}
|
||||
bar_resource = &dev->resource[idx];
|
||||
bar_offset = offset;
|
||||
|
||||
dev_info(&dev->dev, "BAR %d: assigned to efifb\n", idx);
|
||||
}
|
||||
|
|
@ -405,7 +410,7 @@ static void efifb_fixup_resources(struct pci_dev *dev)
|
|||
u64 size = screen_info.lfb_size;
|
||||
int i;
|
||||
|
||||
if (pci_bar_found || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
|
||||
if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
|
||||
return;
|
||||
|
||||
if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE)
|
||||
|
|
@ -421,7 +426,7 @@ static void efifb_fixup_resources(struct pci_dev *dev)
|
|||
continue;
|
||||
|
||||
if (res->start <= base && res->end >= base + size - 1) {
|
||||
claim_efifb_bar(dev, i);
|
||||
record_efifb_bar_resource(dev, i, base - res->start);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue