Lines Matching refs:controller

94 	struct aspeed_smc_controller *controller;  member
197 #define SEGMENT_ADDR_REG(controller, cs) \ argument
198 ((controller)->regs + SEGMENT_ADDR_REG0 + (cs) * 4)
258 return BIT(chip->controller->info->we0 + chip->cs); in aspeed_smc_chip_write_bit()
263 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_check_config() local
266 reg = readl(controller->regs + CONFIG_REG); in aspeed_smc_chip_check_config()
271 dev_dbg(controller->dev, "config write is not set ! @%p: 0x%08x\n", in aspeed_smc_chip_check_config()
272 controller->regs + CONFIG_REG, reg); in aspeed_smc_chip_check_config()
274 writel(reg, controller->regs + CONFIG_REG); in aspeed_smc_chip_check_config()
312 mutex_lock(&chip->controller->mutex); in aspeed_smc_prep()
320 mutex_unlock(&chip->controller->mutex); in aspeed_smc_unprep()
401 static int aspeed_smc_unregister(struct aspeed_smc_controller *controller) in aspeed_smc_unregister() argument
406 for (n = 0; n < controller->info->nce; n++) { in aspeed_smc_unregister()
407 chip = controller->chips[n]; in aspeed_smc_unregister()
439 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_base() local
443 if (controller->info->nce > 1) { in aspeed_smc_chip_base()
444 reg = readl(SEGMENT_ADDR_REG(controller, chip->cs)); in aspeed_smc_chip_base()
452 return controller->ahb_base + offset; in aspeed_smc_chip_base()
455 static u32 aspeed_smc_ahb_base_phy(struct aspeed_smc_controller *controller) in aspeed_smc_ahb_base_phy() argument
457 u32 seg0_val = readl(SEGMENT_ADDR_REG(controller, 0)); in aspeed_smc_ahb_base_phy()
465 struct aspeed_smc_controller *controller = chip->controller; in chip_set_segment() local
469 ahb_base_phy = aspeed_smc_ahb_base_phy(controller); in chip_set_segment()
471 seg_reg = SEGMENT_ADDR_REG(controller, cs); in chip_set_segment()
486 if (start + size > ahb_base_phy + controller->ahb_window_size) { in chip_set_segment()
487 size = ahb_base_phy + controller->ahb_window_size - start; in chip_set_segment()
525 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_set_segment() local
533 if (size > controller->info->maxsize) in aspeed_smc_chip_set_segment()
534 size = controller->info->maxsize; in aspeed_smc_chip_set_segment()
541 if (controller->info == &spi_2400_info) in aspeed_smc_chip_set_segment()
550 if (chip->cs == 0 && controller->info == &spi_2500_info && in aspeed_smc_chip_set_segment()
558 ahb_base_phy = aspeed_smc_ahb_base_phy(controller); in aspeed_smc_chip_set_segment()
566 u32 prev = readl(SEGMENT_ADDR_REG(controller, chip->cs - 1)); in aspeed_smc_chip_set_segment()
576 chip->ahb_base = controller->ahb_base + (start - ahb_base_phy); in aspeed_smc_chip_set_segment()
583 if (chip->cs < controller->info->nce - 1) in aspeed_smc_chip_set_segment()
597 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_enable_write() local
600 reg = readl(controller->regs + CONFIG_REG); in aspeed_smc_chip_enable_write()
603 writel(reg, controller->regs + CONFIG_REG); in aspeed_smc_chip_enable_write()
608 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_set_type() local
613 reg = readl(controller->regs + CONFIG_REG); in aspeed_smc_chip_set_type()
616 writel(reg, controller->regs + CONFIG_REG); in aspeed_smc_chip_set_type()
626 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_set_4b() local
629 reg = readl(controller->regs + CE_CONTROL_REG); in aspeed_smc_chip_set_4b()
631 writel(reg, controller->regs + CE_CONTROL_REG); in aspeed_smc_chip_set_4b()
648 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_setup_init() local
649 const struct aspeed_smc_info *info = controller->info; in aspeed_smc_chip_setup_init()
678 dev_dbg(controller->dev, "control register: %08x\n", reg); in aspeed_smc_chip_setup_init()
682 dev_dbg(controller->dev, in aspeed_smc_chip_setup_init()
700 dev_dbg(controller->dev, "default control register: %08x\n", in aspeed_smc_chip_setup_init()
707 struct aspeed_smc_controller *controller = chip->controller; in aspeed_smc_chip_setup_finish() local
708 const struct aspeed_smc_info *info = controller->info; in aspeed_smc_chip_setup_finish()
724 dev_dbg(controller->dev, "write control register: %08x\n", in aspeed_smc_chip_setup_finish()
744 dev_dbg(controller->dev, "base control register: %08x\n", in aspeed_smc_chip_setup_finish()
749 static int aspeed_smc_setup_flash(struct aspeed_smc_controller *controller, in aspeed_smc_setup_flash() argument
757 const struct aspeed_smc_info *info = controller->info; in aspeed_smc_setup_flash()
758 struct device *dev = controller->dev; in aspeed_smc_setup_flash()
785 if (controller->chips[cs]) { in aspeed_smc_setup_flash()
787 cs, dev_name(controller->chips[cs]->nor.dev)); in aspeed_smc_setup_flash()
792 chip = devm_kzalloc(controller->dev, sizeof(*chip), GFP_KERNEL); in aspeed_smc_setup_flash()
798 chip->controller = controller; in aspeed_smc_setup_flash()
799 chip->ctl = controller->regs + info->ctl0 + cs * 4; in aspeed_smc_setup_flash()
836 controller->chips[cs] = chip; in aspeed_smc_setup_flash()
841 aspeed_smc_unregister(controller); in aspeed_smc_setup_flash()
851 struct aspeed_smc_controller *controller; in aspeed_smc_probe() local
862 controller = devm_kzalloc(&pdev->dev, in aspeed_smc_probe()
863 struct_size(controller, chips, info->nce), in aspeed_smc_probe()
865 if (!controller) in aspeed_smc_probe()
867 controller->info = info; in aspeed_smc_probe()
868 controller->dev = dev; in aspeed_smc_probe()
870 mutex_init(&controller->mutex); in aspeed_smc_probe()
871 platform_set_drvdata(pdev, controller); in aspeed_smc_probe()
874 controller->regs = devm_ioremap_resource(dev, res); in aspeed_smc_probe()
875 if (IS_ERR(controller->regs)) in aspeed_smc_probe()
876 return PTR_ERR(controller->regs); in aspeed_smc_probe()
879 controller->ahb_base = devm_ioremap_resource(dev, res); in aspeed_smc_probe()
880 if (IS_ERR(controller->ahb_base)) in aspeed_smc_probe()
881 return PTR_ERR(controller->ahb_base); in aspeed_smc_probe()
883 controller->ahb_window_size = resource_size(res); in aspeed_smc_probe()
885 ret = aspeed_smc_setup_flash(controller, np, res); in aspeed_smc_probe()