]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - arch/sparc/cpu/leon3/ambapp.c
SPARC: Remove
[people/ms/u-boot.git] / arch / sparc / cpu / leon3 / ambapp.c
diff --git a/arch/sparc/cpu/leon3/ambapp.c b/arch/sparc/cpu/leon3/ambapp.c
deleted file mode 100644 (file)
index 47769cf..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-/* GRLIB AMBA Plug&Play information scanning, relies on assembler
- * routines.
- *
- * (C) Copyright 2010, 2015
- * Daniel Hellstrom, Cobham Gaisler, daniel@gaisler.com.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-/* #define DEBUG */
-
-#include <common.h>
-#include <malloc.h>
-#include <ambapp.h>
-#include <config.h>
-
-/************ C INTERFACE OF ASSEMBLER SCAN ROUTINES ************/
-struct ambapp_find_apb_info {
-       /* Address of APB device Plug&Play information */
-       struct ambapp_pnp_apb   *pnp;
-       /* AHB Bus index of where the APB-Master Bridge device was found */
-       int                     ahb_bus_index;
-       int                     dec_index;
-};
-
-struct ambapp_find_ahb_info {
-       /* Address of AHB device Plug&Play information */
-       struct ambapp_pnp_ahb   *pnp;
-       /* AHB Bus index of where the AHB device was found */
-       int                     ahb_bus_index;
-       int                     dec_index;
-};
-
-extern void ambapp_find_buses(unsigned int ioarea, struct ambapp_bus *abus);
-
-extern int ambapp_find_apb(struct ambapp_bus *abus, unsigned int dev_vend,
-       int index, struct ambapp_find_apb_info *result);
-
-extern int ambapp_find_ahb(struct ambapp_bus *abus, unsigned int dev_vend,
-       int index, int type, struct ambapp_find_ahb_info *result);
-
-/************ C ROUTINES USED BY U-BOOT AMBA CORE DRIVERS ************/
-struct ambapp_bus ambapp_plb __section(.data);
-
-void ambapp_bus_init(
-       unsigned int ioarea,
-       unsigned int freq,
-       struct ambapp_bus *abus)
-{
-       int i;
-
-       ambapp_find_buses(ioarea, abus);
-       for (i = 0; i < 6; i++)
-               if (abus->ioareas[i] == 0)
-                       break;
-       abus->buses = i;
-       abus->freq = freq;
-}
-
-/* Parse APB PnP Information */
-void ambapp_apb_parse(struct ambapp_find_apb_info *info, ambapp_apbdev *dev)
-{
-       struct ambapp_pnp_apb *apb = info->pnp;
-       unsigned int apbbase = (unsigned int)apb & 0xfff00000;
-
-       dev->vendor = amba_vendor(apb->id);
-       dev->device = amba_device(apb->id);
-       dev->irq = amba_irq(apb->id);
-       dev->ver = amba_ver(apb->id);
-       dev->address = (apbbase | (((apb->iobar & 0xfff00000) >> 12))) &
-                       (((apb->iobar & 0x0000fff0) << 4) | 0xfff00000);
-       dev->mask = amba_apb_mask(apb->iobar);
-       dev->ahb_bus_index = info->ahb_bus_index - 1;
-}
-
-/* Parse AHB PnP information */
-void ambapp_ahb_parse(struct ambapp_find_ahb_info *info, ambapp_ahbdev *dev)
-{
-       struct ambapp_pnp_ahb *ahb = info->pnp;
-       unsigned int ahbbase = (unsigned int)ahb & 0xfff00000;
-       int i, type;
-       unsigned int addr, mask, mbar;
-
-       dev->vendor = amba_vendor(ahb->id);
-       dev->device = amba_device(ahb->id);
-       dev->irq = amba_irq(ahb->id);
-       dev->ver = amba_ver(ahb->id);
-       dev->userdef[0] = ahb->custom[0];
-       dev->userdef[1] = ahb->custom[1];
-       dev->userdef[2] = ahb->custom[2];
-       dev->ahb_bus_index = info->ahb_bus_index - 1;
-       for (i = 0; i < 4; i++) {
-               mbar = ahb->mbar[i];
-               addr = amba_membar_start(mbar);
-               type = amba_membar_type(mbar);
-               if (type == AMBA_TYPE_AHBIO) {
-                       addr = amba_ahbio_adr(addr, ahbbase);
-                       mask = (((unsigned int)
-                               (amba_membar_mask((~mbar))<<8)|0xff))+1;
-               } else {
-                       /* AHB memory area, absolute address */
-                       mask = (~((unsigned int)
-                               (amba_membar_mask(mbar)<<20)))+1;
-               }
-               dev->address[i] = addr;
-               dev->mask[i] = mask;
-               dev->type[i] = type;
-       }
-}
-
-int ambapp_apb_find(struct ambapp_bus *abus, int vendor, int device,
-       int index, ambapp_apbdev *dev)
-{
-       unsigned int devid = AMBA_PNP_ID(vendor, device);
-       int found;
-       struct ambapp_find_apb_info apbdev;
-
-       found = ambapp_find_apb(abus, devid, index, &apbdev);
-       if (found == 1)
-               ambapp_apb_parse(&apbdev, dev);
-
-       return found;
-}
-
-int ambapp_apb_count(struct ambapp_bus *abus, int vendor, int device)
-{
-       unsigned int devid = AMBA_PNP_ID(vendor, device);
-       int found;
-       struct ambapp_find_apb_info apbdev;
-
-       found = ambapp_find_apb(abus, devid, 63, &apbdev);
-       if (found == 1)
-               return 64;
-       else
-               return 63 - apbdev.dec_index;
-}
-
-int ambapp_ahb_find(struct ambapp_bus *abus, int vendor, int device,
-       int index, ambapp_ahbdev *dev, int type)
-{
-       int found;
-       struct ambapp_find_ahb_info ahbdev;
-       unsigned int devid = AMBA_PNP_ID(vendor, device);
-
-       found = ambapp_find_ahb(abus, devid, index, type, &ahbdev);
-       if (found == 1)
-               ambapp_ahb_parse(&ahbdev, dev);
-
-       return found;
-}
-
-int ambapp_ahbmst_find(struct ambapp_bus *abus, int vendor, int device,
-       int index, ambapp_ahbdev *dev)
-{
-       return ambapp_ahb_find(abus, vendor, device, index, dev, DEV_AHB_MST);
-}
-
-int ambapp_ahbslv_find(struct ambapp_bus *abus, int vendor, int device,
-       int index, ambapp_ahbdev *dev)
-{
-       return ambapp_ahb_find(abus, vendor, device, index, dev, DEV_AHB_SLV);
-}
-
-int ambapp_ahb_count(struct ambapp_bus *abus, int vendor, int device, int type)
-{
-       int found;
-       struct ambapp_find_ahb_info ahbdev;
-       unsigned int devid = AMBA_PNP_ID(vendor, device);
-
-       found = ambapp_find_ahb(abus, devid, 63, type, &ahbdev);
-       if (found == 1)
-               return 64;
-       else
-               return 63 - ahbdev.dec_index;
-}
-
-int ambapp_ahbmst_count(struct ambapp_bus *abus, int vendor, int device)
-{
-       return ambapp_ahb_count(abus, vendor, device, DEV_AHB_MST);
-}
-
-int ambapp_ahbslv_count(struct ambapp_bus *abus, int vendor, int device)
-{
-       return ambapp_ahb_count(abus, vendor, device, DEV_AHB_SLV);
-}
-
-/* The define CONFIG_SYS_GRLIB_SINGLE_BUS may be defined on GRLIB systems
- * where only one AHB Bus is available - no bridges are present. This option
- * is available only to reduce the footprint.
- *
- * Defining this on a multi-bus GRLIB system may also work depending on the
- * design.
- */
-
-#ifndef CONFIG_SYS_GRLIB_SINGLE_BUS
-
-/* GAISLER AHB2AHB Version 1 Bridge Definitions */
-#define AHB2AHB_V1_FLAG_FFACT     0x0f0        /* Frequency factor against top bus */
-#define AHB2AHB_V1_FLAG_FFACT_DIR 0x100        /* Factor direction, 0=down, 1=up */
-#define AHB2AHB_V1_FLAG_MBUS      0x00c        /* Master bus number mask */
-#define AHB2AHB_V1_FLAG_SBUS      0x003        /* Slave bus number mask */
-
-/* Get Parent bus frequency. Note that since we go from a "child" bus
- * to a parent bus, the frequency factor direction is inverted.
- */
-unsigned int gaisler_ahb2ahb_v1_freq(ambapp_ahbdev *ahb, unsigned int freq)
-{
-       int dir;
-       unsigned char ffact;
-
-       /* Get division/multiple factor */
-       ffact = (ahb->userdef[0] & AHB2AHB_V1_FLAG_FFACT) >> 4;
-       if (ffact != 0) {
-               dir = ahb->userdef[0] & AHB2AHB_V1_FLAG_FFACT_DIR;
-
-               /* Calculate frequency by dividing or
-                * multiplying system frequency
-                */
-               if (dir)
-                       freq = freq * ffact;
-               else
-                       freq = freq / ffact;
-       }
-
-       return freq;
-}
-
-/* AHB2AHB and L2CACHE ver 2 is not supported yet. */
-unsigned int gaisler_ahb2ahb_v2_freq(ambapp_ahbdev *ahb, unsigned int freq)
-{
-       panic("gaisler_ahb2ahb_v2_freq: AHB2AHB ver 2 not supported\n");
-       return -1;
-}
-#endif
-
-/* Return the frequency of a AHB bus identified by index found
- * note that this is not the AHB Bus number.
- */
-unsigned int ambapp_bus_freq(struct ambapp_bus *abus, int ahb_bus_index)
-{
-       unsigned int freq = abus->freq;
-#ifndef CONFIG_SYS_GRLIB_SINGLE_BUS
-       unsigned int ioarea, ioarea_parent, bridge_pnp_ofs;
-       struct ambapp_find_ahb_info ahbinfo;
-       ambapp_ahbdev ahb;
-       int parent;
-
-       debug("ambapp_bus_freq: get freq on bus %d\n", ahb_bus_index);
-
-       while (ahb_bus_index != 0) {
-               debug("  BUS[0]: 0x%08x\n", abus->ioareas[0]);
-               debug("  BUS[1]: 0x%08x\n", abus->ioareas[1]);
-               debug("  BUS[2]: 0x%08x\n", abus->ioareas[2]);
-               debug("  BUS[3]: 0x%08x\n", abus->ioareas[3]);
-               debug("  BUS[4]: 0x%08x\n", abus->ioareas[4]);
-               debug("  BUS[5]: 0x%08x\n", abus->ioareas[5]);
-
-               /* Get I/O area of AHB bus */
-               ioarea = abus->ioareas[ahb_bus_index];
-
-               debug("  IOAREA: 0x%08x\n", ioarea);
-
-               /* Get parent bus */
-               parent = (ioarea & 0x7);
-               if (parent == 0) {
-                       panic("%s: parent=0 indicates no parent! Stopping.\n",
-                               __func__);
-                       return -1;
-               }
-               parent = parent - 1;
-               bridge_pnp_ofs = ioarea & 0x7e0;
-
-               debug("  PARENT: %d\n", parent);
-               debug("  BRIDGE_OFS: 0x%08x\n", bridge_pnp_ofs);
-
-               /* Get AHB/AHB bridge PnP address */
-               ioarea_parent = (abus->ioareas[parent] & 0xfff00000) |
-                               AMBA_CONF_AREA | AMBA_AHB_SLAVE_CONF_AREA;
-               ahbinfo.pnp = (struct ambapp_pnp_ahb *)
-                               (ioarea_parent | bridge_pnp_ofs);
-
-               debug("  IOAREA PARENT: 0x%08x\n", ioarea_parent);
-               debug("  BRIDGE PNP: 0x%p\n", ahbinfo.pnp);
-
-               /* Parse the AHB information */
-               ahbinfo.ahb_bus_index = parent;
-               ambapp_ahb_parse(&ahbinfo, &ahb);
-
-               debug("  BRIDGE ID: VENDOR=%d(0x%x), DEVICE=%d(0x%x)\n",
-                       ahb.vendor, ahb.vendor, ahb.device, ahb.device);
-
-               /* Different bridges may convert frequency differently */
-               if ((ahb.vendor == VENDOR_GAISLER) &&
-                       ((ahb.device == GAISLER_AHB2AHB) ||
-                       (ahb.device == GAISLER_L2CACHE))) {
-                       /* Get new frequency */
-                       if (ahb.ver > 1)
-                               freq = gaisler_ahb2ahb_v2_freq(&ahb, freq);
-                       else
-                               freq = gaisler_ahb2ahb_v1_freq(&ahb, freq);
-
-                       debug("  NEW FREQ: %dHz\n", freq);
-               } else {
-                       panic("%s: unsupported AMBA bridge\n", __func__);
-                       return -1;
-               }
-
-               /* Step upwards towards system top bus */
-               ahb_bus_index = parent;
-       }
-#endif
-
-       debug("ambapp_bus_freq: %dHz\n", freq);
-
-       return freq;
-}