~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/board/esd/pci405/flash.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * (C) Copyright 2001
 
3
 * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
 
4
 *
 
5
 * SPDX-License-Identifier:     GPL-2.0+
 
6
 */
 
7
 
 
8
#include <common.h>
 
9
#include <asm/ppc4xx.h>
 
10
#include <asm/processor.h>
 
11
 
 
12
/*
 
13
 * include common flash code (for esd boards)
 
14
 */
 
15
#include "../common/flash.c"
 
16
 
 
17
/*-----------------------------------------------------------------------
 
18
 * Functions
 
19
 */
 
20
static ulong flash_get_size (vu_long * addr, flash_info_t * info);
 
21
static void flash_get_offsets (ulong base, flash_info_t * info);
 
22
 
 
23
/*-----------------------------------------------------------------------
 
24
 */
 
25
 
 
26
unsigned long flash_init (void)
 
27
{
 
28
        unsigned long size_b0;
 
29
        int i;
 
30
        uint pbcr;
 
31
        unsigned long base_b0;
 
32
        int size_val = 0;
 
33
 
 
34
        /* Init: no FLASHes known */
 
35
        for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
 
36
                flash_info[i].flash_id = FLASH_UNKNOWN;
 
37
        }
 
38
 
 
39
        /* Static FLASH Bank configuration here - FIXME XXX */
 
40
 
 
41
        size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
 
42
 
 
43
        if (flash_info[0].flash_id == FLASH_UNKNOWN) {
 
44
                printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
 
45
                        size_b0, size_b0<<20);
 
46
        }
 
47
 
 
48
        /* Setup offsets */
 
49
        flash_get_offsets (-size_b0, &flash_info[0]);
 
50
 
 
51
        /* Re-do sizing to get full correct info */
 
52
        mtdcr(EBC0_CFGADDR, PB0CR);
 
53
        pbcr = mfdcr(EBC0_CFGDATA);
 
54
        mtdcr(EBC0_CFGADDR, PB0CR);
 
55
        base_b0 = -size_b0;
 
56
        switch (size_b0) {
 
57
        case 1 << 20:
 
58
                size_val = 0;
 
59
                break;
 
60
        case 2 << 20:
 
61
                size_val = 1;
 
62
                break;
 
63
        case 4 << 20:
 
64
                size_val = 2;
 
65
                break;
 
66
        case 8 << 20:
 
67
                size_val = 3;
 
68
                break;
 
69
        case 16 << 20:
 
70
                size_val = 4;
 
71
                break;
 
72
        }
 
73
        pbcr = (pbcr & 0x0001ffff) | base_b0 | (size_val << 17);
 
74
        mtdcr(EBC0_CFGDATA, pbcr);
 
75
 
 
76
        /* Monitor protection ON by default */
 
77
        (void)flash_protect(FLAG_PROTECT_SET,
 
78
                            -monitor_flash_len,
 
79
                            0xffffffff,
 
80
                            &flash_info[0]);
 
81
 
 
82
        flash_info[0].size = size_b0;
 
83
 
 
84
        return (size_b0);
 
85
}