[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/5] aspeed/smc: Do not map disabled segment on the AST2600
From: |
Joel Stanley |
Subject: |
Re: [PATCH 2/5] aspeed/smc: Do not map disabled segment on the AST2600 |
Date: |
Mon, 18 Nov 2019 07:13:42 +0000 |
On Thu, 14 Nov 2019 at 09:46, Cédric Le Goater <address@hidden> wrote:
>
> The segments can be disabled on the AST2600 (zero register value).
> CS0 is open by default but not the other CS. This is closing the
> access to the flash device in user mode and forbids scanning.
>
> In the model, check the segment size and disable the associated region
> when the value is zero.
>
> Fixes: bcaa8ddd081c ("aspeed/smc: Add AST2600 support")
> Signed-off-by: Cédric Le Goater <address@hidden>
Reviewed-by: Joel Stanley <address@hidden>
> ---
> hw/ssi/aspeed_smc.c | 16 +++++++++++-----
> 1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c
> index 955ec21852ac..86cadbe4cc00 100644
> --- a/hw/ssi/aspeed_smc.c
> +++ b/hw/ssi/aspeed_smc.c
> @@ -444,8 +444,13 @@ static void aspeed_2600_smc_reg_to_segment(const
> AspeedSMCState *s,
> uint32_t start_offset = (reg << 16) & AST2600_SEG_ADDR_MASK;
> uint32_t end_offset = reg & AST2600_SEG_ADDR_MASK;
>
> - seg->addr = s->ctrl->flash_window_base + start_offset;
> - seg->size = end_offset + MiB - start_offset;
> + if (reg) {
> + seg->addr = s->ctrl->flash_window_base + start_offset;
> + seg->size = end_offset + MiB - start_offset;
> + } else {
> + seg->addr = s->ctrl->flash_window_base;
> + seg->size = 0;
> + }
> }
>
> static bool aspeed_smc_flash_overlap(const AspeedSMCState *s,
> @@ -486,7 +491,7 @@ static void
> aspeed_smc_flash_set_segment_region(AspeedSMCState *s, int cs,
> memory_region_transaction_begin();
> memory_region_set_size(&fl->mmio, seg.size);
> memory_region_set_address(&fl->mmio, seg.addr -
> s->ctrl->flash_window_base);
> - memory_region_set_enabled(&fl->mmio, true);
> + memory_region_set_enabled(&fl->mmio, !!seg.size);
> memory_region_transaction_commit();
>
> s->regs[R_SEG_ADDR0 + cs] = regval;
> @@ -526,8 +531,9 @@ static void aspeed_smc_flash_set_segment(AspeedSMCState
> *s, int cs,
> }
>
> /* Keep the segment in the overall flash window */
> - if (seg.addr + seg.size <= s->ctrl->flash_window_base ||
> - seg.addr > s->ctrl->flash_window_base + s->ctrl->flash_window_size) {
> + if (seg.size &&
> + (seg.addr + seg.size <= s->ctrl->flash_window_base ||
> + seg.addr > s->ctrl->flash_window_base +
> s->ctrl->flash_window_size)) {
> qemu_log_mask(LOG_GUEST_ERROR, "%s: new segment for CS%d is invalid
> : "
> "[ 0x%"HWADDR_PRIx" - 0x%"HWADDR_PRIx" ]\n",
> s->ctrl->name, cs, seg.addr, seg.addr + seg.size);
> --
> 2.21.0
>
- [PATCH 0/5] aspeed: AST2600 SMC fixes and tacoma-bmc machine, Cédric Le Goater, 2019/11/14
- [PATCH 1/5] aspeed/smc: Restore default AHB window mapping at reset, Cédric Le Goater, 2019/11/14
- [PATCH 2/5] aspeed/smc: Do not map disabled segment on the AST2600, Cédric Le Goater, 2019/11/14
- Re: [PATCH 2/5] aspeed/smc: Do not map disabled segment on the AST2600,
Joel Stanley <=
- [PATCH 3/5] aspeed/smc: Add AST2600 timings registers, Cédric Le Goater, 2019/11/14
- [PATCH 4/5] aspeed: Remove AspeedBoardConfig array and use AspeedMachineClass, Cédric Le Goater, 2019/11/14
- [PATCH 5/5] aspeed: Add support for the tacoma-bmc board, Cédric Le Goater, 2019/11/14