Lines Matching full:fl
266 AspeedSMCFlash *fl = &s->flashes[cs]; in aspeed_smc_flash_set_segment_region() local
272 memory_region_set_size(&fl->mmio, seg.size); in aspeed_smc_flash_set_segment_region()
273 memory_region_set_address(&fl->mmio, seg.addr - asc->flash_window_base); in aspeed_smc_flash_set_segment_region()
274 memory_region_set_enabled(&fl->mmio, !!seg.size); in aspeed_smc_flash_set_segment_region()
366 static inline int aspeed_smc_flash_mode(const AspeedSMCFlash *fl) in aspeed_smc_flash_mode() argument
368 const AspeedSMCState *s = fl->controller; in aspeed_smc_flash_mode()
370 return s->regs[s->r_ctrl0 + fl->cs] & CTRL_CMD_MODE_MASK; in aspeed_smc_flash_mode()
373 static inline bool aspeed_smc_is_writable(const AspeedSMCFlash *fl) in aspeed_smc_is_writable() argument
375 const AspeedSMCState *s = fl->controller; in aspeed_smc_is_writable()
377 return s->regs[s->r_conf] & (1 << (s->conf_enable_w0 + fl->cs)); in aspeed_smc_is_writable()
380 static inline int aspeed_smc_flash_cmd(const AspeedSMCFlash *fl) in aspeed_smc_flash_cmd() argument
382 const AspeedSMCState *s = fl->controller; in aspeed_smc_flash_cmd()
383 int cmd = (s->regs[s->r_ctrl0 + fl->cs] >> CTRL_CMD_SHIFT) & CTRL_CMD_MASK; in aspeed_smc_flash_cmd()
391 if (aspeed_smc_flash_mode(fl) == CTRL_READMODE) { in aspeed_smc_flash_cmd()
397 aspeed_smc_flash_mode(fl)); in aspeed_smc_flash_cmd()
403 static inline int aspeed_smc_flash_addr_width(const AspeedSMCFlash *fl) in aspeed_smc_flash_addr_width() argument
405 const AspeedSMCState *s = fl->controller; in aspeed_smc_flash_addr_width()
406 AspeedSMCClass *asc = fl->asc; in aspeed_smc_flash_addr_width()
411 return s->regs[s->r_ce_ctrl] & (1 << (CTRL_EXTENDED0 + fl->cs)) ? 4 : 3; in aspeed_smc_flash_addr_width()
415 static void aspeed_smc_flash_do_select(AspeedSMCFlash *fl, bool unselect) in aspeed_smc_flash_do_select() argument
417 AspeedSMCState *s = fl->controller; in aspeed_smc_flash_do_select()
419 trace_aspeed_smc_flash_select(fl->cs, unselect ? "un" : ""); in aspeed_smc_flash_do_select()
421 qemu_set_irq(s->cs_lines[fl->cs], unselect); in aspeed_smc_flash_do_select()
424 static void aspeed_smc_flash_select(AspeedSMCFlash *fl) in aspeed_smc_flash_select() argument
426 aspeed_smc_flash_do_select(fl, false); in aspeed_smc_flash_select()
429 static void aspeed_smc_flash_unselect(AspeedSMCFlash *fl) in aspeed_smc_flash_unselect() argument
431 aspeed_smc_flash_do_select(fl, true); in aspeed_smc_flash_unselect()
434 static uint32_t aspeed_smc_check_segment_addr(const AspeedSMCFlash *fl, in aspeed_smc_check_segment_addr() argument
437 const AspeedSMCState *s = fl->controller; in aspeed_smc_check_segment_addr()
438 AspeedSMCClass *asc = fl->asc; in aspeed_smc_check_segment_addr()
441 asc->reg_to_segment(s, s->regs[R_SEG_ADDR0 + fl->cs], &seg); in aspeed_smc_check_segment_addr()
445 addr, fl->cs, seg.addr, seg.addr + seg.size); in aspeed_smc_check_segment_addr()
452 static int aspeed_smc_flash_dummies(const AspeedSMCFlash *fl) in aspeed_smc_flash_dummies() argument
454 const AspeedSMCState *s = fl->controller; in aspeed_smc_flash_dummies()
455 uint32_t r_ctrl0 = s->regs[s->r_ctrl0 + fl->cs]; in aspeed_smc_flash_dummies()
467 static void aspeed_smc_flash_setup(AspeedSMCFlash *fl, uint32_t addr) in aspeed_smc_flash_setup() argument
469 const AspeedSMCState *s = fl->controller; in aspeed_smc_flash_setup()
470 uint8_t cmd = aspeed_smc_flash_cmd(fl); in aspeed_smc_flash_setup()
471 int i = aspeed_smc_flash_addr_width(fl); in aspeed_smc_flash_setup()
474 addr = aspeed_smc_check_segment_addr(fl, addr); in aspeed_smc_flash_setup()
489 if (aspeed_smc_flash_mode(fl) == CTRL_FREADMODE) { in aspeed_smc_flash_setup()
490 for (i = 0; i < aspeed_smc_flash_dummies(fl); i++) { in aspeed_smc_flash_setup()
491 ssi_transfer(fl->controller->spi, s->regs[R_DUMMY_DATA] & 0xff); in aspeed_smc_flash_setup()
498 AspeedSMCFlash *fl = opaque; in aspeed_smc_flash_read() local
499 AspeedSMCState *s = fl->controller; in aspeed_smc_flash_read()
503 switch (aspeed_smc_flash_mode(fl)) { in aspeed_smc_flash_read()
511 aspeed_smc_flash_select(fl); in aspeed_smc_flash_read()
512 aspeed_smc_flash_setup(fl, addr); in aspeed_smc_flash_read()
518 aspeed_smc_flash_unselect(fl); in aspeed_smc_flash_read()
521 aspeed_smc_error("invalid flash mode %d", aspeed_smc_flash_mode(fl)); in aspeed_smc_flash_read()
524 trace_aspeed_smc_flash_read(fl->cs, addr, size, ret, in aspeed_smc_flash_read()
525 aspeed_smc_flash_mode(fl)); in aspeed_smc_flash_read()
575 static bool aspeed_smc_do_snoop(AspeedSMCFlash *fl, uint64_t data, in aspeed_smc_do_snoop() argument
578 AspeedSMCState *s = fl->controller; in aspeed_smc_do_snoop()
579 uint8_t addr_width = aspeed_smc_flash_addr_width(fl); in aspeed_smc_do_snoop()
581 trace_aspeed_smc_do_snoop(fl->cs, s->snoop_index, s->snoop_dummies, in aspeed_smc_do_snoop()
630 AspeedSMCFlash *fl = opaque; in aspeed_smc_flash_write() local
631 AspeedSMCState *s = fl->controller; in aspeed_smc_flash_write()
634 trace_aspeed_smc_flash_write(fl->cs, addr, size, data, in aspeed_smc_flash_write()
635 aspeed_smc_flash_mode(fl)); in aspeed_smc_flash_write()
637 if (!aspeed_smc_is_writable(fl)) { in aspeed_smc_flash_write()
642 switch (aspeed_smc_flash_mode(fl)) { in aspeed_smc_flash_write()
644 if (aspeed_smc_do_snoop(fl, data, size)) { in aspeed_smc_flash_write()
653 aspeed_smc_flash_select(fl); in aspeed_smc_flash_write()
654 aspeed_smc_flash_setup(fl, addr); in aspeed_smc_flash_write()
660 aspeed_smc_flash_unselect(fl); in aspeed_smc_flash_write()
663 aspeed_smc_error("invalid flash mode %d", aspeed_smc_flash_mode(fl)); in aspeed_smc_flash_write()
677 static void aspeed_smc_flash_update_ctrl(AspeedSMCFlash *fl, uint32_t value) in aspeed_smc_flash_update_ctrl() argument
679 AspeedSMCState *s = fl->controller; in aspeed_smc_flash_update_ctrl()
684 old_mode = s->regs[s->r_ctrl0 + fl->cs] & CTRL_CMD_MODE_MASK; in aspeed_smc_flash_update_ctrl()
693 if (!(s->regs[s->r_ctrl0 + fl->cs] & CTRL_CE_STOP_ACTIVE) && in aspeed_smc_flash_update_ctrl()
703 s->regs[s->r_ctrl0 + fl->cs] = value; in aspeed_smc_flash_update_ctrl()
707 aspeed_smc_flash_do_select(fl, unselect); in aspeed_smc_flash_update_ctrl()
1254 AspeedSMCFlash *fl = &s->flashes[i]; in aspeed_smc_realize() local
1256 if (!object_property_set_link(OBJECT(fl), "controller", OBJECT(s), in aspeed_smc_realize()
1260 if (!object_property_set_uint(OBJECT(fl), "cs", i, errp)) { in aspeed_smc_realize()
1263 if (!sysbus_realize(SYS_BUS_DEVICE(fl), errp)) { in aspeed_smc_realize()
1267 memory_region_add_subregion(&s->mmio_flash, offset, &fl->mmio); in aspeed_smc_realize()