On Sat, Sep 10, 2016 at 04:46:49PM +0200, Matthijs van Duin wrote:
> It probably doesn't help that the L3 interconnect registers on the
> am335x aren't documented in the TRM. See below for its list of
> components, target IDs, address mapping, and L3 error irq routing
> (obtained by mostly-automated scanning/testing).

Whoops, I forgot something :)

// L3F service network
extern HostAgent   host_l3f;    // 0x440'00'000, id 0x00, no irq
extern TargetAgent ta_hash;     // 0x440'00'200, id 0x02, irq_l3f  9
extern TargetAgent ta_aes1;     // 0x440'00'300, id 0x03, irq_l3f 10
extern TargetAgent ta_ocmc;     // 0x440'00'400, id 0x10, irq_l3f  2
extern TargetAgent ta_aes0;     // 0x440'00'500, id 0x04, irq_l3f 11
extern TargetAgent ta_exp;      // 0x440'00'600, id 0x06, irq_l3f  8
extern TargetAgent ta_edmatc0;  // 0x440'00'700, id 0x07, irq_l3f  3
extern TargetAgent ta_edmatc1;  // 0x440'00'800, id 0x08, irq_l3f  4
extern TargetAgent ta_edmatc2;  // 0x440'00'900, id 0x09, irq_l3f  5
extern TargetAgent ta_l4hs_0;   // 0x440'00'a00, id 0x05, irq_l3f 12
extern TargetAgent ta_edmacc;   // 0x440'00'b00, id 0x0b, irq_l3f  6
extern TargetAgent ta_sgx;      // 0x440'00'c00, id 0x0e, irq_l3f 13
extern TargetAgent ta_l3instr;  // 0x440'00'd00, id 0x1f, irq_l3f  7
extern TargetAgent ta_pcie;     // 0x440'00'e00, id 0x0f, irq_l3f  1
extern TargetAgent ta_emif;     // 0x440'00'f00, id 0x01, irq_l3f  0
extern FlagCombiner irq_l3f;    // 0x440'01'000, 14 × { app, dbg }, irq_top 0
extern FlagCombiner irq_top;    // 0x440'01'100,  2 × { app, dbg }
extern Component stats0;        // 0x440'02'000, size  0x800
extern Component stats1;        // 0x440'03'000, size 0x1000
extern Component stats2;        // 0x440'04'000, size  0x800
extern BwRegulator bwreg0;      // 0x440'05'000

// L3S service network
extern HostAgent   host_l3s;    // 0x448'00'000, id 0x0c, no irq
extern TargetAgent ta_l4ls_0;   // 0x448'00'100, id 0x11, irq_l3s  0
extern TargetAgent ta_l4ls_1;   // 0x448'00'200, id 0x12, irq_l3s  1
extern TargetAgent ta_l4ls_2;   // 0x448'00'300, id 0x13, irq_l3s  2
extern TargetAgent ta_l4ls_3;   // 0x448'00'400, id 0x14, irq_l3s  3
extern TargetAgent ta_adc;      // 0x448'00'500, id 0x0a, irq_l3s 10
extern FlagCombiner irq_l3s;    // 0x448'00'600, 13 × { app, dbg }, irq_top 1
extern TargetAgent ta_gpmc;     // 0x448'00'700, id 0x1e, irq_l3s  7
extern TargetAgent ta_mcasp0;   // 0x448'00'800, id 0x20, irq_l3s  4
extern TargetAgent ta_mcasp1;   // 0x448'00'900, id 0x21, irq_l3s  5
extern TargetAgent ta_mcasp2;   // 0x448'00'a00, id 0x22, irq_l3s  6
extern TargetAgent ta_usb;      // 0x448'00'b00, id 0x27, irq_l3s  9
extern TargetAgent ta_mmc2;     // 0x448'00'c00, id 0x26, irq_l3s 12
extern TargetAgent ta_l4fw;     // 0x448'00'd00, id 0x1b, irq_l3s  8
extern TargetAgent ta_l4wk_0;   // 0x448'00'e00, id 0x0d, irq_l3s 11
extern Component stats3;        // 0x448'04'000, size 0x800

l3ls ports 1-3 are just extrapolation since they aren't reachable from
the cortex-A8, the rest is verified.

I also have a list of initiators needed to identify them from L3 error
logs.  I obtained it from info I found floating around and haven't much
validated it yet:

// L3 initiator ids
enum iid6_t {
        I6_HASS_0       = 0x00,  // Cortex-A8, 128-bit port 0 to RAM
        I6_HASS_1       = 0x01,  // Cortex-A8, 64-bit port 1 to peripherals
        I6_DAP          = 0x04,  // Debug access port (AHB-AP)
        I6_DFT          = 0x05,  // Device functional test / IEEE1500
        I6_PRUSS_0      = 0x0e,  // PRU core 0
        I6_PRUSS_1      = 0x0f,  // PRU core 1
        I6_MEDIALB      = 0x10,  // Media local bus (automotive only)
//      I6_WKUPM3       = 0x14,  // Wakeup-M3 (connects to l4wk, not l3)
        I6_EDMATC0_R    = 0x18,  // EDMA transfer controller 0, read port
        I6_EDMATC0_W    = 0x19,  // EDMA transfer controller 0, write port
        I6_EDMATC1_R    = 0x1a,  // EDMA transfer controller 1, read port
        I6_EDMATC1_W    = 0x1b,  // EDMA transfer controller 1, write port
        I6_EDMATC2_R    = 0x1c,  // EDMA transfer controller 2, read port
        I6_EDMATC2_W    = 0x1d,  // EDMA transfer controller 2, write port
        I6_SGX          = 0x20,  // SGX-530 graphics accelerator
        I6_LCDC         = 0x24,  // LCD controller DMA
        I6_EXP          = 0x2c,  // Expansion (not usable or non-existent)
        I6_ETH          = 0x30,  // Ethernet DMA
        I6_USB_DMA      = 0x34,  // USB subsystem DMA, data
        I6_USB_QMGR     = 0x35,  // USB subsystem DMA, queue manager
//      I6_PCIE         = 0x3a,  // PCIe bridge (non-existent)
        I6_STATCOLL_0   = 0x3c,  // L3 statistics collector 0
        I6_STATCOLL_1   = 0x3d,  // L3 statistics collector 1
        I6_STATCOLL_2   = 0x3e,  // L3 statistics collector 2
        I6_STATCOLL_3   = 0x3f,  // L3 statistics collector 3
};

I don't know yet to which initiator bwreg0 belongs, nor any details for
the statistics collectors.

Matthijs

Reply via email to