blob: 123385961f13759c55815a7b77d60c5880347555 [file] [log] [blame]
Patrick Georgiac959032020-05-05 22:49:26 +02001/* SPDX-License-Identifier: GPL-2.0-or-later */
Damien Zammit43a1f782015-08-19 15:16:59 +10002
Kyösti Mälkkide640782019-12-03 07:30:26 +02003#include <arch/bootblock.h>
Angel Ponsbbc80f42021-01-20 13:23:18 +01004#include <assert.h>
Elyes Haouas8823ba12022-12-05 08:48:50 +01005#include <device/mmio.h>
Angel Pons37cae542021-02-02 16:28:07 +01006#include <device/pci_ops.h>
Angel Ponsbbc80f42021-01-20 13:23:18 +01007#include <types.h>
Angel Ponsb8b117c2020-09-15 02:26:29 +02008
Arthur Heymans7843bd52019-11-11 21:56:37 +01009#include "x4x.h"
Kyösti Mälkki197a3c62019-09-27 14:32:20 +030010
Angel Ponsbbc80f42021-01-20 13:23:18 +010011static uint32_t encode_pciexbar_length(void)
12{
Shelley Chen4e9bb332021-10-20 15:43:45 -070013 switch (CONFIG_ECAM_MMCONF_BUS_NUMBER) {
Angel Ponsbbc80f42021-01-20 13:23:18 +010014 case 256: return 0 << 1;
15 case 128: return 1 << 1;
16 case 64: return 2 << 1;
17 default: return dead_code_t(uint32_t);
18 }
19}
20
Arthur Heymans7843bd52019-11-11 21:56:37 +010021void bootblock_early_northbridge_init(void)
Damien Zammit43a1f782015-08-19 15:16:59 +100022{
Damien Zammit43a1f782015-08-19 15:16:59 +100023 /* Disable LaGrande Technology (LT) */
Elyes Haouasa2389ef2022-12-03 13:27:54 +010024 read32p(TPM_BASE_ADDRESS);
Damien Zammit43a1f782015-08-19 15:16:59 +100025
Shelley Chen4e9bb332021-10-20 15:43:45 -070026 const uint32_t reg32 = CONFIG_ECAM_MMCONF_BASE_ADDRESS | encode_pciexbar_length() | 1;
Angel Ponsd1c590a2020-08-03 16:01:39 +020027 pci_io_write_config32(HOST_BRIDGE, D0F0_PCIEXBAR_LO, reg32);
Damien Zammit43a1f782015-08-19 15:16:59 +100028}