Skip to content

Commit 6c043b6

Browse files
BenjaminLimJLsieumunt
authored andcommitted
fix(intel): mailbox store QSPI ref clk in scratch reg
When HPS requests QSPI controller access the SDM returns the QSPI reference clock frequency. Store the provided reference clock frequency (in kHz) in BOOT_SCRATCH_COLD_0 register (bits [27:0]) as u-boot QSPI driver expects this. Signed-off-by: Jit Loon Lim <jit.loon.lim@intel.com>
1 parent 7118239 commit 6c043b6

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

plat/intel/soc/common/include/socfpga_system_manager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#define IDLE_DATA_SOC2FPGA BIT(0)
4343
#define IDLE_DATA_MASK (IDLE_DATA_LWSOC2FPGA | IDLE_DATA_SOC2FPGA)
4444

45+
#define SYSMGR_QSPI_REFCLK_MASK GENMASK(27, 0)
46+
4547
#define SYSMGR_ECC_OCRAM_MASK BIT(1)
4648
#define SYSMGR_ECC_DDR0_MASK BIT(16)
4749
#define SYSMGR_ECC_DDR1_MASK BIT(17)

plat/intel/soc/common/soc/socfpga_mailbox.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include "socfpga_mailbox.h"
1212
#include "socfpga_sip_svc.h"
13+
#include "socfpga_system_manager.h"
1314

1415
static mailbox_payload_t mailbox_resp_payload;
1516
static mailbox_container_t mailbox_resp_ctr = {0, 0, &mailbox_resp_payload};
@@ -464,8 +465,26 @@ void mailbox_set_qspi_open(void)
464465

465466
void mailbox_set_qspi_direct(void)
466467
{
468+
uint32_t response[1], qspi_clk, reg;
469+
unsigned int resp_len = ARRAY_SIZE(response);
470+
467471
mailbox_send_cmd(MBOX_JOB_ID, MBOX_CMD_QSPI_DIRECT, NULL, 0U,
468-
CMD_CASUAL, NULL, NULL);
472+
CMD_CASUAL, response, &resp_len);
473+
474+
qspi_clk = response[0];
475+
INFO("QSPI ref clock: %u\n", qspi_clk);
476+
477+
/*
478+
* Store QSPI ref clock frequency in BOOT_SCRATCH_COLD_0 register for
479+
* later boot loader (i.e. u-boot) use.
480+
* The frequency is stored in kHz and occupies BOOT_SCRATCH_COLD_0
481+
* register bits[27:0].
482+
*/
483+
qspi_clk /= 1000;
484+
reg = mmio_read_32(SOCFPGA_SYSMGR(BOOT_SCRATCH_COLD_0));
485+
reg &= ~SYSMGR_QSPI_REFCLK_MASK;
486+
reg |= qspi_clk & SYSMGR_QSPI_REFCLK_MASK;
487+
mmio_write_32(SOCFPGA_SYSMGR(BOOT_SCRATCH_COLD_0), reg);
469488
}
470489

471490
void mailbox_set_qspi_close(void)

0 commit comments

Comments
 (0)