Skip to content

Commit

Permalink
baytrail: initialize punit
Browse files Browse the repository at this point in the history
The punit is responsible for a number of things. Without
performing the sequence included it won't change processor
frequency when requested and apparently there are some bizarre
hangs introduced if this sequence isn't included either. Lastly,
this needs to come after microcode has been loaded. As that is
done in bootblock the ordering is correct.

One other side effect is that this fixes the graphics devices'
device id. Before it was showing up as the same device id of the
SoC transaction router.

BUG=chrome-os-partner:22880
BUG=chrome-os-partner:23085
BUG=chrome-os-partner:22876
BRANCH=None
TEST=Built and booted.

Change-Id: Ib7be1d4b365e9a45647c778ee5f91de497c55bf1
Signed-off-by: Aaron Durbin <[email protected]>
Reviewed-on: https://chromium-review.googlesource.com/171862
Reviewed-by: Shawn Nematbakhsh <[email protected]>
Reviewed-on: http://review.coreboot.org/4864
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <[email protected]>
  • Loading branch information
Aaron Durbin authored and adurbin committed Feb 5, 2014
1 parent c0270aa commit 189aa3e
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/soc/intel/baytrail/baytrail/romstage.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ void asmlinkage romstage_after_car(void);
void raminit(struct mrc_params *mp, int prev_sleep_state);
void gfx_init(void);
void tco_disable(void);
void punit_init(void);

#if CONFIG_ENABLE_BUILTIN_COM1
void byt_config_com1_and_enable(void);
Expand Down
20 changes: 20 additions & 0 deletions src/soc/intel/baytrail/romstage/pmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,23 @@ void tco_disable(void)
reg |= TCO_TMR_HALT;
outl(reg, ACPI_BASE_ADDRESS + TCO1_CNT);
}

/* This sequence signals the PUNIT to start running. */
void punit_init(void)
{
uint32_t reg;

/* Write bits 17:16 of SB_BIOS_CONFIG in the PUNIT. */
reg = SB_BIOS_CONFIG_PERF_MODE | SB_BIOS_CONFIG_PDM_MODE;
pci_write_config32(IOSF_PCI_DEV, MDR_REG, reg);
reg = IOSF_OPCODE(IOSF_OP_WRITE_PMC) | IOSF_PORT(IOSF_PORT_PMC) |
IOSF_REG(SB_BIOS_CONFIG) | IOSF_BYTE_EN_2;
pci_write_config32(IOSF_PCI_DEV, MCR_REG, reg);

/* Write bits 1:0 of BIOS_RESET_CPL in the PUNIT. */
reg = BIOS_RESET_CPL_ALL_DONE | BIOS_RESET_CPL_RESET_DONE;
pci_write_config32(IOSF_PCI_DEV, MDR_REG, reg);
reg = IOSF_OPCODE(IOSF_OP_WRITE_PMC) | IOSF_PORT(IOSF_PORT_PMC) |
IOSF_REG(BIOS_RESET_CPL) | IOSF_BYTE_EN_0;
pci_write_config32(IOSF_PCI_DEV, MCR_REG, reg);
}
2 changes: 2 additions & 0 deletions src/soc/intel/baytrail/romstage/romstage.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ void romstage_common(struct romstage_params *params)

console_init();

punit_init();

gfx_init();

mark_ts(params, timestamp_get());
Expand Down

0 comments on commit 189aa3e

Please sign in to comment.