aboutsummaryrefslogtreecommitdiff
path: root/hw/sd/sd.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-05-12 12:11:32 +0100
committerPeter Maydell <peter.maydell@linaro.org>2015-05-12 12:11:32 +0100
commit968bb75c348a401b85e08d5eb1887a3e6c3185f5 (patch)
tree9a7a773e344aa200cdc85a0edd41baaf73ce770b /hw/sd/sd.c
parent19fbe5084c1da6af95177c86e4cab64241d479a8 (diff)
parent5ae79fe825bedc89db8b6bde9d0ed0bb5d59558c (diff)
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20150512' into staging
target-arm queue: * Support TZ and grouping in the GIC * hw/sd: sd_reset cleanup * armv7m_nvic: fix bug in systick device # gpg: Signature made Tue May 12 12:02:26 2015 BST using RSA key ID 14360CDE # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" * remotes/pmaydell/tags/pull-target-arm-20150512: hw/arm/highbank.c: Wire FIQ between CPU <> GIC hw/arm/vexpress.c: Wire FIQ between CPU <> GIC hw/arm/virt.c: Wire FIQ between CPU <> GIC hw/intc/arm_gic: Add grouping support to gic_update() hw/intc/arm_gic: Change behavior of IAR writes hw/intc/arm_gic: Change behavior of EOIR writes hw/intc/arm_gic: Handle grouping for GICC_HPPIR hw/intc/arm_gic: Restrict priority view hw/intc/arm_gic: Implement Non-secure view of RPR hw/intc/arm_gic: Make ICCICR/GICC_CTLR banked hw/intc/arm_gic: Make ICCBPR/GICC_BPR banked hw/intc/arm_gic: Make ICDDCR/GICD_CTLR banked hw/intc/arm_gic_kvm.c: Save and restore GICD_IGROUPRn state hw/intc/arm_gic: Add Interrupt Group Registers hw/intc/arm_gic: Switch to read/write callbacks with tx attributes hw/intc/arm_gic: Add Security Extensions property hw/intc/arm_gic: Create outbound FIQ lines hw/sd: Don't pass BlockBackend to sd_reset() armv7m_nvic: systick: Reload the RELOAD value and count down only if ENABLE bit is set Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/sd/sd.c')
-rw-r--r--hw/sd/sd.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 8abf0c9e31..a1ff465a67 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -389,13 +389,13 @@ static inline uint64_t sd_addr_to_wpnum(uint64_t addr)
return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT);
}
-static void sd_reset(SDState *sd, BlockBackend *blk)
+static void sd_reset(SDState *sd)
{
uint64_t size;
uint64_t sect;
- if (blk) {
- blk_get_geometry(blk, &sect);
+ if (sd->blk) {
+ blk_get_geometry(sd->blk, &sect);
} else {
sect = 0;
}
@@ -412,11 +412,9 @@ static void sd_reset(SDState *sd, BlockBackend *blk)
sd_set_cardstatus(sd);
sd_set_sdstatus(sd);
- sd->blk = blk;
-
if (sd->wp_groups)
g_free(sd->wp_groups);
- sd->wp_switch = blk ? blk_is_read_only(blk) : false;
+ sd->wp_switch = sd->blk ? blk_is_read_only(sd->blk) : false;
sd->wpgrps_size = sect;
sd->wp_groups = bitmap_new(sd->wpgrps_size);
memset(sd->function_group, 0, sizeof(sd->function_group));
@@ -434,7 +432,7 @@ static void sd_cardchange(void *opaque, bool load)
qemu_set_irq(sd->inserted_cb, blk_is_inserted(sd->blk));
if (blk_is_inserted(sd->blk)) {
- sd_reset(sd, sd->blk);
+ sd_reset(sd);
qemu_set_irq(sd->readonly_cb, sd->wp_switch);
}
}
@@ -492,7 +490,8 @@ SDState *sd_init(BlockBackend *blk, bool is_spi)
sd->buf = blk_blockalign(blk, 512);
sd->spi = is_spi;
sd->enable = true;
- sd_reset(sd, blk);
+ sd->blk = blk;
+ sd_reset(sd);
if (sd->blk) {
blk_attach_dev_nofail(sd->blk, sd);
blk_set_dev_ops(sd->blk, &sd_block_ops, sd);
@@ -680,7 +679,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
default:
sd->state = sd_idle_state;
- sd_reset(sd, sd->blk);
+ sd_reset(sd);
return sd->spi ? sd_r1 : sd_r0;
}
break;