intelmetool: handle failures to mmap MEI memory
Fixes crashes when there is an error mapping memory. Error mapping physical memory 0x0000004275159040 [0x4000] ERRNO=1 Segmentation fault (core dumped) Change-Id: I5becc0c2870dd97297c4e8d1b101b95b31792ca7 Signed-off-by: Paul Wise <pabs3@bonedaddy.net> Reviewed-on: https://review.coreboot.org/19562 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
parent
769f46625b
commit
e311f94279
|
@ -83,6 +83,10 @@ static void dump_me_memory() {
|
||||||
uint8_t *dump;
|
uint8_t *dump;
|
||||||
|
|
||||||
dump = map_physical_exact((off_t)me_clone, (void *)me_clone, 0x2000000);
|
dump = map_physical_exact((off_t)me_clone, (void *)me_clone, 0x2000000);
|
||||||
|
if (dump == NULL) {
|
||||||
|
printf("Could not map ME memory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
zeroit(dump, 0x2000000);
|
zeroit(dump, 0x2000000);
|
||||||
printf("Send magic command for memory clone\n");
|
printf("Send magic command for memory clone\n");
|
||||||
|
|
||||||
|
@ -210,6 +214,12 @@ static int activate_me() {
|
||||||
|
|
||||||
rcba_phys = pci_read_long(sb, 0xf0) & 0xfffffffe;
|
rcba_phys = pci_read_long(sb, 0xf0) & 0xfffffffe;
|
||||||
rcba = map_physical((off_t)rcba_phys, size);
|
rcba = map_physical((off_t)rcba_phys, size);
|
||||||
|
if (rcba == NULL) {
|
||||||
|
printf("Could not map MEI PCI device memory\n");
|
||||||
|
pci_free_dev(sb);
|
||||||
|
pci_cleanup(pacc);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
//printf("RCBA at 0x%08" PRIx32 "\n", (uint32_t)rcba_phys);
|
//printf("RCBA at 0x%08" PRIx32 "\n", (uint32_t)rcba_phys);
|
||||||
fd2 = *(uint32_t *)(rcba + FD2);
|
fd2 = *(uint32_t *)(rcba + FD2);
|
||||||
|
|
|
@ -581,6 +581,10 @@ uint32_t intel_mei_setup(struct pci_dev *dev)
|
||||||
mei_base_address = dev->base_addr[0] & ~0xf;
|
mei_base_address = dev->base_addr[0] & ~0xf;
|
||||||
pagerounded = mei_base_address & ~0xfff;
|
pagerounded = mei_base_address & ~0xfff;
|
||||||
mei_mmap = map_physical(pagerounded, 0x2000) + mei_base_address - pagerounded;
|
mei_mmap = map_physical(pagerounded, 0x2000) + mei_base_address - pagerounded;
|
||||||
|
if (mei_mmap == NULL) {
|
||||||
|
printf("Could not map ME setup memory\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ensure Memory and Bus Master bits are set */
|
/* Ensure Memory and Bus Master bits are set */
|
||||||
reg32 = pci_read_long(dev, PCI_COMMAND);
|
reg32 = pci_read_long(dev, PCI_COMMAND);
|
||||||
|
|
Loading…
Reference in New Issue