diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2009-02-01 12:53:26 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-02-01 12:53:26 -0500 |
commit | de8696203e64f19ea26f8e096ac8a796e78216b3 (patch) | |
tree | d932f2f04d6c81c75c5104ae86b1e5d47e6591e3 /drivers | |
parent | 807a96cd0e5f5311e7f7a1030b43aab624cd7d9f (diff) | |
parent | 0dc23d704874e892c3fb5f2c0e4dfbef3c9c6edf (diff) |
Merge branch 'omap-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/edac/cell_edac.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 161 | ||||
-rw-r--r-- | drivers/mtd/nand/fsl_elbc_nand.c | 8 | ||||
-rw-r--r-- | drivers/mtd/nand/pasemi_nand.c | 4 | ||||
-rw-r--r-- | drivers/net/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/fec.c | 2 | ||||
-rw-r--r-- | drivers/serial/mcf.c | 11 |
7 files changed, 46 insertions, 150 deletions
diff --git a/drivers/edac/cell_edac.c b/drivers/edac/cell_edac.c index cd2e3b8087e7..24f3ca851523 100644 --- a/drivers/edac/cell_edac.c +++ b/drivers/edac/cell_edac.c | |||
@@ -36,7 +36,7 @@ static void cell_edac_count_ce(struct mem_ctl_info *mci, int chan, u64 ar) | |||
36 | struct csrow_info *csrow = &mci->csrows[0]; | 36 | struct csrow_info *csrow = &mci->csrows[0]; |
37 | unsigned long address, pfn, offset, syndrome; | 37 | unsigned long address, pfn, offset, syndrome; |
38 | 38 | ||
39 | dev_dbg(mci->dev, "ECC CE err on node %d, channel %d, ar = 0x%016lx\n", | 39 | dev_dbg(mci->dev, "ECC CE err on node %d, channel %d, ar = 0x%016llx\n", |
40 | priv->node, chan, ar); | 40 | priv->node, chan, ar); |
41 | 41 | ||
42 | /* Address decoding is likely a bit bogus, to dbl check */ | 42 | /* Address decoding is likely a bit bogus, to dbl check */ |
@@ -58,7 +58,7 @@ static void cell_edac_count_ue(struct mem_ctl_info *mci, int chan, u64 ar) | |||
58 | struct csrow_info *csrow = &mci->csrows[0]; | 58 | struct csrow_info *csrow = &mci->csrows[0]; |
59 | unsigned long address, pfn, offset; | 59 | unsigned long address, pfn, offset; |
60 | 60 | ||
61 | dev_dbg(mci->dev, "ECC UE err on node %d, channel %d, ar = 0x%016lx\n", | 61 | dev_dbg(mci->dev, "ECC UE err on node %d, channel %d, ar = 0x%016llx\n", |
62 | priv->node, chan, ar); | 62 | priv->node, chan, ar); |
63 | 63 | ||
64 | /* Address decoding is likely a bit bogus, to dbl check */ | 64 | /* Address decoding is likely a bit bogus, to dbl check */ |
@@ -169,7 +169,7 @@ static int __devinit cell_edac_probe(struct platform_device *pdev) | |||
169 | 169 | ||
170 | /* Get channel population */ | 170 | /* Get channel population */ |
171 | reg = in_be64(®s->mic_mnt_cfg); | 171 | reg = in_be64(®s->mic_mnt_cfg); |
172 | dev_dbg(&pdev->dev, "MIC_MNT_CFG = 0x%016lx\n", reg); | 172 | dev_dbg(&pdev->dev, "MIC_MNT_CFG = 0x%016llx\n", reg); |
173 | chanmask = 0; | 173 | chanmask = 0; |
174 | if (reg & CBE_MIC_MNT_CFG_CHAN_0_POP) | 174 | if (reg & CBE_MIC_MNT_CFG_CHAN_0_POP) |
175 | chanmask |= 0x1; | 175 | chanmask |= 0x1; |
@@ -180,7 +180,7 @@ static int __devinit cell_edac_probe(struct platform_device *pdev) | |||
180 | "Yuck ! No channel populated ? Aborting !\n"); | 180 | "Yuck ! No channel populated ? Aborting !\n"); |
181 | return -ENODEV; | 181 | return -ENODEV; |
182 | } | 182 | } |
183 | dev_dbg(&pdev->dev, "Initial FIR = 0x%016lx\n", | 183 | dev_dbg(&pdev->dev, "Initial FIR = 0x%016llx\n", |
184 | in_be64(®s->mic_fir)); | 184 | in_be64(®s->mic_fir)); |
185 | 185 | ||
186 | /* Allocate & init EDAC MC data structure */ | 186 | /* Allocate & init EDAC MC data structure */ |
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 477caa1b1e4b..69aa0ab28403 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -106,8 +106,6 @@ void drm_vblank_cleanup(struct drm_device *dev) | |||
106 | 106 | ||
107 | drm_free(dev->vbl_queue, sizeof(*dev->vbl_queue) * dev->num_crtcs, | 107 | drm_free(dev->vbl_queue, sizeof(*dev->vbl_queue) * dev->num_crtcs, |
108 | DRM_MEM_DRIVER); | 108 | DRM_MEM_DRIVER); |
109 | drm_free(dev->vbl_sigs, sizeof(*dev->vbl_sigs) * dev->num_crtcs, | ||
110 | DRM_MEM_DRIVER); | ||
111 | drm_free(dev->_vblank_count, sizeof(*dev->_vblank_count) * | 109 | drm_free(dev->_vblank_count, sizeof(*dev->_vblank_count) * |
112 | dev->num_crtcs, DRM_MEM_DRIVER); | 110 | dev->num_crtcs, DRM_MEM_DRIVER); |
113 | drm_free(dev->vblank_refcount, sizeof(*dev->vblank_refcount) * | 111 | drm_free(dev->vblank_refcount, sizeof(*dev->vblank_refcount) * |
@@ -132,7 +130,6 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs) | |||
132 | setup_timer(&dev->vblank_disable_timer, vblank_disable_fn, | 130 | setup_timer(&dev->vblank_disable_timer, vblank_disable_fn, |
133 | (unsigned long)dev); | 131 | (unsigned long)dev); |
134 | spin_lock_init(&dev->vbl_lock); | 132 | spin_lock_init(&dev->vbl_lock); |
135 | atomic_set(&dev->vbl_signal_pending, 0); | ||
136 | dev->num_crtcs = num_crtcs; | 133 | dev->num_crtcs = num_crtcs; |
137 | 134 | ||
138 | dev->vbl_queue = drm_alloc(sizeof(wait_queue_head_t) * num_crtcs, | 135 | dev->vbl_queue = drm_alloc(sizeof(wait_queue_head_t) * num_crtcs, |
@@ -140,11 +137,6 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs) | |||
140 | if (!dev->vbl_queue) | 137 | if (!dev->vbl_queue) |
141 | goto err; | 138 | goto err; |
142 | 139 | ||
143 | dev->vbl_sigs = drm_alloc(sizeof(struct list_head) * num_crtcs, | ||
144 | DRM_MEM_DRIVER); | ||
145 | if (!dev->vbl_sigs) | ||
146 | goto err; | ||
147 | |||
148 | dev->_vblank_count = drm_alloc(sizeof(atomic_t) * num_crtcs, | 140 | dev->_vblank_count = drm_alloc(sizeof(atomic_t) * num_crtcs, |
149 | DRM_MEM_DRIVER); | 141 | DRM_MEM_DRIVER); |
150 | if (!dev->_vblank_count) | 142 | if (!dev->_vblank_count) |
@@ -177,7 +169,6 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs) | |||
177 | /* Zero per-crtc vblank stuff */ | 169 | /* Zero per-crtc vblank stuff */ |
178 | for (i = 0; i < num_crtcs; i++) { | 170 | for (i = 0; i < num_crtcs; i++) { |
179 | init_waitqueue_head(&dev->vbl_queue[i]); | 171 | init_waitqueue_head(&dev->vbl_queue[i]); |
180 | INIT_LIST_HEAD(&dev->vbl_sigs[i]); | ||
181 | atomic_set(&dev->_vblank_count[i], 0); | 172 | atomic_set(&dev->_vblank_count[i], 0); |
182 | atomic_set(&dev->vblank_refcount[i], 0); | 173 | atomic_set(&dev->vblank_refcount[i], 0); |
183 | } | 174 | } |
@@ -540,15 +531,10 @@ out: | |||
540 | * \param data user argument, pointing to a drm_wait_vblank structure. | 531 | * \param data user argument, pointing to a drm_wait_vblank structure. |
541 | * \return zero on success or a negative number on failure. | 532 | * \return zero on success or a negative number on failure. |
542 | * | 533 | * |
543 | * Verifies the IRQ is installed. | 534 | * This function enables the vblank interrupt on the pipe requested, then |
544 | * | 535 | * sleeps waiting for the requested sequence number to occur, and drops |
545 | * If a signal is requested checks if this task has already scheduled the same signal | 536 | * the vblank interrupt refcount afterwards. (vblank irq disable follows that |
546 | * for the same vblank sequence number - nothing to be done in | 537 | * after a timeout with no further vblank waits scheduled). |
547 | * that case. If the number of tasks waiting for the interrupt exceeds 100 the | ||
548 | * function fails. Otherwise adds a new entry to drm_device::vbl_sigs for this | ||
549 | * task. | ||
550 | * | ||
551 | * If a signal is not requested, then calls vblank_wait(). | ||
552 | */ | 538 | */ |
553 | int drm_wait_vblank(struct drm_device *dev, void *data, | 539 | int drm_wait_vblank(struct drm_device *dev, void *data, |
554 | struct drm_file *file_priv) | 540 | struct drm_file *file_priv) |
@@ -560,6 +546,9 @@ int drm_wait_vblank(struct drm_device *dev, void *data, | |||
560 | if ((!dev->pdev->irq) || (!dev->irq_enabled)) | 546 | if ((!dev->pdev->irq) || (!dev->irq_enabled)) |
561 | return -EINVAL; | 547 | return -EINVAL; |
562 | 548 | ||
549 | if (vblwait->request.type & _DRM_VBLANK_SIGNAL) | ||
550 | return -EINVAL; | ||
551 | |||
563 | if (vblwait->request.type & | 552 | if (vblwait->request.type & |
564 | ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK)) { | 553 | ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK)) { |
565 | DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n", | 554 | DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n", |
@@ -597,89 +586,26 @@ int drm_wait_vblank(struct drm_device *dev, void *data, | |||
597 | vblwait->request.sequence = seq + 1; | 586 | vblwait->request.sequence = seq + 1; |
598 | } | 587 | } |
599 | 588 | ||
600 | if (flags & _DRM_VBLANK_SIGNAL) { | 589 | DRM_DEBUG("waiting on vblank count %d, crtc %d\n", |
601 | unsigned long irqflags; | 590 | vblwait->request.sequence, crtc); |
602 | struct list_head *vbl_sigs = &dev->vbl_sigs[crtc]; | 591 | dev->last_vblank_wait[crtc] = vblwait->request.sequence; |
603 | struct drm_vbl_sig *vbl_sig; | 592 | DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ, |
604 | 593 | (((drm_vblank_count(dev, crtc) - | |
605 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 594 | vblwait->request.sequence) <= (1 << 23)) || |
606 | 595 | !dev->irq_enabled)); | |
607 | /* Check if this task has already scheduled the same signal | ||
608 | * for the same vblank sequence number; nothing to be done in | ||
609 | * that case | ||
610 | */ | ||
611 | list_for_each_entry(vbl_sig, vbl_sigs, head) { | ||
612 | if (vbl_sig->sequence == vblwait->request.sequence | ||
613 | && vbl_sig->info.si_signo == | ||
614 | vblwait->request.signal | ||
615 | && vbl_sig->task == current) { | ||
616 | spin_unlock_irqrestore(&dev->vbl_lock, | ||
617 | irqflags); | ||
618 | vblwait->reply.sequence = seq; | ||
619 | goto done; | ||
620 | } | ||
621 | } | ||
622 | |||
623 | if (atomic_read(&dev->vbl_signal_pending) >= 100) { | ||
624 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | ||
625 | ret = -EBUSY; | ||
626 | goto done; | ||
627 | } | ||
628 | |||
629 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | ||
630 | |||
631 | vbl_sig = drm_calloc(1, sizeof(struct drm_vbl_sig), | ||
632 | DRM_MEM_DRIVER); | ||
633 | if (!vbl_sig) { | ||
634 | ret = -ENOMEM; | ||
635 | goto done; | ||
636 | } | ||
637 | |||
638 | /* Get a refcount on the vblank, which will be released by | ||
639 | * drm_vbl_send_signals(). | ||
640 | */ | ||
641 | ret = drm_vblank_get(dev, crtc); | ||
642 | if (ret) { | ||
643 | drm_free(vbl_sig, sizeof(struct drm_vbl_sig), | ||
644 | DRM_MEM_DRIVER); | ||
645 | goto done; | ||
646 | } | ||
647 | |||
648 | atomic_inc(&dev->vbl_signal_pending); | ||
649 | |||
650 | vbl_sig->sequence = vblwait->request.sequence; | ||
651 | vbl_sig->info.si_signo = vblwait->request.signal; | ||
652 | vbl_sig->task = current; | ||
653 | 596 | ||
654 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 597 | if (ret != -EINTR) { |
655 | 598 | struct timeval now; | |
656 | list_add_tail(&vbl_sig->head, vbl_sigs); | ||
657 | 599 | ||
658 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | 600 | do_gettimeofday(&now); |
659 | 601 | ||
660 | vblwait->reply.sequence = seq; | 602 | vblwait->reply.tval_sec = now.tv_sec; |
603 | vblwait->reply.tval_usec = now.tv_usec; | ||
604 | vblwait->reply.sequence = drm_vblank_count(dev, crtc); | ||
605 | DRM_DEBUG("returning %d to client\n", | ||
606 | vblwait->reply.sequence); | ||
661 | } else { | 607 | } else { |
662 | DRM_DEBUG("waiting on vblank count %d, crtc %d\n", | 608 | DRM_DEBUG("vblank wait interrupted by signal\n"); |
663 | vblwait->request.sequence, crtc); | ||
664 | dev->last_vblank_wait[crtc] = vblwait->request.sequence; | ||
665 | DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ, | ||
666 | (((drm_vblank_count(dev, crtc) - | ||
667 | vblwait->request.sequence) <= (1 << 23)) || | ||
668 | !dev->irq_enabled)); | ||
669 | |||
670 | if (ret != -EINTR) { | ||
671 | struct timeval now; | ||
672 | |||
673 | do_gettimeofday(&now); | ||
674 | |||
675 | vblwait->reply.tval_sec = now.tv_sec; | ||
676 | vblwait->reply.tval_usec = now.tv_usec; | ||
677 | vblwait->reply.sequence = drm_vblank_count(dev, crtc); | ||
678 | DRM_DEBUG("returning %d to client\n", | ||
679 | vblwait->reply.sequence); | ||
680 | } else { | ||
681 | DRM_DEBUG("vblank wait interrupted by signal\n"); | ||
682 | } | ||
683 | } | 609 | } |
684 | 610 | ||
685 | done: | 611 | done: |
@@ -688,46 +614,6 @@ done: | |||
688 | } | 614 | } |
689 | 615 | ||
690 | /** | 616 | /** |
691 | * Send the VBLANK signals. | ||
692 | * | ||
693 | * \param dev DRM device. | ||
694 | * \param crtc CRTC where the vblank event occurred | ||
695 | * | ||
696 | * Sends a signal for each task in drm_device::vbl_sigs and empties the list. | ||
697 | * | ||
698 | * If a signal is not requested, then calls vblank_wait(). | ||
699 | */ | ||
700 | static void drm_vbl_send_signals(struct drm_device *dev, int crtc) | ||
701 | { | ||
702 | struct drm_vbl_sig *vbl_sig, *tmp; | ||
703 | struct list_head *vbl_sigs; | ||
704 | unsigned int vbl_seq; | ||
705 | unsigned long flags; | ||
706 | |||
707 | spin_lock_irqsave(&dev->vbl_lock, flags); | ||
708 | |||
709 | vbl_sigs = &dev->vbl_sigs[crtc]; | ||
710 | vbl_seq = drm_vblank_count(dev, crtc); | ||
711 | |||
712 | list_for_each_entry_safe(vbl_sig, tmp, vbl_sigs, head) { | ||
713 | if ((vbl_seq - vbl_sig->sequence) <= (1 << 23)) { | ||
714 | vbl_sig->info.si_code = vbl_seq; | ||
715 | send_sig_info(vbl_sig->info.si_signo, | ||
716 | &vbl_sig->info, vbl_sig->task); | ||
717 | |||
718 | list_del(&vbl_sig->head); | ||
719 | |||
720 | drm_free(vbl_sig, sizeof(*vbl_sig), | ||
721 | DRM_MEM_DRIVER); | ||
722 | atomic_dec(&dev->vbl_signal_pending); | ||
723 | drm_vblank_put(dev, crtc); | ||
724 | } | ||
725 | } | ||
726 | |||
727 | spin_unlock_irqrestore(&dev->vbl_lock, flags); | ||
728 | } | ||
729 | |||
730 | /** | ||
731 | * drm_handle_vblank - handle a vblank event | 617 | * drm_handle_vblank - handle a vblank event |
732 | * @dev: DRM device | 618 | * @dev: DRM device |
733 | * @crtc: where this event occurred | 619 | * @crtc: where this event occurred |
@@ -739,6 +625,5 @@ void drm_handle_vblank(struct drm_device *dev, int crtc) | |||
739 | { | 625 | { |
740 | atomic_inc(&dev->_vblank_count[crtc]); | 626 | atomic_inc(&dev->_vblank_count[crtc]); |
741 | DRM_WAKEUP(&dev->vbl_queue[crtc]); | 627 | DRM_WAKEUP(&dev->vbl_queue[crtc]); |
742 | drm_vbl_send_signals(dev, crtc); | ||
743 | } | 628 | } |
744 | EXPORT_SYMBOL(drm_handle_vblank); | 629 | EXPORT_SYMBOL(drm_handle_vblank); |
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c index 65929db29446..1f6eb2578717 100644 --- a/drivers/mtd/nand/fsl_elbc_nand.c +++ b/drivers/mtd/nand/fsl_elbc_nand.c | |||
@@ -676,7 +676,7 @@ static int fsl_elbc_chip_init_tail(struct mtd_info *mtd) | |||
676 | 676 | ||
677 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->numchips = %d\n", | 677 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->numchips = %d\n", |
678 | chip->numchips); | 678 | chip->numchips); |
679 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->chipsize = %ld\n", | 679 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->chipsize = %lld\n", |
680 | chip->chipsize); | 680 | chip->chipsize); |
681 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->pagemask = %8x\n", | 681 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->pagemask = %8x\n", |
682 | chip->pagemask); | 682 | chip->pagemask); |
@@ -703,7 +703,7 @@ static int fsl_elbc_chip_init_tail(struct mtd_info *mtd) | |||
703 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.layout = %p\n", | 703 | dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.layout = %p\n", |
704 | chip->ecc.layout); | 704 | chip->ecc.layout); |
705 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->flags = %08x\n", mtd->flags); | 705 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->flags = %08x\n", mtd->flags); |
706 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->size = %d\n", mtd->size); | 706 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->size = %lld\n", mtd->size); |
707 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->erasesize = %d\n", | 707 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->erasesize = %d\n", |
708 | mtd->erasesize); | 708 | mtd->erasesize); |
709 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->writesize = %d\n", | 709 | dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->writesize = %d\n", |
@@ -932,8 +932,8 @@ static int __devinit fsl_elbc_chip_probe(struct fsl_elbc_ctrl *ctrl, | |||
932 | #endif | 932 | #endif |
933 | add_mtd_device(&priv->mtd); | 933 | add_mtd_device(&priv->mtd); |
934 | 934 | ||
935 | printk(KERN_INFO "eLBC NAND device at 0x%zx, bank %d\n", | 935 | printk(KERN_INFO "eLBC NAND device at 0x%llx, bank %d\n", |
936 | res.start, priv->bank); | 936 | (unsigned long long)res.start, priv->bank); |
937 | return 0; | 937 | return 0; |
938 | 938 | ||
939 | err: | 939 | err: |
diff --git a/drivers/mtd/nand/pasemi_nand.c b/drivers/mtd/nand/pasemi_nand.c index 9bd6c9ac8443..a8b9376cf324 100644 --- a/drivers/mtd/nand/pasemi_nand.c +++ b/drivers/mtd/nand/pasemi_nand.c | |||
@@ -107,7 +107,7 @@ static int __devinit pasemi_nand_probe(struct of_device *ofdev, | |||
107 | if (pasemi_nand_mtd) | 107 | if (pasemi_nand_mtd) |
108 | return -ENODEV; | 108 | return -ENODEV; |
109 | 109 | ||
110 | pr_debug("pasemi_nand at %lx-%lx\n", res.start, res.end); | 110 | pr_debug("pasemi_nand at %llx-%llx\n", res.start, res.end); |
111 | 111 | ||
112 | /* Allocate memory for MTD device structure and private data */ | 112 | /* Allocate memory for MTD device structure and private data */ |
113 | pasemi_nand_mtd = kzalloc(sizeof(struct mtd_info) + | 113 | pasemi_nand_mtd = kzalloc(sizeof(struct mtd_info) + |
@@ -170,7 +170,7 @@ static int __devinit pasemi_nand_probe(struct of_device *ofdev, | |||
170 | goto out_lpc; | 170 | goto out_lpc; |
171 | } | 171 | } |
172 | 172 | ||
173 | printk(KERN_INFO "PA Semi NAND flash at %08lx, control at I/O %x\n", | 173 | printk(KERN_INFO "PA Semi NAND flash at %08llx, control at I/O %x\n", |
174 | res.start, lpcctl); | 174 | res.start, lpcctl); |
175 | 175 | ||
176 | return 0; | 176 | return 0; |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 9fe8cb7d43ac..6bdfd47d679d 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -1829,7 +1829,7 @@ config 68360_ENET | |||
1829 | 1829 | ||
1830 | config FEC | 1830 | config FEC |
1831 | bool "FEC ethernet controller (of ColdFire CPUs)" | 1831 | bool "FEC ethernet controller (of ColdFire CPUs)" |
1832 | depends on M523x || M527x || M5272 || M528x || M520x | 1832 | depends on M523x || M527x || M5272 || M528x || M520x || M532x |
1833 | help | 1833 | help |
1834 | Say Y here if you want to use the built-in 10/100 Fast ethernet | 1834 | Say Y here if you want to use the built-in 10/100 Fast ethernet |
1835 | controller on some Motorola ColdFire processors. | 1835 | controller on some Motorola ColdFire processors. |
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 7e33c129d51c..2769083bfe83 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c | |||
@@ -1698,7 +1698,7 @@ static void __inline__ fec_set_mii(struct net_device *dev, struct fec_enet_priva | |||
1698 | /* | 1698 | /* |
1699 | * Set MII speed to 2.5 MHz | 1699 | * Set MII speed to 2.5 MHz |
1700 | */ | 1700 | */ |
1701 | fep->phy_speed = ((((MCF_CLK / 2) / (2500000 / 10)) + 5) / 10) * 2; | 1701 | fep->phy_speed = (MCF_CLK / 3) / (2500000 * 2 ) * 2; |
1702 | fecp->fec_mii_speed = fep->phy_speed; | 1702 | fecp->fec_mii_speed = fep->phy_speed; |
1703 | 1703 | ||
1704 | fec_restart(dev, 0); | 1704 | fec_restart(dev, 0); |
diff --git a/drivers/serial/mcf.c b/drivers/serial/mcf.c index b2001c5b145c..56841fe5f483 100644 --- a/drivers/serial/mcf.c +++ b/drivers/serial/mcf.c | |||
@@ -212,10 +212,18 @@ static void mcf_set_termios(struct uart_port *port, struct ktermios *termios, | |||
212 | { | 212 | { |
213 | unsigned long flags; | 213 | unsigned long flags; |
214 | unsigned int baud, baudclk; | 214 | unsigned int baud, baudclk; |
215 | #if defined(CONFIG_M5272) | ||
216 | unsigned int baudfr; | ||
217 | #endif | ||
215 | unsigned char mr1, mr2; | 218 | unsigned char mr1, mr2; |
216 | 219 | ||
217 | baud = uart_get_baud_rate(port, termios, old, 0, 230400); | 220 | baud = uart_get_baud_rate(port, termios, old, 0, 230400); |
221 | #if defined(CONFIG_M5272) | ||
222 | baudclk = (MCF_BUSCLK / baud) / 32; | ||
223 | baudfr = (((MCF_BUSCLK / baud) + 1) / 2) % 16; | ||
224 | #else | ||
218 | baudclk = ((MCF_BUSCLK / baud) + 16) / 32; | 225 | baudclk = ((MCF_BUSCLK / baud) + 16) / 32; |
226 | #endif | ||
219 | 227 | ||
220 | mr1 = MCFUART_MR1_RXIRQRDY | MCFUART_MR1_RXERRCHAR; | 228 | mr1 = MCFUART_MR1_RXIRQRDY | MCFUART_MR1_RXERRCHAR; |
221 | mr2 = 0; | 229 | mr2 = 0; |
@@ -262,6 +270,9 @@ static void mcf_set_termios(struct uart_port *port, struct ktermios *termios, | |||
262 | writeb(mr2, port->membase + MCFUART_UMR); | 270 | writeb(mr2, port->membase + MCFUART_UMR); |
263 | writeb((baudclk & 0xff00) >> 8, port->membase + MCFUART_UBG1); | 271 | writeb((baudclk & 0xff00) >> 8, port->membase + MCFUART_UBG1); |
264 | writeb((baudclk & 0xff), port->membase + MCFUART_UBG2); | 272 | writeb((baudclk & 0xff), port->membase + MCFUART_UBG2); |
273 | #if defined(CONFIG_M5272) | ||
274 | writeb((baudfr & 0x0f), port->membase + MCFUART_UFPD); | ||
275 | #endif | ||
265 | writeb(MCFUART_UCSR_RXCLKTIMER | MCFUART_UCSR_TXCLKTIMER, | 276 | writeb(MCFUART_UCSR_RXCLKTIMER | MCFUART_UCSR_TXCLKTIMER, |
266 | port->membase + MCFUART_UCSR); | 277 | port->membase + MCFUART_UCSR); |
267 | writeb(MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE, | 278 | writeb(MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE, |